From mboxrd@z Thu Jan 1 00:00:00 1970 From: Enric Balletbo i Serra Subject: [PATCHv6 5/5] drm: bridge: anx78xx: Add anx78xx driver support by analogix. Date: Fri, 4 Dec 2015 09:35:07 +0100 Message-ID: <1449218107-6590-6-git-send-email-enric.balletbo@collabora.com> References: <1449218107-6590-1-git-send-email-enric.balletbo@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449218107-6590-1-git-send-email-enric.balletbo@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, devel@driverdev.osuosl.org, treding@nvidia.com Cc: mark.rutland@arm.com, drinkcat@chromium.org, laurent.pinchart@ideasonboard.com, pawel.moll@arm.com, ijc+devicetree@hellion.org.uk, gregkh@linuxfoundation.org, emil.l.velikov@gmail.com, cawa.cheng@mediatek.com, jb.tsai@mediatek.com, sjoerd.simons@collabora.co.uk, robh+dt@kernel.org, span@analogixsemi.com, galak@codeaurora.org, javier@dowhile0.org, eddie.huang@mediatek.com, cjiao@analogixsemi.com, dan.carpenter@oracle.com, nathan.chung@mediatek.com List-Id: devicetree@vger.kernel.org QXQgdGhlIG1vbWVudCBpdCBvbmx5IHN1cHBvcnRzIEFOWDc4MTQuCgpUaGUgQU5YNzgxNCBpcyBh biB1bHRyYS1sb3cgcG93ZXIgRnVsbC1IRCAoMTA4MHA2MCkgU2xpbVBvcnQgdHJhbnNtaXR0ZXIK ZGVzaWduZWQgZm9yIHBvcnRhYmxlIGRldmljZXMuIFRoZSBBTlg3ODE0IHRyYW5zZm9ybXMgdGhl IEhETUkgb3V0cHV0IG9mCmFuIGFwcGxpY2F0aW9uIHByb2Nlc3NvciB0byBNeURQIG9yIERpc3Bs YXlQb3J0LgoKVGhlIGRyaXZlciBzdXBwb3J0cyBIRE1JIHRvIERQIHBhc3MtdGhyb3VnaCBtb2Rl IGFuZCB3b3JrcyB1c2luZyBleHRlcm5hbAphZGFwdGVycyB0aGF0IGNvbnZlcnRzIE15RFAgb3Ig RGlzcGxheVBvcnQgdG8gSERNSSBvciBEVkkuCgpTaWduZWQtb2ZmLWJ5OiBFbnJpYyBCYWxsZXRi byBpIFNlcnJhIDxlbnJpYy5iYWxsZXRib0Bjb2xsYWJvcmEuY29tPgotLS0KCkNoYW5nZXMgc2lu Y2UgbGFzdCB2ZXJzaW9uOgotIEZpeCBhdXRvIGJ1aWxkIHRlc3QgRVJST1IgKGFueDc4eHgtPmJy aWRnZS5vZl9ub2RlID0gY2xpZW50LT5kZXYub2Zfbm9kZSkKLSBSZW1vdmUgbW9yZSBtYWdpYyBu dW1iZXJzIGFuZCB1c2UgRFBfIGRlZmluZXMgZnJvbSBoZG1pLmgKLSBVc2UgY29tbW9uIGRwL2hk bWkgZGVmaW5lcyBpbnN0ZWFkIG9mIHJlZGVmaW5lIGl0LgotIEltcHJvdmUgYSBiaXQgdGhlIGRv Y3VtZW50YXRpb24gb2YgdGhlIGRyaXZlci4KLSBJbXByb3ZlIGRlYnVnIG1lc3NhZ2VzLgotIFVz ZSBkZXZtIHRvIHJlcXVlc3QgdGhlIGlycS4KCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25m aWcgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFr ZWZpbGUgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9h bng3OHh4L0tjb25maWcgICAgICAgICAgIHwgICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L2FueDc4eHgvTWFrZWZpbGUgICAgICAgICAgfCAgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9icmlk Z2UvYW54Nzh4eC9hbng3OHh4LmggICAgICAgICB8ICAgNDQgKwogZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9hbng3OHh4L2FueDc4eHhfbWFpbi5jICAgIHwgIDMzNCArKysKIGRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvYW54Nzh4eC9zbGltcG9ydF90eF9kcnYuYyB8IDMyMTAgKysrKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L3NsaW1wb3J0X3R4X2Rydi5o IHwgIDExMCArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvc2xpbXBvcnRfdHhfcmVn LmggfCAgNzM3ICsrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDQ0NDcgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9LY29uZmlnCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L01ha2VmaWxl CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L2FueDc4 eHguaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9h bng3OHh4X21haW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv YW54Nzh4eC9zbGltcG9ydF90eF9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvYW54Nzh4eC9zbGltcG9ydF90eF9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9zbGltcG9ydF90eF9yZWcuaAoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvS2NvbmZpZwppbmRleCA2ZGRkZDM5Li4xZDkyYmMxIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnCkBAIC00MSw0ICs0MSw2IEBAIGNvbmZpZyBEUk1fUEFSQURFX1BTODYyMgogCS0tLWhlbHAt LS0KIAkgIFBhcmFkZSBlRFAtTFZEUyBicmlkZ2UgY2hpcCBkcml2ZXIuCiAKK3NvdXJjZSAiZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L0tjb25maWciCisKIGVuZG1lbnUKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL01ha2VmaWxlCmluZGV4IGQ0ZTI4YmUuLjBlOWZkYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtl ZmlsZQpAQCAtNCwzICs0LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9EV19IRE1JKSArPSBkd19oZG1p Lm8KIG9iai0kKENPTkZJR19EUk1fRFdfSERNSV9BSEJfQVVESU8pICs9IGR3X2hkbWktYWhiLWF1 ZGlvLm8KIG9iai0kKENPTkZJR19EUk1fTlhQX1BUTjM0NjApICs9IG54cC1wdG4zNDYwLm8KIG9i ai0kKENPTkZJR19EUk1fUEFSQURFX1BTODYyMikgKz0gcGFyYWRlLXBzODYyMi5vCitvYmotJChD T05GSUdfRFJNX0FOWDc4WFgpICs9IGFueDc4eHgvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL2FueDc4eHgvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4 eC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZTM2MmQKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvS2NvbmZpZwpA QCAtMCwwICsxLDUgQEAKK2NvbmZpZyBEUk1fQU5YNzhYWAorCXRyaXN0YXRlICJBbmFsb2dpeCBB Tlg3OFhYIGJyaWRnZSIKKwloZWxwCisJICBBTlg3OFhYIGlzIGEgSEQgdmlkZW8gdHJhbnNtaXR0 ZXIgY2hpcCBvdmVyIG1pY3JvLVVTQgorCSAgY29ubmVjdG9yIGZvciBzbWFydHBob25lIGRldmlj ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5hODQzNzMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9hbng3OHh4L01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorb2JqLSR7Q09O RklHX0RSTV9BTlg3OFhYfSA6PSAgYW54Nzh4eC5vCisKK2FueDc4eHgteSArPSBhbng3OHh4X21h aW4ubworYW54Nzh4eC15ICs9IHNsaW1wb3J0X3R4X2Rydi5vCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvYW54Nzh4eC5oIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9hbng3OHh4L2FueDc4eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42 NTQ4OTE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4 L2FueDc4eHguaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMTUsIEFu YWxvZ2l4IFNlbWljb25kdWN0b3IuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKi8KKworI2lmbmRlZiBfX0FOWDc4eHhfSAorI2RlZmluZSBfX0FOWDc4eHhfSAorCisjaW5j bHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxs aW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGlu dXgvZ3Bpby9jb25zdW1lci5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisKK3N0cnVj dCBhbng3OHh4X3BsYXRmb3JtX2RhdGEgeworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kX3BkOwor CXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kX3Jlc2V0OworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9k X3YxMDsKK307CisKK3N0cnVjdCBhbng3OHh4IHsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7 CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgYW54Nzh4eF9wbGF0Zm9ybV9k YXRhICpwZGF0YTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJc3RydWN0IHdvcmtxdWV1 ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKK307CisKK3ZvaWQgYW54Nzh4eF9wb3dlcm9uKHN0cnVjdCBh bng3OHh4ICpkYXRhKTsKK3ZvaWQgYW54Nzh4eF9wb3dlcm9mZihzdHJ1Y3QgYW54Nzh4eCAqZGF0 YSk7Citib29sIGFueDc4eHhfY2FibGVfaXNfZGV0ZWN0ZWQoc3RydWN0IGFueDc4eHggKmFueDc4 eHgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4 eC9hbng3OHh4X21haW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9hbng3OHh4 X21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTAxYzIzCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L2FueDc4eHhfbWFp bi5jCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMTUsIEFuYWxvZ2l4 IFNlbWljb25kdWN0b3IuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8K KyNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorCisjaW5jbHVkZSA8bGludXgvYXN5bmMu aD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2lu Y2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNp bmNsdWRlICJhbng3OHh4LmgiCisjaW5jbHVkZSAic2xpbXBvcnRfdHhfZHJ2LmgiCisKK3ZvaWQg YW54Nzh4eF9wb3dlcm9uKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBhbng3 OHh4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gYW54Nzh4eC0+cGRhdGE7CisKKwlpZiAocGRhdGEt PmdwaW9kX3YxMCkgeworCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9kX3Yx MCwgMSk7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwl9CisKKwlncGlvZF9zZXRfdmFs dWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9kX3Jlc2V0LCAwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMCwg MjAwMCk7CisKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9kX3BkLCAwKTsK Kwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAo cGRhdGEtPmdwaW9kX3Jlc2V0LCAxKTsKK30KKwordm9pZCBhbng3OHh4X3Bvd2Vyb2ZmKHN0cnVj dCBhbng3OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBhbng3OHh4X3BsYXRmb3JtX2RhdGEgKnBk YXRhID0gYW54Nzh4eC0+cGRhdGE7CisKKwlpZiAocGRhdGEtPmdwaW9kX3YxMCkgeworCQlncGlv ZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9kX3YxMCwgMCk7CisJCXVzbGVlcF9yYW5n ZSgxMDAwLCAyMDAwKTsKKwl9CisKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdw aW9kX3Jlc2V0LCAwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisKKwlncGlvZF9zZXRf dmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9kX3BkLCAxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMCwg MjAwMCk7Cit9CisKK3N0YXRpYyBpbnQgYW54Nzh4eF9pbml0X2dwaW8oc3RydWN0IGFueDc4eHgg KmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2 OworCXN0cnVjdCBhbng3OHh4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gYW54Nzh4eC0+cGRhdGE7 CisKKwkvKiBncGlvIGZvciBjaGlwIHBvd2VyIGRvd24gKi8KKwlwZGF0YS0+Z3Bpb2RfcGQgPSBk ZXZtX2dwaW9kX2dldChkZXYsICJwZCIsIEdQSU9EX09VVF9ISUdIKTsKKwlpZiAoSVNfRVJSKHBk YXRhLT5ncGlvZF9wZCkpIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gY2xhaW0gcGQgZ3Bp b1xuIik7CisJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5ncGlvZF9wZCk7CisJfQorCisJLyogZ3Bp byBmb3IgY2hpcCByZXNldCAqLworCXBkYXRhLT5ncGlvZF9yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0 KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihwZGF0YS0+Z3Bpb2Rf cmVzZXQpKSB7CisJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGNsYWltIHJlc2V0IGdwaW9cbiIp OworCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+Z3Bpb2RfcmVzZXQpOworCX0KKworCS8qIGdwaW8g Zm9yIFYxMCBwb3dlciBjb250cm9sICovCisJcGRhdGEtPmdwaW9kX3YxMCA9IGRldm1fZ3Bpb2Rf Z2V0X29wdGlvbmFsKGRldiwgInYxMCIsIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19FUlIocGRh dGEtPmdwaW9kX3YxMCkpIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gY2xhaW0gdjEwIGdw aW9cbiIpOworCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+Z3Bpb2RfdjEwKTsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworLyoKKyAqIEhQRCBJUlEgRXZlbnQ6IEhQRCBwdWxzZSB3aWR0aCBncmVhdGVy IHRoYW4gMC4yNW1zIGJ1dCBuYXJyb3dlciB0aGFuIDJtcworICogSG90IFVucGx1ZyBFdmVudDog SFBEIHB1bHNlIHN0YXlzIGxvdyBsb25nZXIgdGhhbiAybXMuCisgKgorICogQVAganVzdCBtb25p dG9yIEhQRCBwdWxzZSBoaWdoIGluIHRoaXMgaXJxLiBJZiBIUEQgaXMgaGlnaCwgdGhlIGRyaXZl cgorICogd2lsbCBwb3dlciBvbiB0aGUgY2hpcCwgYW5kIHRoZW4gdGhlIGRyaXZlciBjb250cm9s cyB3aGVuIHRvIHBvd2VyIGRvd24KKyAqIHRoZSBjaGlwLCBpZiBIUEQgZXZlbnQgaXMgSFBEIElS USwgdGhlIGRyaXZlciBkZWFscyB3aXRoIElSUSBldmVudCBmcm9tCisgKiBkb3duc3RyZWFtLCBm aW5hbGx5LCBpZiBIUEQgZXZlbnQgaXMgSG90IFBsdWcsIHRoZSBkcml2ZXIgcG93ZXIgZG93biB0 aGUKKyAqIGNoaXAuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBhbng3OHh4X2NhYmxlX2lzcihp bnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhbng3OHh4ICphbng3OHh4ID0gZGF0YTsK KworCXF1ZXVlX2RlbGF5ZWRfd29yayhhbng3OHh4LT53b3JrcXVldWUsICZhbng3OHh4LT53b3Jr LCAwKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgYW54Nzh4eF93 b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhbng3OHh4ICph bng3OHh4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhbng3OHh4LAorCQkJCQkgICAgICAg d29yay53b3JrKTsKKworCWlmIChzcF9tYWluX3Byb2Nlc3MoYW54Nzh4eCkpCisJCXF1ZXVlX2Rl bGF5ZWRfd29yayhhbng3OHh4LT53b3JrcXVldWUsICZhbng3OHh4LT53b3JrLAorCQkJCSAgIG1z ZWNzX3RvX2ppZmZpZXMoNTAwKSk7CisJZWxzZQorCQljYW5jZWxfZGVsYXllZF93b3JrKCZhbng3 OHh4LT53b3JrKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYW54Nzh4eCAqYnJpZGdlX3Rv X2FueDc4eHgoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGJyaWRnZSwgc3RydWN0IGFueDc4eHgsIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgYW54 Nzh4eF9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBib29sIGFueDc4eHhfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9k ZSkKK3sKKwlzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCA9IGJyaWRnZV90b19hbng3OHh4KGJyaWRn ZSk7CisKKwlkZXZfZGJnKCZhbng3OHh4LT5jbGllbnQtPmRldiwgIm1vZGVfZml4dXAgJWQ8JWQ7 ICVkOyAlZFxuIiwKKwkJc3BfZ2V0X2xpbmtfYmFuZHdpZHRoX2Zyb21fZWRpZChhbng3OHh4KSwg RFBfTElOS19CV181XzQsCisJCW1vZGUtPmNsb2NrLCBtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZM QUdfSU5URVJMQUNFKTsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJM QUNFKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBNYXggNzIwcCBhdCAyLjcgR2h6LCBvbmUgbGFu ZSAqLworCWlmIChzcF9nZXRfbGlua19iYW5kd2lkdGhfZnJvbV9lZGlkKGFueDc4eHgpIDwgRFBf TElOS19CV181XzQgJiYKKwkgICAgbW9kZS0+Y2xvY2sgPiA3NDI1MCkKKwkJcmV0dXJuIGZhbHNl OworCisJLyogTWF4IDEyMDBwIGF0IDUuNCBHaHosIG9uZSBsYW5lICovCisJaWYgKG1vZGUtPmNs b2NrID4gMTU0MDAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3Rh dGljIHZvaWQgYW54Nzh4eF9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KSB7fQorc3RhdGljIHZvaWQgYW54Nzh4eF9icmlkZ2VfcG9zdF9kaXNhYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpIHt9CitzdGF0aWMgdm9pZCBhbng3OHh4X2JyaWRnZV9tb2RlX3NldChz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUp IHt9CitzdGF0aWMgdm9pZCBhbng3OHh4X2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpIHt9CitzdGF0aWMgdm9pZCBhbng3OHh4X2JyaWRnZV9lbmFibGUoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSkge30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdl X2Z1bmNzIGFueDc4eHhfYnJpZGdlX2Z1bmNzID0geworCS5hdHRhY2gJCT0gYW54Nzh4eF9icmlk Z2VfYXR0YWNoLAorCS5tb2RlX2ZpeHVwCT0gYW54Nzh4eF9icmlkZ2VfbW9kZV9maXh1cCwKKwku ZGlzYWJsZQk9IGFueDc4eHhfYnJpZGdlX2Rpc2FibGUsCisJLnBvc3RfZGlzYWJsZQk9IGFueDc4 eHhfYnJpZGdlX3Bvc3RfZGlzYWJsZSwKKwkubW9kZV9zZXQJPSBhbng3OHh4X2JyaWRnZV9tb2Rl X3NldCwKKwkucHJlX2VuYWJsZQk9IGFueDc4eHhfYnJpZGdlX3ByZV9lbmFibGUsCisJLmVuYWJs ZQkJPSBhbng3OHh4X2JyaWRnZV9lbmFibGUsCit9OworCitzdGF0aWMgaW50IGFueDc4eHhfaTJj X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBp MmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eDsKKwlpbnQgcmV0 OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJ ICAgICBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0spKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2 LCAiaTJjIGJ1cyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVO T0RFVjsKKwl9CisKKwlhbng3OHh4ID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9m KCphbng3OHh4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbng3OHh4KQorCQlyZXR1cm4gLUVOT01F TTsKKworCWFueDc4eHgtPnBkYXRhID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwKKwkJCQkg ICAgICBzaXplb2Yoc3RydWN0IGFueDc4eHhfcGxhdGZvcm1fZGF0YSksCisJCQkJICAgICAgR0ZQ X0tFUk5FTCk7CisJaWYgKCFhbng3OHh4LT5wZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKyNp ZmRlZiBDT05GSUdfT0YKKwlhbng3OHh4LT5icmlkZ2Uub2Zfbm9kZSA9IGNsaWVudC0+ZGV2Lm9m X25vZGU7CisjZW5kaWYKKwlhbng3OHh4LT5icmlkZ2UuZnVuY3MgPSAmYW54Nzh4eF9icmlkZ2Vf ZnVuY3M7CisJcmV0ID0gZHJtX2JyaWRnZV9hZGQoJmFueDc4eHgtPmJyaWRnZSk7CisJaWYgKHJl dCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJhZGQgZHJtIGJyaWRnZSBmYWlsZWRc biIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWFueDc4eHgtPmNsaWVudCA9IGNsaWVudDsKKwor CWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGFueDc4eHgpOworCisJcmV0ID0gYW54Nzh4eF9p bml0X2dwaW8oYW54Nzh4eCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwg ImZhaWxlZCB0byBpbml0aWFsaXplIGdwaW9zXG4iKTsKKwkJZ290byBmYWlsX3JlbW92ZV9icmlk Z2U7CisJfQorCisJSU5JVF9ERUxBWUVEX1dPUksoJmFueDc4eHgtPndvcmssIGFueDc4eHhfd29y a19mdW5jKTsKKworCWFueDc4eHgtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29y a3F1ZXVlKCJhbng3OHh4X3dvcmsiKTsKKwlpZiAoIWFueDc4eHgtPndvcmtxdWV1ZSkgeworCQlk ZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgd29yayBxdWV1ZVxuIik7CisJ CXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9yZW1vdmVfYnJpZGdlOworCX0KKworCXJldCA9 IHNwX3N5c3RlbV9pbml0KGFueDc4eHgpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmY2xpZW50 LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBhbng3OHh4XG4iKTsKKwkJZ290byBmYWlsX2Zy ZWVfd3E7CisJfQorCisJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmY2xpZW50LT5k ZXYsIGNsaWVudC0+aXJxLCBOVUxMLAorCQkJCQlhbng3OHh4X2NhYmxlX2lzciwKKwkJCQkJSVJR Rl9UUklHR0VSX1JJU0lORyB8IElSUUZfT05FU0hPVCwKKwkJCQkJImFueDc4eHgtY2FibGUtZGV0 IiwgYW54Nzh4eCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxl ZCB0byByZXF1ZXN0IHRocmVhZGVkIGlycVxuIik7CisJCWdvdG8gZmFpbF9mcmVlX3dxOworCX0K KworCXJldCA9IGlycV9zZXRfaXJxX3dha2UoY2xpZW50LT5pcnEsIDEpOworCWlmIChyZXQpIHsK KwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gc2V0IGlycSB3YWtlXG4iKTsKKwkJ Z290byBmYWlsX2ZyZWVfd3E7CisJfQorCisJcmV0ID0gZW5hYmxlX2lycV93YWtlKGNsaWVudC0+ aXJxKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGVu YWJsZSBpcnEgd2FrZVxuIik7CisJCWdvdG8gZmFpbF9mcmVlX3dxOworCX0KKworCS8qIGVuYWJs ZSBkcml2ZXIgKi8KKwlxdWV1ZV9kZWxheWVkX3dvcmsoYW54Nzh4eC0+d29ya3F1ZXVlLCAmYW54 Nzh4eC0+d29yaywgMCk7CisKKwlyZXR1cm4gMDsKKworZmFpbF9mcmVlX3dxOgorCWRlc3Ryb3lf d29ya3F1ZXVlKGFueDc4eHgtPndvcmtxdWV1ZSk7CitmYWlsX3JlbW92ZV9icmlkZ2U6CisJZHJt X2JyaWRnZV9yZW1vdmUoJmFueDc4eHgtPmJyaWRnZSk7CisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBhbng3OHh4X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sK KwlzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwor CisJZGVzdHJveV93b3JrcXVldWUoYW54Nzh4eC0+d29ya3F1ZXVlKTsKKwlkcm1fYnJpZGdlX3Jl bW92ZSgmYW54Nzh4eC0+YnJpZGdlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFu eDc4eHhfaTJjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KTsK KwlzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwor CisJLyogUkVWSVNJVDogc3VzcGVuZCAqLworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW54 Nzh4eC0+d29yayk7CisJZmx1c2hfd29ya3F1ZXVlKGFueDc4eHgtPndvcmtxdWV1ZSk7CisJYW54 Nzh4eF9wb3dlcm9mZihhbng3OHh4KTsKKwlzcF92YXJpYWJsZV9pbml0KGFueDc4eHgpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW54Nzh4eF9pMmNfcmVzdW1lKHN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29udGFpbmVyX29mKGRl diwgc3RydWN0IGkyY19jbGllbnQsIGRldik7CisJc3RydWN0IGFueDc4eHggKmFueDc4eHggPSBp MmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhhbng3OHh4 LT53b3JrcXVldWUsICZhbng3OHh4LT53b3JrLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgU0lNUExFX0RFVl9QTV9PUFMoYW54Nzh4eF9pMmNfcG1fb3BzLAorCQkJYW54Nzh4eF9pMmNf c3VzcGVuZCwgYW54Nzh4eF9pMmNfcmVzdW1lKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNf ZGV2aWNlX2lkIGFueDc4eHhfaWRbXSA9IHsKKwl7ImFueDc4MTQiLCAwfSwKKwl7IC8qIHNlbnRp bmVsICovIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhbng3OHh4X2lkKTsKKwor I2lmZGVmIENPTkZJR19PRgorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYW54Nzh4 eF9tYXRjaF90YWJsZVtdID0geworCXsuY29tcGF0aWJsZSA9ICJhbmFsb2dpeCxhbng3ODE0Iix9 LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhbng3 OHh4X21hdGNoX3RhYmxlKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYW54 Nzh4eF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAiYW54NzgxNCIsCisJ CSAgIC5wbSA9ICZhbng3OHh4X2kyY19wbV9vcHMsCisJCSAgIC5vZl9tYXRjaF90YWJsZSA9IG9m X21hdGNoX3B0cihhbng3OHh4X21hdGNoX3RhYmxlKSwKKwkJICB9LAorCS5wcm9iZSA9IGFueDc4 eHhfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBhbng3OHh4X2kyY19yZW1vdmUsCisJLmlkX3RhYmxl ID0gYW54Nzh4eF9pZCwKK307CisKK21vZHVsZV9pMmNfZHJpdmVyKGFueDc4eHhfZHJpdmVyKTsK KworTU9EVUxFX0RFU0NSSVBUSU9OKCJTbGltcG9ydCB0cmFuc21pdHRlciBBTlg3OFhYIGRyaXZl ciIpOworTU9EVUxFX0FVVEhPUigiSnVuaHVhIFhpYSA8anhpYUBhbmFsb2dpeHNlbWkuY29tPiIp OworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1ZFUlNJT04oIjEuMSIpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L3NsaW1wb3J0X3R4X2Rydi5j IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbng3OHh4L3NsaW1wb3J0X3R4X2Rydi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNzcyNzAKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgvc2xpbXBvcnRfdHhfZHJ2LmMKQEAgLTAs MCArMSwzMjEwIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMTUsIEFuYWxvZ2l4IFNlbWljb25k dWN0b3IuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZWRpZC5oPgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRl IDxsaW51eC9oZG1pLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgImFu eDc4eHguaCIKKyNpbmNsdWRlICJzbGltcG9ydF90eF9kcnYuaCIKKworI2RlZmluZSBYVEFMXzI3 TQkyNzAKKyNkZWZpbmUgWFRBTF9DTEsJWFRBTF8yN00KKworc3RydWN0IHNsaW1wb3J0IHsKKwli b29sCWhkY3BfZW5hYmxlZDsJLyogSERDUCBjb250cm9sIGVuYWJsZS8gZGlzYWJsZSBmcm9tIEFQ ICovCisKKwl1OAl0eF90ZXN0X2J3OworCWJvb2wJdHhfdGVzdF9sdDsKKwlib29sCXR4X3Rlc3Rf ZWRpZDsKKworCXU4CWNoYW5nZWRfYmFuZHdpZHRoOworCisJYm9vbAluZWVkX2NsZWFuX3N0YXR1 czsKKworCXU4CWhkY3BfZXJyb3JfY291bnQ7CisJdTgJaGRjcF9mYWlsX2NvdW50OworCXU4CWF1 ZGlvX3N0YWJsZV9jb3VudDsJLyogQXVkaW8gc3RhYmxlIGNvdW50ZXIgKi8KKworCXU4CWVkaWRf YmxvY2tzWzIgKiBFRElEX0xFTkdUSF07CisKKwlib29sCXJlYWRfZWRpZF9mbGFnOworCWJvb2wJ ZG93bl9zYW1wbGVfZW47CisKKwkvKiBJbmZvZnJhbWVzICovCisJdW5pb24gaGRtaV9pbmZvZnJh bWUJZnJhbWU7CisKKwkvKiBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworCXU4CWNvbW1v bl9pbnRbNF07CisJdTgJZHBfaW50OworCXU4CXNwX2hkbWlfaW50WzddOworCisJZW51bSBzcF90 eF9zdGF0ZQkJdHhfc3lzdGVtX3N0YXRlOworCWVudW0gYXVkaW9fb3V0cHV0X3N0YXR1cwl0eF9h b19zdGF0ZTsKKwllbnVtIHZpZGVvX291dHB1dF9zdGF0dXMJdHhfdm9fc3RhdGU7CisJZW51bSBz cF90eF9sdF9zdGF0dXMJCXR4X2x0X3N0YXRlOworCWVudW0gaGRjcF9zdGF0dXMJCWhkY3Bfc3Rh dGU7CisJZW51bSByZXBlYXRlcl9zdGF0dXMJCXJlcGVhdGVyX3N0YXRlOworfTsKKworc3RhdGlj IHN0cnVjdCBzbGltcG9ydCBzcDsKKworc3RhdGljIGNvbnN0IHUxNiBjaGlwaWRfbGlzdFtdID0g eworCTB4NzgwMiwKKwkweDc4MDYsCisJMHg3ODEwLAorCTB4NzgxMiwKKwkweDc4MTQsCisJMHg3 ODE2LAorCTB4NzgxOCwKK307CisKK3N0YXRpYyB2b2lkIHNwX2hkbWlfbmV3X2F2aV9pbnQoc3Ry dWN0IGFueDc4eHggKmFueDc4eHgpOworc3RhdGljIHZvaWQgc3BfaGRtaV9uZXdfdnNpX2ludChz dHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCk7CitzdGF0aWMgdm9pZCBzcF9wcmludF9zeXN0ZW1fc3Rh dGUoc3RydWN0IGFueDc4eHggKmFueDc4eHgsCisJCQkJICBlbnVtIHNwX3R4X3N0YXRlIHN0YXRl KTsKK3N0YXRpYyB2b2lkIHNwX3Nob3dfaW5mb3JtYXRpb24oc3RydWN0IGFueDc4eHggKmFueDc4 eHgpOworCisvKioKKyAqIHNwX3JlZ19yZWFkOiBSZWFkIGEgdmFsdWUgZnJvbSBhIHNpbmdsZSBy ZWdpc3Rlci4KKyAqCisgKiBAYW54Nzh4eDogRGV2aWNlIHRvIHJlYWQgZnJvbS4KKyAqIEBhZGRy OiBBZGRyZXNzIHRvIHJlYWQgZnJvbS4KKyAqIEByZWc6IFJlZ2lzdGVyIHRvIGJlIHJlYWQgZnJv bS4KKyAqIEB2YWw6IFBvaW50ZXIgdG8gc3RvcmUgcmVhZCB2YWx1ZS4KKyAqCisgKiBBIHZhbHVl IG9mIHplcm8gd2lsbCBiZSByZXR1cm5lZCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHdp bGwKKyAqIGJlIHJldHVybmVkIGluIGVycm9yIGNhc2VzLgorICovCitzdGF0aWMgaW50IHNwX3Jl Z19yZWFkKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LCB1OCBhZGRyLCB1OCBvZmZzZXQsIHU4ICp2 YWwpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gYW54Nzh4eC0+ Y2xpZW50OworCisJY2xpZW50LT5hZGRyID0gYWRkciA+PiAxOworCisJcmV0ID0gaTJjX3NtYnVz X3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgb2Zmc2V0KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZf ZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZWFkIGkyYyBhZGRyPSV4XG4iLCBhZGRyKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwkqdmFsID0gcmV0OworCisJcmV0dXJuIDA7Cit9CisKKy8q KgorICogc3BfcmVnX3dyaXRlKCk6IFdyaXRlIGEgdmFsdWUgdG8gYSBzaW5nbGUgcmVnaXN0ZXIK KyAqCisgKiBAYW54Nzh4eDogRGV2aWNlIHRvIHJlYWQgZnJvbS4KKyAqIEBhZGRyOiBBZGRyZXNz IHRvIHdyaXRlIHRvLgorICogQG9mZnNldDogQnl0ZSBpbnRlcnByZXRlZCBieSBzbGF2ZS4KKyAq IEB2YWw6IFZhbHVlIHRvIGJlIHdyaXR0ZW4uCisgKgorICogQSB2YWx1ZSBvZiB6ZXJvIHdpbGwg YmUgcmV0dXJuZWQgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB3aWxsCisgKiBiZSByZXR1 cm5lZCBpbiBlcnJvciBjYXNlcy4KKyAqLworc3RhdGljIGludCBzcF9yZWdfd3JpdGUoc3RydWN0 IGFueDc4eHggKmFueDc4eHgsIHU4IGFkZHIsIHU4IG9mZnNldCwgdTggdmFsKQoreworCWludCBy ZXQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGFueDc4eHgtPmNsaWVudDsKKworCWNs aWVudC0+YWRkciA9IGFkZHIgPj4gMTsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2Rh dGEoY2xpZW50LCBvZmZzZXQsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoJmNsaWVu dC0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlIGkyYyBhZGRyPSV4XG4iLCBhZGRyKTsKKworCXJldHVy biByZXQ7Cit9CisKKy8qKgorICogc3BfcmVnX3VwZGF0ZV9iaXRzOiBQZXJmb3JtIGEgcmVhZC9t b2RpZnkvd3JpdGUgY3ljbGUgb24gdGhlIHJlZ2lzdGVyLgorICoKKyAqIEBhbng3OHh4OiBEZXZp Y2UgdG8gcmVhZCBmcm9tLgorICogQGFkZHI6IEFkZHJlc3MgdG8gd3JpdGUgdG8uCisgKiBAb2Zm c2V0OiBCeXRlIGludGVycHJldGVkIGJ5IHNsYXZlLgorICogQG1hc2s6IEJpdG1hc2sgdG8gY2hh bmdlLgorICogQHZhbDogTmV3IHZhbHVlIGZvciBiaXRtYXNrLgorICoKKyAqIFJldHVybnMgemVy byBmb3Igc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBp bnQgc3BfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LCB1OCBhZGRyLCB1 OCBvZmZzZXQsCisJCQkgICAgICB1OCBtYXNrLCB1OCB2YWwpCit7CisJaW50IHJldDsKKwl1OCBv cmlnLCB0bXA7CisKKwlyZXQgPSBzcF9yZWdfcmVhZChhbng3OHh4LCBhZGRyLCBvZmZzZXQsICZv cmlnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXRtcCA9IG9yaWcgJiB+bWFz azsKKwl0bXAgfD0gdmFsICYgbWFzazsKKworCXJldHVybiBzcF9yZWdfd3JpdGUoYW54Nzh4eCwg YWRkciwgb2Zmc2V0LCB0bXApOworfQorCisvKioKKyAqIHNwX3JlZ19zZXRfYml0czogUGVyZm9y bSBhIHJlYWQvd3JpdGUgY3ljbGUgdG8gc2V0IGJpdHMgaW4gcmVnaXN0ZXIuCisgKgorICogQGFu eDc4eHg6IERldmljZSB0byByZWFkIGZyb20uCisgKiBAYWRkcjogQWRkcmVzcyB0byB3cml0ZSB0 by4KKyAqIEBvZmZzZXQ6IEJ5dGUgaW50ZXJwcmV0ZWQgYnkgc2xhdmUuCisgKiBAbWFzazogQml0 bWFzayB0byBjaGFuZ2UuCisgKgorICogUmV0dXJucyB6ZXJvIGZvciBzdWNjZXNzLCBhIG5lZ2F0 aXZlIG51bWJlciBvbiBlcnJvci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc3BfcmVnX3NldF9i aXRzKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LCB1OCBhZGRyLAorCQkJCSAgdTggb2Zmc2V0LCB1 OCBtYXNrKQoreworCXJldHVybiBzcF9yZWdfdXBkYXRlX2JpdHMoYW54Nzh4eCwgYWRkciwgb2Zm c2V0LCBtYXNrLCBtYXNrKTsKK30KKworLyoqCisgKiBzcF9yZWdfY2xlYXJfYml0czogUGVyZm9y bSBhIHJlYWQvd3JpdGUgY3ljbGUgdG8gY2xlYXIgYml0cyBpbiByZWdpc3Rlci4KKyAqCisgKiBA YW54Nzh4eDogRGV2aWNlIHRvIHJlYWQgZnJvbS4KKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHdyaXRl IHRvLgorICogQG9mZnNldDogQnl0ZSBpbnRlcnByZXRlZCBieSBzbGF2ZS4KKyAqIEBtYXNrOiBC aXRtYXNrIHRvIGNoYW5nZS4KKyAqCisgKiBSZXR1cm5zIHplcm8gZm9yIHN1Y2Nlc3MsIGEgbmVn YXRpdmUgbnVtYmVyIG9uIGVycm9yLgorICovCitzdGF0aWMgaW5saW5lIGludCBzcF9yZWdfY2xl YXJfYml0cyhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwgdTggYWRkciwKKwkJCQkgICAgdTggb2Zm c2V0LCB1OCBtYXNrKQoreworCXJldHVybiBzcF9yZWdfdXBkYXRlX2JpdHMoYW54Nzh4eCwgYWRk ciwgb2Zmc2V0LCBtYXNrLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNwX3ZpZGVvX211 dGUoc3RydWN0IGFueDc4eHggKmFueDc4eHgsIGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFibGUp CisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkwxX1JFRywKKwkJ CQlTUF9WSURFT19NVVRFKTsKKwllbHNlCisJCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRY X1AyLCBTUF9WSURfQ1RSTDFfUkVHLAorCQkJCSAgU1BfVklERU9fTVVURSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBzcF9oZG1pX211dGVfYXVkaW8oc3RydWN0IGFueDc4eHggKmFueDc4eHgs IGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4 LCBSWF9QMCwgU1BfSERNSV9NVVRFX0NUUkxfUkVHLAorCQkJCVNQX0FVRF9NVVRFKTsKKwllbHNl CisJCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFJYX1AwLCBTUF9IRE1JX01VVEVfQ1RSTF9S RUcsCisJCQkJICBTUF9BVURfTVVURSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF9oZG1p X211dGVfdmlkZW8oc3RydWN0IGFueDc4eHggKmFueDc4eHgsIGJvb2wgZW5hYmxlKQoreworCWlm IChlbmFibGUpCisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBSWF9QMCwgU1BfSERNSV9NVVRF X0NUUkxfUkVHLAorCQkJCVNQX1ZJRF9NVVRFKTsKKwllbHNlCisJCXNwX3JlZ19jbGVhcl9iaXRz KGFueDc4eHgsIFJYX1AwLCBTUF9IRE1JX01VVEVfQ1RSTF9SRUcsCisJCQkJICBTUF9WSURfTVVU RSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF9hZGRyb25seV9zZXQoc3RydWN0IGFueDc4 eHggKmFueDc4eHgsIGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCXNwX3JlZ19zZXRf Yml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfQVVYX0NIX0NUUkwyX1JFRywKKwkJCQlTUF9BRERS X09OTFkpOworCWVsc2UKKwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQ X0FVWF9DSF9DVFJMMl9SRUcsCisJCQkJICBTUF9BRERSX09OTFkpOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgc3Bfc2V0X2xpbmtfYmFuZHdpZHRoKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LCB1 OCBidykKK3sKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX01BSU5fTElOS19C V19TRVRfUkVHLCBidyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggc3BfZ2V0X2xpbmtfYmFuZHdp ZHRoKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXU4IHZhbDsKKworCXNwX3JlZ19yZWFk KGFueDc4eHgsIFRYX1AwLCBTUF9EUF9NQUlOX0xJTktfQldfU0VUX1JFRywgJnZhbCk7CisKKwly ZXR1cm4gdmFsICYgU1BfTElOS19CV19TRVRfTUFTSzsKK30KKworc3RhdGljIGlubGluZSBib29s IHNwX2dldF9wbGxfbG9ja19zdGF0dXMoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJdTgg dmFsOworCisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0RFQlVHMV9SRUcsICZ2 YWwpOworCisJcmV0dXJuICh2YWwgJiBTUF9ERUJVR19QTExfTE9DSykgIT0gMDsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIHNwX2dlbl9tX2Nsa193aXRoX2Rvd25zcHJlYWRpbmcoc3RydWN0IGFu eDc4eHggKmFueDc4eHgpCit7CisJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9E UF9NX0NBTENVTEFUSU9OX0NUUkxfUkVHLAorCQkJU1BfTV9HRU5fQ0xLX1NFTCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBzcF9nZW5fbV9jbGtfd2l0aG91dF9kb3duc3ByZWFkaW5nKHN0cnVj dCBhbng3OHh4ICphbng3OHh4KQoreworCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1Aw LCBTUF9EUF9NX0NBTENVTEFUSU9OX0NUUkxfUkVHLAorCQkJICBTUF9NX0dFTl9DTEtfU0VMKTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIHNwX2hkbWlfc2V0X2hwZChzdHJ1Y3QgYW54Nzh4eCAq YW54Nzh4eCwgYm9vbCBlbmFibGUpCit7CisJaWYgKGVuYWJsZSkKKwkJc3BfcmVnX3NldF9iaXRz KGFueDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RSTDNfUkVHLCBTUF9IUERfT1VUKTsKKwllbHNlCisJ CXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RSTDNfUkVHLAorCQkJ CSAgU1BfSFBEX09VVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF9oZG1pX3NldF90ZXJt aW5hdGlvbihzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwKKwkJCQkJICAgYm9vbCBlbmFibGUpCit7 CisJaWYgKGVuYWJsZSkKKwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgUlhfUDAsIFNQX1RN RFNfQ1RSTF9CQVNFICsgNywKKwkJCQkgIFNQX1BEX1JUKTsKKwllbHNlCisJCXNwX3JlZ19zZXRf Yml0cyhhbng3OHh4LCBSWF9QMCwgU1BfVE1EU19DVFJMX0JBU0UgKyA3LAorCQkJCVNQX1BEX1JU KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNwX2hkY3BfcmVwZWF0ZXJfbW9kZShzdHJ1Y3Qg YW54Nzh4eCAqYW54Nzh4eCkKK3sKKwl1OCB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBS WF9QMSwgU1BfSERDUF9CQ0FQU19TSEFET1dfUkVHLCAmdmFsKTsKKworCXJldHVybiAodmFsICYg U1BfQkNBUFNfUkVQRUFURVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BfY2xlYW5faGRj cF9zdGF0dXMoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3BfcmVnX3dyaXRlKGFueDc4 eHgsIFRYX1AwLCBTUF9IRENQX0NUUkwwX1JFRywKKwkJICAgICBTUF9CS1NWX1NSTV9QQVNTIHwg U1BfS1NWTElTVF9WTEQpOworCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfSERD UF9DVFJMMF9SRUcsIFNQX1JFX0FVVEgpOworCXVzbGVlcF9yYW5nZSgyMDAwLCA0MDAwKTsKK30K Kworc3RhdGljIGNvbnN0IHU4IGRwX3R4X291dHB1dF9wcmVjaXNlX3R1bmVfYml0c1syMF0gPSB7 CisJMHgwMSwgMHgwMywgMHgwNywgMHg3ZiwgMHg3MSwgMHg2YiwgMHg3ZiwKKwkweDczLCAweDdm LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MGMsIDB4NDIsIDB4MWUsIDB4M2Us IDB4NzIsIDB4N2UsCit9OworCitzdGF0aWMgdm9pZCBzcF9saW5rX3BoeV9pbml0aWFsaXphdGlv bihzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlpbnQgaTsKKworCS8qCisJICogUkVWSVNJ VCA6IEl0IGlzIHdyaXRpbmcgdG8gYSBSRVNFUlZFRCBiaXRzIGluIEFuYWxvZyBDb250cm9sIDAK KwkgKiByZWdpc3Rlci4KKwkgKi8KKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX0FO QUxPR19DVFJMMF9SRUcsIDB4MDIpOworCisJLyoKKwkgKiBXcml0ZSBEUCBUWCBvdXRwdXQgZW1w aGFzaXMgcHJlY2lzZSB0dW5lIGJpdHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoZHBfdHhfb3V0cHV0X3ByZWNpc2VfdHVuZV9iaXRzKTsgaSsrKQorCQlzcF9yZWdfd3JpdGUo YW54Nzh4eCwgVFhfUDEsIFNQX0RQX1RYX0xUX0NUUkwwX1JFRyArIGksCisJCQkgICAgIGRwX3R4 X291dHB1dF9wcmVjaXNlX3R1bmVfYml0c1tpXSk7Cit9CisKK3N0YXRpYyB2b2lkIHNwX3NldF9z eXN0ZW1fc3RhdGUoc3RydWN0IGFueDc4eHggKmFueDc4eHgsCisJCQkJZW51bSBzcF90eF9zdGF0 ZSBuZXdfc3RhdGUpCit7CisJdTggdmFsOworCisJaWYgKChzcC50eF9zeXN0ZW1fc3RhdGUgPj0g U1RBVEVfTElOS19UUkFJTklORykgJiYKKwkgICAgKG5ld19zdGF0ZSA8IFNUQVRFX0xJTktfVFJB SU5JTkcpKQorCQlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FOQUxPR19Q T1dFUl9ET1dOX1JFRywKKwkJCQlTUF9DSDBfUEQpOworCisJaWYgKHNwLnR4X3N5c3RlbV9zdGF0 ZSA+PSBTVEFURV9MSU5LX1RSQUlOSU5HKSB7CisJCWlmIChuZXdfc3RhdGUgPj0gU1RBVEVfQVVE SU9fT1VUUFVUKSB7CisJCQlzcF9oZG1pX211dGVfYXVkaW8oYW54Nzh4eCwgdHJ1ZSk7CisJCX0g ZWxzZSB7CisJCQlzcF9oZG1pX211dGVfdmlkZW8oYW54Nzh4eCwgdHJ1ZSk7CisJCQlzcF92aWRl b19tdXRlKGFueDc4eHgsIHRydWUpOworCQl9CisJfQorCisJaWYgKCFzcF9oZGNwX3JlcGVhdGVy X21vZGUoYW54Nzh4eCkpIHsKKwkJaWYgKHNwLnR4X3N5c3RlbV9zdGF0ZSA+PSBTVEFURV9IRENQ X0FVVEggJiYKKwkJICAgIG5ld19zdGF0ZSA8PSBTVEFURV9IRENQX0FVVEgpIHsKKwkJCXNwX3Jl Z19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX0NUUkwwX1JFRywgJnZhbCk7CisJCQlpZiAo dmFsICYgfihTUF9LU1ZMSVNUX1ZMRCB8IFNQX0JLU1ZfU1JNX1BBU1MpKQorCQkJCXNwX2NsZWFu X2hkY3Bfc3RhdHVzKGFueDc4eHgpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNwLnR4X3N5c3Rl bV9zdGF0ZSA+IFNUQVRFX0xJTktfVFJBSU5JTkcgJiYKKwkJICAgIG5ld19zdGF0ZSA8PSBTVEFU RV9MSU5LX1RSQUlOSU5HKSB7CisJCQkvKiBJbmZvcm0gQVAgdG8gcmUtYXV0aCAqLworCQkJc3Bf aGRtaV9zZXRfaHBkKGFueDc4eHgsIGZhbHNlKTsKKwkJCXNwX2hkbWlfc2V0X3Rlcm1pbmF0aW9u KGFueDc4eHgsIGZhbHNlKTsKKwkJCW1zbGVlcCg1MCk7CisJCX0KKwl9CisKKwlzcC50eF9zeXN0 ZW1fc3RhdGUgPSBuZXdfc3RhdGU7CisJc3AuaGRjcF9zdGF0ZSA9IEhEQ1BfQ0FQQUJMRV9DSEVD SzsKKwlzcC50eF9sdF9zdGF0ZSA9IExUX0lOSVQ7CisJc3AudHhfdm9fc3RhdGUgPSBWT19XQUlU X1ZJREVPX1NUQUJMRTsKKwkvKiBSZXNldCBhdWRpbyBzdGFibGUgY291bnRlciAqLworCXNwLmF1 ZGlvX3N0YWJsZV9jb3VudCA9IDA7CisJc3BfcHJpbnRfc3lzdGVtX3N0YXRlKGFueDc4eHgsIHNw LnR4X3N5c3RlbV9zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF9yZWdfaGFyZHdh cmVfcmVzZXQoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3BfcmVnX3NldF9iaXRzKGFu eDc4eHgsIFRYX1AyLCBTUF9SRVNFVF9DVFJMMV9SRUcsIFNQX0hXX1JTVCk7CisJc3BfdmFyaWFi bGVfaW5pdChhbng3OHh4KTsKKwlzcF9zZXRfc3lzdGVtX3N0YXRlKGFueDc4eHgsIFNUQVRFX1NQ X0lOSVRJQUxJWkVEKTsKKwltc2xlZXAoNTAwKTsKK30KKworc3RhdGljIGludCBzcF93YWl0X2F1 eF9vcF9maW5pc2goc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJdTggZXJyY250OworCXU4 IHZhbDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisKKwll cnJjbnQgPSAxNTA7CisJd2hpbGUgKGVycmNudC0tKSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgs IFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDJfUkVHLCAmdmFsKTsKKwkJaWYgKCEodmFsICYgU1Bf QVVYX0VOKSkKKwkJCWJyZWFrOworCQl1c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CisJfQorCisJ aWYgKCFlcnJjbnQpIHsKKwkJZGV2X2VycihkZXYsICJhdXggb3BlcmF0ZSBmYWlsZWQhXG4iKTsK KwkJcmV0dXJuIC0xOworCX0KKworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9BVVhf Q0hfU1RBVFVTX1JFRywgJnZhbCk7CisJaWYgKHZhbCAmIFNQX0FVWF9TVEFUVVMpIHsKKwkJZGV2 X2VycihkZXYsICJ3YWl0IGF1eCBvcGVyYXRpb24gc3RhdHVzICUuMnhcbiIsIHZhbCk7CisJCXJl dHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BfcHJpbnRfc3lz dGVtX3N0YXRlKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LAorCQkJCSAgZW51bSBzcF90eF9zdGF0 ZSBzdGF0ZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZVtdID0geworCQlbU1RB VEVfQ0FCTEVfVU5QTFVHR0VEXQkJPSAiQ2FibGUgaXMgcHVsbGVkIG91dCIsCisJCVtTVEFURV9X QUlUSU5HX0NBQkxFX1BMVUddCT0gIldhaXRpbmcgY2FibGUgcGx1ZyIsCisJCVtTVEFURV9TUF9J TklUSUFMSVpFRF0JCT0gIlNsaW1Qb3J0IGluaXRpYWxpemVkIiwKKwkJW1NUQVRFX1NJTktfQ09O TkVDVElPTl0JCT0gIlNpbmsgY29ubmVjdGlvbiIsCisJCVtTVEFURV9QQVJTRV9FRElEXQkJPSAi UGFyc2UgRURJRCIsCisJCVtTVEFURV9MSU5LX1RSQUlOSU5HXQkJPSAiTGluayB0cmFpbmluZyIs CisJCVtTVEFURV9WSURFT19PVVRQVVRdCQk9ICJWaWRlbyBvdXRwdXQiLAorCQlbU1RBVEVfSERD UF9BVVRIXQkJPSAiSERDUCBhdXRoZW50aWNhdGlvbiIsCisJCVtTVEFURV9BVURJT19PVVRQVVRd CQk9ICJBdWRpbyBvdXRwdXQiLAorCQlbU1RBVEVfUExBWV9CQUNLXQkJPSAiUGxheWJhY2siLAor CX07CisKKwlkZXZfZGJnKCZhbng3OHh4LT5jbGllbnQtPmRldiwgIlNsaW1Qb3J0IHN0YXRlOiAl c1xuIiwKKwkJKHN0YXRlIDwgQVJSQVlfU0laRShuYW1lKSkgPyBuYW1lW3N0YXRlXSA6ICJJTlZB TElEIik7Cit9CisKK3N0YXRpYyB2b2lkIHNwX3Jlc2V0X2F1eChzdHJ1Y3QgYW54Nzh4eCAqYW54 Nzh4eCkKK3sKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX1JFU0VUX0NUUkwy X1JFRywgU1BfQVVYX1JTVCk7CisJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQ X1JFU0VUX0NUUkwyX1JFRywgU1BfQVVYX1JTVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNwX3dyaXRl X2RwY2RfYWRkcihzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwgdW5zaWduZWQgaW50IGFkZHIpCit7 CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9BVVhfQUREUl83XzBfUkVHLCBhZGRy ICYgMHhmZik7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9BVVhfQUREUl8xNV84 X1JFRywKKwkJICAgICAoYWRkciAmIDB4ZmYwMCkgPj4gOCk7CisKKwkvKgorCSAqIERQIEFVWCBD SCBBZGRyZXNzIFJlZ2lzdGVyICMyLCBvbmx5IHVwZGF0ZSBiaXRzWzM6MF0KKwkgKiBbNzo0XSBS RVNFUlZFRAorCSAqIFszOjBdIEFVWF9BRERSWzE5OjE2XSwgUmVnaXN0ZXIgY29udHJvbCBBVVgg Q0ggYWRkcmVzcy4KKwkgKi8KKwlzcF9yZWdfdXBkYXRlX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQ X0FVWF9BRERSXzE5XzE2X1JFRywKKwkJCSAgIFNQX0FVWF9BRERSXzE5XzE2X01BU0ssIChhZGRy ICYgMHhmMDAwMCkgPj4gMTYpOworfQorCitzdGF0aWMgaW50IHNwX2RwX3JlYWRfYnl0ZXNfZnJv bV9kcGNkKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBh ZGRyLCB1OCBjb3VudCwgdTggKmJ1ZikKK3sKKwl1OCB2YWwsIHZhbDEsIGk7CisKKwkvKiBCdWZm ZXIgc2l6ZSBvZiBBVVggQ0ggaXMgMTYgKi8KKwlpZiAoY291bnQgPiAxNikKKwkJcmV0dXJuIC0x OworCisJLyogQ2xlYXIgQVVYIENIIGRhdGEgYnVmZmVyICovCisJc3BfcmVnX3dyaXRlKGFueDc4 eHgsIFRYX1AwLCBTUF9CVUZfREFUQV9DT1VOVF9SRUcsIFNQX0JVRl9DTFIpOworCXNwX3JlZ193 cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfQVVYX0NIX0NUUkwxX1JFRywKKwkJICAgICAoKGNv dW50IC0gMSkgPDwgU1BfQVVYX0xFTkdUSF9TSElGVCkgfCAweDA5KTsKKwlzcF93cml0ZV9kcGNk X2FkZHIoYW54Nzh4eCwgYWRkcik7CisJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AwLCBT UF9EUF9BVVhfQ0hfQ1RSTDJfUkVHLCBTUF9BVVhfRU4pOworCXVzbGVlcF9yYW5nZSgyMDAwLCA0 MDAwKTsKKworCWlmIChzcF93YWl0X2F1eF9vcF9maW5pc2goYW54Nzh4eCkpIHsKKwkJc3BfcmVn X3JlYWQoYW54Nzh4eCwgVFhfUDIsIFNQX0RQX0lOVF9TVEFUVVNfUkVHLCAmdmFsKTsKKwkJc3Bf cmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0RFQlVHMV9SRUcsICZ2YWwxKTsKKwkJaWYg KCEodmFsMSAmIFNQX1BPTExJTkdfRU4pIHx8ICh2YWwgJiBTUF9QT0xMSU5HX0VSUikpCisJCQlz cF9yZXNldF9hdXgoYW54Nzh4eCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgY291bnQ7IGkrKykgeworCQlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfRFBfQlVG X0RBVEEwX1JFRyArIGksICZ2YWwpOworCQlidWZbaV0gPSB2YWw7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgc3BfZHBfd3JpdGVfYnl0ZXNfdG9fZHBjZChzdHJ1Y3QgYW54Nzh4 eCAqYW54Nzh4eCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBhZGRyLCB1OCBjb3VudCwgdTggKmJ1 ZikKK3sKKwlpbnQgaTsKKworCS8qIEJ1ZmZlciBzaXplIG9mIEFVWCBDSCBpcyAxNiAqLworCWlm IChjb3VudCA+IDE2KQorCQlyZXR1cm4gLTE7CisKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhf UDAsIFNQX0RQX0FVWF9DSF9DVFJMMV9SRUcsCisJCSAgICAgKChjb3VudCAtIDEpIDw8IFNQX0FV WF9MRU5HVEhfU0hJRlQpIHwgMHgwOCk7CisJc3Bfd3JpdGVfZHBjZF9hZGRyKGFueDc4eHgsIGFk ZHIpOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQlzcF9yZWdfd3JpdGUoYW54Nzh4 eCwgVFhfUDAsIFNQX0RQX0JVRl9EQVRBMF9SRUcgKyBpLCBidWZbaV0pOworCisJc3BfcmVnX3Nl dF9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDJfUkVHLCBTUF9BVVhfRU4p OworCXJldHVybiBzcF93YWl0X2F1eF9vcF9maW5pc2goYW54Nzh4eCk7Cit9CisKK3N0YXRpYyB2 b2lkIHNwX2Jsb2NrX3Bvd2VyX2N0cmwoc3RydWN0IGFueDc4eHggKmFueDc4eHgsCisJCQkJZW51 bSBzcF90eF9wb3dlcl9ibG9jayBzcF90eF9wZF9ibG9jaywKKwkJCQlib29sIHBvd2VyKQorewor CWlmIChwb3dlcikKKwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX1BPV0VS RE9XTl9DVFJMX1JFRywKKwkJCQkgIHNwX3R4X3BkX2Jsb2NrKTsKKwllbHNlCisJCXNwX3JlZ19z ZXRfYml0cyhhbng3OHh4LCBUWF9QMiwgU1BfUE9XRVJET1dOX0NUUkxfUkVHLAorCQkJCXNwX3R4 X3BkX2Jsb2NrKTsKKworCWRldl9kYmcoJmFueDc4eHgtPmNsaWVudC0+ZGV2LAorCQkic3BfdHhf cG93ZXJfb246ICUuMnhcbiIsIHNwX3R4X3BkX2Jsb2NrKTsKK30KKwordm9pZCBzcF92YXJpYWJs ZV9pbml0KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXNwLmhkY3BfZW5hYmxlZCA9IGZh bHNlOworCisJc3AudHhfc3lzdGVtX3N0YXRlID0gU1RBVEVfV0FJVElOR19DQUJMRV9QTFVHOwor CXNwX3ByaW50X3N5c3RlbV9zdGF0ZShhbng3OHh4LCBzcC50eF9zeXN0ZW1fc3RhdGUpOworCisJ c3AucmVhZF9lZGlkX2ZsYWcgPSBmYWxzZTsKKworCW1lbXNldChzcC5lZGlkX2Jsb2NrcywgMCwg c2l6ZW9mKCpzcC5lZGlkX2Jsb2NrcykpOworCisJc3AudHhfbHRfc3RhdGUgPSBMVF9JTklUOwor CXNwLmhkY3Bfc3RhdGUgPSBIRENQX0NBUEFCTEVfQ0hFQ0s7CisJc3AucmVwZWF0ZXJfc3RhdGUg PSBIRENQX0RPTkU7CisJc3AudHhfdm9fc3RhdGUgPSBWT19XQUlUX1ZJREVPX1NUQUJMRTsKKwlz cC50eF9hb19zdGF0ZSA9IEFPX0lOSVQ7CisJc3AuY2hhbmdlZF9iYW5kd2lkdGggPSBEUF9MSU5L X0JXXzVfNDsKKworCXNwLmhkY3BfZXJyb3JfY291bnQgPSAwOworCXNwLmhkY3BfZmFpbF9jb3Vu dCA9IDA7CisJc3AuYXVkaW9fc3RhYmxlX2NvdW50ID0gMDsKKworCXNwLnR4X3Rlc3RfbHQgPSBm YWxzZTsKKwlzcC50eF90ZXN0X2J3ID0gMDsKKwlzcC50eF90ZXN0X2VkaWQgPSBmYWxzZTsKK30K Kworc3RhdGljIHZvaWQgc3BfaGRtaV90bWRzX3BoeV9pbml0aWFsaXphdGlvbihzdHJ1Y3QgYW54 Nzh4eCAqYW54Nzh4eCkKK3sKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgUlhfUDAsIFNQX1RNRFNf Q1RSTF9CQVNFICsgMSwgMHg5MCk7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFJYX1AwLCBTUF9U TURTX0NUUkxfQkFTRSArIDIsIDB4YTkpOworCXNwX3JlZ193cml0ZShhbng3OHh4LCBSWF9QMCwg U1BfVE1EU19DVFJMX0JBU0UgKyA2LCAweDkyKTsKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgUlhf UDAsIFNQX1RNRFNfQ1RSTF9CQVNFICsgNywgMHg4MCk7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgs IFJYX1AwLCBTUF9UTURTX0NUUkxfQkFTRSArIDIwLCAweGYyKTsKK30KKworc3RhdGljIHZvaWQg c3BfaGRtaV9pbml0aWFsaXphdGlvbihzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzcF9y ZWdfd3JpdGUoYW54Nzh4eCwgUlhfUDAsIFNQX0hETUlfTVVURV9DVFJMX1JFRywgU1BfQVVEX01V VEUgfAorCQkgICAgIFNQX1ZJRF9NVVRFKTsKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgUlhf UDAsIFNQX0NISVBfQ1RSTF9SRUcsIFNQX01BTl9IRE1JNVZfREVUIHwKKwkJCVNQX1BMTExPQ0tf Q0tEVF9FTiB8IFNQX0RJR0lUQUxfQ0tEVF9FTik7CisKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4 eCwgUlhfUDAsIFNQX1NPRlRXQVJFX1JFU0VUMV9SRUcsCisJCQlTUF9IRENQX01BTl9SU1QgfCBT UF9TV19NQU5fUlNUIHwgU1BfVE1EU19SU1QgfAorCQkJU1BfVklERU9fUlNUKTsKKwlzcF9yZWdf Y2xlYXJfYml0cyhhbng3OHh4LCBSWF9QMCwgU1BfU09GVFdBUkVfUkVTRVQxX1JFRywKKwkJCSAg U1BfSERDUF9NQU5fUlNUIHwgU1BfU1dfTUFOX1JTVCB8IFNQX1RNRFNfUlNUIHwKKwkJCSAgU1Bf VklERU9fUlNUKTsKKworCS8qIFN5bmMgZGV0ZWN0IGNoYW5nZSwgR1Agc2V0IG11dGUgKi8KKwlz cF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgUlhfUDAsIFNQX0FVRF9FWENFUFRJT05fRU5BQkxFX0JB U0UgKyAxLAorCQkJQklUKDUpIHwgQklUKDYpKTsKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwg UlhfUDAsIFNQX0FVRF9FWENFUFRJT05fRU5BQkxFX0JBU0UgKyAzLAorCQkJU1BfQUVDX0VOMjEp OworCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBSWF9QMCwgU1BfQVVEVklEX0NUUkxfUkVHLCBT UF9BVkNfRU4gfAorCQkJU1BfQUFDX09FIHwgU1BfQUFDX0VOKTsKKworCXNwX3JlZ19jbGVhcl9i aXRzKGFueDc4eHgsIFJYX1AwLCBTUF9TWVNURU1fUE9XRVJfRE9XTjFfUkVHLAorCQkJICBTUF9Q V0ROX0NUUkwpOworCisJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFJYX1AwLCBTUF9WSURfREFU QV9SQU5HRV9DVFJMX1JFRywKKwkJCVNQX1IyWV9JTlBVVF9MSU1JVCk7CisJc3BfcmVnX3dyaXRl KGFueDc4eHgsIFJYX1AwLCBTUF9UTURTX0NUUkxfQkFTRSArIDIyLCAweGM0KTsKKwlzcF9yZWdf d3JpdGUoYW54Nzh4eCwgUlhfUDAsIFNQX1RNRFNfQ1RSTF9CQVNFICsgMjMsIDB4MTgpOworCisJ LyogRW5hYmxlIEREQyBzdHJldGNoICovCisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBT UF9EUF9FWFRSQV9JMkNfREVWX0FERFJfUkVHLAorCQkgICAgIFNQX0kyQ19FWFRSQV9BRERSKTsK KworCXNwX2hkbWlfdG1kc19waHlfaW5pdGlhbGl6YXRpb24oYW54Nzh4eCk7CisJc3BfaGRtaV9z ZXRfaHBkKGFueDc4eHgsIGZhbHNlKTsKKwlzcF9oZG1pX3NldF90ZXJtaW5hdGlvbihhbng3OHh4 LCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNwX3h0YWxfY2xrX3NlbChzdHJ1Y3QgYW54Nzh4 eCAqYW54Nzh4eCkKK3sKKwl1OCB2YWw7CisKKwlzcF9yZWdfdXBkYXRlX2JpdHMoYW54Nzh4eCwg VFhfUDIsIFNQX0FOQUxPR19ERUJVRzJfUkVHLAorCQkJICAgU1BfWFRBTF9GUlEgfCBTUF9GT1JD RV9TV19PRkZfQllQQVNTLAorCQkJICAgU1BfWFRBTF9GUlFfMjdNKTsKKworCXNwX3JlZ193cml0 ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfQVVYX0NIX0NUUkwzX1JFRywKKwkJICAgICBYVEFMX0NM SyAmIFNQX1dBSVRfQ09VTlRFUl83XzBfTUFTSyk7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRY X1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDRfUkVHLAorCQkgICAgICgoWFRBTF9DTEsgJiAweGZmMDAp ID4+IDIpIHwgKFhUQUxfQ0xLIC8gMTApKTsKKworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9Q MCwgU1BfSTJDX0dFTl8xMFVTX1RJTUVSMF9SRUcsCisJCSAgICAgWFRBTF9DTEsgJiAweGZmKTsK KwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0kyQ19HRU5fMTBVU19USU1FUjFfUkVH LAorCQkgICAgIChYVEFMX0NMSyAmIDB4ZmYwMCkgPj4gOCk7CisJc3BfcmVnX3dyaXRlKGFueDc4 eHgsIFRYX1AwLCBTUF9BVVhfTUlTQ19DVFJMX1JFRywKKwkJICAgICBYVEFMX0NMSyAvIDEwIC0g MSk7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMCwgU1BfSERNSV9VU19USU1FUl9DVFJM X1JFRywgJnZhbCk7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFJYX1AwLCBTUF9IRE1JX1VTX1RJ TUVSX0NUUkxfUkVHLAorCQkgICAgICh2YWwgJiBTUF9NU19USU1FUl9NQVJHSU5fMTBfOF9NQVNL KSB8CisJCSAgICAgKCgoKFhUQUxfQ0xLIC8gMTApID4+IDEpIC0gMikgPDwgMykpOworfQorCit2 b2lkIHNwX3R4X2luaXRpYWxpemF0aW9uKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCS8q IHNldCB0ZXJtaW5hbCByZXNpc3RvciB0byA1MCBvaG0gKi8KKwlzcF9yZWdfd3JpdGUoYW54Nzh4 eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsIDB4MzApOworCS8qIGVuYWJsZSBhdXgg ZG91YmxlIGRpZmYgb3V0cHV0ICovCisJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AwLCBT UF9EUF9BVVhfQ0hfQ1RSTDJfUkVHLCAweDA4KTsKKworCWlmICghc3BfaGRjcF9yZXBlYXRlcl9t b2RlKGFueDc4eHgpKSB7CisJCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9E UF9IRENQX0NUUkxfUkVHLAorCQkJCSAgU1BfQVVUT19FTiB8IFNQX0FVVE9fU1RBUlQpOworCQlz cF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX09UUF9LRVlfUFJPVEVDVDFfUkVHLAorCQkJ ICAgICBTUF9PVFBfUFNXMSk7CisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfT1RQ X0tFWV9QUk9URUNUMl9SRUcsCisJCQkgICAgIFNQX09UUF9QU1cyKTsKKwkJc3BfcmVnX3dyaXRl KGFueDc4eHgsIFRYX1AwLCBTUF9PVFBfS0VZX1BST1RFQ1QzX1JFRywKKwkJCSAgICAgU1BfT1RQ X1BTVzMpOworCQlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfS0VZX0NP TU1BTkRfUkVHLAorCQkJCVNQX0RJU0FCTEVfU1lOQ19IRENQKTsKKwl9CisKKwlzcF9yZWdfd3Jp dGUoYW54Nzh4eCwgVFhfUDIsIFNQX1ZJRF9DVFJMOF9SRUcsIFNQX1ZJRF9WUkVTX1RIKTsKKwor CS8qCisJICogRFAgSERDUCBhdXRvIGF1dGhlbnRpY2F0aW9uIHdhaXQgdGltZXIgKHdoZW4gZG93 bnN0cmVhbSBzdGFydHMgdG8KKwkgKiBhdXRoLCBEUCBzaWRlIHdpbGwgd2FpdCBmb3IgdGhpcyBw ZXJpb2QgdGhlbiBkbyBhdXRoIGF1dG9tYXRpY2FsbHkpCisJICovCisJc3BfcmVnX3dyaXRlKGFu eDc4eHgsIFRYX1AwLCBTUF9IRENQX0FVVE9fVElNRVJfUkVHLCAweDAwKTsKKworCXNwX3JlZ19z ZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfSERDUF9DVFJMX1JFRywgU1BfTElOS19QT0xM SU5HKTsKKworCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfTElOS19ERUJV R19DVFJMX1JFRywKKwkJCVNQX01fVklEX0RFQlVHKTsKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4 eCwgVFhfUDIsIFNQX0FOQUxPR19ERUJVRzJfUkVHLAorCQkJU1BfUE9XRVJPTl9USU1FXzFQNU1T KTsKKworCXNwX3h0YWxfY2xrX3NlbChhbng3OHh4KTsKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwg VFhfUDAsIFNQX0FVWF9ERUZFUl9DVFJMX1JFRywKKwkJICAgICBTUF9ERUZFUl9DVFJMX0VOIHwg MHgwYyk7CisKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX1BPTExJTkdf Q1RSTF9SRUcsCisJCQlTUF9BVVRPX1BPTExJTkdfRElTQUJMRSk7CisJLyoKKwkgKiBTaG9ydCB0 aGUgbGluayBpbnRlZ3JpdHkgY2hlY2sgdGltZXIgdG8gc3BlZWQgdXAgYnN0YXR1cworCSAqIHBv bGxpbmcgZm9yIEhEQ1AgQ1RTIGl0ZW0gMUEtMDcKKwkgKi8KKwlzcF9yZWdfd3JpdGUoYW54Nzh4 eCwgVFhfUDAsIFNQX0hEQ1BfTElOS19DSEVDS19USU1FUl9SRUcsIDB4MWQpOworCXNwX3JlZ19z ZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfTUlTQ19DVFJMX1JFRywKKwkJCVNQX0VRX1RS QUlOSU5HX0xPT1ApOworCisJLyogcG93ZXIgZG93biB0aGUgbWFpbiBsaW5rIGJ5IGRlZmF1bHQg Ki8KKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FOQUxPR19QT1dFUl9E T1dOX1JFRywKKwkJCVNQX0NIMF9QRCk7CisKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIs IFNQX0lOVF9DVFJMX1JFRywgMHgwMSk7CisKKwlzcF9saW5rX3BoeV9pbml0aWFsaXphdGlvbihh bng3OHh4KTsKKwlzcF9nZW5fbV9jbGtfd2l0aF9kb3duc3ByZWFkaW5nKGFueDc4eHgpOworCisJ c3AuZG93bl9zYW1wbGVfZW4gPSBmYWxzZTsKK30KKworLyoKKyAqIENoZWNrIGlmIGl0IGlzIEFO QUxPR0lYIGRvbmdsZS4KKyAqLworc3RhdGljIGNvbnN0IHU4IGFueF9vdWlbM10gPSB7MHgwMCwg MHgyMiwgMHhiOX07CisKK3N0YXRpYyBib29sIGlzX2FueF9kb25nbGUoc3RydWN0IGFueDc4eHgg KmFueDc4eHgpCit7CisJdTggYnVmWzNdOworCisJc3BfZHBfcmVhZF9ieXRlc19mcm9tX2RwY2Qo YW54Nzh4eCwgRFBfU0lOS19PVUksIDMsIGJ1Zik7CisJaWYgKCFtZW1jbXAoYnVmLCBhbnhfb3Vp LCAzKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiAweDA1MDB+MHgwNTAyOiBCUkFOQ0hfSUVFRV9P VUkgKi8KKwlzcF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3OHh4LCBEUF9CUkFOQ0hfT1VJ LCAzLCBidWYpOworCWlmICghbWVtY21wKGJ1ZiwgYW54X291aSwgMykpCisJCXJldHVybiB0cnVl OworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgY29uc3QgdTggYW54Nzc1MFs0XSA9IHsw eDM3LCAweDM3LCAweDM1LCAweDMwfTsKKworc3RhdGljIHU4IHNwX2RwX2dldF9tYXhfcnhfYmFu ZHdpZHRoKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXU4IGJhbmR3aWR0aCwgbWF4X2xp bmtfcmF0ZTsKKwl1OCBidWZbNF07CisKKwliYW5kd2lkdGggPSAwOworCS8qCisJICogV2hlbiBB TlggZG9uZ2xlIGlzIGNvbm5lY3RlZCwgaWYgQ0hJUF9JRD0weDc3NTAgdGhlIGJhbmR3aWR0aCBp cworCSAqIDYuNzVHIGJlY2F1c2UgQU5YNzc1MCBEUENEIDB4MDUyeCBpcyBub3QgYXZhaWxhYmxl LgorCSAqLworCWlmIChpc19hbnhfZG9uZ2xlKGFueDc4eHgpKSB7CisJCS8qCisJCSAqIDAwNTAz aCAtIDAwNUZGaDogUkVTRVJWRUQgZm9yIEJyYW5jaCBEZXZpY2UgdmVuZG9yLXNwZWNpZmljCisJ CSAqIHVzYWdlCisJCSAqLworCQlzcF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3OHh4LCAw eDUwMywgNCwgYnVmKTsKKwkJaWYgKCFtZW1jbXAoYnVmLCBhbng3NzUwLCBzaXplb2YoYW54Nzc1 MCkpKQorCQkJYmFuZHdpZHRoID0gRFBfTElOS19CV182Xzc1OworCQllbHNlCisJCQlzcF9kcF9y ZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3OHh4LCAweDUyMSwKKwkJCQkJCSAgIDEsICZiYW5kd2lk dGgpOworCX0KKworCXNwX2RwX3JlYWRfYnl0ZXNfZnJvbV9kcGNkKGFueDc4eHgsIERQX01BWF9M SU5LX1JBVEUsIDEsCisJCQkJICAgJm1heF9saW5rX3JhdGUpOworCWlmIChiYW5kd2lkdGggPCBt YXhfbGlua19yYXRlKQorCQliYW5kd2lkdGggPSBtYXhfbGlua19yYXRlOworCisJcmV0dXJuIGJh bmR3aWR0aDsKK30KKworc3RhdGljIGJvb2wgc3BfZ2V0X2RwX2Nvbm5lY3Rpb24oc3RydWN0IGFu eDc4eHggKmFueDc4eHgpCit7CisJdTggdmFsOworCisJaWYgKHNwX2RwX3JlYWRfYnl0ZXNfZnJv bV9kcGNkKGFueDc4eHgsIERQX1NJTktfQ09VTlQsIDEsICZ2YWwpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkvKiBGSVhNRTogU2hvdWxkbid0IGJlIDB4M2YgU0lOS19DT1VOVFs1OjBdICovCisJaWYg KCEodmFsICYgMHgxZikpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChzcF9kcF9yZWFkX2J5dGVz X2Zyb21fZHBjZChhbng3OHh4LCBEUF9OT1JQLCAxLCAmdmFsKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJaWYgKHZhbCAmIDB4MjApIHsKKwkJc3BfZHBfcmVhZF9ieXRlc19mcm9tX2RwY2QoYW54Nzh4 eCwgRFBfU0VUX1BPV0VSLCAxLCAmdmFsKTsKKwkJLyoKKwkJICogQml0IDUgPSBTRVRfRE5fREVW SUNFX0RQX1BXUl81VgorCQkgKiBCaXQgNiA9IFNFVF9ETl9ERVZJQ0VfRFBfUFdSXzEyVgorCQkg KiBCaXQgNyA9IFNFVF9ETl9ERVZJQ0VfRFBfUFdSXzE4VgorCQkgKi8KKwkJdmFsICY9IDB4MWY7 CisJCXZhbCB8PSAweDIwOworCQlzcF9kcF93cml0ZV9ieXRlc190b19kcGNkKGFueDc4eHgsIERQ X1NFVF9QT1dFUiwgMSwgJnZhbCk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2 b2lkIHNwX2VuYWJsZV92aWRlb19pbnB1dChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwgYm9vbCBl bmFibGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2Owor CXU4IHZhbDsKKworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RSTDFfUkVH LCAmdmFsKTsKKwlpZiAoZW5hYmxlKSB7CisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9Q MiwgU1BfVklEX0NUUkwxX1JFRywgU1BfVklERU9fRU4pOworCQlkZXZfZGJnKGRldiwgIlNsaW1w b3J0IHZpZGVvIGlzIGVuYWJsZWQhXG4iKTsKKwl9IGVsc2UgeworCQlzcF9yZWdfY2xlYXJfYml0 cyhhbng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkwxX1JFRywKKwkJCQkgIFNQX1ZJREVPX0VOKTsK KwkJZGV2X2RiZyhkZXYsICJTbGltcG9ydCB2aWRlbyBpcyBkaXNhYmxlZCFcbiIpOworCX0KK30K Kworc3RhdGljIHU4IHNwX2dldF9lZGlkX2JhbmR3aWR0aCh1OCAqZGF0YSkKK3sKKwl1MTYgcGNs azsKKworCXBjbGsgPSAoKHUxNilkYXRhWzFdIDw8IDgpIHwgKCh1MTYpZGF0YVswXSAmIDB4ZmYp OworCWlmIChwY2xrIDw9IDUzMDApCisJCXJldHVybiBEUF9MSU5LX0JXXzFfNjI7CisJZWxzZSBp ZiAocGNsayA8PSA4OTAwKQorCQlyZXR1cm4gRFBfTElOS19CV18yXzc7CisJZWxzZSBpZiAocGNs ayA8PSAxODAwMCkKKwkJcmV0dXJuIERQX0xJTktfQldfNV80OworCWVsc2UKKwkJcmV0dXJuIERQ X0xJTktfQldfNl83NTsKK30KKworc3RhdGljIHU4IHNwX3BhcnNlX2VkaWRfdG9fZ2V0X2JhbmR3 aWR0aChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlpbnQgaTsKKwl1OCBiYW5kd2lkdGgs IHRlbXA7CisKKwliYW5kd2lkdGggPSBEUF9MSU5LX0JXXzFfNjI7CisJZm9yIChpID0gMDsgaSA8 IDQ7IGkrKykgeworCQlpZiAoc3AuZWRpZF9ibG9ja3NbMHgzNiArIDB4MTIgKiBpXSA9PSAwKQor CQkJYnJlYWs7CisJCXRlbXAgPSBzcF9nZXRfZWRpZF9iYW5kd2lkdGgoc3AuZWRpZF9ibG9ja3Mg KyAweDM2ICsgMHgxMiAqIGkpOworCQlkZXZfZGJnKCZhbng3OHh4LT5jbGllbnQtPmRldiwgImJh bmR3aWR0aCB2aWEgRURJRCA6ICV4XG4iLAorCQkJdGVtcCk7CisJCWlmIChiYW5kd2lkdGggPCB0 ZW1wKQorCQkJYmFuZHdpZHRoID0gdGVtcDsKKwkJaWYgKGJhbmR3aWR0aCA+PSBEUF9MSU5LX0JX XzZfNzUpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYmFuZHdpZHRoOworfQorCit1OCBzcF9n ZXRfbGlua19iYW5kd2lkdGhfZnJvbV9lZGlkKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQorewor CXU4IGJhbmR3aWR0aCwgbWF4X2JhbmR3aWR0aDsKKworCWJhbmR3aWR0aCA9IHNwX2RwX2dldF9t YXhfcnhfYmFuZHdpZHRoKGFueDc4eHgpOworCW1heF9iYW5kd2lkdGggPSBzcF9wYXJzZV9lZGlk X3RvX2dldF9iYW5kd2lkdGgoYW54Nzh4eCk7CisJaWYgKGJhbmR3aWR0aCA+IG1heF9iYW5kd2lk dGgpCisJCXJldHVybiBtYXhfYmFuZHdpZHRoOworCisJcmV0dXJuIGJhbmR3aWR0aDsKK30KKwor c3RhdGljIGludCBzcF90eF9hdXhfd3Ioc3RydWN0IGFueDc4eHggKmFueDc4eHgsIHU4IG9mZnNl dCkKK3sKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0JVRl9EQVRBMF9SRUcs IG9mZnNldCk7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RS TDFfUkVHLCAweDA0KTsKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FV WF9DSF9DVFJMMl9SRUcsIFNQX0FVWF9FTik7CisKKwlyZXR1cm4gc3Bfd2FpdF9hdXhfb3BfZmlu aXNoKGFueDc4eHgpOworfQorCitzdGF0aWMgaW50IHNwX3R4X2F1eF9yZChzdHJ1Y3QgYW54Nzh4 eCAqYW54Nzh4eCwgdTggbGVuKQoreworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1Bf RFBfQVVYX0NIX0NUUkwxX1JFRywgbGVuKTsKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhf UDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsIFNQX0FVWF9FTik7CisKKwlyZXR1cm4gc3Bfd2Fp dF9hdXhfb3BfZmluaXNoKGFueDc4eHgpOworfQorCitzdGF0aWMgaW50IHNwX2VkaWRfcmVhZChz dHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwgdTggb2Zmc2V0LAorCQkJdTggKmJ1ZikKK3sKKwl1OCBk YXRhX2NudCwgZXJyY250OworCXU4IHZhbCwgcmV0LCBpOworCisJc3BfdHhfYXV4X3dyKGFueDc4 eHgsIG9mZnNldCk7CisJLyogcmVhZCAxNiBieXRlcyAoTU9UID0gMSkgKi8KKwlzcF90eF9hdXhf cmQoYW54Nzh4eCwgMHhmMCB8IERQX0FVWF9JMkNfTU9UIHwgRFBfQVVYX0kyQ19SRUFEKTsKKwlk YXRhX2NudCA9IDA7CisJZXJyY250ID0gMDsKKworCXdoaWxlIChkYXRhX2NudCA8IDE2KSB7CisJ CXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9CVUZfREFUQV9DT1VOVF9SRUcsICZ2YWwp OworCQl2YWwgJj0gU1BfQlVGX0RBVEFfQ09VTlRfTUFTSzsKKwkJaWYgKHZhbCkgeworCQkJZm9y IChpID0gMDsgaSA8IHZhbDsgaSsrKQorCQkJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLAor CQkJCQkgICAgU1BfRFBfQlVGX0RBVEEwX1JFRyArIGksCisJCQkJCSAgICAmYnVmW2RhdGFfY250 ICsgaV0pOworCQkJZGF0YV9jbnQgKz0gdmFsOworCQl9IGVsc2UgeworCQkJaWYgKGVycmNudCsr IDw9IDIpCisJCQkJc3BfcmVzZXRfYXV4KGFueDc4eHgpOworCQkJZWxzZQorCQkJCXJldHVybiAt MTsKKwkJfQorCQkvKiByZWFkIDE2IC0gZGF0YV9jbnQgYnl0ZXMgKE1PVCA9IDEpICovCisJCXZh bCA9IERQX0FVWF9JMkNfTU9UIHwgRFBfQVVYX0kyQ19SRUFEIHwKKwkJICAgICAgKCgweDBmIC0g ZGF0YV9jbnQpIDw8IDQpOworCQlzcF90eF9hdXhfcmQoYW54Nzh4eCwgdmFsKTsKKwl9CisJc3Bf cmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDFfUkVHLCAweDAxKTsK KwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcs CisJCQlTUF9BRERSX09OTFkgfCBTUF9BVVhfRU4pOworCXJldCA9IHNwX3dhaXRfYXV4X29wX2Zp bmlzaChhbng3OHh4KTsKKwlzcF9hZGRyb25seV9zZXQoYW54Nzh4eCwgZmFsc2UpOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3BfdHhfZWRpZF9yZWFkX2luaXRpYWwoc3RydWN0 IGFueDc4eHggKmFueDc4eHgpCit7CisJLyogV3JpdGUgQVVYIENIIGFkZHJlc3MgMHgwMDA1MCAq LworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfQVVYX0FERFJfN18wX1JFRywgU1Bf STJDX0VYVFJBX0FERFIpOworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfQVVYX0FE RFJfMTVfOF9SRUcsIDApOworCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9B VVhfQUREUl8xOV8xNl9SRUcsCisJCQkgIFNQX0FVWF9BRERSXzE5XzE2X01BU0spOworfQorCitz dGF0aWMgaW50IHNwX3NlZ19lZGlkX3JlYWQoc3RydWN0IGFueDc4eHggKmFueDc4eHgsCisJCQkg ICAgdTggc2VnbWVudCwgdTggb2Zmc2V0KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3 OHh4LT5jbGllbnQtPmRldjsKKwl1OCB2YWwsIGVycmNudDsKKwlpbnQgaTsKKworCXNwX3JlZ193 cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfQVVYX0NIX0NUUkwxX1JFRywgMHgwNCk7CisJc3Bf cmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9BVVhfQUREUl83XzBfUkVHLCAweDMwKTsKKwor CXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfQVVYX0NIX0NUUkwyX1JFRywK KwkJCVNQX0FERFJfT05MWSB8IFNQX0FVWF9FTik7CisKKwlpZiAoc3Bfd2FpdF9hdXhfb3BfZmlu aXNoKGFueDc4eHgpKQorCQlyZXR1cm4gLTE7CisKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhf UDAsIFNQX0RQX0JVRl9EQVRBMF9SRUcsIHNlZ21lbnQpOworCXNwX3JlZ193cml0ZShhbng3OHh4 LCBUWF9QMCwgU1BfRFBfQVVYX0NIX0NUUkwxX1JFRywgMHgwNCk7CisKKwlzcF9yZWdfdXBkYXRl X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsCisJCQkgICBTUF9B RERSX09OTFkgfCBTUF9BVVhfRU4sIFNQX0FVWF9FTik7CisKKwllcnJjbnQgPSAxMDsKKwl3aGls ZSAoZXJyY250LS0pIHsKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9D SF9DVFJMMl9SRUcsICZ2YWwpOworCQlpZiAoISh2YWwgJiBTUF9BVVhfRU4pKQorCQkJYnJlYWs7 CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwl9CisKKwlpZiAoIWVycmNudCkgeworCQlk ZXZfZXJyKGRldiwKKwkJCSJmYWlsZWQgdG8gcmVhZCBEUCBBVVggQ2hhbm5lbCBDb250cm9sIFJl Z2lzdGVyIDJcbiIpOworCQlzcF9yZXNldF9hdXgoYW54Nzh4eCk7CisJCXJldHVybiAtMTsKKwl9 CisKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0FVWF9BRERSXzdfMF9SRUcsIFNQ X0kyQ19FWFRSQV9BRERSKTsKKwlzcF90eF9hdXhfd3IoYW54Nzh4eCwgb2Zmc2V0KTsKKwkvKiBy ZWFkIDE2IGJ5dGVzIChNT1QgPSAxKSAqLworCXNwX3R4X2F1eF9yZChhbng3OHh4LCAweGYwIHwg RFBfQVVYX0kyQ19NT1QgfCBEUF9BVVhfSTJDX1JFQUQpOworCisJZm9yIChpID0gMDsgaSA8IDE2 OyBpKyspIHsKKwkJZXJyY250ID0gMTA7CisJCXdoaWxlIChlcnJjbnQtLSkgeworCQkJc3BfcmVn X3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0JVRl9EQVRBX0NPVU5UX1JFRywKKwkJCQkgICAgJnZh bCk7CisJCQlpZiAodmFsICYgU1BfQlVGX0RBVEFfQ09VTlRfTUFTSykKKwkJCQlicmVhazsKKwkJ CXVzbGVlcF9yYW5nZSgyMDAwLCA0MDAwKTsKKwkJfQorCisJCWlmICghZXJyY250KSB7CisJCQlk ZXZfZXJyKGRldiwKKwkJCQkiZmFpbGVkIHRvIHJlYWQgRFAgQnVmZmVyIERhdGEgQ291bnQgUmVn aXN0ZXJcbiIpOworCQkJc3BfcmVzZXRfYXV4KGFueDc4eHgpOworCQkJcmV0dXJuIC0xOworCQl9 CisKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0JVRl9EQVRBMF9SRUcgKyBp LCAmdmFsKTsKKwl9CisKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9D SF9DVFJMMV9SRUcsIDB4MDEpOworCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1Bf RFBfQVVYX0NIX0NUUkwyX1JFRywKKwkJCVNQX0FERFJfT05MWSB8IFNQX0FVWF9FTik7CisJc3Bf cmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsCisJ CQkgIFNQX0FERFJfT05MWSk7CisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FV WF9DSF9DVFJMMl9SRUcsICZ2YWwpOworCisJZXJyY250ID0gMTA7CisJd2hpbGUgKGVycmNudC0t KSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDJfUkVH LCAmdmFsKTsKKwkJaWYgKCEodmFsICYgU1BfQVVYX0VOKSkKKwkJCWJyZWFrOworCQl1c2xlZXBf cmFuZ2UoMTAwMCwgMjAwMCk7CisJfQorCisJaWYgKCFlcnJjbnQpIHsKKwkJZGV2X2VycihkZXYs CisJCQkiZmFpbGVkIHRvIHJlYWQgRFAgQVVYIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAyXG4i KTsKKwkJc3BfcmVzZXRfYXV4KGFueDc4eHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgc3BfZWRpZF9ibG9ja19jaGVja3N1bShjb25zdCB1OCAqcmF3 X2VkaWQpCit7CisJaW50IGk7CisJdTggY3N1bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgRURJ RF9MRU5HVEg7IGkrKykKKwkJY3N1bSArPSByYXdfZWRpZFtpXTsKKworCXJldHVybiBjc3VtOwor fQorCitzdGF0aWMgaW50IHNwX3R4X2VkaWRfcmVhZChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkK K3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJdTggdmFs LCBsYXN0X2Jsb2NrLCBvZmZzZXQgPSAwOworCXU4IGJ1ZlsxNl07CisJaW50IGksIGosIGNvdW50 OworCisJc3BfdHhfZWRpZF9yZWFkX2luaXRpYWwoYW54Nzh4eCk7CisJc3BfcmVnX3dyaXRlKGFu eDc4eHgsIFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDFfUkVHLCAweDA0KTsKKwlzcF9yZWdfc2V0 X2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsCisJCQlTUF9BVVhf RU4gfCBTUF9BRERSX09OTFkpOworCisJaWYgKHNwX3dhaXRfYXV4X29wX2ZpbmlzaChhbng3OHh4 KSkKKwkJcmV0dXJuIC0xOworCisJc3BfYWRkcm9ubHlfc2V0KGFueDc4eHgsIGZhbHNlKTsKKwor CS8qIFJlYWQgdGhlIG51bWJlciBvZiBibG9ja3MgKi8KKwlzcF90eF9hdXhfd3IoYW54Nzh4eCwg MHg3ZSk7CisJc3BfdHhfYXV4X3JkKGFueDc4eHgsIERQX0FVWF9JMkNfUkVBRCk7CisJc3BfcmVn X3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0JVRl9EQVRBMF9SRUcsICZsYXN0X2Jsb2NrKTsK KwlkZXZfZGJnKGRldiwgImxhc3QgRURJRCBibG9jayBpcyAlZFxuIiwgbGFzdF9ibG9jayk7CisK KwkvKiBGSVhNRTogV2h5IG5vdCBqdXN0IGNhcCB0byAzIGlmIHRoZSByZXBvcnRlZCB2YWx1ZSBp cyA+MyAqLworCWlmIChsYXN0X2Jsb2NrID4gMykKKwkJbGFzdF9ibG9jayA9IDE7CisKKwkvKiBm b3IgZXZlcnkgYmxvY2sgKi8KKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPD0gbGFzdF9ibG9jazsg Y291bnQrKykgeworCQlzd2l0Y2ggKGNvdW50KSB7CisJCWNhc2UgMDoKKwkJY2FzZSAxOgorCQkJ Zm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJCW9mZnNldCA9IChpICsgY291bnQgKiA4KSAq IDE2OworCQkJCWlmIChzcF9lZGlkX3JlYWQoYW54Nzh4eCwgb2Zmc2V0LCBidWYpKQorCQkJCQly ZXR1cm4gLTE7CisJCQkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCisJCQkJCXNwLmVkaWRfYmxv Y2tzW29mZnNldCArIGpdID0gYnVmW2pdOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJ Y2FzZSAzOgorCQkJb2Zmc2V0ID0gKGNvdW50ID09IDIpID8gMHgwMCA6IDB4ODA7CisJCQlmb3Ig KGogPSAwOyBqIDwgODsgaisrKSB7CisJCQkJaWYgKHNwX3NlZ19lZGlkX3JlYWQoYW54Nzh4eCwg Y291bnQgLyAyLAorCQkJCQkJICAgICBvZmZzZXQpKQorCQkJCQlyZXR1cm4gLTE7CisJCQkJb2Zm c2V0ID0gb2Zmc2V0ICsgMHgxMDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJl YWs7CisJCX0KKwl9CisKKwlzcF9yZXNldF9hdXgoYW54Nzh4eCk7CisKKwlpZiAoIWRybV9lZGlk X2Jsb2NrX3ZhbGlkKHNwLmVkaWRfYmxvY2tzLCAwLCB0cnVlLCBOVUxMKSkgeworCQlkZXZfZXJy KGRldiwgIkVESUQgYmxvY2sgaXMgaW52YWxpZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlz cF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3OHh4LCBEUF9URVNUX1JFUVVFU1QsIDEsICZ2 YWwpOworCWlmICh2YWwgJiBEUF9URVNUX0xJTktfRURJRF9SRUFEKSB7CisJCWRldl9kYmcoZGV2 LCAiRURJRCB0ZXN0IHJlcXVlc3RlZFxuIik7CisJCXZhbCA9IHNwX2VkaWRfYmxvY2tfY2hlY2tz dW0oc3AuZWRpZF9ibG9ja3MpOworCQlkZXZfZGJnKGRldiwgIkVESUQgY2hlY2tzdW0gaXMgJWRc biIsIHZhbCk7CisJCXNwX2RwX3dyaXRlX2J5dGVzX3RvX2RwY2QoYW54Nzh4eCwgRFBfVEVTVF9F RElEX0NIRUNLU1VNLCAxLAorCQkJCQkgICZ2YWwpOworCQlzcC50eF90ZXN0X2VkaWQgPSB0cnVl OworCQl2YWwgPSBEUF9URVNUX0VESURfQ0hFQ0tTVU1fV1JJVEU7CisJCXNwX2RwX3dyaXRlX2J5 dGVzX3RvX2RwY2QoYW54Nzh4eCwgRFBfVEVTVF9SRVNQT05TRSwgMSwgJnZhbCk7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHNwX2NoZWNrX3dpdGhfcHJlX2VkaWQoc3RydWN0 IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNs aWVudC0+ZGV2OworCXU4IGk7CisJdTggYnVmWzE2XTsKKwlib29sIHJldCA9IGZhbHNlOworCisJ c3BfdHhfZWRpZF9yZWFkX2luaXRpYWwoYW54Nzh4eCk7CisJc3BfcmVnX3dyaXRlKGFueDc4eHgs IFRYX1AwLCBTUF9EUF9BVVhfQ0hfQ1RSTDFfUkVHLCAweDA0KTsKKwlzcF9yZWdfc2V0X2JpdHMo YW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FVWF9DSF9DVFJMMl9SRUcsIDB4MDMpOworCisJaWYgKHNw X3dhaXRfYXV4X29wX2ZpbmlzaChhbng3OHh4KSkKKwkJZ290byByZXR1cm5fcG9pbnQ7CisKKwlz cF9hZGRyb25seV9zZXQoYW54Nzh4eCwgZmFsc2UpOworCisJaWYgKHNwX2VkaWRfcmVhZChhbng3 OHh4LCAweDcwLCBidWYpKQorCQlnb3RvIHJldHVybl9wb2ludDsKKworCWZvciAoaSA9IDA7IGkg PCAxNjsgaSsrKSB7CisJCWlmIChzcC5lZGlkX2Jsb2Nrc1sweDcwICsgaV0gIT0gYnVmW2ldKSB7 CisJCQlkZXZfZGJnKGRldiwgIiVzXG4iLAorCQkJCSJkaWZmZXJlbnQgY2hlY2tzdW0gYW5kIGJs b2NrcyBudW1cbiIpOworCQkJZ290byByZXR1cm5fcG9pbnQ7CisJCX0KKwl9CisKKwlpZiAoc3Bf ZWRpZF9yZWFkKGFueDc4eHgsIDB4MDgsIGJ1ZikpCisJCWdvdG8gcmV0dXJuX3BvaW50OworCisJ Zm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKHNwLmVkaWRfYmxvY2tzW2kgKyA4XSAh PSBidWZbaV0pIHsKKwkJCWRldl9kYmcoZGV2LCAiZGlmZmVyZW50IGVkaWQgaW5mb3JtYXRpb25c biIpOworCQkJZ290byByZXR1cm5fcG9pbnQ7CisJCX0KKwl9CisKKwlyZXQgPSB0cnVlOworcmV0 dXJuX3BvaW50OgorCXNwX3Jlc2V0X2F1eChhbng3OHh4KTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBib29sIHNwX2VkaWRfcHJvY2VzcyhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJdTggYncsIGVk aWRfYncsIHZhbDsKKwlpbnQgaTsKKworCWlmIChzcC5yZWFkX2VkaWRfZmxhZykgeworCQlpZiAo IXNwX2NoZWNrX3dpdGhfcHJlX2VkaWQoYW54Nzh4eCkpCisJCQlzcC5yZWFkX2VkaWRfZmxhZyA9 IGZhbHNlOworCX0gZWxzZSB7CisJCWlmIChzcF90eF9lZGlkX3JlYWQoYW54Nzh4eCkpIHsKKwkJ CWRldl9lcnIoZGV2LCAiRURJRCBjb3JydXB0aW9uIVxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJ CX0KKwl9CisKKwkvKiBSZWxlYXNlIHRoZSBIUEQgYWZ0ZXIgdGhlIE9UUCBsb2FkZG93biAqLwor CWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1Aw LCBTUF9IRENQX0tFWV9TVEFUVVNfUkVHLCAmdmFsKTsKKwkJaWYgKHZhbCAmIDB4MDEpCisJCQli cmVhazsKKworCQlkZXZfZGJnKGRldiwgIndhaXRpbmcgSERDUCBLRVkgbG9hZGRvd25cbiIpOwor CQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJfQorCisJc3BfcmVnX3dyaXRlKGFueDc4eHgs IFJYX1AwLCBTUF9JTlRfTUFTS19CQVNFICsgMSwKKwkJICAgICBTUF9IRE1JX0RWSSB8IFNQX0NL RFRfQ0hHIHwgU1BfU0NEVF9DSEcgfAorCQkgICAgIFNQX0NBQkxFX1BMVUdfQ0hHKTsKKworCWlm ICghc3BfaGRjcF9yZXBlYXRlcl9tb2RlKGFueDc4eHgpKSB7CisJCXNwX2hkbWlfc2V0X2hwZChh bng3OHh4LCB0cnVlKTsKKwkJc3BfaGRtaV9zZXRfdGVybWluYXRpb24oYW54Nzh4eCwgdHJ1ZSk7 CisJfQorCisJYncgPSBzcF9kcF9nZXRfbWF4X3J4X2JhbmR3aWR0aChhbng3OHh4KTsKKwlkZXZf ZGJnKGRldiwgIlJYIEJXICV4XG4iLCBidyk7CisKKwllZGlkX2J3ID0gc3BfcGFyc2VfZWRpZF90 b19nZXRfYmFuZHdpZHRoKGFueDc4eHgpOworCWlmIChidyA8PSBlZGlkX2J3KQorCQllZGlkX2J3 ID0gYnc7CisKKwlkZXZfZGJnKGRldiwgInNldCBsaW5rIGJ3IGluIGVkaWQgJXhcbiIsIGVkaWRf YncpOworCXNwLmNoYW5nZWRfYmFuZHdpZHRoID0gZWRpZF9idzsKKworCXJldHVybiB0cnVlOwor fQorCitzdGF0aWMgdm9pZCBzcF9sdnR0bF9iaXRfbWFwcGluZyhzdHJ1Y3QgYW54Nzh4eCAqYW54 Nzh4eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJ dTggdmFsOworCXU4IHZpZF9iaXQ7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMCwgU1Bf VklERU9fU1RBVFVTX1JFRywgJnZhbCk7CisJc3dpdGNoICgodmFsICYgU1BfQ09MT1JfREVQVEhf TUFTSykgPj4gU1BfQ09MT1JfREVQVEhfU0hJRlQpIHsKKwlkZWZhdWx0OgorCWNhc2UgU1BfQ09M T1JfREVQVEhfTU9ERV9MRUdBQ1k6CisJCXZhbCA9IFNQX0lOX0JQQ184QklUOworCQl2aWRfYml0 ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTUF9DT0xPUl9ERVBUSF9NT0RFXzI0QklUOgorCQl2YWwg PSBTUF9JTl9CUENfOEJJVDsKKwkJaWYgKHNwLmZyYW1lLmF2aS5jb2xvcnNwYWNlID09IEhETUlf Q09MT1JTUEFDRV9ZVVY0MjIpCisJCQl2aWRfYml0ID0gNTsKKwkJZWxzZQorCQkJdmlkX2JpdCA9 IDE7CisJCWJyZWFrOworCWNhc2UgU1BfQ09MT1JfREVQVEhfTU9ERV8zMEJJVDoKKwkJdmFsID0g U1BfSU5fQlBDXzEwQklUOworCQlpZiAoc3AuZnJhbWUuYXZpLmNvbG9yc3BhY2UgPT0gSERNSV9D T0xPUlNQQUNFX1lVVjQyMikKKwkJCXZpZF9iaXQgPSA2OworCQllbHNlCisJCQl2aWRfYml0ID0g MjsKKwkJLyoKKwkJICogRm9yIDEwYml0IHZpZGVvIG11c3QgYmUgc2V0IHRoaXMgdmFsdWUgdG8g MTJiaXQgYnkKKwkJICogc29tZW9uZQorCQkgKi8KKwkJaWYgKHNwLmRvd25fc2FtcGxlX2VuKQor CQkJdmlkX2JpdCA9IDM7CisJCWJyZWFrOworCWNhc2UgU1BfQ09MT1JfREVQVEhfTU9ERV8zNkJJ VDoKKwkJdmFsID0gU1BfSU5fQlBDXzEyQklUOworCQlpZiAoc3AuZnJhbWUuYXZpLmNvbG9yc3Bh Y2UgPT0gSERNSV9DT0xPUlNQQUNFX1lVVjQyMikKKwkJCXZpZF9iaXQgPSA2OworCQllbHNlCisJ CQl2aWRfYml0ID0gMzsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBGb3IgZG93biBzYW1wbGUg dmlkZW8gKDEyYml0LCAxMGJpdCAtLS0+IDhiaXQpLAorCSAqIHRoaXMgcmVnaXN0ZXIgZG9lc24n dCBjaGFuZ2UKKwkgKi8KKwlpZiAoIXNwLmRvd25fc2FtcGxlX2VuKQorCQlzcF9yZWdfdXBkYXRl X2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX1ZJRF9DVFJMMl9SRUcsCisJCQkJICAgU1BfSU5fQlBD X01BU0sgfCBTUF9JTl9DT0xPUl9GX01BU0ssCisJCQkJICAgKHZhbCA8PCBTUF9JTl9CUENfU0hJ RlQpIHwKKwkJCQkgICBzcC5mcmFtZS5hdmkuY29sb3JzcGFjZSk7CisKKwlzcF9yZWdfd3JpdGUo YW54Nzh4eCwgVFhfUDIsIFNQX0JJVF9DVFJMX1NQRUNJRklDX1JFRywKKwkJICAgICBTUF9FTkFC TEVfQklUX0NUUkwgfCB2aWRfYml0IDw8IFNQX0JJVF9DVFJMX1NFTEVDVF9TSElGVCk7CisKKwlp ZiAoc3AudHhfdGVzdF9lZGlkKSB7CisJCS8qIFNldCBjb2xvciBkZXB0aCB0byA2IGJwYyAoMTgg YnBwKSBmb3IgbGluayBjdHMgKi8KKwkJc3BfcmVnX3VwZGF0ZV9iaXRzKGFueDc4eHgsIFRYX1Ay LCBTUF9WSURfQ1RSTDJfUkVHLAorCQkJCSAgIFNQX0lOX0JQQ19NQVNLLCBTUF9JTl9CUENfNkJJ VCk7CisJCXNwLnR4X3Rlc3RfZWRpZCA9IGZhbHNlOworCQlkZXZfZGJnKGRldiwgImNvbG9yIHNw YWNlIGlzIHNldCB0byA2IGJwYyAoMTggYnBwKVxuIik7CisJfQorCisJaWYgKHNwLmZyYW1lLmF2 aS5jb2xvcnNwYWNlKSB7CisJCS8qCisJCSAqIFNldCB2aWRlbyB2YWx1ZXMgdG8gZGVmYXVsdCBv ZiBjaGFubmVsIDAsIDEgYW5kIDIgZm9yIEhEQ1AKKwkJICogZW1iZWRkZWQgImJsdWUgc2NyZWVu IiB3aGVuIEhEQ1AgYXV0aGVudGljYXRpb24gZmFpbGVkLgorCQkgKi8KKwkJc3BfcmVnX3dyaXRl KGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX1ZJRDBfQkxVRV9TQ1JFRU5fUkVHLAorCQkJICAgICAw eDgwKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX1ZJRDFfQkxVRV9T Q1JFRU5fUkVHLAorCQkJICAgICAweDAwKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1Aw LCBTUF9IRENQX1ZJRDJfQkxVRV9TQ1JFRU5fUkVHLAorCQkJICAgICAweDgwKTsKKwl9IGVsc2Ug eworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfVklEMF9CTFVFX1NDUkVF Tl9SRUcsCisJCQkgICAgIDB4MDApOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQ X0hEQ1BfVklEMF9CTFVFX1NDUkVFTl9SRUcsCisJCQkgICAgIDB4MDApOworCQlzcF9yZWdfd3Jp dGUoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfVklEMF9CTFVFX1NDUkVFTl9SRUcsCisJCQkgICAg IDB4MDApOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3BfcGNsa19jYWxjKHN0cnVj dCBhbng3OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4LT5j bGllbnQtPmRldjsKKwl1bnNpZ25lZCBsb25nIHN0cl9wbGNrOworCXUxNiB2aWRfY291bnRlcjsK Kwl1OCB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMCwgU1BfUENMS19ISUdIUkVT X0NOVF9CQVNFICsgMiwgJnZhbCk7CisJdmlkX2NvdW50ZXIgPSB2YWwgPDwgODsKKwlzcF9yZWdf cmVhZChhbng3OHh4LCBSWF9QMCwgU1BfUENMS19ISUdIUkVTX0NOVF9CQVNFICsgMSwgJnZhbCk7 CisJdmlkX2NvdW50ZXIgfD0gdmFsOworCXN0cl9wbGNrID0gKHZpZF9jb3VudGVyICogWFRBTF9D TEspID4+IDEyOworCWRldl9kYmcoZGV2LCAicGl4ZWwgY2xvY2sgaXMgJWxkLiVsZFxuIiwgc3Ry X3BsY2sgLyAxMCwgc3RyX3BsY2sgJSAxMCk7CisJcmV0dXJuIHN0cl9wbGNrOworfQorCitzdGF0 aWMgaW50IHNwX3R4X2J3X2xjX3NlbChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJdW5zaWduZWQgbG9uZyBw aXhlbF9jbGs7CisJdTggbGluaywgdmFsOworCisJcGl4ZWxfY2xrID0gc3BfcGNsa19jYWxjKGFu eDc4eHgpOworCisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDAsIFNQX1ZJREVPX1NUQVRVU19S RUcsICZ2YWwpOworCXN3aXRjaCAoKHZhbCAmIFNQX0NPTE9SX0RFUFRIX01BU0spID4+IFNQX0NP TE9SX0RFUFRIX1NISUZUKSB7CisJY2FzZSBTUF9DT0xPUl9ERVBUSF9NT0RFX0xFR0FDWToKKwlj YXNlIFNQX0NPTE9SX0RFUFRIX01PREVfMjRCSVQ6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJY2Fz ZSBTUF9DT0xPUl9ERVBUSF9NT0RFXzMwQklUOgorCQlwaXhlbF9jbGsgPSAocGl4ZWxfY2xrICog NSkgPj4gMjsKKwkJYnJlYWs7CisJY2FzZSBTUF9DT0xPUl9ERVBUSF9NT0RFXzM2QklUOgorCQlw aXhlbF9jbGsgPSAocGl4ZWxfY2xrICogMykgPj4gMTsKKwkJYnJlYWs7CisJfQorCisJc3AuZG93 bl9zYW1wbGVfZW4gPSBmYWxzZTsKKwlpZiAocGl4ZWxfY2xrIDw9IDUzMCkgeworCQlsaW5rID0g RFBfTElOS19CV18xXzYyOworCX0gZWxzZSBpZiAocGl4ZWxfY2xrIDw9IDg5MCkgeworCQlsaW5r ID0gRFBfTElOS19CV18yXzc7CisJfSBlbHNlIGlmIChwaXhlbF9jbGsgPD0gMTgwMCkgeworCQls aW5rID0gRFBfTElOS19CV181XzQ7CisJfSBlbHNlIHsKKwkJbGluayA9IERQX0xJTktfQldfNl83 NTsKKwkJaWYgKHBpeGVsX2NsayA+IDIyNDApCisJCQlzcC5kb3duX3NhbXBsZV9lbiA9IHRydWU7 CisJfQorCisJaWYgKHNwX2dldF9saW5rX2JhbmR3aWR0aChhbng3OHh4KSAhPSBsaW5rKSB7CisJ CXNwLmNoYW5nZWRfYmFuZHdpZHRoID0gbGluazsKKwkJZGV2X2VycihkZXYsCisJCQkiZGlmZmVy ZW50IGJhbmR3aWR0aCBiZXR3ZWVuIHNpbmsgYW5kIHZpZGVvICUuMngiLAorCQkJbGluayk7CisJ CXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNwX2Rvd25zcHJl YWRpbmdfZW5hYmxlKHN0cnVjdCBhbng3OHh4ICphbng3OHh4LCBib29sIGVuYWJsZSkKK3sKKwl1 OCB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfRFBfRE9XTlNQUkVBRElO R19DVFJMMV9SRUcsICZ2YWwpOworCisJaWYgKGVuYWJsZSkgeworCQl2YWwgfD0gU1BfVFhfU1ND X0RPV05TUFJFQURJTkc7CisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfRE9X TlNQUkVBRElOR19DVFJMMV9SRUcsCisJCQkgICAgIHZhbCk7CisKKwkJc3BfZHBfcmVhZF9ieXRl c19mcm9tX2RwY2QoYW54Nzh4eCwgRFBfRE9XTlNQUkVBRF9DVFJMLCAxLAorCQkJCQkgICAmdmFs KTsKKwkJdmFsIHw9IERQX1NQUkVBRF9BTVBfMF81OworCQlzcF9kcF93cml0ZV9ieXRlc190b19k cGNkKGFueDc4eHgsIERQX0RPV05TUFJFQURfQ1RSTCwgMSwgJnZhbCk7CisJfSBlbHNlIHsKKwkJ dmFsICY9IH5TUF9UWF9TU0NfRElTQUJMRTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1Aw LCBTUF9EUF9ET1dOU1BSRUFESU5HX0NUUkwxX1JFRywKKwkJCSAgICAgdmFsKTsKKworCQlzcF9k cF9yZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3OHh4LCBEUF9ET1dOU1BSRUFEX0NUUkwsIDEsCisJ CQkJCSAgICZ2YWwpOworCQl2YWwgJj0gfkRQX1NQUkVBRF9BTVBfMF81OworCQlzcF9kcF93cml0 ZV9ieXRlc190b19kcGNkKGFueDc4eHgsIERQX0RPV05TUFJFQURfQ1RSTCwgMSwgJnZhbCk7CisJ fQorfQorCitzdGF0aWMgdm9pZCBzcF9jb25maWdfc3NjKHN0cnVjdCBhbng3OHh4ICphbng3OHh4 LCBlbnVtIHNwX3NzY19kZXAgc3NjZGVwKQoreworCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9Q MCwgU1BfRFBfRE9XTlNQUkVBRElOR19DVFJMMV9SRUcsIDB4MCk7CisJc3BfcmVnX3dyaXRlKGFu eDc4eHgsIFRYX1AwLCBTUF9EUF9ET1dOU1BSRUFESU5HX0NUUkwxX1JFRywgc3NjZGVwKTsKKwlz cF9kb3duc3ByZWFkaW5nX2VuYWJsZShhbng3OHh4LCB0cnVlKTsKK30KKwordm9pZCBzcF9kcF9l bmFibGVfZW5oYW5jZWRfbW9kZShzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwgYm9vbCBlbmFibGUp Cit7CisJaWYgKGVuYWJsZSkKKwkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9E UF9TWVNURU1fQ1RSTF9CQVNFICsgNCwKKwkJCQlTUF9FTkhBTkNFRF9NT0RFKTsKKwllbHNlCisJ CXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9TWVNURU1fQ1RSTF9CQVNF ICsgNCwKKwkJCQkgIFNQX0VOSEFOQ0VEX01PREUpOworfQorCitzdGF0aWMgdm9pZCBzcF9kcF9l bmFibGVfcnhfdG9fZW5oYW5jZWRfbW9kZShzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwKKwkJCQkJ ICAgICBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xp ZW50LT5kZXY7CisJdTggdmFsOworCisJaWYgKGVuYWJsZSkgeworCQlzcF9kcF9yZWFkX2J5dGVz X2Zyb21fZHBjZChhbng3OHh4LCBEUF9MQU5FX0NPVU5UX1NFVCwgMSwgJnZhbCk7CisJCXZhbCB8 PSBEUF9FTkhBTkNFRF9GUkFNRV9DQVA7CisJCXNwX2RwX3dyaXRlX2J5dGVzX3RvX2RwY2QoYW54 Nzh4eCwgRFBfTEFORV9DT1VOVF9TRVQsIDEsICZ2YWwpOworCQlkZXZfZGJnKGRldiwgInJ4IHRv IGVuaGFuY2VkIG1vZGUgZW5hYmxlZFxuIik7CisJfSBlbHNlIHsKKwkJc3BfZHBfcmVhZF9ieXRl c19mcm9tX2RwY2QoYW54Nzh4eCwgRFBfTEFORV9DT1VOVF9TRVQsIDEsICZ2YWwpOworCQl2YWwg Jj0gfkRQX0VOSEFOQ0VEX0ZSQU1FX0NBUDsKKwkJc3BfZHBfd3JpdGVfYnl0ZXNfdG9fZHBjZChh bng3OHh4LCBEUF9MQU5FX0NPVU5UX1NFVCwgMSwgJnZhbCk7CisJCWRldl9kYmcoZGV2LCAicngg dG8gZW5oYW5jZWQgbW9kZSBkaXNhYmxlZFxuIik7CisJfQorfQorCitzdGF0aWMgYm9vbCBzcF9k cF9pc19lbmhhbmNlZF9tb2RlX2F2YWlsYWJsZShzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sK Kwl1OCB2YWw7CisKKwlzcF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3OHh4LCBEUF9NQVhf TEFORV9DT1VOVCwgMSwgJnZhbCk7CisKKwlyZXR1cm4gdmFsICYgRFBfRU5IQU5DRURfRlJBTUVf Q0FQOworfQorCitzdGF0aWMgdm9pZCBzcF9kcF9zZXRfZW5oYW5jZWRfbW9kZShzdHJ1Y3QgYW54 Nzh4eCAqYW54Nzh4eCkKK3sKKwl1OCB2YWw7CisKKwl2YWwgPSBzcF9kcF9pc19lbmhhbmNlZF9t b2RlX2F2YWlsYWJsZShhbng3OHh4KTsKKwlzcF9kcF9lbmFibGVfcnhfdG9fZW5oYW5jZWRfbW9k ZShhbng3OHh4LCB2YWwpOworCXNwX2RwX2VuYWJsZV9lbmhhbmNlZF9tb2RlKGFueDc4eHgsIHZh bCk7Cit9CisKK3N0YXRpYyB1MTYgc3BfbGlua19lcnJfY2hlY2soc3RydWN0IGFueDc4eHggKmFu eDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2Owor CXUxNiBlcnI7CisJdTggYnVmWzJdOworCisJc3BfZHBfcmVhZF9ieXRlc19mcm9tX2RwY2QoYW54 Nzh4eCwgRFBfU1lNQk9MX0VSUk9SX0NPVU5UX0xBTkUwLCAyLAorCQkJCSAgIGJ1Zik7CisJdXNs ZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKKwlzcF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3 OHh4LCBEUF9TWU1CT0xfRVJST1JfQ09VTlRfTEFORTAsIDIsCisJCQkJICAgYnVmKTsKKworCWlm IChidWZbMV0gJiBEUF9FUlJPUl9DT1VOVF9WQUxJRCkgeworCQllcnIgPSAoKGJ1ZlsxXSAmIERQ X0VSUk9SX0NPVU5UX0JJVFNfMTRfOF9NQVNLKSA8PCA4KSArIGJ1ZlswXTsKKwkJZGV2X2Vycihk ZXYsICJlcnJvciBvZiBMYW5lICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgYm9vbCBzcF9sdF9maW5pc2goc3RydWN0IGFueDc4eHggKmFu eDc4eHgpCit7CisJdTggdmFsOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4LT5jbGll bnQtPmRldjsKKworCXNwX2RwX3JlYWRfYnl0ZXNfZnJvbV9kcGNkKGFueDc4eHgsIERQX0xBTkUw XzFfU1RBVFVTLCAxLCAmdmFsKTsKKworCXZhbCAmPSBEUF9MQU5FX0NSX0RPTkUgfCBEUF9MQU5F X0NIQU5ORUxfRVFfRE9ORSB8CisJICAgICAgIERQX0xBTkVfU1lNQk9MX0xPQ0tFRDsKKwlpZiAo dmFsICE9IChEUF9MQU5FX0NSX0RPTkUgfCBEUF9MQU5FX0NIQU5ORUxfRVFfRE9ORSB8CisJICAg IERQX0xBTkVfU1lNQk9MX0xPQ0tFRCkpIHsKKwkJZGV2X2RiZyhkZXYsICJMYW5lMCBzdGF0dXMg ZXJyb3IgJS4yeFxuIiwgdmFsKTsKKwkJc3AudHhfbHRfc3RhdGUgPSBMVF9FUlJPUjsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKworCS8qCisJICogSWYgdGhlcmUgaXMgbGluayBlcnJvciwgYWRqdXN0 IHByZS1lbXBoYXNpcyB0byBjaGVjayBlcnJvcgorCSAqIGFnYWluLiBJZiB0aGVyZSBpcyBubyBl cnJvciwga2VlcCB0aGUgc2V0dGluZywgb3RoZXJ3aXNlCisJICogdXNlIDQwMG12MGRiCisJICov CisJaWYgKHNwLnR4X3Rlc3RfbHQpIHsKKwkJc3AudHhfdGVzdF9sdCA9IGZhbHNlOworCQlzcC50 eF9sdF9zdGF0ZSA9IExUX0lOSVQ7CisJCXJldHVybiB0cnVlOworCX0KKworCWlmIChzcF9saW5r X2Vycl9jaGVjayhhbng3OHh4KSkgeworCQlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1Bf RFBfTEFORTBfTFRfQ1RSTF9SRUcsICZ2YWwpOworCQlpZiAoISh2YWwgJiBTUF9NQVhfUFJFX1JF QUNIKSkgeworCQkJLyogSW5jcmVhc2Ugb25lIHByZS1sZXZlbCAqLworCQkJc3BfcmVnX3dyaXRl KGFueDc4eHgsIFRYX1AwLCBTUF9EUF9MQU5FMF9MVF9DVFJMX1JFRywKKwkJCQkgICAgIHZhbCAr IDB4MDgpOworCQkJLyoKKwkJCSAqIElmIGVycm9yIHN0aWxsIGV4aXN0cywgcmV0dXJuIHRvIHRo ZSBsaW5rIHRyYWluaW5nCisJCQkgKiB2YWx1ZQorCQkJICovCisJCQlpZiAoc3BfbGlua19lcnJf Y2hlY2soYW54Nzh4eCkpCisJCQkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLAorCQkJCQkg ICAgIFNQX0RQX0xBTkUwX0xUX0NUUkxfUkVHLCB2YWwpOworCQl9CisJfQorCisJdmFsID0gc3Bf Z2V0X2xpbmtfYmFuZHdpZHRoKGFueDc4eHgpOworCWlmICh2YWwgIT0gc3AuY2hhbmdlZF9iYW5k d2lkdGgpIHsKKwkJZGV2X2RiZyhkZXYsICJiYW5kd2lkdGggY2hhbmdlZCwgY3VyOiUuMngsIHBl cjolLjJ4XG4iLCB2YWwsCisJCQlzcC5jaGFuZ2VkX2JhbmR3aWR0aCk7CisJCXNwLnR4X2x0X3N0 YXRlID0gTFRfRVJST1I7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlkZXZfZGJnKGRldiwgIkxU IHN1Y2NlZWQsIGJhbmR3aWR0aDogJS4yeCIsIHZhbCk7CisJc3BfcmVnX3JlYWQoYW54Nzh4eCwg VFhfUDAsIFNQX0RQX0xBTkUwX0xUX0NUUkxfUkVHLCAmdmFsKTsKKwlkZXZfZGJnKGRldiwgIkxh bmUwIHNldCB0byAlLjJ4XG4iLCB2YWwpOworCXNwLnR4X2x0X3N0YXRlID0gTFRfSU5JVDsKKwor CWlmIChzcF9oZGNwX3JlcGVhdGVyX21vZGUoYW54Nzh4eCkpIHsKKwkJZGV2X2RiZyhkZXYsICJI UEQgc2V0IHRvIDEhXG4iKTsKKwkJc3BfaGRtaV9zZXRfaHBkKGFueDc4eHgsIHRydWUpOworCQlz cF9oZG1pX3NldF90ZXJtaW5hdGlvbihhbng3OHh4LCB0cnVlKTsKKwl9CisKKwkvKgorCSAqIFVu ZGVyIGxvdyB2b2x0YWdlIChEVkQxMCA9IDAuOTdWKSwgc29tZSBjaGlwcyBjYW5ub3Qgb3V0cHV0 IHZpZGVvLAorCSAqIGxpbmsgZG93biBpbnRlcnJ1cHQgYWx3YXlzIGhhcHBlbnMuCisJICovCisJ aWYgKHNwX2xpbmtfZXJyX2NoZWNrKGFueDc4eHgpID4gMjAwKSB7CisJCWRldl9kYmcoZGV2LCAi bmVlZCB0byByZXNldCBTZXJkZXMgRklGTyIpOworCQlzcC50eF9sdF9zdGF0ZSA9IExUX0VSUk9S OworCX0gZWxzZSB7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwor c3RhdGljIGJvb2wgc3BfbGlua190cmFpbmluZyhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJdTggdmFsLCB2 ZXJzaW9uOworCisJc3dpdGNoIChzcC50eF9sdF9zdGF0ZSkgeworCWNhc2UgTFRfSU5JVDoKKwkJ c3BfYmxvY2tfcG93ZXJfY3RybChhbng3OHh4LCBTUF9UWF9QV1JfVklERU8sIDEpOworCQlzcF92 aWRlb19tdXRlKGFueDc4eHgsIHRydWUpOworCQlzcF9lbmFibGVfdmlkZW9faW5wdXQoYW54Nzh4 eCwgZmFsc2UpOworCQlzcC50eF9sdF9zdGF0ZSA9IExUX1dBSVRfUExMX0xPQ0s7CisJLyogZmFs bHRocm91Z2ggKi8KKwljYXNlIExUX1dBSVRfUExMX0xPQ0s6CisJCWlmICghc3BfZ2V0X3BsbF9s b2NrX3N0YXR1cyhhbng3OHh4KSkgeworCQkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQ X0RQX1BMTF9DVFJMX1JFRywKKwkJCQkgICAgJnZhbCk7CisKKwkJCXZhbCB8PSBTUF9QTExfUlNU OworCQkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9QTExfQ1RSTF9SRUcsCisJ CQkJICAgICB2YWwpOworCisJCQl2YWwgJj0gflNQX1BMTF9SU1Q7CisJCQlzcF9yZWdfd3JpdGUo YW54Nzh4eCwgVFhfUDAsIFNQX0RQX1BMTF9DVFJMX1JFRywKKwkJCQkgICAgIHZhbCk7CisKKwkJ CWRldl9kYmcoZGV2LCAiUExMIG5vdCBsb2NrIVxuIik7CisJCQlicmVhazsKKwkJfSBlbHNlIHsK KwkJCXNwLnR4X2x0X3N0YXRlID0gTFRfQ0hFQ0tfTElOS19CVzsKKwkJfQorCS8qIGZhbGx0aHJv dWdoICovCisJY2FzZSBMVF9DSEVDS19MSU5LX0JXOgorCQl2YWwgPSBzcF9kcF9nZXRfbWF4X3J4 X2JhbmR3aWR0aChhbng3OHh4KTsKKwkJaWYgKHZhbCA8IHNwLmNoYW5nZWRfYmFuZHdpZHRoKSB7 CisJCQlkZXZfZGJnKGRldiwgIm92ZXIgYmFuZHdpZHRoIVxuIik7CisJCQlzcC5jaGFuZ2VkX2Jh bmR3aWR0aCA9IHZhbDsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJc3AudHhfbHRfc3RhdGUg PSBMVF9TVEFSVDsKKwkJfQorCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBMVF9TVEFSVDoKKwkJ aWYgKHNwLnR4X3Rlc3RfbHQpIHsKKwkJCXNwLmNoYW5nZWRfYmFuZHdpZHRoID0gc3AudHhfdGVz dF9idzsKKwkJCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RSTDJf UkVHLAorCQkJCQkgIDB4NzApOworCQl9IGVsc2UgeworCQkJc3BfcmVnX3dyaXRlKGFueDc4eHgs IFRYX1AwLCBTUF9EUF9MQU5FMF9MVF9DVFJMX1JFRywKKwkJCQkgICAgIDB4MDApOworCQl9CisK KwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0FOQUxPR19QT1dFUl9E T1dOX1JFRywKKwkJCQkgIFNQX0NIMF9QRCk7CisKKwkJc3BfY29uZmlnX3NzYyhhbng3OHh4LCBT U0NfREVQXzQwMDBQUE0pOworCQlzcF9zZXRfbGlua19iYW5kd2lkdGgoYW54Nzh4eCwgc3AuY2hh bmdlZF9iYW5kd2lkdGgpOworCQlzcF9kcF9zZXRfZW5oYW5jZWRfbW9kZShhbng3OHh4KTsKKwor CQlzcF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3OHh4LCBEUF9EUENEX1JFViwgMSwgJnZl cnNpb24pOworCQlzcF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3OHh4LCBEUF9TRVRfUE9X RVIsIDEsICZ2YWwpOworCQlpZiAodmVyc2lvbiA+PSAweDEyKQorCQkJdmFsICY9IH5EUF9TRVRf UE9XRVJfMTJfTUFTSzsKKwkJZWxzZQorCQkJdmFsICY9IH5EUF9TRVRfUE9XRVJfTUFTSzsKKwkJ dmFsIHw9IERQX1NFVF9QT1dFUl9EMDsKKwkJc3BfZHBfd3JpdGVfYnl0ZXNfdG9fZHBjZChhbng3 OHh4LCBEUF9TRVRfUE9XRVIsIDEsICZ2YWwpOworCisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBU WF9QMCwgU1BfRFBfTFRfQ1RSTF9SRUcsIFNQX0xUX0VOKTsKKwkJc3AudHhfbHRfc3RhdGUgPSBM VF9XQUlUSU5HX0ZJTklTSDsKKwkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgTFRfV0FJVElOR19G SU5JU0g6CisJCS8qIFdhaXRpbmcgaW50ZXJydXB0IHRvIGNoYW5nZSB0cmFpbmluZyBzdGF0ZS4g Ki8KKwkJYnJlYWs7CisJY2FzZSBMVF9FUlJPUjoKKwkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgs IFRYX1AyLCBTUF9SRVNFVF9DVFJMMl9SRUcsCisJCQkJU1BfU0VSREVTX0ZJRk9fUlNUKTsKKwkJ bXNsZWVwKDIwKTsKKwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX1JFU0VU X0NUUkwyX1JFRywKKwkJCQkgIFNQX1NFUkRFU19GSUZPX1JTVCk7CisJCWRldl9lcnIoZGV2LCAi TFQgRVJST1IgcmVzZXQgU0VSREVTIEZJRk8iKTsKKwkJc3AudHhfbHRfc3RhdGUgPSBMVF9JTklU OworCQlicmVhazsKKwljYXNlIExUX0ZJTklTSDoKKwkJaWYgKHNwX2x0X2ZpbmlzaChhbng3OHh4 KSkKKwkJCXJldHVybiB0cnVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisK KwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHNwX21hdGNoX3ZpY19mb3JfYnQ3MDko dTggdmljKQoreworCS8qIFZpZGVvIElkZW50aWZpY2F0aW9uIENvZGUgKFZJQykgZm9yIEJUNzA5 ICovCisJcmV0dXJuICgodmljID09IDB4MDQpIHx8ICh2aWMgPT0gMHgwNSkgfHwgKHZpYyA9PSAw eDEwKSB8fAorCQkodmljID09IDB4MTMpIHx8ICh2aWMgPT0gMHgxNCkgfHwgKHZpYyA9PSAweDFm KSB8fAorCQkodmljID09IDB4MjApIHx8ICh2aWMgPT0gMHgyMSkgfHwgKHZpYyA9PSAweDIyKSB8 fAorCQkodmljID09IDB4MjcpIHx8ICh2aWMgPT0gMHgyOCkgfHwgKHZpYyA9PSAweDI5KSB8fAor CQkodmljID09IDB4MmUpIHx8ICh2aWMgPT0gMHgyZikgfHwgKHZpYyA9PSAweDNjKSB8fAorCQko dmljID09IDB4M2QpIHx8ICh2aWMgPT0gMHgzZSkgfHwgKHZpYyA9PSAweDNmKSB8fAorCQkodmlj ID09IDB4NDApKTsKK30KKworc3RhdGljIHZvaWQgc3Bfc2V0X2NvbG9yc3BhY2Uoc3RydWN0IGFu eDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVu dC0+ZGV2OworCXU4IGNvbG9yc3BhY2UsIHZhbDsKKworCWlmIChzcC5kb3duX3NhbXBsZV9lbikg eworCQlpZiAoc3AuZnJhbWUuYXZpLmNvbG9yc3BhY2UgPT0gSERNSV9DT0xPUlNQQUNFX1lVVjQy MikgeworCQkJZGV2X2RiZyhkZXYsICJZQ2JDcjQ6MjoyIC0tLT4gUEFTUyBUSFJPVUdILlxuIik7 CisJCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX1ZJRF9DVFJMNl9SRUcsIDB4MDAp OworCQkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RSTDVfUkVHLCAweDAw KTsKKwkJfSBlbHNlIGlmIChzcC5mcmFtZS5hdmkuY29sb3JzcGFjZSA9PSBIRE1JX0NPTE9SU1BB Q0VfWVVWNDQ0KSB7CisJCQlkZXZfZGJnKGRldiwgIllDYkNyNDo0OjQgLS0tPiBZQ2JDcjQ6Mjoy XG4iKTsKKwkJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkw2X1JFRywK KwkJCQkgICAgIFNQX1ZJREVPX1BST0NFU1NfRU4gfCBTUF9VUF9TQU1QTEUpOworCQkJc3BfcmVn X3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RSTDVfUkVHLCAweDAwKTsKKwkJfSBlbHNl IGlmIChzcC5mcmFtZS5hdmkuY29sb3JzcGFjZSA9PSBIRE1JX0NPTE9SU1BBQ0VfUkdCKSB7CisJ CQlkZXZfZGJnKGRldiwgIlJHQjQ6NDo0IC0tLT4gWUNiQ3I0OjI6MlxuIik7CisJCQlzcF9yZWdf d3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX1ZJRF9DVFJMNl9SRUcsCisJCQkJICAgICBTUF9WSURF T19QUk9DRVNTX0VOIHwgU1BfVVBfU0FNUExFKTsKKwkJCXNwX3JlZ193cml0ZShhbng3OHh4LCBU WF9QMiwgU1BfVklEX0NUUkw1X1JFRywKKwkJCQkgICAgIFNQX0NTQ19TVERfU0VMIHwgU1BfUkFO R0VfUjJZIHwKKwkJCQkgICAgIFNQX0NTUEFDRV9SMlkpOworCQl9CisJCXNwX3JlZ193cml0ZShh bng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkwyX1JFRywKKwkJCSAgICAgKFNQX0lOX0JQQ184QklU IDw8IFNQX0lOX0JQQ19TSElGVCkgfCBjb2xvcnNwYWNlKTsKKwl9IGVsc2UgeworCQlzcF9yZWdf cmVhZChhbng3OHh4LCBUWF9QMiwgU1BfVklEX0NUUkwyX1JFRywgJmNvbG9yc3BhY2UpOworCQlj b2xvcnNwYWNlICY9IFNQX0lOX0NPTE9SX0ZfTUFTSzsKKworCQkvKgorCQkgKiBUbyBjaGFuZ2Ug dGhlIENTQ19TVERfU0VMIGJpdCB3ZSBuZWVkIHRvIHNldAorCQkgKiBDU1BBQ0VfWTJSIGFuZCBD U1BBQ0VfIFIyWSwgb3RoZXJ3aXNlIGhhcyBubworCQkgKiBlZmZlY3Qgb3IgaXMgdW5kZXRlcm1p bmVkLgorCQkgKi8KKwkJaWYgKGNvbG9yc3BhY2UgPT0gSERNSV9DT0xPUlNQQUNFX1JHQikgewor CQkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX1ZJRF9DVFJMNV9SRUcsCisJ CQkJCSAgU1BfUkFOR0VfWTJSIHwgU1BfQ1NQQUNFX1kyUiB8CisJCQkJCSAgU1BfQ1NDX1NURF9T RUwpOworCQkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX1ZJRF9DVFJMNl9S RUcsCisJCQkJCSAgU1BfVklERU9fUFJPQ0VTU19FTiB8IFNQX1VQX1NBTVBMRSk7CisJCX0gZWxz ZSB7CisJCQkvKgorCQkJICogQ29sb3JpbWV0cmljIGZvcm1hdCBvZiBpbnB1dCB2aWRlbyBpcyBZ Q2JDcjQyMgorCQkJICogb3IgWUNiQ3I0NDQKKwkJCSAqLworCQkJc3BfcmVnX3NldF9iaXRzKGFu eDc4eHgsIFRYX1AyLCBTUF9WSURfQ1RSTDVfUkVHLAorCQkJCQlTUF9SQU5HRV9ZMlIgfCBTUF9D U1BBQ0VfWTJSKTsKKworCQkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDEsCisJCQkJICAgIFNQ X0FWSV9JTkZPRlJBTUVfREFUQV9CQVNFICsgMywKKwkJCQkgICAgJnZhbCk7CisKKwkJCWlmIChz cF9tYXRjaF92aWNfZm9yX2J0NzA5KHZhbCkpCisJCQkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgs IFRYX1AyLAorCQkJCQkJU1BfVklEX0NUUkw1X1JFRywKKwkJCQkJCVNQX0NTQ19TVERfU0VMKTsK KwkJCWVsc2UJLyogQ29udmVydCBiYXNlZCBvbiBCVDYwMSAqLworCQkJCXNwX3JlZ19jbGVhcl9i aXRzKGFueDc4eHgsIFRYX1AyLAorCQkJCQkJICBTUF9WSURfQ1RSTDVfUkVHLAorCQkJCQkJICBT UF9DU0NfU1REX1NFTCk7CisJCQkvKgorCQkJICogRW5hYmxlIDQ6MjoyIHRvIDQ6NDo0IHVwIHNh bXBsZSB3aGVuIGlzIHJlcXVpcmVkCisJCQkgKiBhbmQgZW5hYmxlIHZpZGVvIHByb2Nlc3MgZnVu Y3Rpb24uCisJCQkgKi8KKwkJCWlmIChjb2xvcnNwYWNlID09IEhETUlfQ09MT1JTUEFDRV9ZVVY0 MjIpCisJCQkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AyLAorCQkJCQkJU1BfVklEX0NU Ukw2X1JFRywKKwkJCQkJCVNQX1ZJREVPX1BST0NFU1NfRU4gfAorCQkJCQkJU1BfVVBfU0FNUExF KTsKKwkJCWVsc2UJLyogWUNCQ1I0NDQgKi8KKwkJCQlzcF9yZWdfdXBkYXRlX2JpdHMoYW54Nzh4 eCwgVFhfUDIsCisJCQkJCQkgICBTUF9WSURfQ1RSTDZfUkVHLAorCQkJCQkJICAgU1BfVklERU9f UFJPQ0VTU19FTiB8CisJCQkJCQkgICBTUF9VUF9TQU1QTEUsCisJCQkJCQkgICBTUF9WSURFT19Q Uk9DRVNTX0VOKTsKKwkJfQorCX0KK30KKworc3RhdGljIHU4IHNwX2hkbWlfaW5mb2ZyYW1lX2No ZWNrc3VtKHU4ICpwdHIsIGludCBzaXplKQoreworCXU4IGNzdW0gPSAwOworCWludCBpOworCisJ LyogY29tcHV0ZSBjaGVja3N1bSAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCWNz dW0gKz0gcHRyW2ldOworCisJcmV0dXJuIDI1NiAtIGNzdW07Cit9CisKK3N0YXRpYyB2b2lkIHNw X2F1ZGlvX2luZm9mcmFtZV9pbml0KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCWludCBp OworCXU4IGJ1ZmZlcltIRE1JX0lORk9GUkFNRV9TSVpFKEFVRElPKV07CisJdTggKnB0ciA9IGJ1 ZmZlcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisKKwlw dHJbMF0gPSBIRE1JX0lORk9GUkFNRV9UWVBFX0FVRElPOworCXB0clsxXSA9IDE7CisJcHRyWzJd ID0gSERNSV9BVURJT19JTkZPRlJBTUVfU0laRTsKKworCS8qIHN0YXJ0IGluZm9mcmFtZSBwYXls bG9hZCAqLworCXB0ciArPSBIRE1JX0lORk9GUkFNRV9IRUFERVJfU0laRTsKKwlmb3IgKGkgPSAw OyBpIDwgSERNSV9BVURJT19JTkZPRlJBTUVfU0laRTsgaSsrKQorCQlzcF9yZWdfcmVhZChhbng3 OHh4LCBSWF9QMSwgU1BfQVVEX0lORk9GUkFNRV9EQVRBX0JBU0UgKyBpLAorCQkJICAgICZwdHJb aV0pOworCisJcHRyWzNdID0gMDsKKwlwdHJbM10gPSBzcF9oZG1pX2luZm9mcmFtZV9jaGVja3N1 bShidWZmZXIsCisJCQkJCSAgICBIRE1JX0lORk9GUkFNRV9TSVpFKEFVRElPKSk7CisKKwlpZiAo aGRtaV9pbmZvZnJhbWVfdW5wYWNrKCZzcC5mcmFtZSwgYnVmZmVyKSA8IDApIHsKKwkJZGV2X2Vy cihkZXYsICJ1bnBhY2sgb2YgQVVESU8gaW5mb2ZyYW1lIGZhaWxlZFxuIik7CisJCXJldHVybjsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwX2F2aV9pbmZvZnJhbWVfaW5pdChzdHJ1Y3QgYW54Nzh4 eCAqYW54Nzh4eCkKK3sKKwlpbnQgaTsKKwl1OCBidWZmZXJbSERNSV9JTkZPRlJBTUVfU0laRShB VkkpXTsKKwl1OCAqcHRyID0gYnVmZmVyOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4 LT5jbGllbnQtPmRldjsKKworCXB0clswXSA9IEhETUlfSU5GT0ZSQU1FX1RZUEVfQVZJOworCXB0 clsxXSA9IDI7CisJcHRyWzJdID0gSERNSV9BVklfSU5GT0ZSQU1FX1NJWkU7CisKKwkvKiBzdGFy dCBpbmZvZnJhbWUgcGF5bG9hZCAqLworCXB0ciArPSBIRE1JX0lORk9GUkFNRV9IRUFERVJfU0la RTsKKwlmb3IgKGkgPSAwOyBpIDwgSERNSV9BVklfSU5GT0ZSQU1FX1NJWkU7IGkrKykKKwkJc3Bf cmVnX3JlYWQoYW54Nzh4eCwgUlhfUDEsIFNQX0FWSV9JTkZPRlJBTUVfREFUQV9CQVNFICsgaSwK KwkJCSAgICAmcHRyW2ldKTsKKworCXB0clszXSA9IDA7CS8qIGNoZWNrc3VtICovCisJcHRyWzNd ID0gc3BfaGRtaV9pbmZvZnJhbWVfY2hlY2tzdW0oYnVmZmVyLCBIRE1JX0lORk9GUkFNRV9TSVpF KEFWSSkpOworCisJaWYgKGhkbWlfaW5mb2ZyYW1lX3VucGFjaygmc3AuZnJhbWUsIGJ1ZmZlcikg PCAwKSB7CisJCWRldl9lcnIoZGV2LCAidW5wYWNrIG9mIEFWSSBpbmZvZnJhbWUgZmFpbGVkXG4i KTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgc3BfbXBlZ19pbmZvZnJhbWVfaW5p dChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlpbnQgaTsKKwl1OCBidWZmZXJbSERNSV9J TkZPRlJBTUVfU0laRShNUEVHKV07CisJdTggKnB0ciA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisKKwlwdHJbMF0gPSBIRE1JX0lORk9GUkFN RV9UWVBFX01QRUc7CisJcHRyWzFdID0gMTsKKwlwdHJbMl0gPSBIRE1JX01QRUdfSU5GT0ZSQU1F X1NJWkU7CisKKwkvKiBzdGFydCBpbmZvZnJhbWUgcGF5bG9hZCAqLworCXB0ciArPSBIRE1JX0lO Rk9GUkFNRV9IRUFERVJfU0laRTsKKworCWZvciAoaSA9IDA7IGkgPCBIRE1JX01QRUdfSU5GT0ZS QU1FX1NJWkU7IGkrKykKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDEsIFNQX01QRUdfVlNf SU5GT0ZSQU1FX0RBVEFfQkFTRSArIGksCisJCQkgICAgJnB0cltpXSk7CisKKwlwdHJbM10gPSAw OwkvKiBjaGVja3N1bSAqLworCXB0clszXSA9IHNwX2hkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKGJ1 ZmZlciwgSERNSV9JTkZPRlJBTUVfU0laRShNUEVHKSk7CisKKwlpZiAoaGRtaV9pbmZvZnJhbWVf dW5wYWNrKCZzcC5mcmFtZSwgYnVmZmVyKSA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1bnBhY2sg b2YgTVBFRyBpbmZvZnJhbWUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGlj IHZvaWQgc3BfdnNpX2luZm9mcmFtZV9pbml0KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQorewor CWludCBpOworCXU4IGxlbiwgYnVmZmVyWzEwXTsKKwl1OCAqcHRyID0gYnVmZmVyOworCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZhbng3OHh4LT5jbGllbnQtPmRldjsKKworCXB0clswXSA9IEhETUlf SU5GT0ZSQU1FX1RZUEVfTVBFRzsKKwlwdHJbMV0gPSAxOworCisJLyogZ2V0IGluZm9mcmFtZSBs ZW5ndGggKi8KKwlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMSwgU1BfTVBFR19WU19JTkZPRlJB TUVfTEVOX1JFRywKKwkJICAgICZsZW4pOworCWlmIChsZW4gPiAxMCkKKwkJcmV0dXJuOworCisJ cHRyWzJdID0gbGVuOworCisJLyogc3RhcnQgaW5mb2ZyYW1lIHBheWxvYWQgKi8KKwlwdHIgKz0g SERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKysp CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFJYX1AxLCBTUF9NUEVHX1ZTX0lORk9GUkFNRV9EQVRB X0JBU0UgKyBpLAorCQkJICAgICZwdHJbaV0pOworCisJcHRyWzNdID0gMDsJLyogY2hlY2tzdW0g Ki8KKwlwdHJbM10gPSBzcF9oZG1pX2luZm9mcmFtZV9jaGVja3N1bShidWZmZXIsCisJCQkJCSAg ICBIRE1JX0lORk9GUkFNRV9IRUFERVJfU0laRSArIGxlbik7CisKKwlpZiAoaGRtaV9pbmZvZnJh bWVfdW5wYWNrKCZzcC5mcmFtZSwgYnVmZmVyKSA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1bnBh Y2sgb2YgVlNJIGluZm9mcmFtZSBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0 aWMgdm9pZCBzcF9sb2FkX3BhY2tldChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwKKwkJCSAgIGVu dW0gaGRtaV9pbmZvZnJhbWVfdHlwZSB0eXBlKQoreworCWludCBpOworCXU4IGJ1ZmZlclszMl07 CisJdTggKnB0ciA9IGJ1ZmZlcjsKKworCW1lbXNldChidWZmZXIsIDAsIHNpemVvZigqYnVmZmVy KSk7CisJcHRyICs9IEhETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFOworCisJc3dpdGNoICh0eXBl KSB7CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX0FVRElPOgorCQlzcF9yZWdfd3JpdGUoYW54 Nzh4eCwgVFhfUDIsIFNQX0lORk9GUkFNRV9BVURfVFlQRV9SRUcsCisJCQkgICAgIHNwLmZyYW1l LmF1ZGlvLnR5cGUpOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX0lORk9GUkFN RV9BVURfVkVSX1JFRywKKwkJCSAgICAgc3AuZnJhbWUuYXVkaW8udmVyc2lvbik7CisJCXNwX3Jl Z193cml0ZShhbng3OHh4LCBUWF9QMiwgU1BfSU5GT0ZSQU1FX0FVRF9MRU5fUkVHLAorCQkJICAg ICBzcC5mcmFtZS5hdWRpby5sZW5ndGgpOworCQkvKiBwYWNrcyB0aGUgYXVkaW8gaW5mb3JtYXRp b24gaW50byBhIGJpbmFyeSBidWZmZXIgKi8KKwkJaGRtaV9hdWRpb19pbmZvZnJhbWVfcGFjaygm c3AuZnJhbWUuYXVkaW8sIGJ1ZmZlciwKKwkJCQkJICBIRE1JX0lORk9GUkFNRV9TSVpFKEFVRElP KSk7CisJCS8qIHN0YXJ0IGluZm9mcmFtZSBwYXlsb2FkICovCisJCWZvciAoaSA9IDA7IGkgPCBz cC5mcmFtZS5hdWRpby5sZW5ndGg7IGkrKykKKwkJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9Q MiwKKwkJCQkgICAgIFNQX0lORk9GUkFNRV9BVURfREIwX1JFRyArIGksIHB0cltpXSk7CisJCWJy ZWFrOworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVkk6CisJCXNwX3JlZ193cml0ZShhbng3 OHh4LCBUWF9QMiwgU1BfSU5GT0ZSQU1FX0FWSV9UWVBFX1JFRywKKwkJCSAgICAgc3AuZnJhbWUu YXZpLnR5cGUpOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX0lORk9GUkFNRV9B VklfVkVSX1JFRywKKwkJCSAgICAgc3AuZnJhbWUuYXZpLnZlcnNpb24pOworCQlzcF9yZWdfd3Jp dGUoYW54Nzh4eCwgVFhfUDIsIFNQX0lORk9GUkFNRV9BVklfTEVOX1JFRywKKwkJCSAgICAgc3Au ZnJhbWUuYXZpLmxlbmd0aCk7CisJCS8qIHBhY2tzIHRoZSBBVkkgaW5mb3JtYXRpb24gaW50byBh IGJpbmFyeSBidWZmZXIgKi8KKwkJaGRtaV9hdmlfaW5mb2ZyYW1lX3BhY2soJnNwLmZyYW1lLmF2 aSwgYnVmZmVyLAorCQkJCQlIRE1JX0lORk9GUkFNRV9TSVpFKEFWSSkpOworCQkvKiBzdGFydCBp bmZvZnJhbWUgcGF5bG9hZCAqLworCQlmb3IgKGkgPSAwOyBpIDwgc3AuZnJhbWUuYXZpLmxlbmd0 aDsgaSsrKQorCQkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLAorCQkJCSAgICAgU1BfSU5G T0ZSQU1FX0FWSV9EQjBfUkVHICsgaSwgcHRyW2ldKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0lO Rk9GUkFNRV9UWVBFX01QRUc6CisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMiwgU1BfSU5G T0ZSQU1FX01QRUdfVFlQRV9SRUcsCisJCQkgICAgIHNwLmZyYW1lLm1wZWcudHlwZSk7CisJCXNw X3JlZ193cml0ZShhbng3OHh4LCBUWF9QMiwgU1BfSU5GT0ZSQU1FX01QRUdfVkVSX1JFRywKKwkJ CSAgICAgc3AuZnJhbWUubXBlZy52ZXJzaW9uKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRY X1AyLCBTUF9JTkZPRlJBTUVfTVBFR19MRU5fUkVHLAorCQkJICAgICBzcC5mcmFtZS5tcGVnLmxl bmd0aCk7CisJCS8qIHBhY2tzIHRoZSBNUEVHIGluZm9ybWF0aW9uIGludG8gYSBiaW5hcnkgYnVm ZmVyICovCisJCWhkbWlfbXBlZ19pbmZvZnJhbWVfcGFjaygmc3AuZnJhbWUubXBlZywgYnVmZmVy LAorCQkJCQkgSERNSV9JTkZPRlJBTUVfU0laRShNUEVHKSk7CisJCS8qIHN0YXJ0IGluZm9mcmFt ZSBwYXlsb2FkICovCisJCWZvciAoaSA9IDA7IGkgPCBzcC5mcmFtZS5tcGVnLmxlbmd0aDsgaSsr KQorCQkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLAorCQkJCSAgICAgU1BfSU5GT0ZSQU1F X01QRUdfREIwX1JFRyArIGksIHB0cltpXSk7CisJCWJyZWFrOworCWNhc2UgSERNSV9JTkZPRlJB TUVfVFlQRV9WRU5ET1I6CisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMiwgU1BfSU5GT0ZS QU1FX01QRUdfVFlQRV9SRUcsCisJCQkgICAgIHNwLmZyYW1lLnZlbmRvci5oZG1pLnR5cGUpOwor CQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX0lORk9GUkFNRV9NUEVHX1ZFUl9SRUcs CisJCQkgICAgIHNwLmZyYW1lLnZlbmRvci5oZG1pLnZlcnNpb24pOworCQlzcF9yZWdfd3JpdGUo YW54Nzh4eCwgVFhfUDIsIFNQX0lORk9GUkFNRV9NUEVHX0xFTl9SRUcsCisJCQkgICAgIHNwLmZy YW1lLnZlbmRvci5oZG1pLmxlbmd0aCk7CisJCS8qIHBhY2sgdGhlIFZTSSBpbmZvcm1hdGlvbiBp bnRvIGEgYmluYXJ5IGJ1ZmZlciAqLworCQloZG1pX3ZlbmRvcl9pbmZvZnJhbWVfcGFjaygmc3Au ZnJhbWUudmVuZG9yLmhkbWksIGJ1ZmZlciwKKwkJCQkJICAgSERNSV9JTkZPRlJBTUVfSEVBREVS X1NJWkUgKworCQkJCQkgICBzcC5mcmFtZS52ZW5kb3IuaGRtaS5sZW5ndGgpOworCQlmb3IgKGkg PSAwOyBpIDwgc3AuZnJhbWUudmVuZG9yLmhkbWkubGVuZ3RoOyBpKyspCisJCQlzcF9yZWdfd3Jp dGUoYW54Nzh4eCwgVFhfUDIsCisJCQkJICAgICBTUF9JTkZPRlJBTUVfTVBFR19EQjBfUkVHICsg aSwgcHRyW2ldKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0 aWMgdm9pZCBzcF9jb25maWdfcGFja2V0cyhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCwKKwkJCSAg ICAgIGVudW0gaGRtaV9pbmZvZnJhbWVfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgewor CWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVURJTzoKKwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54 Nzh4eCwgVFhfUDAsIFNQX1BBQ0tFVF9TRU5EX0NUUkxfUkVHLAorCQkJCSAgU1BfQVVEX0lGX0VO KTsKKwkJc3BfbG9hZF9wYWNrZXQoYW54Nzh4eCwgSERNSV9JTkZPRlJBTUVfVFlQRV9BVURJTyk7 CisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfUEFDS0VUX1NFTkRfQ1RSTF9S RUcsCisJCQkJU1BfQVVEX0lGX1VQKTsKKwkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1Aw LCBTUF9QQUNLRVRfU0VORF9DVFJMX1JFRywKKwkJCQlTUF9BVURfSUZfRU4pOworCQlicmVhazsK KwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVZJOgorCQlzcF9yZWdfY2xlYXJfYml0cyhhbng3 OHh4LCBUWF9QMCwgU1BfUEFDS0VUX1NFTkRfQ1RSTF9SRUcsCisJCQkJICBTUF9BVklfSUZfRU4p OworCQlzcF9sb2FkX3BhY2tldChhbng3OHh4LCBIRE1JX0lORk9GUkFNRV9UWVBFX0FWSSk7CisJ CXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfUEFDS0VUX1NFTkRfQ1RSTF9SRUcs CisJCQkJU1BfQVZJX0lGX1VEKTsKKwkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AwLCBT UF9QQUNLRVRfU0VORF9DVFJMX1JFRywKKwkJCQlTUF9BVklfSUZfRU4pOworCQlicmVhazsKKwlj YXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfTVBFRzoKKwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4 eCwgVFhfUDAsIFNQX1BBQ0tFVF9TRU5EX0NUUkxfUkVHLAorCQkJCSAgU1BfTVBFR19JRl9FTik7 CisJCXNwX2xvYWRfcGFja2V0KGFueDc4eHgsIEhETUlfSU5GT0ZSQU1FX1RZUEVfTVBFRyk7CisJ CXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfUEFDS0VUX1NFTkRfQ1RSTF9SRUcs CisJCQkJU1BfTVBFR19JRl9VRCk7CisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwg U1BfUEFDS0VUX1NFTkRfQ1RSTF9SRUcsCisJCQkJU1BfTVBFR19JRl9FTik7CisJCWJyZWFrOwor CWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9WRU5ET1I6CisJCXNwX3JlZ19jbGVhcl9iaXRzKGFu eDc4eHgsIFRYX1AwLCBTUF9QQUNLRVRfU0VORF9DVFJMX1JFRywKKwkJCQkgIFNQX01QRUdfSUZf RU4pOworCQlzcF9sb2FkX3BhY2tldChhbng3OHh4LCBIRE1JX0lORk9GUkFNRV9UWVBFX1ZFTkRP Uik7CisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfUEFDS0VUX1NFTkRfQ1RS TF9SRUcsCisJCQkJU1BfTVBFR19JRl9VRCk7CisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBU WF9QMCwgU1BfUEFDS0VUX1NFTkRfQ1RSTF9SRUcsCisJCQkJU1BfTVBFR19JRl9FTik7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGJvb2wgc3BfY29uZmln X3ZpZGVvX291dHB1dChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJdTggdmFsOworCisJc3dpdGNoIChzcC50 eF92b19zdGF0ZSkgeworCWRlZmF1bHQ6CisJY2FzZSBWT19XQUlUX1ZJREVPX1NUQUJMRToKKwkJ c3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDAsIFNQX1NZU1RFTV9TVEFUVVNfUkVHLCAmdmFsKTsK KwkJaWYgKCh2YWwgJiBTUF9UTURTX0RFX0RFVCkgJiYgKHZhbCAmIFNQX1RNRFNfQ0xPQ0tfREVU KSkgeworCQkJaWYgKHNwX3R4X2J3X2xjX3NlbChhbng3OHh4KSkKKwkJCQlyZXR1cm4gZmFsc2U7 CisJCQlzcF9lbmFibGVfdmlkZW9faW5wdXQoYW54Nzh4eCwgZmFsc2UpOworCQkJc3BfaGRtaV9u ZXdfYXZpX2ludChhbng3OHh4KTsKKwkJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFJYX1AwLAorCQkJ CSAgICBTUF9QQUNLRVRfUkVDRUlWSU5HX1NUQVRVU19SRUcsICZ2YWwpOworCQkJaWYgKHZhbCAm IFNQX1ZTSV9SQ1ZEKQorCQkJCXNwX2hkbWlfbmV3X3ZzaV9pbnQoYW54Nzh4eCk7CisJCQlzcF9l bmFibGVfdmlkZW9faW5wdXQoYW54Nzh4eCwgdHJ1ZSk7CisJCQlzcC50eF92b19zdGF0ZSA9IFZP X1dBSVRfVFhfVklERU9fU1RBQkxFOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhkZXYsICJIRE1J IGlucHV0IHZpZGVvIG5vdCBzdGFibGUhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJLyogZmFsbHRo cm91Z2ggKi8KKwljYXNlIFZPX1dBSVRfVFhfVklERU9fU1RBQkxFOgorCQkvKgorCQkgKiBUaGUg ZmxhZyBpcyB3cml0ZSBjbGVhciBhbmQgY2FuIGJlIGxhdGNoZWQgZnJvbSBsYXN0CisJCSAqIHN0 YXR1cy4gU28gdGhlIGZpcnN0IHJlYWQgYW5kIHdyaXRlIGlzIHRvIGNsZWFyIHRoZQorCQkgKiBw cmV2aW91cyBzdGF0dXMuCisJCSAqLworCQlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1Bf RFBfU1lTVEVNX0NUUkxfQkFTRSArIDIsICZ2YWwpOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwg VFhfUDAsIFNQX0RQX1NZU1RFTV9DVFJMX0JBU0UgKyAyLCB2YWwpOworCisJCXNwX3JlZ19yZWFk KGFueDc4eHgsIFRYX1AwLCBTUF9EUF9TWVNURU1fQ1RSTF9CQVNFICsgMiwgJnZhbCk7CisJCWlm ICh2YWwgJiBTUF9DSEFfU1RBKSB7CisJCQlkZXZfZGJnKGRldiwgInN0cmVhbSBjbG9jayBub3Qg c3RhYmxlIVxuIik7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGUgZmxh ZyBpcyB3cml0ZSBjbGVhciBhbmQgY2FuIGJlIGxhdGNoZWQgZnJvbQorCQkJICogbGFzdCBzdGF0 dXMuIFNvIHRoZSBmaXJzdCByZWFkIGFuZCB3cml0ZSBpcyB0bworCQkJICogY2xlYXIgdGhlIHBy ZXZpb3VzIHN0YXR1cy4KKwkJCSAqLworCQkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsCisJ CQkJICAgIFNQX0RQX1NZU1RFTV9DVFJMX0JBU0UgKyAzLAorCQkJCSAgICAmdmFsKTsKKwkJCXNw X3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwKKwkJCQkgICAgIFNQX0RQX1NZU1RFTV9DVFJMX0JB U0UgKyAzLAorCQkJCSAgICAgdmFsKTsKKworCQkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAs CisJCQkJICAgIFNQX0RQX1NZU1RFTV9DVFJMX0JBU0UgKyAzLAorCQkJCSAgICAmdmFsKTsKKwkJ CWlmICh2YWwgJiBTUF9TVFJNX1ZBTElEKSB7CisJCQkJaWYgKHNwLnR4X3Rlc3RfbHQpCisJCQkJ CXNwLnR4X3Rlc3RfbHQgPSBmYWxzZTsKKwkJCQlzcC50eF92b19zdGF0ZSA9IFZPX0ZJTklTSDsK KwkJCX0gZWxzZSB7CisJCQkJZGV2X2VycihkZXYsICJ2aWRlbyBzdHJlYW0gbm90IHZhbGlkIVxu Iik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgVk9f RklOSVNIOgorCQlzcF9ibG9ja19wb3dlcl9jdHJsKGFueDc4eHgsIFNQX1RYX1BXUl9BVURJTywg ZmFsc2UpOworCQlzcF9oZG1pX211dGVfdmlkZW8oYW54Nzh4eCwgZmFsc2UpOworCQlzcF92aWRl b19tdXRlKGFueDc4eHgsIGZhbHNlKTsKKwkJc3Bfc2hvd19pbmZvcm1hdGlvbihhbng3OHh4KTsK KwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgc3BfaGRjcF9lbmNyeXB0aW9uX2Rpc2FibGUoc3RydWN0IGFueDc4eHggKmFueDc4eHgp Cit7CisJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfQ1RSTDBfUkVH LCBTUF9IRENQX0VOQ19FTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF9oZGNwX2VuY3J5 cHRpb25fZW5hYmxlKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXNwX3JlZ19zZXRfYml0 cyhhbng3OHh4LCBUWF9QMCwgU1BfSERDUF9DVFJMMF9SRUcsIFNQX0hEQ1BfRU5DX0VOKTsKK30K Kworc3RhdGljIHZvaWQgc3BfaHdfaGRjcF9lbmFibGUoc3RydWN0IGFueDc4eHggKmFueDc4eHgp Cit7CisJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfQ1RSTDBfUkVH LAorCQkJICBTUF9IRENQX0VOQ19FTiB8IFNQX0hBUkRfQVVUSF9FTik7CisJc3BfcmVnX3NldF9i aXRzKGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX0NUUkwwX1JFRywKKwkJCVNQX0hBUkRfQVVUSF9F TiB8IFNQX0JLU1ZfU1JNX1BBU1MgfAorCQkJU1BfS1NWTElTVF9WTEQgfCBTUF9IRENQX0VOQ19F Tik7CisKKwkvKgorCSAqIFNldCB0aGUgd2FpdCB0aW1pbmcgdmFsdWUgZm9yIFIwIGNoZWNraW5n IG9mIEhEQ1AgZmlyc3Qgc3RlcAorCSAqIGF1dGhlbnRpY2F0aW9uIGFmdGVyIHdyaXRlIEFLU1Yg dG8gcmVjZWl2ZXIuIERlZmF1bHQgdmFsdWUgaXMKKwkgKiAweDY0ICgxMDBtcykuCisJICovCisJ c3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX1dBSVRfUjBfVElNRV9SRUcsIDB4 YjApOworCisJLyoKKwkgKiBTZXQgdGhlIHdhaXQgdGltaW5nIHZhbHVlIGZvciByZXBlYXRlciBL U1ZGSUZPIHJlYWR5IGluIEhEQ1AgZmlyc3QKKwkgKiBzdGVwIGF1dGhlbnRpY2F0aW9uLiBEZWZh dWx0IHZhbHVlIGlzIDB4OWMgKDQuMnMpCisJICovCisJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRY X1AwLCBTUF9IRENQX1JQVFJfUkRZX1dBSVRfVElNRV9SRUcsIDB4YzgpOworfQorCitzdGF0aWMg Ym9vbCBzcF9oZGNwX3Byb2Nlc3Moc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCisJc3dpdGNoIChzcC5oZGNw X3N0YXRlKSB7CisJY2FzZSBIRENQX0NBUEFCTEVfQ0hFQ0s6CisJCXNwLmhkY3BfZmFpbF9jb3Vu dCA9IDA7CisJCWlmIChpc19hbnhfZG9uZ2xlKGFueDc4eHgpKQorCQkJc3AuaGRjcF9zdGF0ZSA9 IEhEQ1BfV0FJVElOR19WSURfU1RCOworCQllbHNlCisJCQlzcC5oZGNwX3N0YXRlID0gSERDUF9I V19FTkFCTEU7CisJCWlmICghc3AuaGRjcF9lbmFibGVkKQorCQkJc3AuaGRjcF9zdGF0ZSA9IEhE Q1BfTk9UX1NVUFBPUlRFRDsKKwkJaWYgKHNwLmhkY3Bfc3RhdGUgIT0gSERDUF9XQUlUSU5HX1ZJ RF9TVEIpCisJCQlicmVhazsKKwkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgSERDUF9XQUlUSU5H X1ZJRF9TVEI6CisJCW1zbGVlcCgxMDApOworCQlzcC5oZGNwX3N0YXRlID0gSERDUF9IV19FTkFC TEU7CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIEhEQ1BfSFdfRU5BQkxFOgorCQlzcF92aWRl b19tdXRlKGFueDc4eHgsIHRydWUpOworCQlzcF9jbGVhbl9oZGNwX3N0YXR1cyhhbng3OHh4KTsK KwkJc3BfYmxvY2tfcG93ZXJfY3RybChhbng3OHh4LCBTUF9UWF9QV1JfSERDUCwgZmFsc2UpOwor CQltc2xlZXAoMjApOworCQlzcF9ibG9ja19wb3dlcl9jdHJsKGFueDc4eHgsIFNQX1RYX1BXUl9I RENQLCB0cnVlKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9DT01NT05fSU5U X01BU0tfQkFTRSArIDIsCisJCQkgICAgIDB4MDEpOworCQltc2xlZXAoNTApOworCQlzcF9od19o ZGNwX2VuYWJsZShhbng3OHh4KTsKKwkJc3AuaGRjcF9zdGF0ZSA9IEhEQ1BfV0FJVElOR19GSU5J U0g7CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIEhEQ1BfV0FJVElOR19GSU5JU0g6CisJCWJy ZWFrOworCWNhc2UgSERDUF9GSU5JU0g6CisJCXNwX2hkY3BfZW5jcnlwdGlvbl9lbmFibGUoYW54 Nzh4eCk7CisJCXNwX2hkbWlfbXV0ZV92aWRlbyhhbng3OHh4LCBmYWxzZSk7CisJCXNwX3ZpZGVv X211dGUoYW54Nzh4eCwgZmFsc2UpOworCQlzcC5oZGNwX3N0YXRlID0gSERDUF9DQVBBQkxFX0NI RUNLOworCQlkZXZfZGJnKGRldiwgIkhEQ1AgYXV0aGVudGljYXRpb24gcGFzc1xuIik7CisJCXJl dHVybiB0cnVlOworCWNhc2UgSERDUF9GQUlMRUQ6CisJCWlmIChzcC5oZGNwX2ZhaWxfY291bnQg PiA1KSB7CisJCQlzcF9yZWdfaGFyZHdhcmVfcmVzZXQoYW54Nzh4eCk7CisJCQlzcC5oZGNwX3N0 YXRlID0gSERDUF9DQVBBQkxFX0NIRUNLOworCQkJc3AuaGRjcF9mYWlsX2NvdW50ID0gMDsKKwkJ CWRldl9kYmcoZGV2LCAiSERDUCBhdXRoZW50aWNhdGlvbiBmYWlsZWRcbiIpOworCQl9IGVsc2Ug eworCQkJc3AuaGRjcF9mYWlsX2NvdW50Kys7CisJCQlzcC5oZGNwX3N0YXRlID0gSERDUF9XQUlU SU5HX1ZJRF9TVEI7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIEhEQ1BfTk9UX1NV UFBPUlRFRDoKKwkJZGV2X2RiZyhkZXYsICJzaW5rIGlzIG5vdCBjYXBhYmxlIEhEQ1BcbiIpOwor CQlzcF9ibG9ja19wb3dlcl9jdHJsKGFueDc4eHgsIFNQX1RYX1BXUl9IRENQLCBmYWxzZSk7CisJ CXNwX3ZpZGVvX211dGUoYW54Nzh4eCwgZmFsc2UpOworCQlzcC5oZGNwX3N0YXRlID0gSERDUF9D QVBBQkxFX0NIRUNLOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK K3N0YXRpYyB2b2lkIHNwX2VuYWJsZV9hdWRpb19vdXRwdXQoc3RydWN0IGFueDc4eHggKmFueDc4 eHgsIGJvb2wgZW5hYmxlKQoreworCXU4IHZhbDsKKworCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4 eHgsIFRYX1AwLCBTUF9EUF9BVURJT19DVFJMX1JFRywgU1BfQVVEX0VOKTsKKwlpZiAoZW5hYmxl KSB7CisJCXNwX2F1ZGlvX2luZm9mcmFtZV9pbml0KGFueDc4eHgpOworCQlzcF9jb25maWdfcGFj a2V0cyhhbng3OHh4LCBIRE1JX0lORk9GUkFNRV9UWVBFX0FVRElPKTsKKworCQlzcF9yZWdfcmVh ZChhbng3OHh4LCBSWF9QMCwgU1BfSERNSV9TVEFUVVNfUkVHLCAmdmFsKTsKKwkJaWYgKHZhbCAm IFNQX0hETUlfQVVEX0xBWU9VVCkgeworCQkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDEsIFNQ X0FVRF9JTkZPRlJBTUVfREFUQV9CQVNFLAorCQkJCSAgICAmdmFsKTsKKwkJCXNwX3JlZ193cml0 ZShhbng3OHh4LCBUWF9QMiwgU1BfQVVEX0NIX1NUQVRVU19CQVNFICsgNSwKKwkJCQkgICAgICh2 YWwgJiAweDA3KSA8PCA1IHwgU1BfQVVESU9fTEFZT1VUKTsKKwkJfSBlbHNlIHsKKwkJCXNwX3Jl Z193cml0ZShhbng3OHh4LCBUWF9QMiwgU1BfQVVEX0NIX1NUQVRVU19CQVNFICsgNSwKKwkJCQkg ICAgIFNQX0kyU19DSF9OVU1fMiAmIH5TUF9BVURJT19MQVlPVVQpOworCQl9CisJCXNwX3JlZ19z ZXRfYml0cyhhbng3OHh4LCBUWF9QMCwgU1BfRFBfQVVESU9fQ1RSTF9SRUcsCisJCQkJU1BfQVVE X0VOKTsKKwl9IGVsc2UgeworCQlzcF9yZWdfY2xlYXJfYml0cyhhbng3OHh4LCBUWF9QMCwgU1Bf UEFDS0VUX1NFTkRfQ1RSTF9SRUcsCisJCQkJICBTUF9BVURfSUZfRU4pOworCX0KK30KKworc3Rh dGljIGludCBzcF9jYWxjdWxhdGVfYXVkaW9fbV92YWx1ZShzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4 eCkKK3sKKwl1OCB2YWw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ ZGV2OworCXVuc2lnbmVkIGxvbmcgbV9hdWQsIGxzX2NsayA9IDA7CisJdW5zaWduZWQgbG9uZyBh dWRfZnJlcSA9IDA7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMCwgU1BfQVVEX1NQRElG X0NIX1NUQVRVU19CQVNFICsgNCwgJnZhbCk7CisKKwlzd2l0Y2ggKHZhbCAmIFNQX0ZTX0ZSRVFf TUFTSykgeworCWNhc2UgU1BfRlNfRlJFUV80NDEwMEhaOgorCQlhdWRfZnJlcSA9IDQ0MTAwOwor CQlicmVhazsKKwljYXNlIFNQX0ZTX0ZSRVFfNDgwMDBIWjoKKwkJYXVkX2ZyZXEgPSA0ODAwMDsK KwkJYnJlYWs7CisJY2FzZSBTUF9GU19GUkVRXzMyMDAwSFo6CisJCWF1ZF9mcmVxID0gMzIwMDA7 CisJCWJyZWFrOworCWNhc2UgU1BfRlNfRlJFUV84ODIwMEhaOgorCQlhdWRfZnJlcSA9IDg4MjAw OworCQlicmVhazsKKwljYXNlIFNQX0ZTX0ZSRVFfOTYwMDBIWjoKKwkJYXVkX2ZyZXEgPSA5NjAw MDsKKwkJYnJlYWs7CisJY2FzZSBTUF9GU19GUkVRXzE3NjQwMEhaOgorCQlhdWRfZnJlcSA9IDE3 NjQwMDsKKwkJYnJlYWs7CisJY2FzZSBTUF9GU19GUkVRXzE5MjAwMEhaOgorCQlhdWRfZnJlcSA9 IDE5MjAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIHNh bXBsaW5nIGNsb2NrIGZyZXF1ZW5jeSAlZFxuIiwKKwkJCXZhbCAmIFNQX0ZTX0ZSRVFfTUFTSyk7 CisJCXJldHVybiAtMTsKKwl9CisKKwlzd2l0Y2ggKHNwX2dldF9saW5rX2JhbmR3aWR0aChhbng3 OHh4KSkgeworCWNhc2UgRFBfTElOS19CV18xXzYyOgorCQlsc19jbGsgPSAxNjIwMDA7CisJCWJy ZWFrOworCWNhc2UgRFBfTElOS19CV18yXzc6CisJCWxzX2NsayA9IDI3MDAwMDsKKwkJYnJlYWs7 CisJY2FzZSBEUF9MSU5LX0JXXzVfNDoKKwkJbHNfY2xrID0gNTQwMDAwOworCQlicmVhazsKKwlj YXNlIERQX0xJTktfQldfNl83NToKKwkJbHNfY2xrID0gNjc1MDAwOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlkZXZfZXJyKGRldiwgImludmFsaWQgbWFpbiBsaW5rIGJhbmR3aWR0aCBzZXR0aW5n XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRldl9kYmcoZGV2LCAiYXVkX2ZyZXEgPSAlbGQg LCBMU19DTEsgPSAlbGRcbiIsIGF1ZF9mcmVxLCBsc19jbGspOworCisJbV9hdWQgPSAoKCg1MTIg KiBhdWRfZnJlcSkgLyBsc19jbGspICogMzI3NjgpIC8gMTAwMDsKKwlzcF9yZWdfd3JpdGUoYW54 Nzh4eCwgVFhfUDEsIFNQX0FVRF9JTlRFUkZBQ0VfQ1RSTDRfUkVHLCBtX2F1ZCAmIDB4ZmYpOwor CW1fYXVkID0gbV9hdWQgPj4gODsKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDEsIFNQX0FV RF9JTlRFUkZBQ0VfQ1RSTDVfUkVHLCBtX2F1ZCAmIDB4ZmYpOworCXNwX3JlZ193cml0ZShhbng3 OHh4LCBUWF9QMSwgU1BfQVVEX0lOVEVSRkFDRV9DVFJMNl9SRUcsIDB4MDApOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNwX2NvbmZpZ19hdWRpbyhzdHJ1Y3QgYW54Nzh4eCAqYW54 Nzh4eCkKK3sKKwlpbnQgaTsKKwl1OCB2YWw7CisKKwlzcF9ibG9ja19wb3dlcl9jdHJsKGFueDc4 eHgsIFNQX1RYX1BXUl9BVURJTywgdHJ1ZSk7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9Q MCwgU1BfRFBfTUFJTl9MSU5LX0JXX1NFVF9SRUcsICZ2YWwpOworCWlmICh2YWwgJiBTUF9JTklU SUFMX1NMSU1fTV9BVURfU0VMKQorCQlpZiAoc3BfY2FsY3VsYXRlX2F1ZGlvX21fdmFsdWUoYW54 Nzh4eCkpCisJCQlyZXR1cm47CisKKwlzcF9yZWdfY2xlYXJfYml0cyhhbng3OHh4LCBUWF9QMSwg U1BfQVVEX0lOVEVSRkFDRV9DVFJMMF9SRUcsCisJCQkgIFNQX0FVRF9JTlRFUkZBQ0VfRElTQUJM RSk7CisKKwlzcF9yZWdfc2V0X2JpdHMoYW54Nzh4eCwgVFhfUDEsIFNQX0FVRF9JTlRFUkZBQ0Vf Q1RSTDJfUkVHLAorCQkJU1BfTV9BVURfQURKVVNUX1NUKTsKKworCXNwX3JlZ19yZWFkKGFueDc4 eHgsIFJYX1AwLCBTUF9IRE1JX1NUQVRVU19SRUcsICZ2YWwpOworCWlmICh2YWwgJiBTUF9IRE1J X0FVRF9MQVlPVVQpCisJCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9QMiwgU1BfQVVEX0NI X1NUQVRVU19CQVNFICsgNSwKKwkJCQlTUF9JMlNfQ0hfTlVNXzggfCBTUF9BVURJT19MQVlPVVQp OworCWVsc2UKKwkJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDIsIFNQX0FVRF9DSF9T VEFUVVNfQkFTRSArIDUsCisJCQkJICBTUF9JMlNfQ0hBTk5FTF9OVU1fTUFTSyB8IFNQX0FVRElP X0xBWU9VVCk7CisKKwkvKiB0cmFuc2ZlciBhdWRpbyBjaGFubmVsIHN0YXR1cyBmcm9tIEhETUkg UnggdG8gU2xpbXBvcnQgVHggKi8KKwlmb3IgKGkgPSAxOyBpIDw9IFNQX0FVRF9DSF9TVEFUVVNf UkVHX05VTTsgaSsrKSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFJYX1AwLCBTUF9BVURfU1BE SUZfQ0hfU1RBVFVTX0JBU0UgKyBpLAorCQkJICAgICZ2YWwpOworCQlzcF9yZWdfd3JpdGUoYW54 Nzh4eCwgVFhfUDIsIFNQX0FVRF9DSF9TVEFUVVNfQkFTRSArIGksCisJCQkgICAgIHZhbCk7CisJ fQorCisJLyogZW5hYmxlIGF1ZGlvICovCisJc3BfZW5hYmxlX2F1ZGlvX291dHB1dChhbng3OHh4 LCB0cnVlKTsKK30KKworc3RhdGljIGJvb2wgc3BfY29uZmlnX2F1ZGlvX291dHB1dChzdHJ1Y3Qg YW54Nzh4eCAqYW54Nzh4eCkKK3sKKwl1OCB2YWw7CisKKwlzd2l0Y2ggKHNwLnR4X2FvX3N0YXRl KSB7CisJZGVmYXVsdDoKKwljYXNlIEFPX0lOSVQ6CisJY2FzZSBBT19DVFNfUkNWX0lOVDoKKwlj YXNlIEFPX0FVRElPX1JDVl9JTlQ6CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFJYX1AwLCBTUF9I RE1JX1NUQVRVU19SRUcsICZ2YWwpOworCQlpZiAoIXZhbCAmIFNQX0hETUlfTU9ERSkgeworCQkJ c3AudHhfYW9fc3RhdGUgPSBBT19JTklUOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJYnJlYWs7 CisJY2FzZSBBT19SQ1ZfSU5UX0ZJTklTSDoKKwkJaWYgKHNwLmF1ZGlvX3N0YWJsZV9jb3VudCsr ID4gMikgeworCQkJc3AudHhfYW9fc3RhdGUgPSBBT19PVVRQVVQ7CisJCX0gZWxzZSB7CisJCQlz cC50eF9hb19zdGF0ZSA9IEFPX0lOSVQ7CisJCQlicmVhazsKKwkJfQorCS8qIGZhbGx0aHJvdWdo ICovCisJY2FzZSBBT19PVVRQVVQ6CisJCXNwLmF1ZGlvX3N0YWJsZV9jb3VudCA9IDA7CisJCXNw LnR4X2FvX3N0YXRlID0gQU9fSU5JVDsKKwkJc3BfdmlkZW9fbXV0ZShhbng3OHh4LCBmYWxzZSk7 CisJCXNwX2hkbWlfbXV0ZV9hdWRpbyhhbng3OHh4LCBmYWxzZSk7CisJCXNwX2NvbmZpZ19hdWRp byhhbng3OHh4KTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitz dGF0aWMgdm9pZCBzcF9pbml0aWFsaXphdGlvbihzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sK KwlzcC5yZWFkX2VkaWRfZmxhZyA9IGZhbHNlOworCisJLyogUG93ZXIgb24gYWxsIG1vZHVsZXMg Ki8KKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX1BPV0VSRE9XTl9DVFJMX1JFRywg MHgwMCk7CisJLyogRHJpdmVyIFZlcnNpb24gKi8KKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhf UDEsIFNQX0ZXX1ZFUl9SRUcsIEZXX1ZFUlNJT04pOworCXNwX2hkbWlfaW5pdGlhbGl6YXRpb24o YW54Nzh4eCk7CisJc3BfdHhfaW5pdGlhbGl6YXRpb24oYW54Nzh4eCk7CisJbXNsZWVwKDIwMCk7 Cit9CisKKy8qCisgKiBJbnRlcnJ1cHQgcmVjZWl2ZXIgZnVuY3Rpb24sIGdldHMgdGhlIHNlcnZp Y2UgaW50ZXJydXB0cyBhbmQgdXBkYXRlcyB0aGUKKyAqIHN0YXR1cyBvZiB0aGUgaW50ZXJydXB0 cyBzbyB0aGF0IGNvcnJlY3QgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgY2FuCisgKiBiZSBj YWxsZWQgaW4gdGhlIFNsaW1Qb3J0IHRhc2sgaGFuZGxlciBmdW5jdGlvbi4KKyAqLworc3RhdGlj IHZvaWQgc3BfaW50X3JlY2VpdmVyKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCWludCBp OworCisJLyogQ29tbW9uIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXJzICovCisJZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUoc3AuY29tbW9uX2ludCk7IGkrKykgeworCQlzcF9yZWdfcmVhZChh bng3OHh4LCBUWF9QMiwgU1BfQ09NTU9OX0lOVF9TVEFUVVNfQkFTRSArIDEgKyBpLAorCQkJICAg ICZzcC5jb21tb25faW50W2ldKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AyLCBTUF9D T01NT05fSU5UX1NUQVRVU19CQVNFICsgMSArIGksCisJCQkgICAgIHNwLmNvbW1vbl9pbnRbaV0p OworCX0KKworCS8qIERpc3BsYXkgUG9ydCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisJ c3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDIsIFNQX0RQX0lOVF9TVEFUVVNfUkVHLCAmc3AuZHBf aW50KTsKKwlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDIsIFNQX0RQX0lOVF9TVEFUVVNfUkVH LCBzcC5kcF9pbnQpOworCisJLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcnMgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcC5zcF9oZG1pX2ludCk7IGkrKykgeworCQlzcF9yZWdf cmVhZChhbng3OHh4LCBSWF9QMCwgU1BfSU5UX1NUQVRVUzFfUkVHICsgaSwKKwkJCSAgICAmc3Au c3BfaGRtaV9pbnRbaV0pOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgUlhfUDAsIFNQX0lOVF9T VEFUVVMxX1JFRyArIGksCisJCQkgICAgIHNwLnNwX2hkbWlfaW50W2ldKTsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkIHNwX3BsbF9jaGFuZ2VkX2ludF9oYW5kbGVyKHN0cnVjdCBhbng3OHh4ICphbng3 OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4LT5jbGllbnQtPmRldjsKKwor CWlmIChzcC50eF9zeXN0ZW1fc3RhdGUgPj0gU1RBVEVfTElOS19UUkFJTklORykgeworCQlpZiAo IXNwX2dldF9wbGxfbG9ja19zdGF0dXMoYW54Nzh4eCkpIHsKKwkJCWRldl9kYmcoZGV2LCAiUExM IG5vdCBsb2NrIVxuIik7CisJCQlzcF9zZXRfc3lzdGVtX3N0YXRlKGFueDc4eHgsIFNUQVRFX0xJ TktfVFJBSU5JTkcpOworCQl9CisJfQorfQorCitzdGF0aWMgdTggc3BfZHBfYXV0b3Rlc3RfbGlu a190cmFpbmluZyhzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwl1OCBiYW5kd2lkdGgsIHJl c3BvbnNlOworCisJc3BfZHBfcmVhZF9ieXRlc19mcm9tX2RwY2QoYW54Nzh4eCwgRFBfVEVTVF9M SU5LX1JBVEUsIDEsCisJCQkJICAgJmJhbmR3aWR0aCk7CisJc3dpdGNoIChiYW5kd2lkdGgpIHsK KwljYXNlIERQX0xJTktfQldfMV82MjoKKwljYXNlIERQX0xJTktfQldfMl83OgorCWNhc2UgRFBf TElOS19CV181XzQ6CisJY2FzZSBEUF9MSU5LX0JXXzZfNzU6CisJCXNwX3NldF9saW5rX2JhbmR3 aWR0aChhbng3OHh4LCBiYW5kd2lkdGgpOworCQlzcC50eF90ZXN0X2J3ID0gYmFuZHdpZHRoOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlzcF9zZXRfbGlua19iYW5kd2lkdGgoYW54Nzh4eCwgRFBf TElOS19CV182Xzc1KTsKKwkJc3AudHhfdGVzdF9idyA9IERQX0xJTktfQldfNl83NTsKKwkJYnJl YWs7CisJfQorCisJc3BfZHBfcmVhZF9ieXRlc19mcm9tX2RwY2QoYW54Nzh4eCwgRFBfVEVTVF9S RVNQT05TRSwgMSwgJnJlc3BvbnNlKTsKKwlyZXNwb25zZSB8PSBEUF9URVNUX0FDSzsKKworCXJl dHVybiByZXNwb25zZTsKK30KKworc3RhdGljIHU4IHNwX2F1dG90ZXN0X3BoeV9wYXR0ZXJuKHN0 cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4 LT5jbGllbnQtPmRldjsKKwl1OCBiX3N3LCByZXNwb25zZTsKKwl1OCBidWZbMTZdOworCWludCBp OworCisJc3BfZHBfYXV0b3Rlc3RfbGlua190cmFpbmluZyhhbng3OHh4KTsKKworCXNwX2RwX3Jl YWRfYnl0ZXNfZnJvbV9kcGNkKGFueDc4eHgsIERQX1BIWV9URVNUX1BBVFRFUk4sIDEsIGJ1Zik7 CisJZGV2X2RiZyhkZXYsICJEUENEOiBQSFkgdGVzdCBwYXR0ZXJuID0gJS4yeFxuIiwgYnVmWzBd KTsKKwlzd2l0Y2ggKGJ1ZlswXSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlz cF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX1RSQUlOSU5HX1BBVFRFUk5fU0VUX1JF RywKKwkJCSAgICAgMHgwNCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3BfcmVnX3dyaXRlKGFu eDc4eHgsIFRYX1AwLCBTUF9EUF9UUkFJTklOR19QQVRURVJOX1NFVF9SRUcsCisJCQkgICAgIDB4 MDgpOworCQlicmVhazsKKwljYXNlIDM6CisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwg U1BfRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVRfUkVHLAorCQkJICAgICAweDBjKTsKKwkJYnJlYWs7 CisJY2FzZSA0OgorCQkvKiAwMDI0OWggLSAwMDI1Rmg6IFJlc2VydmVkIGZvciB0ZXN0IGF1dG9t YXRpb24gZXh0ZW5zaW9ucyAqLworCQlzcF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3OHh4 LCAweDI1MCwgMTAsCisJCQkJCSAgIGJ1Zik7CisJCWZvciAoaSA9IDA7IGkgPCBTUF9EUF9MVF84 MEJJVF9QQVRURVJOX1JFR19OVU07IGkrKykgeworCQkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRY X1AxLAorCQkJCSAgICAgU1BfRFBfTFRfODBCSVRfUEFUVEVSTjBfUkVHICsgaSwKKwkJCQkgICAg IGJ1ZlswXSk7CisJCX0KKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9UUkFJ TklOR19QQVRURVJOX1NFVF9SRUcsCisJCQkgICAgIDB4MzApOworCQlicmVhazsKKwljYXNlIDU6 CisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfQ0VQX1RSQUlOSU5HX0NUUkww X1JFRywKKwkJCSAgICAgMHgwMCk7CisJCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1Bf RFBfQ0VQX1RSQUlOSU5HX0NUUkwxX1JFRywKKwkJCSAgICAgMHgwMSk7CisJCXNwX3JlZ193cml0 ZShhbng3OHh4LCBUWF9QMCwgU1BfRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVRfUkVHLAorCQkJICAg ICAweDE0KTsKKwkJYnJlYWs7CisJfQorCisJc3BfZHBfcmVhZF9ieXRlc19mcm9tX2RwY2QoYW54 Nzh4eCwgRFBfTUFYX0RPV05TUFJFQUQsIDEsIGJ1Zik7CisJZGV2X2RiZyhkZXYsICJEUENEOiBt YXggZG93bnNwcmVhZCA9ICUuMnhcbiIsIGJ1ZlswXSk7CisJaWYgKGJ1ZlswXSAmIERQX1BFUkNF TlRfRE9XTlNQUkVBRF8wXzUpCisJCXNwX2NvbmZpZ19zc2MoYW54Nzh4eCwgU1NDX0RFUF80MDAw UFBNKTsKKwllbHNlCisJCXNwX2Rvd25zcHJlYWRpbmdfZW5hYmxlKGFueDc4eHgsIGZhbHNlKTsK KworCS8qIGdldCBzd2luZyBhbmQgZW1waGFzaXMgYWRqdXN0IHJlcXVlc3QgKi8KKwlzcF9yZWdf cmVhZChhbng3OHh4LCBUWF9QMCwgU1BfRFBfTEFORTBfTFRfQ1RSTF9SRUcsICZiX3N3KTsKKwor CXNwX2RwX3JlYWRfYnl0ZXNfZnJvbV9kcGNkKGFueDc4eHgsIERQX0FESlVTVF9SRVFVRVNUX0xB TkUwXzEsIDEsIGJ1Zik7CisJZGV2X2RiZyhkZXYsICJEUENEOiAweDAwMjA2ID0gJS4yeFxuIiwg YnVmWzBdKTsKKwlidWZbMF0gJj0gRFBfQURKVVNUX1ZPTFRBR0VfU1dJTkdfTEFORTBfTUFTSyB8 CisJCSAgRFBfQURKVVNUX1BSRV9FTVBIQVNJU19MQU5FMF9NQVNLOworCXN3aXRjaCAoYnVmWzBd KSB7CisJY2FzZSAweDAwOgorCWNhc2UgMHgwMToKKwljYXNlIDB4MDI6CisJY2FzZSAweDAzOgor CQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0xBTkUwX0xUX0NUUkxfUkVHLAor CQkJICAgICAoYl9zdyAmIH5TUF9UWF9TV19TRVRfTUFTSykgfCBidWZbMF0pOworCQlicmVhazsK KwljYXNlIDB4MDQ6CisJY2FzZSAweDA1OgorCWNhc2UgMHgwNjoKKwkJc3BfcmVnX3dyaXRlKGFu eDc4eHgsIFRYX1AwLCBTUF9EUF9MQU5FMF9MVF9DVFJMX1JFRywKKwkJCSAgICAgKGJfc3cgJiB+ U1BfVFhfU1dfU0VUX01BU0spIHwKKwkJCSAgICAgKGJ1ZlswXSArIDQpKTsKKwkJYnJlYWs7CisJ Y2FzZSAweDA4OgorCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX0xBTkUwX0xU X0NUUkxfUkVHLAorCQkJICAgICAoYl9zdyAmIH5TUF9UWF9TV19TRVRfTUFTSykgfCAweDEwKTsK KwkJYnJlYWs7CisJY2FzZSAweDA5OgorCQlzcF9yZWdfd3JpdGUoYW54Nzh4eCwgVFhfUDAsIFNQ X0RQX0xBTkUwX0xUX0NUUkxfUkVHLAorCQkJICAgICAoYl9zdyAmIH5TUF9UWF9TV19TRVRfTUFT SykgfCAweDExKTsKKwkJYnJlYWs7CisJY2FzZSAweDBjOgorCQlzcF9yZWdfd3JpdGUoYW54Nzh4 eCwgVFhfUDAsIFNQX0RQX0xBTkUwX0xUX0NUUkxfUkVHLAorCQkJICAgICAoYl9zdyAmIH5TUF9U WF9TV19TRVRfTUFTSykgfCAweDE4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJ fQorCisJc3BfZHBfcmVhZF9ieXRlc19mcm9tX2RwY2QoYW54Nzh4eCwgRFBfVEVTVF9SRVNQT05T RSwgMSwgJnJlc3BvbnNlKTsKKwlyZXNwb25zZSB8PSBEUF9URVNUX0FDSzsKKworCXJldHVybiBy ZXNwb25zZTsKK30KKworc3RhdGljIHZvaWQgc3BfaHBkX2lycV9wcm9jZXNzKHN0cnVjdCBhbng3 OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4LT5jbGllbnQt PmRldjsKKwl1OCB2YWw7CisJdTggdGVzdF92ZWN0b3I7CisJdTggYnVmWzZdOworCisJc3BfZHBf cmVhZF9ieXRlc19mcm9tX2RwY2QoYW54Nzh4eCwgRFBfU0lOS19DT1VOVCwgNiwgYnVmKTsKKwlk ZXZfZGJnKGRldiwgImdvdCBocGQgaXJxICV4XG4iLCBidWZbMV0pOworCisJaWYgKGJ1ZlsxXSAh PSAwKQorCQlzcF9kcF93cml0ZV9ieXRlc190b19kcGNkKGFueDc4eHgsIERQX0RFVklDRV9TRVJW SUNFX0lSUV9WRUNUT1IsCisJCQkJCSAgMSwgJmJ1ZlsxXSk7CisKKwkvKiBIRENQIElSUSAqLwor CWlmICgoYnVmWzFdICYgRFBfQ1BfSVJRKSAmJgorCSAgICAoc3AuaGRjcF9zdGF0ZSA+IEhEQ1Bf V0FJVElOR19GSU5JU0ggfHwKKwkgICAgIHNwLnR4X3N5c3RlbV9zdGF0ZSA+PSBTVEFURV9IRENQ X0FVVEgpKSB7CisJCXNwX2RwX3JlYWRfYnl0ZXNfZnJvbV9kcGNkKGFueDc4eHgsIDB4MDY4MDI5 LCAxLAorCQkJCQkgICAmdmFsKTsKKwkJaWYgKHZhbCAmIDB4MDQpIHsKKwkJCWlmICghc3BfaGRj cF9yZXBlYXRlcl9tb2RlKGFueDc4eHgpKSB7CisJCQkJc3Bfc2V0X3N5c3RlbV9zdGF0ZShhbng3 OHh4LCBTVEFURV9IRENQX0FVVEgpOworCQkJCXNwX2NsZWFuX2hkY3Bfc3RhdHVzKGFueDc4eHgp OworCQkJfSBlbHNlIHsKKwkJCQlzcC5yZXBlYXRlcl9zdGF0ZSA9IEhEQ1BfRVJST1I7CisJCQl9 CisJCQlkZXZfZGJnKGRldiwgIkNQX0lSUSwgSERDUCBzeW5jIGxvc3QuXG4iKTsKKwkJfQorCX0K KworCS8qIFBIWSBhbmQgTGluayBDVFMgdGVzdCAqLworCWlmIChidWZbMV0gJiBEUF9BVVRPTUFU RURfVEVTVF9SRVFVRVNUKSB7CisJCXNwX2RwX3JlYWRfYnl0ZXNfZnJvbV9kcGNkKGFueDc4eHgs IERQX1RFU1RfUkVRVUVTVCwgMSwKKwkJCQkJICAgJnRlc3RfdmVjdG9yKTsKKworCQlpZiAodGVz dF92ZWN0b3IgJiBEUF9URVNUX0xJTktfVFJBSU5JTkcpIHsKKwkJCWRldl9kYmcoZGV2LCAiTElO S19UUkFJTklORyB0ZXN0IHJlcXVlc3RlZFxuIik7CisJCQlzcC50eF90ZXN0X2x0ID0gdHJ1ZTsK KwkJCXZhbCA9IHNwX2RwX2F1dG90ZXN0X2xpbmtfdHJhaW5pbmcoYW54Nzh4eCk7CisJCQlzcF9k cF93cml0ZV9ieXRlc190b19kcGNkKGFueDc4eHgsIERQX1RFU1RfUkVTUE9OU0UsIDEsCisJCQkJ CQkgICZ2YWwpOworCisJCQlpZiAoc3AudHhfc3lzdGVtX3N0YXRlID49IFNUQVRFX0xJTktfVFJB SU5JTkcpIHsKKwkJCQlzcC50eF9sdF9zdGF0ZSA9IExUX0lOSVQ7CisJCQkJc3Bfc2V0X3N5c3Rl bV9zdGF0ZShhbng3OHh4LAorCQkJCQkJICAgIFNUQVRFX0xJTktfVFJBSU5JTkcpOworCQkJfQor CQl9CisKKwkJaWYgKHRlc3RfdmVjdG9yICYgRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk4pIHsK KwkJCWRldl9kYmcoZGV2LCAiVklERU9fUEFUVEVSTiB0ZXN0IHJlcXVlc3RlZFxuIik7CisJCQlz cF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChhbng3OHh4LCBEUF9URVNUX1JFU1BPTlNFLCAxLAor CQkJCQkJICAgJnZhbCk7CisJCQl2YWwgfD0gRFBfVEVTVF9BQ0s7CisJCQlzcF9kcF93cml0ZV9i eXRlc190b19kcGNkKGFueDc4eHgsIERQX1RFU1RfUkVTUE9OU0UsIDEsCisJCQkJCQkgICZ2YWwp OworCQl9CisKKwkJaWYgKHRlc3RfdmVjdG9yICYgRFBfVEVTVF9MSU5LX0VESURfUkVBRCkgewor CQkJZGV2X2RiZyhkZXYsICJFRElEIHRlc3QgcmVxdWVzdGVkXG4iKTsKKwkJCWlmIChzcC50eF9z eXN0ZW1fc3RhdGUgPiBTVEFURV9QQVJTRV9FRElEKQorCQkJCXNwX3NldF9zeXN0ZW1fc3RhdGUo YW54Nzh4eCwgU1RBVEVfUEFSU0VfRURJRCk7CisJCQlzcC50eF90ZXN0X2VkaWQgPSB0cnVlOwor CQl9CisKKwkJaWYgKHRlc3RfdmVjdG9yICYgRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk4p IHsKKwkJCWRldl9kYmcoZGV2LCAiUEhZX1BBVFRFUk4gdGVzdCByZXF1ZXN0ZWRcbiIpOworCQkJ c3AudHhfdGVzdF9sdCA9IHRydWU7CisJCQl2YWwgPSBzcF9hdXRvdGVzdF9waHlfcGF0dGVybihh bng3OHh4KTsKKwkJCXNwX2RwX3dyaXRlX2J5dGVzX3RvX2RwY2QoYW54Nzh4eCwgRFBfVEVTVF9S RVNQT05TRSwgMSwKKwkJCQkJCSAgJnZhbCk7CisJCX0KKwl9CisKKwlpZiAoc3AudHhfc3lzdGVt X3N0YXRlID4gU1RBVEVfTElOS19UUkFJTklORykgeworCQlpZiAoKHNwLnR4X3N5c3RlbV9zdGF0 ZSA9PSBTVEFURV9IRENQX0FVVEgpICYmCisJCSAgICAoYnVmWzFdICYgRFBfQ1BfSVJRKSkgewor CQkJZGV2X2RiZyhkZXYsICJDUCBJUlEhXG4iKTsKKwkJfSBlbHNlIGlmICghKGJ1Zls0XSAmIERQ X0lOVEVSTEFORV9BTElHTl9ET05FKSB8fCAoKGJ1ZlsyXSAmCisJCQkgIChEUF9MQU5FX0NSX0RP TkUgfCBEUF9MQU5FX1NZTUJPTF9MT0NLRUQpKSAhPQorCQkJICAoRFBfTEFORV9DUl9ET05FIHwg RFBfTEFORV9TWU1CT0xfTE9DS0VEKSkpIHsKKwkJCXNwX3NldF9zeXN0ZW1fc3RhdGUoYW54Nzh4 eCwgU1RBVEVfTElOS19UUkFJTklORyk7CisJCQlkZXZfZGJnKGRldiwgIklSUTogcmUtTFQgcmVx dWVzdCFcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJZGV2X2RiZyhkZXYsICJsYW5lIGFsaWdu ICV4XG4iLCBidWZbNF0pOworCQlkZXZfZGJnKGRldiwgImxhbmUgY2xvY2sgcmVjb3ZlcnkgJXhc biIsIGJ1ZlsyXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzcF9hdXRoX2RvbmVfaW50X2hhbmRs ZXIoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFu eDc4eHgtPmNsaWVudC0+ZGV2OworCXU4IGJ1ZlsyXTsKKworCWlmIChzcF9oZGNwX3JlcGVhdGVy X21vZGUoYW54Nzh4eCkpIHsKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX1RYX0hE Q1BfU1RBVFVTX1JFRywgJmJ1ZlswXSk7CisJCWlmICgoYnVmWzBdICYgU1BfQVVUSEVOX1BBU1Mp ICYmCisJCSAgICAoc3AucmVwZWF0ZXJfc3RhdGUgPT0gSERDUF9ET0lORykpCisJCQlzcC5yZXBl YXRlcl9zdGF0ZSA9IEhEQ1BfRE9ORTsKKwkJZWxzZQorCQkJc3AucmVwZWF0ZXJfc3RhdGUgPSBI RENQX0VSUk9SOworCisJCXJldHVybjsKKwl9CisKKwlpZiAoc3AuaGRjcF9zdGF0ZSA+IEhEQ1Bf SFdfRU5BQkxFICYmCisJICAgIHNwLnR4X3N5c3RlbV9zdGF0ZSA9PSBTVEFURV9IRENQX0FVVEgp IHsKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfUlhfQlNUQVRVUzBfUkVH LCAmYnVmWzBdKTsKKwkJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0hEQ1BfUlhfQlNU QVRVUzFfUkVHLCAmYnVmWzFdKTsKKwkJaWYgKChidWZbMF0gJiAweDA4KSB8fCAoYnVmWzFdICYg MHg4MCkpIHsKKwkJCWRldl9kYmcoZGV2LCAibWF4IGNhc2NhZGUvZGV2cyBleGNlZWRlZCFcbiIp OworCQkJc3BfaGRjcF9lbmNyeXB0aW9uX2Rpc2FibGUoYW54Nzh4eCk7CisJCQlzcC5oZGNwX3N0 YXRlID0gSERDUF9GSU5JU0g7CisJCX0gZWxzZSB7CisJCQlzcF9yZWdfcmVhZChhbng3OHh4LCBU WF9QMCwgU1BfVFhfSERDUF9TVEFUVVNfUkVHLAorCQkJCSAgICBidWYpOworCQl9CisKKwkJaWYg KGJ1ZlswXSAmIFNQX0FVVEhFTl9QQVNTKSB7CisJCQlzcF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBj ZChhbng3OHh4LCAweDA2ODAyYSwgMiwgYnVmKTsKKwkJCWlmICgoYnVmWzBdICYgMHgwOCkgfHwg KGJ1ZlsxXSAmIDB4ODApKSB7CisJCQkJZGV2X2RiZyhkZXYsICJtYXggY2FzY2FkZS9kZXZzIGV4 Y2VlZGVkIVxuIik7CisJCQkJc3BfaGRjcF9lbmNyeXB0aW9uX2Rpc2FibGUoYW54Nzh4eCk7CisJ CQl9IGVsc2UKKwkJCQlkZXZfZGJnKGRldiwgIiVzXG4iLAorCQkJCQkiYXV0aGVudGljYXRpb24g cGFzcyBpbiBBdXRoIERvbmUiKTsKKworCQkJc3AuaGRjcF9zdGF0ZSA9IEhEQ1BfRklOSVNIOwor CQl9IGVsc2UgeworCQkJZGV2X2VycihkZXYsICJhdXRoZW50aWNhdGlvbiBmYWlsZWQgaW4gQXV0 aCBEb25lXG4iKTsKKwkJCXNwX3ZpZGVvX211dGUoYW54Nzh4eCwgdHJ1ZSk7CisJCQlzcF9jbGVh bl9oZGNwX3N0YXR1cyhhbng3OHh4KTsKKwkJCXNwLmhkY3Bfc3RhdGUgPSBIRENQX0ZBSUxFRDsK KwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc3BfbHRfZG9uZV9pbnRfaGFuZGxlcihzdHJ1Y3Qg YW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xp ZW50LT5kZXY7CisJdTggdmFsOworCisJaWYgKHNwLnR4X2x0X3N0YXRlID09IExUX1dBSVRJTkdf RklOSVNIICYmCisJICAgIHNwLnR4X3N5c3RlbV9zdGF0ZSA9PSBTVEFURV9MSU5LX1RSQUlOSU5H KSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9MVF9DVFJMX1JFRywgJnZh bCk7CisJCWlmICh2YWwgJiBTUF9MVF9FUlJPUl9UWVBFX01BU0spIHsKKwkJCXZhbCA9ICh2YWwg JiBTUF9MVF9FUlJPUl9UWVBFX01BU0spID4+IDQ7CisJCQlkZXZfZGJnKGRldiwgIkxUIGZhaWxl ZCBpbiBpbnRlcnJ1cHQgJS4yeFxuIiwKKwkJCQl2YWwpOworCQkJc3AudHhfbHRfc3RhdGUgPSBM VF9FUlJPUjsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoZGV2LCAiTFQgZmluaXNoXG4iKTsKKwkJ CXNwLnR4X2x0X3N0YXRlID0gTFRfRklOSVNIOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBz cF9oZG1pX2Nsa19kZXRfaW50KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZhbng3OHh4LT5jbGllbnQtPmRldjsKKworCWRldl9kYmcoZGV2LCAicGl4 ZWwgY2xvY2sgY2hhbmdlXG4iKTsKKwlpZiAoc3AudHhfc3lzdGVtX3N0YXRlID4gU1RBVEVfVklE RU9fT1VUUFVUKSB7CisJCXNwX3ZpZGVvX211dGUoYW54Nzh4eCwgdHJ1ZSk7CisJCXNwX2VuYWJs ZV9hdWRpb19vdXRwdXQoYW54Nzh4eCwgZmFsc2UpOworCQlzcF9zZXRfc3lzdGVtX3N0YXRlKGFu eDc4eHgsIFNUQVRFX1ZJREVPX09VVFBVVCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzcF9oZG1p X2R2aV9pbnQoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCXU4IHZhbDsKKworCXNwX3JlZ19yZWFkKGFueDc4 eHgsIFJYX1AwLCBTUF9IRE1JX1NUQVRVU19SRUcsICZ2YWwpOworCWlmICgodmFsICYgU1BfSERN SV9ERVQpID09IFNQX0RWSV9NT0RFKSB7CisJCWRldl9kYmcoZGV2LCAiZGV0ZWN0ZWQgRFZJIE1P REUgLT4gbXV0ZSBhdWRpb1xuIik7CisJCXNwX2hkbWlfbXV0ZV9hdWRpbyhhbng3OHh4LCB0cnVl KTsKKwkJc3Bfc2V0X3N5c3RlbV9zdGF0ZShhbng3OHh4LCBTVEFURV9MSU5LX1RSQUlOSU5HKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwX2hkbWlfbmV3X2F2aV9pbnQoc3RydWN0IGFueDc4eHgg KmFueDc4eHgpCit7CisJc3BfYXZpX2luZm9mcmFtZV9pbml0KGFueDc4eHgpOworCXNwX2NvbmZp Z19wYWNrZXRzKGFueDc4eHgsIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVZJKTsKKwlzcF9zZXRfY29s b3JzcGFjZShhbng3OHh4KTsKKwlzcF9sdnR0bF9iaXRfbWFwcGluZyhhbng3OHh4KTsKK30KKwor c3RhdGljIHZvaWQgc3BfaGRtaV9uZXdfdnNpX2ludChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkK K3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisJdTggdjNk X3N0cnVjdDsKKworCXNwX3JlZ19jbGVhcl9iaXRzKGFueDc4eHgsIFRYX1AwLCBTUF9EUF8zRF9W U0NfQ1RSTF9SRUcsCisJCQkgIFNQX0lORk9fRlJBTUVfVlNDX0VOKTsKKworCXNwX3ZzaV9pbmZv ZnJhbWVfaW5pdChhbng3OHh4KTsKKwlzcF9jb25maWdfcGFja2V0cyhhbng3OHh4LCBIRE1JX0lO Rk9GUkFNRV9UWVBFX1ZFTkRPUik7CisKKwlzd2l0Y2ggKHNwLmZyYW1lLnZlbmRvci5oZG1pLnMz ZF9zdHJ1Y3QpIHsKKwljYXNlIEhETUlfM0RfU1RSVUNUVVJFX0ZSQU1FX1BBQ0tJTkc6CisJCXYz ZF9zdHJ1Y3QgPSAweDAyOworCQlicmVhazsKKwljYXNlIEhETUlfM0RfU1RSVUNUVVJFX0xJTkVf QUxURVJOQVRJVkU6CisJCXYzZF9zdHJ1Y3QgPSAweDAzOworCQlicmVhazsKKwljYXNlIEhETUlf M0RfU1RSVUNUVVJFX1NJREVfQllfU0lERV9GVUxMOgorCQl2M2Rfc3RydWN0ID0gMHgwNDsKKwkJ YnJlYWs7CisJY2FzZSBIRE1JXzNEX1NUUlVDVFVSRV9JTlZBTElEOgorCWRlZmF1bHQ6CisJCXYz ZF9zdHJ1Y3QgPSAweDAwOworCQlkZXZfZGJnKGRldiwgIjNEIHN0cnVjdHVyZSBub3Qgc3VwcG9y dGVkXG4iKTsKKwkJYnJlYWs7CisJfQorCXNwX3JlZ193cml0ZShhbng3OHh4LCBUWF9QMCwgU1Bf RFBfVlNDX0RCMV9SRUcsIHYzZF9zdHJ1Y3QpOworCisJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgs IFRYX1AwLCBTUF9EUF8zRF9WU0NfQ1RSTF9SRUcsCisJCQlTUF9JTkZPX0ZSQU1FX1ZTQ19FTik7 CisJc3BfcmVnX2NsZWFyX2JpdHMoYW54Nzh4eCwgVFhfUDAsIFNQX1BBQ0tFVF9TRU5EX0NUUkxf UkVHLAorCQkJICBTUF9TUERfSUZfRU4pOworCXNwX3JlZ19zZXRfYml0cyhhbng3OHh4LCBUWF9Q MCwgU1BfUEFDS0VUX1NFTkRfQ1RSTF9SRUcsIFNQX1NQRF9JRl9VRCk7CisJc3BfcmVnX3NldF9i aXRzKGFueDc4eHgsIFRYX1AwLCBTUF9QQUNLRVRfU0VORF9DVFJMX1JFRywgU1BfU1BEX0lGX0VO KTsKK30KKworc3RhdGljIHZvaWQgc3BfaGRtaV9ub192c2lfaW50KHN0cnVjdCBhbng3OHh4ICph bng3OHh4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4LT5jbGllbnQtPmRldjsK Kwl1OCB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfRFBfM0RfVlNDX0NU UkxfUkVHLCAmdmFsKTsKKwlpZiAodmFsICYgU1BfSU5GT19GUkFNRV9WU0NfRU4pIHsKKwkJZGV2 X2RiZyhkZXYsICJubyBuZXcgVlNJIGlzIHJlY2VpdmVkLCBkaXNhYmxlIFZTQyBwYWNrZXRcbiIp OworCQl2YWwgJj0gflNQX0lORk9fRlJBTUVfVlNDX0VOOworCQlzcF9yZWdfd3JpdGUoYW54Nzh4 eCwgVFhfUDAsIFNQX0RQXzNEX1ZTQ19DVFJMX1JFRywgdmFsKTsKKwkJc3BfbXBlZ19pbmZvZnJh bWVfaW5pdChhbng3OHh4KTsKKwkJc3BfY29uZmlnX3BhY2tldHMoYW54Nzh4eCwgSERNSV9JTkZP RlJBTUVfVFlQRV9NUEVHKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcF9oZG1pX3Jl c3RhcnRfYXVkaW9fY2hrKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXNwX3NldF9zeXN0 ZW1fc3RhdGUoYW54Nzh4eCwgU1RBVEVfQVVESU9fT1VUUFVUKTsKK30KKworc3RhdGljIHZvaWQg c3BfaGRtaV9jdHNfcmN2X2ludChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4eCkKK3sKKwlpZiAoc3Au dHhfYW9fc3RhdGUgPT0gQU9fSU5JVCkKKwkJc3AudHhfYW9fc3RhdGUgPSBBT19DVFNfUkNWX0lO VDsKKwllbHNlIGlmIChzcC50eF9hb19zdGF0ZSA9PSBBT19BVURJT19SQ1ZfSU5UKQorCQlzcC50 eF9hb19zdGF0ZSA9IEFPX1JDVl9JTlRfRklOSVNIOworfQorCitzdGF0aWMgdm9pZCBzcF9oZG1p X2F1ZGlvX3Jjdl9pbnQoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJaWYgKHNwLnR4X2Fv X3N0YXRlID09IEFPX0lOSVQpCisJCXNwLnR4X2FvX3N0YXRlID0gQU9fQVVESU9fUkNWX0lOVDsK KwllbHNlIGlmIChzcC50eF9hb19zdGF0ZSA9PSBBT19DVFNfUkNWX0lOVCkKKwkJc3AudHhfYW9f c3RhdGUgPSBBT19SQ1ZfSU5UX0ZJTklTSDsKK30KKworc3RhdGljIHZvaWQgc3BfaGRtaV9hdWRp b19zYW1wbGVjaGdfaW50KHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQoreworCXUxNiBpOworCXU4 IHZhbDsKKworCS8qIHRyYW5zZmVyIGF1ZGlvIGNoYW5uZWwgc3RhdHVzIGZyb20gSERNSSBSeCB0 byBTbGltcG9ydCBUeCAqLworCWZvciAoaSA9IDA7IGkgPCBTUF9BVURfQ0hfU1RBVFVTX1JFR19O VU07IGkrKykgeworCQlzcF9yZWdfcmVhZChhbng3OHh4LCBSWF9QMCwgU1BfQVVEX1NQRElGX0NI X1NUQVRVU19CQVNFICsgaSwKKwkJCSAgICAmdmFsKTsKKwkJc3BfcmVnX3dyaXRlKGFueDc4eHgs IFRYX1AyLCBTUF9BVURfQ0hfU1RBVFVTX0JBU0UgKyBpLAorCQkJICAgICB2YWwpOworCX0KK30K Kworc3RhdGljIHZvaWQgc3BfaGRtaV9oZGNwX2Vycm9yX2ludChzdHJ1Y3QgYW54Nzh4eCAqYW54 Nzh4eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisK KwlpZiAoc3AuaGRjcF9lcnJvcl9jb3VudCA+PSA0MCkgeworCQlzcC5oZGNwX2Vycm9yX2NvdW50 ID0gMDsKKwkJZGV2X2RiZyhkZXYsICJsb3RzIG9mIEhEQ1AgZXJyb3JzIG9jY3VycmVkIVxuIik7 CisJCXNwX2hkbWlfbXV0ZV9hdWRpbyhhbng3OHh4LCB0cnVlKTsKKwkJc3BfaGRtaV9tdXRlX3Zp ZGVvKGFueDc4eHgsIHRydWUpOworCQlzcF9oZG1pX3NldF9ocGQoYW54Nzh4eCwgZmFsc2UpOwor CQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsKKwkJc3BfaGRtaV9zZXRfaHBkKGFueDc4eHgs IHRydWUpOworCX0gZWxzZSB7CisJCXNwLmhkY3BfZXJyb3JfY291bnQrKzsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkIHNwX2hkbWlfbmV3X2djcF9pbnQoc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7 CisJdTggdmFsOworCisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgUlhfUDEsIFNQX0dFTkVSQUxfQ1RS TF9QQUNLRVRfUkVHLCAmdmFsKTsKKwlpZiAodmFsICYgU1BfU0VUX0FWTVVURSkgeworCQlzcF9o ZG1pX211dGVfdmlkZW8oYW54Nzh4eCwgdHJ1ZSk7CisJCXNwX2hkbWlfbXV0ZV9hdWRpbyhhbng3 OHh4LCB0cnVlKTsKKwl9IGVsc2UgaWYgKHZhbCAmIFNQX0NMRUFSX0FWTVVURSkgeworCQlzcF9o ZG1pX211dGVfdmlkZW8oYW54Nzh4eCwgZmFsc2UpOworCQlzcF9oZG1pX211dGVfYXVkaW8oYW54 Nzh4eCwgZmFsc2UpOworCX0KK30KKworc3RhdGljIHZvaWQgc3BfaHBkX2ludF9oYW5kbGVyKHN0 cnVjdCBhbng3OHh4ICphbng3OHh4LCB1OCBocGRfc291cmNlKQoreworCXU4IHZhbDsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmYW54Nzh4eC0+Y2xpZW50LT5kZXY7CisKKwlzd2l0Y2ggKGhwZF9z b3VyY2UpIHsKKwljYXNlIFNQX0hQRF9MT1NUOgorCQlkZXZfZGJnKGRldiwgIkhQRDogY2FibGUg aXMgcHVsbGVkIG91dFxuIik7CisJCXNwX2hkbWlfc2V0X2hwZChhbng3OHh4LCBmYWxzZSk7CisJ CXNwX3NldF9zeXN0ZW1fc3RhdGUoYW54Nzh4eCwgU1RBVEVfQ0FCTEVfVU5QTFVHR0VEKTsKKwkJ YnJlYWs7CisJY2FzZSBTUF9IUERfQ0hHOgorCQlkZXZfZGJnKGRldiwgIkhQRDogaG90cGx1ZyBj aGFuZ2UgZGV0ZWN0ZWRcbiIpOworCQl1c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CisJCWlmIChz cC5jb21tb25faW50WzNdICYgU1BfSFBEX0lSUSkKKwkJCXNwX2hwZF9pcnFfcHJvY2Vzcyhhbng3 OHh4KTsKKworCQlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfRFBfU1lTVEVNX0NUUkxf QkFTRSArIDMsICZ2YWwpOworCQlpZiAodmFsICYgU1BfSFBEX1NUQVRVUykgeworCQkJaWYgKHNw LmNvbW1vbl9pbnRbM10gJiBTUF9IUERfSVJRKQorCQkJCXNwX2hwZF9pcnFfcHJvY2Vzcyhhbng3 OHh4KTsKKwkJfSBlbHNlIHsKKwkJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLAorCQkJCSAg ICBTUF9EUF9TWVNURU1fQ1RSTF9CQVNFICsgMywKKwkJCQkgICAgJnZhbCk7CisJCQlpZiAodmFs ICYgU1BfSFBEX1NUQVRVUykgeworCQkJCXNwX2hkbWlfc2V0X2hwZChhbng3OHh4LCBmYWxzZSk7 CisJCQkJc3Bfc2V0X3N5c3RlbV9zdGF0ZShhbng3OHh4LAorCQkJCQkJICAgIFNUQVRFX1dBSVRJ TkdfQ0FCTEVfUExVRyk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7 CisJfQorfQorCitzdGF0aWMgdm9pZCBzcF9zeXN0ZW1faXNyX2hhbmRsZXIoc3RydWN0IGFueDc4 eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNsaWVudC0+ ZGV2OworCisJaWYgKHNwLmNvbW1vbl9pbnRbM10gJiBTUF9IUERfTE9TVCkKKwkJc3BfaHBkX2lu dF9oYW5kbGVyKGFueDc4eHgsIFNQX0hQRF9MT1NUKTsKKwllbHNlIGlmIChzcC5jb21tb25faW50 WzNdICYgU1BfSFBEX0NIRykKKwkJc3BfaHBkX2ludF9oYW5kbGVyKGFueDc4eHgsIFNQX0hQRF9D SEcpOworCisJaWYgKHNwLmNvbW1vbl9pbnRbMF0gJiBTUF9QTExfTE9DS19DSEcpCisJCXNwX3Bs bF9jaGFuZ2VkX2ludF9oYW5kbGVyKGFueDc4eHgpOworCisJaWYgKHNwLmNvbW1vbl9pbnRbMV0g JiBTUF9IRENQX0FVVEhfRE9ORSkKKwkJc3BfYXV0aF9kb25lX2ludF9oYW5kbGVyKGFueDc4eHgp OworCisJaWYgKChzcC5jb21tb25faW50WzJdICYgU1BfSERDUF9MSU5LX0NIRUNLX0ZBSUwpICYm CisJICAgICFzcF9oZGNwX3JlcGVhdGVyX21vZGUoYW54Nzh4eCkpIHsKKwkJc3Bfc2V0X3N5c3Rl bV9zdGF0ZShhbng3OHh4LCBTVEFURV9MSU5LX1RSQUlOSU5HKTsKKwkJZGV2X2RiZyhkZXYsICJI RENQIFN5bmMgTG9zdCFcbiIpOworCX0KKworCWlmIChzcC5kcF9pbnQgJiBTUF9UUkFJTklOR19G SU5JU0gpCisJCXNwX2x0X2RvbmVfaW50X2hhbmRsZXIoYW54Nzh4eCk7CisKKwlpZiAoc3AudHhf c3lzdGVtX3N0YXRlID4gU1RBVEVfU0lOS19DT05ORUNUSU9OKSB7CisJCWlmIChzcC5zcF9oZG1p X2ludFs1XSAmIFNQX05FV19BVklfUEtUKQorCQkJc3BfaGRtaV9uZXdfYXZpX2ludChhbng3OHh4 KTsKKwl9CisKKwlpZiAoc3AudHhfc3lzdGVtX3N0YXRlID4gU1RBVEVfVklERU9fT1VUUFVUKSB7 CisJCWlmIChzcC5zcF9oZG1pX2ludFs2XSAmIFNQX05FV19WUykgeworCQkJc3Auc3BfaGRtaV9p bnRbNl0gJj0gflNQX05PX1ZTSTsKKwkJCXNwX2hkbWlfbmV3X3ZzaV9pbnQoYW54Nzh4eCk7CisJ CX0KKwkJaWYgKHNwLnNwX2hkbWlfaW50WzZdICYgU1BfTk9fVlNJKQorCQkJc3BfaGRtaV9ub192 c2lfaW50KGFueDc4eHgpOworCX0KKworCWlmIChzcC50eF9zeXN0ZW1fc3RhdGUgPj0gU1RBVEVf VklERU9fT1VUUFVUKSB7CisJCWlmIChzcC5zcF9oZG1pX2ludFswXSAmIFNQX0NLRFRfQ0hHKQor CQkJc3BfaGRtaV9jbGtfZGV0X2ludChhbng3OHh4KTsKKworCQlpZiAoc3Auc3BfaGRtaV9pbnRb MF0gJiBTUF9TQ0RUX0NIRykKKwkJCWRldl9kYmcoZGV2LCAiSERDUCBTeW5jIERldGVjdGVkXG4i KTsKKworCQlpZiAoc3Auc3BfaGRtaV9pbnRbMF0gJiBTUF9IRE1JX0RWSSkKKwkJCXNwX2hkbWlf ZHZpX2ludChhbng3OHh4KTsKKworCQlpZiAoKHNwLnNwX2hkbWlfaW50WzVdICYgU1BfTkVXX0FV RF9QS1QpIHx8CisJCSAgICAoc3Auc3BfaGRtaV9pbnRbMl0gJiBTUF9BVURfTU9ERV9DSEcpKQor CQkJc3BfaGRtaV9yZXN0YXJ0X2F1ZGlvX2Noayhhbng3OHh4KTsKKworCQlpZiAoc3Auc3BfaGRt aV9pbnRbNV0gJiBTUF9DVFNfUkNWKQorCQkJc3BfaGRtaV9jdHNfcmN2X2ludChhbng3OHh4KTsK KworCQlpZiAoc3Auc3BfaGRtaV9pbnRbNF0gJiBTUF9BVURJT19SQ1YpCisJCQlzcF9oZG1pX2F1 ZGlvX3Jjdl9pbnQoYW54Nzh4eCk7CisKKwkJaWYgKHNwLnNwX2hkbWlfaW50WzFdICYgU1BfSERD UF9FUlIpCisJCQlzcF9oZG1pX2hkY3BfZXJyb3JfaW50KGFueDc4eHgpOworCisJCWlmIChzcC5z cF9oZG1pX2ludFs1XSAmIFNQX05FV19DUF9QS1QpCisJCQlzcF9oZG1pX25ld19nY3BfaW50KGFu eDc4eHgpOworCisJCWlmIChzcC5zcF9oZG1pX2ludFsxXSAmIFNQX0FVRElPX1NBTVBMRV9DSEcp CisJCQlzcF9oZG1pX2F1ZGlvX3NhbXBsZWNoZ19pbnQoYW54Nzh4eCk7CisJfQorfQorCitzdGF0 aWMgdm9pZCBzcF9zaG93X2luZm9ybWF0aW9uKHN0cnVjdCBhbng3OHh4ICphbng3OHh4KQorewor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbng3OHh4LT5jbGllbnQtPmRldjsKKwl1OCB2YWwsIHZh bDE7CisJdTE2IGhfcmVzLCBoX2FjdCwgdl9yZXMsIHZfYWN0OworCXUxNiBoX2ZwLCBoX3N3LCBo X2JwLCB2X2ZwLCB2X3N3LCB2X2JwOworCXVuc2lnbmVkIGxvbmcgcmVmcmVzaDsKKwl1bnNpZ25l ZCBsb25nIHBjbGs7CisKKwlkZXZfZGJnKGRldiwgIlxuKioqKioqKioqKioqKiBTUCBWaWRlbyBJ bmZvcm1hdGlvbiAqKioqKioqKioqKioqKlxuIik7CisKKwlzd2l0Y2ggKHNwX2dldF9saW5rX2Jh bmR3aWR0aChhbng3OHh4KSkgeworCWNhc2UgRFBfTElOS19CV18xXzYyOgorCQlkZXZfZGJnKGRl diwgIkJXID0gMS42MkdcbiIpOworCQlicmVhazsKKwljYXNlIERQX0xJTktfQldfMl83OgorCQlk ZXZfZGJnKGRldiwgIkJXID0gMi43R1xuIik7CisJCWJyZWFrOworCWNhc2UgRFBfTElOS19CV181 XzQ6CisJCWRldl9kYmcoZGV2LCAiQlcgPSA1LjRHXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBEUF9M SU5LX0JXXzZfNzU6CisJCWRldl9kYmcoZGV2LCAiQlcgPSA2Ljc1R1xuIik7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXBjbGsgPSBzcF9wY2xrX2NhbGMoYW54Nzh4eCk7 CisJcGNsayA9IHBjbGsgLyAxMDsKKworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9U T1RBTF9MSU5FX1NUQUxfUkVHLCAmdmFsKTsKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwg U1BfVE9UQUxfTElORV9TVEFIX1JFRywgJnZhbDEpOworCisJdl9yZXMgPSB2YWwxOworCXZfcmVz ID0gdl9yZXMgPDwgODsKKwl2X3JlcyA9IHZfcmVzICsgdmFsOworCisJc3BfcmVnX3JlYWQoYW54 Nzh4eCwgVFhfUDIsIFNQX0FDVF9MSU5FX1NUQUxfUkVHLCAmdmFsKTsKKwlzcF9yZWdfcmVhZChh bng3OHh4LCBUWF9QMiwgU1BfQUNUX0xJTkVfU1RBSF9SRUcsICZ2YWwxKTsKKworCXZfYWN0ID0g dmFsMTsKKwl2X2FjdCA9IHZfYWN0IDw8IDg7CisJdl9hY3QgPSB2X2FjdCArIHZhbDsKKworCXNw X3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9UT1RBTF9QSVhFTF9TVEFMX1JFRywgJnZhbCk7 CisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDIsIFNQX1RPVEFMX1BJWEVMX1NUQUhfUkVHLCAm dmFsMSk7CisKKwloX3JlcyA9IHZhbDE7CisJaF9yZXMgPSBoX3JlcyA8PCA4OworCWhfcmVzID0g aF9yZXMgKyB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwgU1BfQUNUX1BJWEVM X1NUQUxfUkVHLCAmdmFsKTsKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwgU1BfQUNUX1BJ WEVMX1NUQUhfUkVHLCAmdmFsMSk7CisKKwloX2FjdCA9IHZhbDE7CisJaF9hY3QgPSBoX2FjdCA8 PCA4OworCWhfYWN0ID0gaF9hY3QgKyB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9Q MiwgU1BfSF9GX1BPUkNIX1NUQUxfUkVHLCAmdmFsKTsKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBU WF9QMiwgU1BfSF9GX1BPUkNIX1NUQUhfUkVHLCAmdmFsMSk7CisKKwloX2ZwID0gdmFsMTsKKwlo X2ZwID0gaF9mcCA8PCA4OworCWhfZnAgPSBoX2ZwICsgdmFsOworCisJc3BfcmVnX3JlYWQoYW54 Nzh4eCwgVFhfUDIsIFNQX0hfU1lOQ19TVEFMX1JFRywgJnZhbCk7CisJc3BfcmVnX3JlYWQoYW54 Nzh4eCwgVFhfUDIsIFNQX0hfU1lOQ19TVEFIX1JFRywgJnZhbDEpOworCisJaF9zdyA9IHZhbDE7 CisJaF9zdyA9IGhfc3cgPDwgODsKKwloX3N3ID0gaF9zdyArIHZhbDsKKworCXNwX3JlZ19yZWFk KGFueDc4eHgsIFRYX1AyLCBTUF9IX0JfUE9SQ0hfU1RBTF9SRUcsICZ2YWwpOworCXNwX3JlZ19y ZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9IX0JfUE9SQ0hfU1RBSF9SRUcsICZ2YWwxKTsKKworCWhf YnAgPSB2YWwxOworCWhfYnAgPSBoX2JwIDw8IDg7CisJaF9icCA9IGhfYnAgKyB2YWw7CisKKwlz cF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwgU1BfVl9GX1BPUkNIX1NUQV9SRUcsICZ2YWwpOwor CXZfZnAgPSB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwgU1BfVl9TWU5DX1NU QV9SRUcsICZ2YWwpOworCXZfc3cgPSB2YWw7CisKKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9Q MiwgU1BfVl9CX1BPUkNIX1NUQV9SRUcsICZ2YWwpOworCXZfYnAgPSB2YWw7CisKKwlkZXZfZGJn KGRldiwgInRvdGFsIHJlc29sdXRpb24gaXMgJWQgKiAlZFxuIiwgaF9yZXMsIHZfcmVzKTsKKwor CWRldl9kYmcoZGV2LCAiSEY9JWQsIEhTVz0lZCwgSEJQPSVkXG4iLCBoX2ZwLCBoX3N3LCBoX2Jw KTsKKwlkZXZfZGJnKGRldiwgIlZGPSVkLCBWU1c9JWQsIFZCUD0lZFxuIiwgdl9mcCwgdl9zdywg dl9icCk7CisKKwlpZiAoaF9yZXMgPT0gMCB8fCB2X3JlcyA9PSAwKSB7CisJCXJlZnJlc2ggPSAw OworCX0gZWxzZSB7CisJCXJlZnJlc2ggPSBwY2xrICogMTAwMDAwMDsKKwkJcmVmcmVzaCA9IERJ Vl9ST1VORF9DTE9TRVNUKHJlZnJlc2gsIGhfcmVzKTsKKwkJcmVmcmVzaCA9IERJVl9ST1VORF9D TE9TRVNUKHJlZnJlc2gsIHZfcmVzKTsKKwl9CisKKwlkZXZfZGJnKGRldiwgImFjdGl2ZSByZXNv bHV0aW9uIGlzICVkICogJWQgQCAlbGRIelxuIiwgaF9hY3QsIHZfYWN0LAorCQlyZWZyZXNoKTsK KworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9EUF9WSURFT19DVFJMX1JFRywgJnZh bCk7CisKKwl2YWwgJj0gU1BfQ09MT1JfRl9NQVNLOworCXZhbCA+Pj0gU1BfQ09MT1JfRl9TSElG VDsKKwlpZiAodmFsID09IEhETUlfQ09MT1JTUEFDRV9SR0IpCisJCWRldl9kYmcoZGV2LCAiY29s b3JzcGFjZTogUkdCIik7CisJZWxzZSBpZiAodmFsID09IEhETUlfQ09MT1JTUEFDRV9ZVVY0MjIp CisJCWRldl9kYmcoZGV2LCAiY29sb3JzcGFjZTogWUNiQ3I0MjIiKTsKKwllbHNlIGlmICh2YWwg PT0gSERNSV9DT0xPUlNQQUNFX1lVVjQ0NCkKKwkJZGV2X2RiZyhkZXYsICJjb2xvcnNwYWNlOiBZ Q2JDcjQ0NCIpOworCisJc3BfcmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX0RQX1ZJREVPX0NU UkxfUkVHLCAmdmFsKTsKKworCXZhbCAmPSBTUF9CUENfTUFTSzsKKwl2YWwgPj49IFNQX0JQQ19T SElGVDsKKwlpZiAodmFsICA9PSBTUF9CUENfNkJJVFMpCisJCWRldl9kYmcoZGV2LCAiNiBCUENc biIpOworCWVsc2UgaWYgKHZhbCA9PSBTUF9CUENfOEJJVFMpCisJCWRldl9kYmcoZGV2LCAiOCBC UENcbiIpOworCWVsc2UgaWYgKHZhbCA9PSBTUF9CUENfMTBCSVRTKQorCQlkZXZfZGJnKGRldiwg IjEwIEJQQ1xuIik7CisJZWxzZSBpZiAodmFsID09IFNQX0JQQ18xMkJJVFMpCisJCWRldl9kYmco ZGV2LCAiMTIgQlBDXG4iKTsKKworCWlmIChpc19hbnhfZG9uZ2xlKGFueDc4eHgpKSB7CisJCS8q CisJCSAqIDAwNTAzaCAtIDAwNUZGaDogUkVTRVJWRUQgZm9yIEJyYW5jaCBEZXZpY2UgdmVuZG9y LXNwZWNpZmljCisJCSAqIHVzYWdlCisJCSAqLworCQlzcF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBj ZChhbng3OHh4LCAweDA1MjMsIDEsICZ2YWwpOworCQlkZXZfZGJnKGRldiwgIkFuYWxvZ2l4IERv bmdsZSBGVyBWZXIgJS4yeFxuIiwgdmFsICYgMHg3Zik7CisJfQorCisJZGV2X2RiZyhkZXYsICJc bioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsK K30KKworc3RhdGljIHZvaWQgc3BfaGRjcF9yZXBlYXRlcl9yZWF1dGgoc3RydWN0IGFueDc4eHgg KmFueDc4eHgpCit7CisJdTggdmFsLCBjdHJsLCBzdGF0dXM7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gJmFueDc4eHgtPmNsaWVudC0+ZGV2OworCisJbXNsZWVwKDUwKTsKKwlzcF9yZWdfcmVhZChh bng3OHh4LCBSWF9QMSwgU1BfUlhfSERDUF9TVEFUVVNfUkVHLCAmdmFsKTsKKworCWlmICh2YWwg JiBTUF9BVVRIX0VOKSB7CisJCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AwLCBTUF9IRENQX0NU UkwwX1JFRywgJmN0cmwpOworCQlpZiAoY3RybCAmIFNQX0hBUkRfQVVUSF9FTikgeworCQkJc3Bf cmVnX3JlYWQoYW54Nzh4eCwgVFhfUDAsIFNQX1RYX0hEQ1BfU1RBVFVTX1JFRywKKwkJCQkgICAg JnN0YXR1cyk7CisJCQlpZiAoIShzdGF0dXMgJiBTUF9BVVRIRU5fUEFTUykgJiYKKwkJCSAgICAo c3RhdHVzICYgU1BfQVVUSF9GQUlMKSkgeworCQkJCWRldl9kYmcoZGV2LCAiY2xlYW4gSERDUCBh bmQgcmUtYXV0aFxuIik7CisJCQkJc3AucmVwZWF0ZXJfc3RhdGUgPSBIRENQX0VSUk9SOworCQkJ fQorCQl9IGVsc2UgeworCQkJZGV2X2RiZyhkZXYsICJyZXBlYXRlciBtb2RlLCBlbmFibGUgSFcg SERDUFxuIik7CisJCQlzcC5yZXBlYXRlcl9zdGF0ZSA9IEhEQ1BfRVJST1I7CisJCX0KKwl9CisK KwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfSERDUF9DVFJMMF9SRUcsICZjdHJsKTsK KwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMCwgU1BfVFhfSERDUF9TVEFUVVNfUkVHLCAmc3Rh dHVzKTsKKworCWlmICgoY3RybCA9PSBTUF9IRENQX0ZVTkNUSU9OX0VOQUJMRUQpICYmIChzdGF0 dXMgJiBTUF9BVVRIX0ZBSUwpKSB7CisJCWRldl9kYmcoZGV2LCAiSERDUCBlbmNyeXB0aW9uIGZh aWx1cmUgMHglMDJ4XG4iLCBzdGF0dXMpOworCQlzcC5yZXBlYXRlcl9zdGF0ZSA9IEhEQ1BfRVJS T1I7CisJfQorCisJaWYgKHNwLnJlcGVhdGVyX3N0YXRlID09IEhEQ1BfRVJST1IpIHsKKwkJc3Bf Y2xlYW5faGRjcF9zdGF0dXMoYW54Nzh4eCk7CisJCW1zbGVlcCg1MCk7CisJCS8qIENsZWFyIEhE Q1AgQVVUSCBpbnRlcnJ1cHQgKi8KKwkJc3BfcmVnX3NldF9iaXRzKGFueDc4eHgsIFRYX1AyLCBT UF9DT01NT05fSU5UX1NUQVRVU19CQVNFICsgMiwKKwkJCQlTUF9IRENQX0FVVEhfRE9ORSk7CisJ CXNwX2h3X2hkY3BfZW5hYmxlKGFueDc4eHgpOworCQlzcC5yZXBlYXRlcl9zdGF0ZSA9IEhEQ1Bf RE9JTkc7CisJfQorfQorCisvKioKKyAqIHNwX21haW5fcHJvY2VzcygpOiBTbGltUG9ydCBNYWlu IFByb2Nlc3MKKyAqCisgKiBTbGltUG9ydCBNYWluIFByb2Nlc3MgU3RhdGVzOgorICogMC4gQ2Fi bGUgcHVsbGVkIG91dC4KKyAqICAgIC0gUG93ZXIgZG93biBkZXZpY2UuCisgKiAxLiBTbGltUG9y dCBwbHVnCisgKiAgICAtIFBvd2VyIG9uIGRldmljZQorICogMi4gU2xpbVBvcnQgaW5pdGlhbGl6 YXRpb24KKyAqICAgIC0gRW5hYmxlIHRoZSBwb3dlciBzdXBwbHkgZm9yIGRvd25zdHJlYW0KKyAq ICAgIC0gUG93ZXIgb24gdGhlIHJlZ2lzdGVyIGFjY2VzcworICogICAgLSBJbml0aWFsaXplIHRo ZSByZWxhdGVkIHJlZ2lzdGVycworICogMy4gU2luayBjb25uZWN0aW9uCisgKiAgICAgLSBHZXQg dGhlIGNhYmxlIHR5cGUgKEhETUksIFZHQSBvciBNeURQKQorICogICAgIC0gQ2hlY2sgdGhlIGNv bm5lY3Rpb24gd2l0aCBkb3duc3RyZWFtCisgKiA0LiBSZWFkIEVESUQKKyAqICAgIC0gUmVhZCBw YXJ0aWFsIEVESUQgZGF0YSB0byBkZWNpZGUgd2hldGhlciB0byByZS1yZWFkIGVudGlyZSBFRElE CisgKiAgICAtIEVESUQgcmVhZAorICogICAgLSBQYXJzZSBFRElEIHRvIGdldCB0aGUgdmlkZW8g YmFuZHdpZHRoCisgKiA1LiBMaW5rIHRyYWluaW5nCisgKiAgICAtIENoZWNrIHRoZSBkb3duc3Ry ZWFtIGJhbmR3aWR0aAorICogICAgLSBIYXJkd2FyZSBsaW5rIHRyYWluaW5nCisgKiA2LiBWaWRl byBvdXRwdXQKKyAqICAgIC0gVmVyaWZ5IHRoYXQgaW5wdXQgdmlkZW8gaXMgc3RhYmxlCisgKiAg ICAtIE9yZGVyIGJ5IHRoZSBpbnB1dCB2aWRlbyB0byBjYWxjdWxhdGUgdGhlIGJhbmR3aWR0aAor ICogICAgLSBTZXQgQVZJIHBhY2tldCwgYml0LW1hcHBpbmcsIGNvbG9yIGRlcHRoLCBldGMuCisg KiA3LiBIRENQIGF1dGhlbnRpY2F0aW9uCisgKiAgICAtIFZlcmlmeSB0aGF0IEhEQ1AgaXMgc3Vw cG9ydGVkCisgKiAgICAtIEVuYWJsZSBoYXJkd2FyZSBIRENQCisgKiA4LiBBdWRpbyBvdXRwdXQK KyAqICAgIC0gQXV0b21hdGljIGF1ZGlvIE0gdmFsdSBhZGp1c3RtZW50CisgKiAgICAtIENvbmZp Z3VyZSBhdWRpbyBtdWx0aWNoYW5uZWwKKyAqICAgIC0gU2V0IGF1ZGlvIHBhY2tldAorICogOS4g UGxheWJhY2sKKyAqICAgIC0gVGhlIG5vcm1hbCBzeXN0ZW0gd29ya2luZyBzdGF0ZQorICoKKyAq LworYm9vbCBzcF9tYWluX3Byb2Nlc3Moc3RydWN0IGFueDc4eHggKmFueDc4eHgpCit7CisJLyoK KwkgKiBQcm9jZXNzIHRoZSBpbnRlcnJ1cHRzCisJICovCisJaWYgKHNwLnR4X3N5c3RlbV9zdGF0 ZSA+IFNUQVRFX1dBSVRJTkdfQ0FCTEVfUExVRykgeworCQkvKiBJbnRlcnJ1cHQgcmVjZWl2ZXIg Ki8KKwkJc3BfaW50X3JlY2VpdmVyKGFueDc4eHgpOworCisJCS8qIFRhc2sgaGFuZGxlciAqLwor CQlzcF9zeXN0ZW1faXNyX2hhbmRsZXIoYW54Nzh4eCk7CisKKwkJLyogSWYgZGV2aWNlOyBzdXBw b3J0cyBIRENQIHJlcGVhdGVyIGZ1bmN0aW9uIHJlLWF1dGggKi8KKwkJaWYgKHNwX2hkY3BfcmVw ZWF0ZXJfbW9kZShhbng3OHh4KSkKKwkJCXNwX2hkY3BfcmVwZWF0ZXJfcmVhdXRoKGFueDc4eHgp OworLyoKKwkJaWYgKCFzcC5oZGNwX2VuYWJsZWQpIHsKKwkJCXNwX3NldF9zeXN0ZW1fc3RhdGUo YW54Nzh4eCwgU1RBVEVfSERDUF9BVVRIKTsKKwkJCXNwLmhkY3BfZW5hYmxlZCA9IHRydWU7CisJ CX0KKyovCisJfQorCisJLyoKKwkgKiBTbGltUG9ydCBTdGF0ZSBQcm9jZXNzCisJICovCisJc3dp dGNoIChzcC50eF9zeXN0ZW1fc3RhdGUpIHsKKwljYXNlIFNUQVRFX0NBQkxFX1VOUExVR0dFRDoK KwkJc3BfdmFyaWFibGVfaW5pdChhbng3OHh4KTsKKwkJYW54Nzh4eF9wb3dlcm9mZihhbng3OHh4 KTsKKwkJcmV0dXJuIGZhbHNlOworCWNhc2UgU1RBVEVfV0FJVElOR19DQUJMRV9QTFVHOgorCQlz cF92YXJpYWJsZV9pbml0KGFueDc4eHgpOworCQlhbng3OHh4X3Bvd2Vyb24oYW54Nzh4eCk7CisJ CXNwLnR4X3N5c3RlbV9zdGF0ZSA9IFNUQVRFX1NQX0lOSVRJQUxJWkVEOworCQlzcF9wcmludF9z eXN0ZW1fc3RhdGUoYW54Nzh4eCwgc3AudHhfc3lzdGVtX3N0YXRlKTsKKwkvKiBmYWxsdGhyb3Vn aCAqLworCWNhc2UgU1RBVEVfU1BfSU5JVElBTElaRUQ6CisJCXNwX2luaXRpYWxpemF0aW9uKGFu eDc4eHgpOworCQlzcC50eF9zeXN0ZW1fc3RhdGUgPSBTVEFURV9TSU5LX0NPTk5FQ1RJT047CisJ CXNwX3ByaW50X3N5c3RlbV9zdGF0ZShhbng3OHh4LCBzcC50eF9zeXN0ZW1fc3RhdGUpOworCS8q IGZhbGx0aHJvdWdoICovCisJY2FzZSBTVEFURV9TSU5LX0NPTk5FQ1RJT046CisJCWlmIChzcF9n ZXRfZHBfY29ubmVjdGlvbihhbng3OHh4KSkgeworCQkJc3AudHhfc3lzdGVtX3N0YXRlID0gU1RB VEVfUEFSU0VfRURJRDsKKwkJCXNwX3ByaW50X3N5c3RlbV9zdGF0ZShhbng3OHh4LCBzcC50eF9z eXN0ZW1fc3RhdGUpOworCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwkvKiBmYWxsdGhyb3Vn aCAqLworCWNhc2UgU1RBVEVfUEFSU0VfRURJRDoKKwkJaWYgKHNwX2VkaWRfcHJvY2Vzcyhhbng3 OHh4KSkgeworCQkJc3AudHhfc3lzdGVtX3N0YXRlID0gU1RBVEVfTElOS19UUkFJTklORzsKKwkJ CXNwX3ByaW50X3N5c3RlbV9zdGF0ZShhbng3OHh4LCBzcC50eF9zeXN0ZW1fc3RhdGUpOworCQl9 IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgU1RBVEVf TElOS19UUkFJTklORzoKKwkJaWYgKHNwX2xpbmtfdHJhaW5pbmcoYW54Nzh4eCkpIHsKKwkJCXNw LnR4X3N5c3RlbV9zdGF0ZSA9IFNUQVRFX1ZJREVPX09VVFBVVDsKKwkJCXNwX3ByaW50X3N5c3Rl bV9zdGF0ZShhbng3OHh4LCBzcC50eF9zeXN0ZW1fc3RhdGUpOworCQl9IGVsc2UgeworCQkJYnJl YWs7CisJCX0KKwkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgU1RBVEVfVklERU9fT1VUUFVUOgor CQlpZiAoc3BfY29uZmlnX3ZpZGVvX291dHB1dChhbng3OHh4KSkgeworCQkJc3AudHhfc3lzdGVt X3N0YXRlID0gU1RBVEVfSERDUF9BVVRIOworCQkJc3BfcHJpbnRfc3lzdGVtX3N0YXRlKGFueDc4 eHgsIHNwLnR4X3N5c3RlbV9zdGF0ZSk7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCS8q IGZhbGx0aHJvdWdoICovCisJY2FzZSBTVEFURV9IRENQX0FVVEg6CisJCWlmICghc3BfaGRjcF9y ZXBlYXRlcl9tb2RlKGFueDc4eHgpKSB7CisJCQlpZiAoc3BfaGRjcF9wcm9jZXNzKGFueDc4eHgp KSB7CisJCQkJc3AudHhfc3lzdGVtX3N0YXRlID0gU1RBVEVfQVVESU9fT1VUUFVUOworCQkJCXNw X3ByaW50X3N5c3RlbV9zdGF0ZShhbng3OHh4LAorCQkJCQkJICAgICAgc3AudHhfc3lzdGVtX3N0 YXRlKTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzcC50 eF9zeXN0ZW1fc3RhdGUgPSBTVEFURV9BVURJT19PVVRQVVQ7CisJCX0KKwkvKiBmYWxsdGhyb3Vn aCAqLworCWNhc2UgU1RBVEVfQVVESU9fT1VUUFVUOgorCQlpZiAoc3BfY29uZmlnX2F1ZGlvX291 dHB1dChhbng3OHh4KSkgeworCQkJc3AudHhfc3lzdGVtX3N0YXRlID0gU1RBVEVfUExBWV9CQUNL OworCQkJc3BfcHJpbnRfc3lzdGVtX3N0YXRlKGFueDc4eHgsIHNwLnR4X3N5c3RlbV9zdGF0ZSk7 CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBT VEFURV9QTEFZX0JBQ0s6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRydWU7 Cit9CisKKy8qKgorICogc3Bfc3lzdGVtX2luaXQoKTogU3lzdGVtIGluaXRpYWxpemF0aW9uCisg KgorICogQGFueDc4eHg6IFNsaW1Qb3J0IGRldmljZS4KKyAqCisgKiBBIHZhbHVlIG9mIHplcm8g d2lsbCBiZSByZXR1cm5lZCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHdpbGwKKyAqIGJl IHJldHVybmVkIGluIGVycm9yIGNhc2VzLgorICovCitpbnQgc3Bfc3lzdGVtX2luaXQoc3RydWN0 IGFueDc4eHggKmFueDc4eHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFueDc4eHgtPmNs aWVudC0+ZGV2OworCXUxNiBpZDsKKwl1OCBpZGggPSAwLCBpZGwgPSAwOworCWludCBpOworCisJ c3BfdmFyaWFibGVfaW5pdChhbng3OHh4KTsKKworCWFueDc4eHhfcG93ZXJvbihhbng3OHh4KTsK KworCS8qIGNoZWNrIGNoaXAgaWQgKi8KKwlzcF9yZWdfcmVhZChhbng3OHh4LCBUWF9QMiwgU1Bf REVWSUNFX0lETF9SRUcsICZpZGwpOworCXNwX3JlZ19yZWFkKGFueDc4eHgsIFRYX1AyLCBTUF9E RVZJQ0VfSURIX1JFRywgJmlkaCk7CisJaWQgPSBpZGwgfCAoaWRoIDw8IDgpOworCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hpcGlkX2xpc3QpOyBpKyspIHsKKwkJaWYgKGlkID09IGNo aXBpZF9saXN0W2ldKQorCQkJcmV0dXJuIDA7CisJfQorCisJYW54Nzh4eF9wb3dlcm9mZihhbng3 OHh4KTsKKworCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGRldGVjdCBBTlgleFxuIiwgaWQpOwor CisJcmV0dXJuIC1FTk9ERVY7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L2FueDc4eHgvc2xpbXBvcnRfdHhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4 eHgvc2xpbXBvcnRfdHhfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MDhlYWJjOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4 eC9zbGltcG9ydF90eF9kcnYuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodChj KSAyMDE1LCBBbmFsb2dpeCBTZW1pY29uZHVjdG9yLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19TTElNUE9SVF9UWF9EUlZfSAorI2RlZmluZSBf X1NMSU1QT1JUX1RYX0RSVl9ICisKKyNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CisKKyNpbmNsdWRl ICJhbng3OHh4LmgiCisjaW5jbHVkZSAic2xpbXBvcnRfdHhfcmVnLmgiCisKKyNkZWZpbmUgRldf VkVSU0lPTgkweDIzCisKK2VudW0gc3BfdHhfc3RhdGUgeworCVNUQVRFX0NBQkxFX1VOUExVR0dF RCwKKwlTVEFURV9XQUlUSU5HX0NBQkxFX1BMVUcsCisJU1RBVEVfU1BfSU5JVElBTElaRUQsCisJ U1RBVEVfU0lOS19DT05ORUNUSU9OLAorCVNUQVRFX1BBUlNFX0VESUQsCisJU1RBVEVfTElOS19U UkFJTklORywKKwlTVEFURV9WSURFT19PVVRQVVQsCisJU1RBVEVfSERDUF9BVVRILAorCVNUQVRF X0FVRElPX09VVFBVVCwKKwlTVEFURV9QTEFZX0JBQ0sKK307CisKK2VudW0gc3BfdHhfcG93ZXJf YmxvY2sgeworCVNQX1RYX1BXUl9SRUcgPSBTUF9SRUdJU1RFUl9QRCwKKwlTUF9UWF9QV1JfSERD UCA9IFNQX0hEQ1BfUEQsCisJU1BfVFhfUFdSX0FVRElPID0gU1BfQVVESU9fUEQsCisJU1BfVFhf UFdSX1ZJREVPID0gU1BfVklERU9fUEQsCisJU1BfVFhfUFdSX0xJTksgPSBTUF9MSU5LX1BELAor CVNQX1RYX1BXUl9UT1RBTCA9IFNQX1RPVEFMX1BELAorCVNQX1RYX1BXUl9OVU1TCit9OworCitl bnVtIHNwX3R4X2x0X3N0YXR1cyB7CisJTFRfSU5JVCwKKwlMVF9XQUlUX1BMTF9MT0NLLAorCUxU X0NIRUNLX0xJTktfQlcsCisJTFRfU1RBUlQsCisJTFRfV0FJVElOR19GSU5JU0gsCisJTFRfRVJS T1IsCisJTFRfRklOSVNILAorfTsKKworZW51bSBoZGNwX3N0YXR1cyB7CisJSERDUF9DQVBBQkxF X0NIRUNLLAorCUhEQ1BfV0FJVElOR19WSURfU1RCLAorCUhEQ1BfSFdfRU5BQkxFLAorCUhEQ1Bf V0FJVElOR19GSU5JU0gsCisJSERDUF9GSU5JU0gsCisJSERDUF9GQUlMRUQsCisJSERDUF9OT1Rf U1VQUE9SVEVELAorfTsKKworZW51bSByZXBlYXRlcl9zdGF0dXMgeworCUhEQ1BfRE9ORSwKKwlI RENQX0RPSU5HLAorCUhEQ1BfRVJST1IsCit9OworCitlbnVtIHZpZGVvX291dHB1dF9zdGF0dXMg eworCVZPX1dBSVRfVklERU9fU1RBQkxFLAorCVZPX1dBSVRfVFhfVklERU9fU1RBQkxFLAorCVZP X0NIRUNLX1ZJREVPX0lORk8sCisJVk9fRklOSVNILAorfTsKKworZW51bSBhdWRpb19vdXRwdXRf c3RhdHVzIHsKKwlBT19JTklULAorCUFPX0NUU19SQ1ZfSU5ULAorCUFPX0FVRElPX1JDVl9JTlQs CisJQU9fUkNWX0lOVF9GSU5JU0gsCisJQU9fT1VUUFVULAorfTsKKworZW51bSBzcF9zc2NfZGVw IHsKKwlTU0NfREVQX0RJU0FCTEUgPSAweDAsCisJU1NDX0RFUF81MDBQUE0sCisJU1NDX0RFUF8x MDAwUFBNLAorCVNTQ19ERVBfMTUwMFBQTSwKKwlTU0NfREVQXzIwMDBQUE0sCisJU1NDX0RFUF8y NTAwUFBNLAorCVNTQ19ERVBfMzAwMFBQTSwKKwlTU0NfREVQXzM1MDBQUE0sCisJU1NDX0RFUF80 MDAwUFBNLAorCVNTQ19ERVBfNDUwMFBQTSwKKwlTU0NfREVQXzUwMDBQUE0sCisJU1NDX0RFUF81 NTAwUFBNLAorCVNTQ19ERVBfNjAwMFBQTQorfTsKKworYm9vbCBzcF9tYWluX3Byb2Nlc3Moc3Ry dWN0IGFueDc4eHggKmFueDc4eHgpOworaW50IHNwX3N5c3RlbV9pbml0KHN0cnVjdCBhbng3OHh4 ICphbng3OHh4KTsKK3ZvaWQgc3BfdmFyaWFibGVfaW5pdChzdHJ1Y3QgYW54Nzh4eCAqYW54Nzh4 eCk7Cit1OCBzcF9nZXRfbGlua19iYW5kd2lkdGhfZnJvbV9lZGlkKHN0cnVjdCBhbng3OHh4ICph bng3OHh4KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fu eDc4eHgvc2xpbXBvcnRfdHhfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FueDc4eHgv c2xpbXBvcnRfdHhfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2 MDg0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW54Nzh4eC9z bGltcG9ydF90eF9yZWcuaApAQCAtMCwwICsxLDczNyBAQAorLyoKKyAqIENvcHlyaWdodChjKSAy MDE1LCBBbmFsb2dpeCBTZW1pY29uZHVjdG9yLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICovCisKKyNpZm5kZWYgX19TTElNUE9SVF9UWF9SRUdfREVGX0gKKyNkZWZpbmUg X19TTElNUE9SVF9UWF9SRUdfREVGX0gKKworI2RlZmluZSBUWF9QMAkJCQkweDcwCisjZGVmaW5l IFRYX1AxCQkJCTB4N2EKKyNkZWZpbmUgVFhfUDIJCQkJMHg3MgorCisjZGVmaW5lIFJYX1AwCQkJ CTB4N2UKKyNkZWZpbmUgUlhfUDEJCQkJMHg4MAorCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUmVnaXN0ZXIgZGVm aW5pdGlvbiBvZiBkZXZpY2UgYWRkcmVzcyAweDdlICAgICAgICAgICAgICAgICAgKi8KKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisKKy8qCisgKiBTeXN0ZW0gQ29udHJvbCBhbmQgU3RhdHVzCisgKi8KKworLyogU29mdHdh cmUgUmVzZXQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUF9TT0ZUV0FSRV9SRVNFVDFfUkVHCQkw eDExCisjZGVmaW5lIFNQX1ZJREVPX1JTVAkJCUJJVCg0KQorI2RlZmluZSBTUF9IRENQX01BTl9S U1QJCQlCSVQoMikKKyNkZWZpbmUgU1BfVE1EU19SU1QJCQlCSVQoMSkKKyNkZWZpbmUgU1BfU1df TUFOX1JTVAkJCUJJVCgwKQorCisvKiBTeXN0ZW0gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5l IFNQX1NZU1RFTV9TVEFUVVNfUkVHCQkweDE0CisjZGVmaW5lIFNQX1RNRFNfQ0xPQ0tfREVUCQlC SVQoMSkKKyNkZWZpbmUgU1BfVE1EU19ERV9ERVQJCQlCSVQoMCkKKworLyogSERNSSBTdGF0dXMg UmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfSERNSV9TVEFUVVNfUkVHCQkweDE1CisjZGVmaW5lIFNQ X0hETUlfQVVEX0xBWU9VVAkJQklUKDMpCisjZGVmaW5lIFNQX0hETUlfREVUCQkJQklUKDApCisj ICBkZWZpbmUgU1BfRFZJX01PREUJCQkwCisjICBkZWZpbmUgU1BfSERNSV9NT0RFCQkJMQorCisv KiBIRE1JIE11dGUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTUF9IRE1JX01VVEVfQ1RS TF9SRUcJCTB4MTYKKyNkZWZpbmUgU1BfQVVEX01VVEUJCQlCSVQoMSkKKyNkZWZpbmUgU1BfVklE X01VVEUJCQlCSVQoMCkKKworLyogU3lzdGVtIFBvd2VyIERvd24gUmVnaXN0ZXIgMSAqLworI2Rl ZmluZSBTUF9TWVNURU1fUE9XRVJfRE9XTjFfUkVHCTB4MTgKKyNkZWZpbmUgU1BfUFdETl9DVFJM CQkJQklUKDApCisKKy8qCisgKiBBdWRpbyBhbmQgVmlkZW8gQXV0byBDb250cm9sCisgKi8KKwor LyogQXV0byBBdWRpbyBhbmQgVmlkZW8gQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBTUF9B VURWSURfQ1RSTF9SRUcJCTB4MjAKKyNkZWZpbmUgU1BfQVZDX09FCQkJQklUKDcpCisjZGVmaW5l IFNQX0FBQ19PRQkJCUJJVCg2KQorI2RlZmluZSBTUF9BVkNfRU4JCQlCSVQoMSkKKyNkZWZpbmUg U1BfQUFDX0VOCQkJQklUKDApCisKKy8qIEF1ZGlvIEV4Y2VwdGlvbiBFbmFibGUgUmVnaXN0ZXJz ICovCisjZGVmaW5lIFNQX0FVRF9FWENFUFRJT05fRU5BQkxFX0JBU0UJKDB4MjQgLSAxKQorLyog Qml0cyBmb3IgQXVkaW8gRXhjZXB0aW9uIEVuYWJsZSBSZWdpc3RlciAzICovCisjZGVmaW5lIFNQ X0FFQ19FTjIxCQkJQklUKDUpCisKKy8qCisgKiBJbnRlcnJ1cHQKKyAqLworCisvKiBJbnRlcnJ1 cHQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BfSU5UX1NUQVRVUzFfUkVHCQkweDMx CisvKiBCaXRzIGZvciBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1Bf SERNSV9EVkkJCQlCSVQoNykKKyNkZWZpbmUgU1BfQ0tEVF9DSEcJCQlCSVQoNikKKyNkZWZpbmUg U1BfU0NEVF9DSEcJCQlCSVQoNSkKKyNkZWZpbmUgU1BfUENMS19DSEcJCQlCSVQoNCkKKyNkZWZp bmUgU1BfUExMX1VOTE9DSwkJCUJJVCgzKQorI2RlZmluZSBTUF9DQUJMRV9QTFVHX0NIRwkJQklU KDIpCisjZGVmaW5lIFNQX1NFVF9NVVRFCQkJQklUKDEpCisjZGVmaW5lIFNQX1NXX0lOVFIJCQlC SVQoMCkKKy8qIEJpdHMgZm9yIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgMiAqLworI2RlZmlu ZSBTUF9IRENQX0VSUgkJCUJJVCg1KQorI2RlZmluZSBTUF9BVURJT19TQU1QTEVfQ0hHCQlCSVQo MCkJLyogdW5kb2N1bWVudGVkICovCisvKiBCaXRzIGZvciBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lz dGVyIDMgKi8KKyNkZWZpbmUgU1BfQVVEX01PREVfQ0hHCQkJQklUKDApCisvKiBCaXRzIGZvciBJ bnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDUgKi8KKyNkZWZpbmUgU1BfQVVESU9fUkNWCQkJQklU KDApCisvKiBCaXRzIGZvciBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUg U1BfQ1RTX1JDVgkJCUJJVCg3KQorI2RlZmluZSBTUF9ORVdfQVVEX1BLVAkJCUJJVCg0KQorI2Rl ZmluZSBTUF9ORVdfQVZJX1BLVAkJCUJJVCgxKQorI2RlZmluZSBTUF9ORVdfQ1BfUEtUCQkJQklU KDApCisvKiBCaXRzIGZvciBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDcgKi8KKyNkZWZpbmUg U1BfTk9fVlNJCQkJQklUKDcpCisjZGVmaW5lIFNQX05FV19WUwkJCUJJVCg0KQorCisvKiBJbnRl cnJ1cHQgTWFzayBTdGF0dXMgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQX0lOVF9NQVNLX0JBU0UJ CSgweDQxIC0gMSkKKworLyogSERNSSBVUyBUSU1FUiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVm aW5lIFNQX0hETUlfVVNfVElNRVJfQ1RSTF9SRUcJMHg0OQorI2RlZmluZSBTUF9NU19USU1FUl9N QVJHSU5fMTBfOF9NQVNLCTB4MDcKKworLyoKKyAqIFRNRFMgQ29udHJvbAorICovCisKKy8qIFRN RFMgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BfVE1EU19DVFJMX0JBU0UJCSgweDUw IC0gMSkKKy8qIEJpdHMgZm9yIFRNRFMgQ29udHJvbCBSZWdpc3RlciA3ICovCisjZGVmaW5lIFNQ X1BEX1JUCQkJQklUKDApCisKKy8qCisgKiBWaWRlbyBDb250cm9sCisgKi8KKworLyogVmlkZW8g U3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX1ZJREVPX1NUQVRVU19SRUcJCTB4NzAKKyNk ZWZpbmUgU1BfQ09MT1JfREVQVEhfTUFTSwkJMHhmMAorI2RlZmluZSBTUF9DT0xPUl9ERVBUSF9T SElGVAkJNAorIyAgZGVmaW5lIFNQX0NPTE9SX0RFUFRIX01PREVfTEVHQUNZCTB4MDAKKyMgIGRl ZmluZSBTUF9DT0xPUl9ERVBUSF9NT0RFXzI0QklUCTB4MDQKKyMgIGRlZmluZSBTUF9DT0xPUl9E RVBUSF9NT0RFXzMwQklUCTB4MDUKKyMgIGRlZmluZSBTUF9DT0xPUl9ERVBUSF9NT0RFXzM2QklU CTB4MDYKKyMgIGRlZmluZSBTUF9DT0xPUl9ERVBUSF9NT0RFXzQ4QklUCTB4MDcKKworLyogVmlk ZW8gRGF0YSBSYW5nZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX1ZJRF9EQVRBX1JB TkdFX0NUUkxfUkVHCTB4ODMKKyNkZWZpbmUgU1BfUjJZX0lOUFVUX0xJTUlUCQlCSVQoMSkKKwor LyogUGl4ZWwgQ2xvY2sgSGlnaCBSZXNvbHV0aW9uIENvdW50ZXIgUmVnaXN0ZXJzICovCisjZGVm aW5lIFNQX1BDTEtfSElHSFJFU19DTlRfQkFTRQkoMHg4YyAtIDEpCisKKy8qCisgKiBBdWRpbyBD b250cm9sCisgKi8KKworLyogTnVtYmVyIG9mIEF1ZGlvIENoYW5uZWxzIFN0YXR1cyBSZWdpc3Rl cnMgKi8KKyNkZWZpbmUgU1BfQVVEX0NIX1NUQVRVU19SRUdfTlVNCTUKKworLyogQXVkaW8gSU4g Uy9QRElGIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUF9BVURfU1BESUZf Q0hfU1RBVFVTX0JBU0UJMHhjNworCisvKiBBdWRpbyBJTiBTL1BESUYgQ2hhbm5lbCBTdGF0dXMg UmVnaXN0ZXIgNCAqLworI2RlZmluZSBTUF9GU19GUkVRX01BU0sJCQkweDBmCisjICBkZWZpbmUg U1BfRlNfRlJFUV80NDEwMEhaCQkweDAwCisjICBkZWZpbmUgU1BfRlNfRlJFUV80ODAwMEhaCQkw eDAyCisjICBkZWZpbmUgU1BfRlNfRlJFUV8zMjAwMEhaCQkweDAzCisjICBkZWZpbmUgU1BfRlNf RlJFUV84ODIwMEhaCQkweDA4CisjICBkZWZpbmUgU1BfRlNfRlJFUV85NjAwMEhaCQkweDBhCisj ICBkZWZpbmUgU1BfRlNfRlJFUV8xNzY0MDBIWgkJMHgwYworIyAgZGVmaW5lIFNQX0ZTX0ZSRVFf MTkyMDAwSFoJCTB4MGUKKworLyoKKyAqIE1pY2VsbGFuZW91cyBDb250cm9sIEJsb2NrCisgKi8K KworLyogQ0hJUCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0NISVBfQ1RSTF9SRUcJ CTB4ZTMKKyNkZWZpbmUgU1BfTUFOX0hETUk1Vl9ERVQJCUJJVCgzKQorI2RlZmluZSBTUF9QTExM T0NLX0NLRFRfRU4JCUJJVCgyKQorI2RlZmluZSBTUF9BTkFMT0dfQ0tEVF9FTgkJQklUKDEpCisj ZGVmaW5lIFNQX0RJR0lUQUxfQ0tEVF9FTgkJQklUKDApCisKKy8qIFBhY2tldCBSZWNlaXZpbmcg U3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX1BBQ0tFVF9SRUNFSVZJTkdfU1RBVFVTX1JF RwkweGYzCisjZGVmaW5lIFNQX0FWSV9SQ1ZECQkJQklUKDUpCisjZGVmaW5lIFNQX1ZTSV9SQ1ZE CQkJQklUKDEpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisvKiBSZWdpc3RlciBkZWZpbml0aW9uIG9mIGRldmljZSBh ZGRyZXNzIDB4ODAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSERDUCBCQ0FQ UyBTaGFkb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfSERDUF9CQ0FQU19TSEFET1dfUkVHCTB4 MmEKKyNkZWZpbmUgU1BfQkNBUFNfUkVQRUFURVIJCUJJVCg1KQorCisvKiBIRENQIFN0YXR1cyBS ZWdpc3RlciAqLworI2RlZmluZSBTUF9SWF9IRENQX1NUQVRVU19SRUcJCTB4M2YKKyNkZWZpbmUg U1BfQVVUSF9FTgkJCUJJVCg0KQorCisvKgorICogSW5mb0ZyYW1lIGFuZCBDb250cm9sIFBhY2tl dCBSZWdpc3RlcnMKKyAqLworCisvKiBBVkkgSW5mb0ZyYW1lIHBhY2tldCBjaGVja3N1bSAqLwor I2RlZmluZSBTUF9BVklfSU5GT0ZSQU1FX0NIRUNLU1VNCTB4YTMKKworLyogQVZJIEluZm9GcmFt ZSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BfQVZJX0lORk9GUkFNRV9EQVRBX0JBU0UJMHhhNAor CisjZGVmaW5lIFNQX0FWSV9DT0xPUl9GX01BU0sJCTB4NjAKKyNkZWZpbmUgU1BfQVZJX0NPTE9S X0ZfU0hJRlQJCTUKKworLyogQXVkaW8gSW5mb0ZyYW1lIFJlZ2lzdGVycyAqLworI2RlZmluZSBT UF9BVURfSU5GT0ZSQU1FX0RBVEFfQkFTRQkweGM0CisjZGVmaW5lIFNQX0FVRF9JTkZPRlJBTUVf TEFZT1VUX01BU0sJMHgwZgorCisvKiBNUEVHL0hETUkgVmVuZG9yIFNwZWNpZmljIEluZm9GcmFt ZSBQYWNrZXQgdHlwZSBjb2RlICovCisjZGVmaW5lIFNQX01QRUdfVlNfSU5GT0ZSQU1FX1RZUEVf UkVHCTB4ZTAKKworLyogTVBFRy9IRE1JIFZlbmRvciBTcGVjaWZpYyBJbmZvRnJhbWUgUGFja2V0 IGxlbmd0aCAqLworI2RlZmluZSBTUF9NUEVHX1ZTX0lORk9GUkFNRV9MRU5fUkVHCTB4ZTIKKwor LyogTVBFRy9IRE1JIFZlbmRvciBTcGVjaWZpYyBJbmZvRnJhbWUgUGFja2V0IHZlcnNpb24gbnVt YmVyICovCisjZGVmaW5lIFNQX01QRUdfVlNfSU5GT0ZSQU1FX1ZFUl9SRUcJMHhlMQorCisvKiBN UEVHL0hETUkgVmVuZG9yIFNwZWNpZmljIEluZm9GcmFtZSBQYWNrZXQgY29udGVudCAqLworI2Rl ZmluZSBTUF9NUEVHX1ZTX0lORk9GUkFNRV9EQVRBX0JBU0UJMHhlNAorCisvKiBHZW5lcmFsIENv bnRyb2wgUGFja2V0IFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0dFTkVSQUxfQ1RSTF9QQUNLRVRf UkVHCTB4OWYKKyNkZWZpbmUgU1BfQ0xFQVJfQVZNVVRFCQkJQklUKDQpCisjZGVmaW5lIFNQX1NF VF9BVk1VVEUJCQlCSVQoMCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJlZ2lzdGVyIGRlZmluaXRpb24gb2Yg ZGV2aWNlIGFkZHJlc3MgMHg3MCAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBI RENQIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTUF9UWF9IRENQX1NUQVRVU19SRUcJCTB4 MDAKKyNkZWZpbmUgU1BfQVVUSF9GQUlMCQkJQklUKDUpCisjZGVmaW5lIFNQX0FVVEhFTl9QQVNT CQkJQklUKDEpCisKKy8qIEhEQ1AgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQX0hE Q1BfQ1RSTDBfUkVHCQkweDAxCisjZGVmaW5lIFNQX1JYX1JFUEVBVEVSCQkJQklUKDYpCisjZGVm aW5lIFNQX1JFX0FVVEgJCQlCSVQoNSkKKyNkZWZpbmUgU1BfU1dfQVVUSF9PSwkJCUJJVCg0KQor I2RlZmluZSBTUF9IQVJEX0FVVEhfRU4JCQlCSVQoMykKKyNkZWZpbmUgU1BfSERDUF9FTkNfRU4J CQlCSVQoMikKKyNkZWZpbmUgU1BfQktTVl9TUk1fUEFTUwkJQklUKDEpCisjZGVmaW5lIFNQX0tT VkxJU1RfVkxECQkJQklUKDApCisvKiBIRENQIEZ1bmN0aW9uIEVuYWJsZWQgKi8KKyNkZWZpbmUg U1BfSERDUF9GVU5DVElPTl9FTkFCTEVECShCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMikgfCBCSVQo MykpCisKKy8qIEhEQ1AgUmVjZWl2ZXIgQlNUQVRVUyBSZWdpc3RlciAwICovCisjZGVmaW5lCVNQ X0hEQ1BfUlhfQlNUQVRVUzBfUkVHCQkweDFiCisvKiBIRENQIFJlY2VpdmVyIEJTVEFUVVMgUmVn aXN0ZXIgMSAqLworI2RlZmluZQlTUF9IRENQX1JYX0JTVEFUVVMxX1JFRwkJMHgxYworCisvKiBI RENQIEVtYmVkZGVkICJCbHVlIFNjcmVlbiIgQ29udGVudCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUg U1BfSERDUF9WSUQwX0JMVUVfU0NSRUVOX1JFRwkweDJjCisjZGVmaW5lIFNQX0hEQ1BfVklEMV9C TFVFX1NDUkVFTl9SRUcJMHgyZAorI2RlZmluZSBTUF9IRENQX1ZJRDJfQkxVRV9TQ1JFRU5fUkVH CTB4MmUKKworLyogSERDUCBXYWl0IFIwIFRpbWluZyBSZWdpc3RlciAqLworI2RlZmluZSBTUF9I RENQX1dBSVRfUjBfVElNRV9SRUcJMHg0MAorCisvKiBIRENQIExpbmsgSW50ZWdyaXR5IENoZWNr IFRpbWVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0hEQ1BfTElOS19DSEVDS19USU1FUl9SRUcJ MHg0MQorCisvKiBIRENQIFJlcGVhdGVyIFJlYWR5IFdhaXQgVGltZXIgUmVnaXN0ZXIgKi8KKyNk ZWZpbmUgU1BfSERDUF9SUFRSX1JEWV9XQUlUX1RJTUVfUkVHCTB4NDIKKworLyogSERDUCBBdXRv IFRpbWVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0hEQ1BfQVVUT19USU1FUl9SRUcJCTB4NTEK KworLyogSERDUCBLZXkgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0hEQ1BfS0VZX1NU QVRVU19SRUcJCTB4NWUKKworLyogSERDUCBLZXkgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmlu ZSBTUF9IRENQX0tFWV9DT01NQU5EX1JFRwkJMHg1ZgorI2RlZmluZSBTUF9ESVNBQkxFX1NZTkNf SERDUAkJQklUKDIpCisKKy8qIE9UUCBNZW1vcnkgS2V5IFByb3RlY3Rpb24gUmVnaXN0ZXJzICov CisjZGVmaW5lIFNQX09UUF9LRVlfUFJPVEVDVDFfUkVHCQkweDYwCisjZGVmaW5lIFNQX09UUF9L RVlfUFJPVEVDVDJfUkVHCQkweDYxCisjZGVmaW5lIFNQX09UUF9LRVlfUFJPVEVDVDNfUkVHCQkw eDYyCisjZGVmaW5lIFNQX09UUF9QU1cxCQkJMHhhMgorI2RlZmluZSBTUF9PVFBfUFNXMgkJCTB4 N2UKKyNkZWZpbmUgU1BfT1RQX1BTVzMJCQkweGM2CisKKy8qIERQIFN5c3RlbSBDb250cm9sIFJl Z2lzdGVycyAqLworI2RlZmluZSBTUF9EUF9TWVNURU1fQ1RSTF9CQVNFCQkoMHg4MCAtIDEpCisv KiBCaXRzIGZvciBEUCBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQX0NI QV9TVEEJCQlCSVQoMikKKy8qIEJpdHMgZm9yIERQIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyIDMg Ki8KKyNkZWZpbmUgU1BfSFBEX1NUQVRVUwkJCUJJVCg2KQorI2RlZmluZSBTUF9TVFJNX1ZBTElE CQkJQklUKDIpCisvKiBCaXRzIGZvciBEUCBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciA0ICovCisj ZGVmaW5lIFNQX0VOSEFOQ0VEX01PREUJCUJJVCgzKQorCisvKiBEUCBWaWRlbyBDb250cm9sIFJl Z2lzdGVyICovCisjZGVmaW5lIFNQX0RQX1ZJREVPX0NUUkxfUkVHCQkweDg0CisjZGVmaW5lIFNQ X0NPTE9SX0ZfTUFTSwkJCTB4MDYKKyNkZWZpbmUgU1BfQ09MT1JfRl9TSElGVAkJMQorI2RlZmlu ZSBTUF9CUENfTUFTSwkJCTB4ZTAKKyNkZWZpbmUgU1BfQlBDX1NISUZUCQkJNQorIyAgZGVmaW5l IFNQX0JQQ182QklUUwkJCTB4MDAKKyMgIGRlZmluZSBTUF9CUENfOEJJVFMJCQkweDAxCisjICBk ZWZpbmUgU1BfQlBDXzEwQklUUwkJCTB4MDIKKyMgIGRlZmluZSBTUF9CUENfMTJCSVRTCQkJMHgw MworCisvKiBEUCBBdWRpbyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RQX0FVRElP X0NUUkxfUkVHCQkweDg3CisjZGVmaW5lIFNQX0FVRF9FTgkJCUJJVCgwKQorCisvKiAxMHVzIFB1 bHNlIEdlbmVyYXRlIFRpbWVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUF9JMkNfR0VOXzEwVVNf VElNRVIwX1JFRwkweDg4CisjZGVmaW5lIFNQX0kyQ19HRU5fMTBVU19USU1FUjFfUkVHCTB4ODkK KworLyogUGFja2V0IFNlbmQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTUF9QQUNLRVRf U0VORF9DVFJMX1JFRwkJMHg5MAorI2RlZmluZSBTUF9BVURfSUZfVVAJCQlCSVQoNykKKyNkZWZp bmUgU1BfQVZJX0lGX1VECQkJQklUKDYpCisjZGVmaW5lIFNQX01QRUdfSUZfVUQJCQlCSVQoNSkK KyNkZWZpbmUgU1BfU1BEX0lGX1VECQkJQklUKDQpCisjZGVmaW5lIFNQX0FVRF9JRl9FTgkJCUJJ VCgzKQorI2RlZmluZSBTUF9BVklfSUZfRU4JCQlCSVQoMikKKyNkZWZpbmUgU1BfTVBFR19JRl9F TgkJCUJJVCgxKQorI2RlZmluZSBTUF9TUERfSUZfRU4JCQlCSVQoMCkKKworLyogRFAgSERDUCBD b250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RQX0hEQ1BfQ1RSTF9SRUcJCTB4OTIKKyNk ZWZpbmUgU1BfQVVUT19FTgkJCUJJVCg3KQorI2RlZmluZSBTUF9BVVRPX1NUQVJUCQkJQklUKDUp CisjZGVmaW5lIFNQX0xJTktfUE9MTElORwkJCUJJVCgxKQorCisvKiBEUCBNYWluIExpbmsgQmFu ZHdpZHRoIFNldHRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfRFBfTUFJTl9MSU5LX0JXX1NF VF9SRUcJMHhhMAorI2RlZmluZSBTUF9MSU5LX0JXX1NFVF9NQVNLCQkweDFmCisjZGVmaW5lIFNQ X0lOSVRJQUxfU0xJTV9NX0FVRF9TRUwJQklUKDUpCisKKy8qIERQIFRyYWluaW5nIFBhdHRlcm4g U2V0IFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RQX1RSQUlOSU5HX1BBVFRFUk5fU0VUX1JFRwkw eGEyCisKKy8qIERQIExhbmUgMCBMaW5rIFRyYWluaW5nIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNk ZWZpbmUgU1BfRFBfTEFORTBfTFRfQ1RSTF9SRUcJCTB4YTMKKyNkZWZpbmUgU1BfVFhfU1dfU0VU X01BU0sJCTB4MWIKKyNkZWZpbmUgU1BfTUFYX1BSRV9SRUFDSAkJQklUKDUpCisjZGVmaW5lIFNQ X01BWF9EUklWRV9SRUFDSAkJQklUKDQpCisjZGVmaW5lIFNQX1BSRV9FTVBfTEVWRUwxCQlCSVQo MykKKyNkZWZpbmUgU1BfRFJWSUVfQ1VSUkVOVF9MRVZFTDEJCUJJVCgwKQorCisvKiBEUCBMaW5r IFRyYWluaW5nIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfRFBfTFRfQ1RSTF9SRUcJ CTB4YTgKKyNkZWZpbmUgU1BfTFRfRVJST1JfVFlQRV9NQVNLCQkweDcwCisjICBkZWZpbmUgU1Bf TFRfTk9fRVJST1IJCTB4MDAKKyMgIGRlZmluZSBTUF9MVF9BVVhfV1JJVEVfRVJST1IJCTB4MDEK KyMgIGRlZmluZSBTUF9MVF9NQVhfRFJJVkVfUkVBQ0hFRAkweDAyCisjICBkZWZpbmUgU1BfTFRf V1JPTkdfTEFORV9DT1VOVF9TRVQJMHgwMworIyAgZGVmaW5lIFNQX0xUX0xPT1BfU0FNRV81X1RJ TUUJMHgwNAorIyAgZGVmaW5lIFNQX0xUX0NSX0ZBSUxfSU5fRVEJCTB4MDUKKyMgIGRlZmluZSBT UF9MVF9FUV9MT09QXzVfVElNRQkJMHgwNgorI2RlZmluZSBTUF9MVF9FTgkJCUJJVCgwKQorCisv KiBEUCBDRVAgVHJhaW5pbmcgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BfRFBfQ0VQ X1RSQUlOSU5HX0NUUkwwX1JFRwkweGE5CisjZGVmaW5lIFNQX0RQX0NFUF9UUkFJTklOR19DVFJM MV9SRUcJMHhhYQorCisvKiBEUCBEZWJ1ZyBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQX0RQX0RF QlVHMV9SRUcJCTB4YjAKKyNkZWZpbmUgU1BfREVCVUdfUExMX0xPQ0sJCUJJVCg0KQorI2RlZmlu ZSBTUF9QT0xMSU5HX0VOCQkJQklUKDEpCisKKy8qIERQIFBvbGxpbmcgQ29udHJvbCBSZWdpc3Rl ciAqLworI2RlZmluZSBTUF9EUF9QT0xMSU5HX0NUUkxfUkVHCQkweGI0CisjZGVmaW5lIFNQX0FV VE9fUE9MTElOR19ESVNBQkxFCQlCSVQoMCkKKworLyogRFAgTGluayBEZWJ1ZyBDb250cm9sIFJl Z2lzdGVyICovCisjZGVmaW5lIFNQX0RQX0xJTktfREVCVUdfQ1RSTF9SRUcJMHhiOAorI2RlZmlu ZSBTUF9NX1ZJRF9ERUJVRwkJCUJJVCg1KQorI2RlZmluZSBTUF9ORVdfUFJCUzcJCQlCSVQoNCkK KyNkZWZpbmUgU1BfSU5TRVJUX0VSCQkJQklUKDEpCisjZGVmaW5lIFNQX1BSQlMzMV9FTgkJCUJJ VCgwKQorCisvKiBBVVggTWlzYyBjb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0FVWF9N SVNDX0NUUkxfUkVHCQkweGJmCisKKy8qIERQIFBMTCBjb250cm9sIFJlZ2lzdGVyICovCisjZGVm aW5lIFNQX0RQX1BMTF9DVFJMX1JFRwkJMHhjNworI2RlZmluZSBTUF9QTExfUlNUCQkJQklUKDYp CisKKy8qIERQIEFuYWxvZyBQb3dlciBEb3duIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RQX0FO QUxPR19QT1dFUl9ET1dOX1JFRwkweGM4CisjZGVmaW5lIFNQX0NIMF9QRAkJCUJJVCgwKQorCisv KiBEUCBNaXNjIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfRFBfTUlTQ19DVFJMX1JF RwkJMHhjZAorI2RlZmluZSBTUF9FUV9UUkFJTklOR19MT09QCQlCSVQoNikKKworLyogRFAgRXh0 cmEgSTJDIERldmljZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RQX0VYVFJBX0ky Q19ERVZfQUREUl9SRUcJMHhjZQorI2RlZmluZSBTUF9JMkNfU1RSRVRDSF9ESVNBQkxFCQlCSVQo NykKKworI2RlZmluZSBTUF9JMkNfRVhUUkFfQUREUgkJMHg1MAorCisvKiBEUCBEb3duU3ByZWFk aW5nIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUF9EUF9ET1dOU1BSRUFESU5HX0NU UkwxX1JFRwkweGQwCisjZGVmaW5lIFNQX1RYX1NTQ19ESVNBQkxFCQkweGMwCisjZGVmaW5lIFNQ X1RYX1NTQ19ET1dOU1BSRUFESU5HCQlCSVQoNikKKworLyogRFAgTSBWYWx1ZSBDYWxjdWxhdGlv biBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RQX01fQ0FMQ1VMQVRJT05fQ1RSTF9S RUcJMHhkOQorI2RlZmluZSBTUF9NX0dFTl9DTEtfU0VMCQlCSVQoMCkKKworLyogQVVYIENoYW5u ZWwgQWNjZXNzIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTUF9BVVhfQ0hfU1RBVFVTX1JF RwkJMHhlMAorI2RlZmluZSBTUF9BVVhfU1RBVFVTCQkJMHgwZgorCisvKiBBVVggQ2hhbm5lbCBE RUZFUiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0FVWF9ERUZFUl9DVFJMX1JFRwkJ MHhlMgorI2RlZmluZSBTUF9ERUZFUl9DVFJMX0VOCQlCSVQoNykKKworLyogRFAgQnVmZmVyIERh dGEgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfQlVGX0RBVEFfQ09VTlRfUkVHCQkweGU0 CisjZGVmaW5lIFNQX0JVRl9EQVRBX0NPVU5UX01BU0sJCTB4MWYKKyNkZWZpbmUgU1BfQlVGX0NM UgkJCUJJVCg3KQorCisvKiBEUCBBVVggQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNk ZWZpbmUgU1BfRFBfQVVYX0NIX0NUUkwxX1JFRwkJMHhlNQorI2RlZmluZSBTUF9BVVhfVFhfQ09N TV9NQVNLCQkweDBmCisjZGVmaW5lIFNQX0FVWF9MRU5HVEhfTUFTSwkJMHhmMAorI2RlZmluZSBT UF9BVVhfTEVOR1RIX1NISUZUCQk0CisKKy8qIERQIEFVWCBDSCBBZGRyZXNzIFJlZ2lzdGVyIDAg Ki8KKyNkZWZpbmUgU1BfQVVYX0FERFJfN18wX1JFRwkJMHhlNgorCisvKiBEUCBBVVggQ0ggQWRk cmVzcyBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQX0FVWF9BRERSXzE1XzhfUkVHCQkweGU3CisK Ky8qIERQIEFVWCBDSCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgU1BfQVVYX0FERFJf MTlfMTZfUkVHCQkweGU4CisjZGVmaW5lIFNQX0FVWF9BRERSXzE5XzE2X01BU0sJCTB4MGYKKwor LyogRFAgQVVYIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQX0RQX0FV WF9DSF9DVFJMMl9SRUcJCTB4ZTkKKyNkZWZpbmUgU1BfQVVYX1NFTF9SWENNCQkJQklUKDYpCisj ZGVmaW5lIFNQX0FVWF9DSFNFTAkJCUJJVCgzKQorI2RlZmluZSBTUF9BVVhfUE5fSU5WCQkJQklU KDIpCisjZGVmaW5lIFNQX0FERFJfT05MWQkJCUJJVCgxKQorI2RlZmluZSBTUF9BVVhfRU4JCQlC SVQoMCkKKworLyogRFAgVmlkZW8gU3RyZWFtIENvbnRyb2wgSW5mb0ZyYW1lIFJlZ2lzdGVyICov CisjZGVmaW5lIFNQX0RQXzNEX1ZTQ19DVFJMX1JFRwkJMHhlYQorI2RlZmluZSBTUF9JTkZPX0ZS QU1FX1ZTQ19FTgkJQklUKDApCisKKy8qIERQIFZpZGVvIFN0cmVhbSBEYXRhIEJ5dGUgMSBSZWdp c3RlciAqLworI2RlZmluZSBTUF9EUF9WU0NfREIxX1JFRwkJMHhlYgorCisvKiBEUCBBVVggQ2hh bm5lbCBDb250cm9sIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgU1BfRFBfQVVYX0NIX0NUUkwzX1JF RwkJMHhlYworI2RlZmluZSBTUF9XQUlUX0NPVU5URVJfN18wX01BU0sJMHhmZgorCisvKiBEUCBB VVggQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgU1BfRFBfQVVYX0NIX0NU Ukw0X1JFRwkJMHhlZAorCisvKiBEUCBBVVggQnVmZmVyIERhdGEgUmVnaXN0ZXJzICovCisjZGVm aW5lIFNQX0RQX0JVRl9EQVRBMF9SRUcJCTB4ZjAKKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJlZ2lzdGVyIGRl ZmluaXRpb24gb2YgZGV2aWNlIGFkZHJlc3MgMHg3MiAgICAgICAgICAgICAgICAgICovCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworCisvKgorICogQ29yZSBSZWdpc3RlciBEZWZpbml0aW9ucworICovCisKKy8qIERldmlj ZSBJRCBMb3cgQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSBTUF9ERVZJQ0VfSURMX1JFRwkJMHgw MgorCisvKiBEZXZpY2UgSUQgSGlnaCBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0RFVklD RV9JREhfUkVHCQkweDAzCisKKy8qIFBvd2VyIERvd24gQ29udHJvbCBSZWdpc3RlciAqLworI2Rl ZmluZSBTUF9QT1dFUkRPV05fQ1RSTF9SRUcJCTB4MDUKKyNkZWZpbmUgU1BfUkVHSVNURVJfUEQJ CQlCSVQoNykKKyNkZWZpbmUgU1BfSERDUF9QRAkJCUJJVCg1KQorI2RlZmluZSBTUF9BVURJT19Q RAkJCUJJVCg0KQorI2RlZmluZSBTUF9WSURFT19QRAkJCUJJVCgzKQorI2RlZmluZSBTUF9MSU5L X1BECQkJQklUKDIpCisjZGVmaW5lIFNQX1RPVEFMX1BECQkJQklUKDEpCisKKy8qIFJlc2V0IENv bnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUF9SRVNFVF9DVFJMMV9SRUcJCTB4MDYKKyNk ZWZpbmUgU1BfTUlTQ19SU1QJCQlCSVQoNykKKyNkZWZpbmUgU1BfVklEQ0FQX1JTVAkJCUJJVCg2 KQorI2RlZmluZSBTUF9WSURGSUZfUlNUCQkJQklUKDUpCisjZGVmaW5lIFNQX0FVREZJRl9SU1QJ CQlCSVQoNCkKKyNkZWZpbmUgU1BfQVVEQ0FQX1JTVAkJCUJJVCgzKQorI2RlZmluZSBTUF9IRENQ X1JTVAkJCUJJVCgyKQorI2RlZmluZSBTUF9TV19SU1QJCQlCSVQoMSkKKyNkZWZpbmUgU1BfSFdf UlNUCQkJQklUKDApCisKKy8qIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBT UF9SRVNFVF9DVFJMMl9SRUcJCTB4MDcKKyNkZWZpbmUgU1BfQVVYX1JTVAkJCUJJVCgyKQorI2Rl ZmluZSBTUF9TRVJERVNfRklGT19SU1QJCUJJVCgxKQorI2RlZmluZSBTUF9JMkNfUkVHX1JTVAkJ CUJJVCgwKQorCisvKiBWaWRlbyBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BfVklE X0NUUkwxX1JFRwkJMHgwOAorI2RlZmluZSBTUF9WSURFT19FTgkJCUJJVCg3KQorI2RlZmluZSBT UF9WSURFT19NVVRFCQkJQklUKDIpCisjZGVmaW5lIFNQX0RFX0dFTgkJCUJJVCgxKQorI2RlZmlu ZSBTUF9ERU1VWAkJCUJJVCgwKQorCisvKiBWaWRlbyBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNk ZWZpbmUgU1BfVklEX0NUUkwyX1JFRwkJMHgwOQorI2RlZmluZSBTUF9JTl9DT0xPUl9GX01BU0sJ CTB4MDMKKyNkZWZpbmUgU1BfSU5fWUNfQklUX1NFTAkJQklUKDIpCisjZGVmaW5lIFNQX0lOX0JQ Q19NQVNLCQkJMHg3MAorI2RlZmluZSBTUF9JTl9CUENfU0hJRlQJCQk0CisjICBkZWZpbmUgU1Bf SU5fQlBDXzEyQklUCQkweDAzCisjICBkZWZpbmUgU1BfSU5fQlBDXzEwQklUCQkweDAyCisjICBk ZWZpbmUgU1BfSU5fQlBDXzhCSVQJCTB4MDEKKyMgIGRlZmluZSBTUF9JTl9CUENfNkJJVAkJMHgw MAorI2RlZmluZSBTUF9JTl9EX1JBTkdFCQkJQklUKDcpCisKKy8qIFZpZGVvIENvbnRyb2wgUmVn aXN0ZXIgMyAqLworI2RlZmluZSBTUF9WSURfQ1RSTDNfUkVHCQkweDBhCisjZGVmaW5lIFNQX0hQ RF9PVVQJCQlCSVQoNikKKworLyogVmlkZW8gQ29udHJvbCBSZWdpc3RlciA1ICovCisjZGVmaW5l IFNQX1ZJRF9DVFJMNV9SRUcJCTB4MGMKKyNkZWZpbmUgU1BfQ1NDX1NURF9TRUwJCQlCSVQoNykK KyNkZWZpbmUgU1BfWFZZQ0NfUk5HX0xNVAkJQklUKDYpCisjZGVmaW5lIFNQX1JBTkdFX1kyUgkJ CUJJVCg1KQorI2RlZmluZSBTUF9DU1BBQ0VfWTJSCQkJQklUKDQpCisjZGVmaW5lIFNQX1JHQl9S TkdfTE1UCQkJQklUKDMpCisjZGVmaW5lIFNQX1lfUk5HX0xNVAkJCUJJVCgyKQorI2RlZmluZSBT UF9SQU5HRV9SMlkJCQlCSVQoMSkKKyNkZWZpbmUgU1BfQ1NQQUNFX1IyWQkJCUJJVCgwKQorCisv KiBWaWRlbyBDb250cm9sIFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgU1BfVklEX0NUUkw2X1JFRwkJ MHgwZAorI2RlZmluZSBTUF9URVNUX1BBVFRFUk5fRU4JCUJJVCg3KQorI2RlZmluZSBTUF9WSURF T19QUk9DRVNTX0VOCQlCSVQoNikKKyNkZWZpbmUgU1BfVklEX1VTX01PREUJCQlCSVQoMykKKyNk ZWZpbmUgU1BfVklEX0RTX01PREUJCQlCSVQoMikKKyNkZWZpbmUgU1BfVVBfU0FNUExFCQkJQklU KDEpCisjZGVmaW5lIFNQX0RPV05fU0FNUExFCQkJQklUKDApCisKKy8qIFZpZGVvIENvbnRyb2wg UmVnaXN0ZXIgOCAqLworI2RlZmluZSBTUF9WSURfQ1RSTDhfUkVHCQkweDBmCisjZGVmaW5lIFNQ X1ZJRF9WUkVTX1RICQkJQklUKDApCisKKy8qIFRvdGFsIExpbmUgU3RhdHVzIExvdyBCeXRlIFJl Z2lzdGVyICovCisjZGVmaW5lIFNQX1RPVEFMX0xJTkVfU1RBTF9SRUcJCTB4MjQKKworLyogVG90 YWwgTGluZSBTdGF0dXMgSGlnaCBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX1RPVEFMX0xJ TkVfU1RBSF9SRUcJCTB4MjUKKworLyogQWN0aXZlIExpbmUgU3RhdHVzIExvdyBCeXRlIFJlZ2lz dGVyICovCisjZGVmaW5lIFNQX0FDVF9MSU5FX1NUQUxfUkVHCQkweDI2CisKKy8qIEFjdGl2ZSBM aW5lIFN0YXR1cyBIaWdoIEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfQUNUX0xJTkVfU1RB SF9SRUcJCTB4MjcKKworLyogVmVydGljYWwgRnJvbnQgUG9yY2ggU3RhdHVzIFJlZ2lzdGVyICov CisjZGVmaW5lIFNQX1ZfRl9QT1JDSF9TVEFfUkVHCQkweDI4CisKKy8qIFZlcnRpY2FsIFNZTkMg V2lkdGggU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX1ZfU1lOQ19TVEFfUkVHCQkweDI5 CisKKy8qIFZlcnRpY2FsIEJhY2sgUG9yY2ggU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQ X1ZfQl9QT1JDSF9TVEFfUkVHCQkweDJhCisKKy8qIFRvdGFsIFBpeGVsIFN0YXR1cyBMb3cgQnl0 ZSBSZWdpc3RlciAqLworI2RlZmluZSBTUF9UT1RBTF9QSVhFTF9TVEFMX1JFRwkJMHgyYgorCisv KiBUb3RhbCBQaXhlbCBTdGF0dXMgSGlnaCBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX1RP VEFMX1BJWEVMX1NUQUhfUkVHCQkweDJjCisKKy8qIEFjdGl2ZSBQaXhlbCBTdGF0dXMgTG93IEJ5 dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfQUNUX1BJWEVMX1NUQUxfUkVHCQkweDJkCisKKy8q IEFjdGl2ZSBQaXhlbCBTdGF0dXMgSGlnaCBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0FD VF9QSVhFTF9TVEFIX1JFRwkJMHgyZQorCisvKiBIb3Jpem9udGFsIEZyb250IFBvcmNoIFN0YXR1 cyBMb3cgQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSBTUF9IX0ZfUE9SQ0hfU1RBTF9SRUcJCTB4 MmYKKworLyogSG9yaXpvbnRhbCBGcm9udCBQb3JjaCBTdGF0eXMgSGlnaCBCeXRlIFJlZ2lzdGVy ICovCisjZGVmaW5lIFNQX0hfRl9QT1JDSF9TVEFIX1JFRwkJMHgzMAorCisvKiBIb3Jpem9udGFs IFNZTkMgV2lkdGggU3RhdHVzIExvdyBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0hfU1lO Q19TVEFMX1JFRwkJMHgzMQorCisvKiBIb3Jpem9udGFsIFNZTkMgV2lkdGggU3RhdHVzIEhpZ2gg Qnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSBTUF9IX1NZTkNfU1RBSF9SRUcJCTB4MzIKKworLyog SG9yaXpvbnRhbCBCYWNrIFBvcmNoIFN0YXR1cyBMb3cgQnl0ZSBSZWdpc3RlciAqLworI2RlZmlu ZSBTUF9IX0JfUE9SQ0hfU1RBTF9SRUcJCTB4MzMKKworLyogSG9yaXpvbnRhbCBCYWNrIFBvcmNo IFN0YXR1cyBIaWdoIEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfSF9CX1BPUkNIX1NUQUhf UkVHCQkweDM0CisKKy8qIEluZm9GcmFtZSBBVkkgUGFja2V0IFR5cGUgUmVnaXN0ZXIgKi8KKyNk ZWZpbmUgU1BfSU5GT0ZSQU1FX0FWSV9UWVBFX1JFRwkweDcwCisKKy8qIEluZm9GcmFtZSBBVkkg UGFja2V0IFZlcnNpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfSU5GT0ZSQU1FX0FWSV9WRVJf UkVHCTB4NzEKKworLyogSW5mb0ZyYW1lIEFWSSBQYWNrZXQgTGVuZ3RoIFJlZ2lzdGVyICovCisj ZGVmaW5lIFNQX0lORk9GUkFNRV9BVklfTEVOX1JFRwkweDcyCisKKy8qIEluZm9GcmFtZSBBVkkg UGFja2V0IERCMCBSZWdpc3RlciAqLworI2RlZmluZSBTUF9JTkZPRlJBTUVfQVZJX0RCMF9SRUcJ MHg3MworCisvKiBCaXQgQ29udHJvbCBTcGVjaWZpYyBSZWdpc3RlciAqLworI2RlZmluZSBTUF9C SVRfQ1RSTF9TUEVDSUZJQ19SRUcJMHg4MAorI2RlZmluZSBTUF9CSVRfQ1RSTF9TRUxFQ1RfU0hJ RlQJMQorI2RlZmluZSBTUF9FTkFCTEVfQklUX0NUUkwJCUJJVCgwKQorCisvKiBJbmZvRnJhbWUg QXVkaW8gUGFja2V0IFR5cGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfSU5GT0ZSQU1FX0FVRF9U WVBFX1JFRwkweDgzCisKKy8qIEluZm9GcmFtZSBBdWRpbyBQYWNrZXQgVmVyc2lvbiBSZWdpc3Rl ciAqLworI2RlZmluZSBTUF9JTkZPRlJBTUVfQVVEX1ZFUl9SRUcJMHg4NAorCisvKiBJbmZvRnJh bWUgQXVkaW8gUGFja2V0IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSBTUF9JTkZPRlJBTUVf QVVEX0xFTl9SRUcJMHg4NQorCisvKiBJbmZvRnJhbWUgQXVkaW8gUGFja2V0IERCMCBSZWdpc3Rl ciAqLworI2RlZmluZSBTUF9JTkZPRlJBTUVfQVVEX0RCMF9SRUcJMHg4NgorCisvKiBJbmZvRnJh bWUgTVBFRyBQYWNrZXQgVHlwZSBSZWdpc3RlciAqLworI2RlZmluZSBTUF9JTkZPRlJBTUVfTVBF R19UWVBFX1JFRwkweGIwCisKKy8qIEluZm9GcmFtZSBNUEVHIFBhY2tldCBWZXJzaW9uIFJlZ2lz dGVyICovCisjZGVmaW5lIFNQX0lORk9GUkFNRV9NUEVHX1ZFUl9SRUcJMHhiMQorCisvKiBJbmZv RnJhbWUgTVBFRyBQYWNrZXQgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQX0lORk9GUkFN RV9NUEVHX0xFTl9SRUcJMHhiMgorCisvKiBJbmZvRnJhbWUgTVBFRyBQYWNrZXQgREIwIFJlZ2lz dGVyICovCisjZGVmaW5lIFNQX0lORk9GUkFNRV9NUEVHX0RCMF9SRUcJMHhiMworCisvKiBBdWRp byBDaGFubmVsIFN0YXR1cyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BfQVVEX0NIX1NUQVRVU19C QVNFCQkoMHhkMCAtIDEpCisKKy8qIEF1ZGlvIENoYW5uZWwgTnVtIFJlZ2lzdGVyIDUgKi8KKyNk ZWZpbmUgU1BfSTJTX0NIQU5ORUxfTlVNX01BU0sJCTB4ZTAKKyMgIGRlZmluZSBTUF9JMlNfQ0hf TlVNXzEJCSgweDAwIDw8IDUpCisjICBkZWZpbmUgU1BfSTJTX0NIX05VTV8yCQkoMHgwMSA8PCA1 KQorIyAgZGVmaW5lIFNQX0kyU19DSF9OVU1fMwkJKDB4MDIgPDwgNSkKKyMgIGRlZmluZSBTUF9J MlNfQ0hfTlVNXzQJCSgweDAzIDw8IDUpCisjICBkZWZpbmUgU1BfSTJTX0NIX05VTV81CQkoMHgw NCA8PCA1KQorIyAgZGVmaW5lIFNQX0kyU19DSF9OVU1fNgkJKDB4MDUgPDwgNSkKKyMgIGRlZmlu ZSBTUF9JMlNfQ0hfTlVNXzcJCSgweDA2IDw8IDUpCisjICBkZWZpbmUgU1BfSTJTX0NIX05VTV84 CQkoMHgwNyA8PCA1KQorI2RlZmluZSBTUF9FWFRfVlVDUAkJCUJJVCgyKQorI2RlZmluZSBTUF9W QklUCQkJCUJJVCgxKQorI2RlZmluZSBTUF9BVURJT19MQVlPVVQJCQlCSVQoMCkKKworLyogQW5h bG9nIERlYnVnIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgU1BfQU5BTE9HX0RFQlVHMl9SRUcJCTB4 ZGQKKyNkZWZpbmUgU1BfRk9SQ0VfU1dfT0ZGX0JZUEFTUwkJMHgyMAorI2RlZmluZSBTUF9YVEFM X0ZSUQkJCTB4MWMKKyMgIGRlZmluZSBTUF9YVEFMX0ZSUV8xOU0yCQkoMHgwMCA8PCAyKQorIyAg ZGVmaW5lIFNQX1hUQUxfRlJRXzI0TQkJKDB4MDEgPDwgMikKKyMgIGRlZmluZSBTUF9YVEFMX0ZS UV8yNU0JCSgweDAyIDw8IDIpCisjICBkZWZpbmUgU1BfWFRBTF9GUlFfMjZNCQkoMHgwMyA8PCAy KQorIyAgZGVmaW5lIFNQX1hUQUxfRlJRXzI3TQkJKDB4MDQgPDwgMikKKyMgIGRlZmluZSBTUF9Y VEFMX0ZSUV8zOE00CQkoMHgwNSA8PCAyKQorIyAgZGVmaW5lIFNQX1hUQUxfRlJRXzUyTQkJKDB4 MDYgPDwgMikKKyNkZWZpbmUgU1BfUE9XRVJPTl9USU1FXzFQNU1TCQkweDAzCisKKy8qIEFuYWxv ZyBDb250cm9sIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfQU5BTE9HX0NUUkwwX1JFRwkJMHhl MQorCisvKiBDb21tb24gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQ X0NPTU1PTl9JTlRfU1RBVFVTX0JBU0UJKDB4ZjEgLSAxKQorI2RlZmluZSBTUF9QTExfTE9DS19D SEcJCQkweDQwCisKKy8qIENvbW1vbiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDIgKi8KKyNk ZWZpbmUgU1BfQ09NTU9OX0lOVF9TVEFUVVMyCQkweGYyCisjZGVmaW5lIFNQX0hEQ1BfQVVUSF9D SEcJCUJJVCgxKQorI2RlZmluZSBTUF9IRENQX0FVVEhfRE9ORQkJQklUKDApCisKKyNkZWZpbmUg U1BfSERDUF9MSU5LX0NIRUNLX0ZBSUwJCUJJVCgwKQorCisjZGVmaW5lIFNQX0hQRF9JUlEJCQlC SVQoNikKKyNkZWZpbmUgU1BfSFBEX0VTWU5DX0VSUgkJQklUKDQpCisjZGVmaW5lIFNQX0hQRF9D SEcJCQlCSVQoMikKKyNkZWZpbmUgU1BfSFBEX0xPU1QJCQlCSVQoMSkKKyNkZWZpbmUgU1BfSFBE X1BMVUcJCQlCSVQoMCkKKworLyogRFAgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2Rl ZmluZSBTUF9EUF9JTlRfU1RBVFVTX1JFRwkJMHhmNworI2RlZmluZSBTUF9UUkFJTklOR19GSU5J U0gJCUJJVCg1KQorI2RlZmluZSBTUF9QT0xMSU5HX0VSUgkJCUJJVCg0KQorCisvKiBDb21tb24g SW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfQ09NTU9OX0lOVF9NQVNLX0JB U0UJCSgweGY4IC0gMSkKKworLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZp bmUgU1BfSU5UX0NUUkxfUkVHCQkJMHhmZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUmVnaXN0ZXIgZGVmaW5p dGlvbiBvZiBkZXZpY2UgYWRkcmVzcyAweDdhICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisKKy8qIERQIFRYIExpbmsgVHJhaW5pbmcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBT UF9EUF9UWF9MVF9DVFJMMF9SRUcJCTB4MzAKKworLyogUEQgMS4yIExpbnQgVHJhaW5pbmcgODBi aXQgUGF0dGVybiBSZWdpc3RlciAqLworI2RlZmluZSBTUF9EUF9MVF84MEJJVF9QQVRURVJOMF9S RUcJMHg4MAorI2RlZmluZSBTUF9EUF9MVF84MEJJVF9QQVRURVJOX1JFR19OVU0JMTAKKworLyog QXVkaW8gSW50ZXJmYWNlIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUF9BVURfSU5U RVJGQUNFX0NUUkwwX1JFRwkweDVmCisjZGVmaW5lIFNQX0FVRF9JTlRFUkZBQ0VfRElTQUJMRQkw eDgwCisKKy8qIEF1ZGlvIEludGVyZmFjZSBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUg U1BfQVVEX0lOVEVSRkFDRV9DVFJMMl9SRUcJMHg2MAorI2RlZmluZSBTUF9NX0FVRF9BREpVU1Rf U1QJCTB4MDQKKworLyogQXVkaW8gSW50ZXJmYWNlIENvbnRyb2wgUmVnaXN0ZXIgMyAqLworI2Rl ZmluZSBTUF9BVURfSU5URVJGQUNFX0NUUkwzX1JFRwkweDYyCisKKy8qIEF1ZGlvIEludGVyZmFj ZSBDb250cm9sIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgU1BfQVVEX0lOVEVSRkFDRV9DVFJMNF9S RUcJMHg2NworCisvKiBBdWRpbyBJbnRlcmZhY2UgQ29udHJvbCBSZWdpc3RlciA1ICovCisjZGVm aW5lIFNQX0FVRF9JTlRFUkZBQ0VfQ1RSTDVfUkVHCTB4NjgKKworLyogQXVkaW8gSW50ZXJmYWNl IENvbnRyb2wgUmVnaXN0ZXIgNiAqLworI2RlZmluZSBTUF9BVURfSU5URVJGQUNFX0NUUkw2X1JF RwkweDY5CisKKy8qIEZpcm13YXJlIFZlcnNpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BfRldf VkVSX1JFRwkJCTB4YjcKKworI2VuZGlmCi0tIAoyLjEuMAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK