From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajesh Yadav Subject: [DPU PATCH 06/11] drm/msm/dpu: remove hdcp support Date: Wed, 30 May 2018 20:19:43 +0530 Message-ID: <1527691788-9350-7-git-send-email-ryadav@codeaurora.org> References: <1527691788-9350-1-git-send-email-ryadav@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1527691788-9350-1-git-send-email-ryadav@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org Cc: Rajesh Yadav , hoegsberg@chromium.org List-Id: devicetree@vger.kernel.org UmVtb3ZlIGhkY3AgMS54IHN1cHBvcnQgZnJvbSBkcHUgZHJpdmVyLgpUaGUgaGRjcCAxLnggc3Vw cG9ydCB3aWxsIGJlIHBvc3RlZCBiYWNrIHdpdGgKZGlzcGxheSBwb3J0IGRyaXZlci4KClNpZ25l ZC1vZmYtYnk6IFJhamVzaCBZYWRhdiA8cnlhZGF2QGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZHB1X2hkY3AuaCAgICB8ICAgNzQgLS0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZHB1X2hkY3BfMXguYyB8IDE1NzkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxNjUzIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2hkY3AuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vZHB1X2hkY3BfMXguYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHB1X2hkY3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2hkY3AuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhOThjYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwdV9oZGNwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0v KiBDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTQtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICog b25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9fRFBVX0hEQ1Bf SF9fCi0jZGVmaW5lIF9fRFBVX0hEQ1BfSF9fCi0KLSNpbmNsdWRlIDxzb2MvcWNvbS9zY20uaD4K LSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2lu Y2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLSNp bmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxkcm0vZHJtUC5oPgotI2luY2x1ZGUgPGRy bS9kcm1fY3J0Yy5oPgotI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgotI2luY2x1ZGUgImRwdV9r bXMuaCIKLQotZW51bSBkcHVfaGRjcF9jbGllbnRfaWQgewotCUhEQ1BfQ0xJRU5UX0hETUksCi0J SERDUF9DTElFTlRfRFAsCi19OwotCi1lbnVtIGRwdV9oZGNwX3N0YXRlcyB7Ci0JSERDUF9TVEFU RV9JTkFDVElWRSwKLQlIRENQX1NUQVRFX0FVVEhFTlRJQ0FUSU5HLAotCUhEQ1BfU1RBVEVfQVVU SEVOVElDQVRFRCwKLQlIRENQX1NUQVRFX0FVVEhfRkFJTCwKLQlIRENQX1NUQVRFX0FVVEhfRU5D X05PTkUsCi0JSERDUF9TVEFURV9BVVRIX0VOQ18xWCwKLQlIRENQX1NUQVRFX0FVVEhfRU5DXzJQ MgotfTsKLQotc3RydWN0IGRwdV9oZGNwX2luaXRfZGF0YSB7Ci0Jc3RydWN0IGRzc19pb19kYXRh ICpjb3JlX2lvOwotCXN0cnVjdCBkc3NfaW9fZGF0YSAqcWZwcm9tX2lvOwotCXN0cnVjdCBkc3Nf aW9fZGF0YSAqaGRjcF9pbzsKLQlzdHJ1Y3QgZHJtX2RwX2F1eCAqZHJtX2F1eDsKLQlzdHJ1Y3Qg bXV0ZXggKm11dGV4OwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcTsKLQl2b2lkICpj Yl9kYXRhOwotCXZvaWQgKCpub3RpZnlfc3RhdHVzKSh2b2lkICpjYl9kYXRhLCBlbnVtIGRwdV9o ZGNwX3N0YXRlcyBzdGF0dXMpOwotCXU4IHNpbmtfcnhfc3RhdHVzOwotCXVuc2lnbmVkIGNoYXIg KnJldmlzaW9uOwotCXUzMiBwaHlfYWRkcjsKLQlib29sIHNlY19hY2Nlc3M7Ci0JZW51bSBkcHVf aGRjcF9jbGllbnRfaWQgY2xpZW50X2lkOwotfTsKLQotc3RydWN0IGRwdV9oZGNwX29wcyB7Ci0J aW50ICgqaXNyKSh2b2lkICpwdHIpOwotCWludCAoKmNwX2lycSkodm9pZCAqcHRyKTsKLQlpbnQg KCpyZWF1dGhlbnRpY2F0ZSkodm9pZCAqaW5wdXQpOwotCWludCAoKmF1dGhlbnRpY2F0ZSkodm9p ZCAqaGRjcF9jdHJsKTsKLQlib29sICgqZmVhdHVyZV9zdXBwb3J0ZWQpKHZvaWQgKmlucHV0KTsK LQl2b2lkICgqb2ZmKSh2b2lkICpoZGNwX2N0cmwpOwotfTsKLQotdm9pZCAqZHB1X2hkY3BfMXhf aW5pdChzdHJ1Y3QgZHB1X2hkY3BfaW5pdF9kYXRhICppbml0X2RhdGEpOwotdm9pZCBkcHVfaGRj cF8xeF9kZWluaXQodm9pZCAqaW5wdXQpOwotc3RydWN0IGRwdV9oZGNwX29wcyAqZHB1X2hkY3Bf MXhfc3RhcnQodm9pZCAqaW5wdXQpOwotdm9pZCAqZHB1X2RwX2hkY3AycDJfaW5pdChzdHJ1Y3Qg ZHB1X2hkY3BfaW5pdF9kYXRhICppbml0X2RhdGEpOwotdm9pZCBkcHVfZHBfaGRjcDJwMl9kZWlu aXQodm9pZCAqaW5wdXQpOwotY29uc3QgY2hhciAqZHB1X2hkY3Bfc3RhdGVfbmFtZShlbnVtIGRw dV9oZGNwX3N0YXRlcyBoZGNwX3N0YXRlKTsKLXN0cnVjdCBkcHVfaGRjcF9vcHMgKmRwdV9kcF9o ZGNwMnAyX3N0YXJ0KHZvaWQgKmlucHV0KTsKLSNlbmRpZiAvKiBfX0RQVV9IRENQX0hfXyAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfaGRjcF8xeC5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kcHVfaGRjcF8xeC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl YmJkNTkxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2hkY3BfMXguYwor KysgL2Rldi9udWxsCkBAIC0xLDE1NzkgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDEwLTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkiW2RwdS1oZGNwMXhdICVzOiAiIGZtdCwgX19m dW5jX18KLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4K LSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNs dWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Ci0jaW5jbHVkZSA8 bGludXgvaGRjcF9xc2VlY29tLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KLSNp bmNsdWRlICJkcHVfaGRjcC5oIgotI2luY2x1ZGUgImhkbWkueG1sLmgiCi0jaW5jbHVkZSAidmlk ZW8vbXNtX2hkbWlfaGRjcF9tZ3IuaCIKLSNpbmNsdWRlICJkcC9kcF9yZWcuaCIKLQotI2RlZmlu ZSBEUFVfSERDUF9TVEFURV9OQU1FIChkcHVfaGRjcF9zdGF0ZV9uYW1lKGhkY3AtPmhkY3Bfc3Rh dGUpKQotCi0vKiBRRlBST00gUmVnaXN0ZXJzIGZvciBIRE1JL0hEQ1AgKi8KLSNkZWZpbmUgUUZQ Uk9NX1JBV19GRUFUX0NPTkZJR19ST1cwX0xTQiAgKDB4MDAwMDAwRjgpCi0jZGVmaW5lIFFGUFJP TV9SQVdfRkVBVF9DT05GSUdfUk9XMF9NU0IgICgweDAwMDAwMEZDKQotI2RlZmluZSBRRlBST01f UkFXX1ZFUlNJT05fNCAgICAgICAgICAgICAoMHgwMDAwMDBBOCkKLSNkZWZpbmUgU0VDX0NUUkxf SFdfVkVSU0lPTiAgICAgICAgICAgICAgKDB4MDAwMDYwMDApCi0jZGVmaW5lIEhEQ1BfS1NWX0xT QiAgICAgICAgICAgICAgICAgICAgICgweDAwMDA2MEQ4KQotI2RlZmluZSBIRENQX0tTVl9NU0Ig ICAgICAgICAgICAgICAgICAgICAoMHgwMDAwNjBEQykKLSNkZWZpbmUgSERDUF9LU1ZfVkVSU0lP Tl80X09GRlNFVCAgICAgICAgKDB4MDAwMDAwMTQpCi0KLS8qIFNFQ19DVFJMIHZlcnNpb24gdGhh dCBzdXBwb3J0cyBIRENQIFNFTCAqLwotI2RlZmluZSBIRENQX1NFTF9NSU5fU0VDX1ZFUlNJT04g ICAgICAgICAoMHg1MDAxMDAwMCkKLQotLyogSERDUCBLZXlzIHN0YXRlIGJhc2VkIG9uIEhETUlf SERDUF9MSU5LMF9TVEFUVVM6S0VZU19TVEFURSAqLwotI2RlZmluZSBIRENQX0tFWVNfU1RBVEVf Tk9fS0VZUwkJMAotI2RlZmluZSBIRENQX0tFWVNfU1RBVEVfTk9UX0NIRUNLRUQJMQotI2RlZmlu ZSBIRENQX0tFWVNfU1RBVEVfQ0hFQ0tJTkcJMgotI2RlZmluZSBIRENQX0tFWVNfU1RBVEVfVkFM SUQJCTMKLSNkZWZpbmUgSERDUF9LRVlTX1NUQVRFX0FLU1ZfTk9UX1ZBTElECTQKLSNkZWZpbmUg SERDUF9LRVlTX1NUQVRFX0NIS1NVTV9NSVNNQVRDSAk1Ci0jZGVmaW5lIEhEQ1BfS0VZU19TVEFU RV9QUk9EX0FLU1YJNgotI2RlZmluZSBIRENQX0tFWVNfU1RBVEVfUkVTRVJWRUQJNwotCi0jZGVm aW5lIFRaX0hEQ1BfQ01EX0lEIDB4MDAwMDQ0MDEKLQotI2RlZmluZSBIRENQX0lOVF9DTFIgKGlz ci0+YXV0aF9zdWNjZXNzX2FjayB8IGlzci0+YXV0aF9mYWlsX2FjayB8IFwKLQkJCWlzci0+YXV0 aF9mYWlsX2luZm9fYWNrIHwgaXNyLT50eF9yZXFfYWNrIHwgXAotCQkJaXNyLT5lbmNyeXB0aW9u X3JlYWR5X2FjayB8IFwKLQkJCWlzci0+ZW5jcnlwdGlvbl9ub3RfcmVhZHlfYWNrIHwgaXNyLT50 eF9yZXFfZG9uZV9hY2spCi0KLSNkZWZpbmUgSERDUF9JTlRfRU4gKGlzci0+YXV0aF9zdWNjZXNz X21hc2sgfCBpc3ItPmF1dGhfZmFpbF9tYXNrIHwgXAotCQkJaXNyLT5lbmNyeXB0aW9uX3JlYWR5 X21hc2sgfCBcCi0JCQlpc3ItPmVuY3J5cHRpb25fbm90X3JlYWR5X21hc2spCi0KLSNkZWZpbmUg SERDUF9QT0xMX1NMRUVQX1VTICAgKDIwICogMTAwMCkKLSNkZWZpbmUgSERDUF9QT0xMX1RJTUVP VVRfVVMgKEhEQ1BfUE9MTF9TTEVFUF9VUyAqIDEwMCkKLQotI2RlZmluZSBkcHVfaGRjcF8xeF9z dGF0ZSh4KSAoaGRjcC0+aGRjcF9zdGF0ZSA9PSB4KQotCi1zdHJ1Y3QgZHB1X2hkY3Bfc2lua19h ZGRyIHsKLQljaGFyICpuYW1lOwotCXUzMiBhZGRyOwotCXUzMiBsZW47Ci19OwotCi1zdHJ1Y3Qg ZHB1X2hkY3BfMXhfcmVnX2RhdGEgewotCXUzMiByZWdfaWQ7Ci0Jc3RydWN0IGRwdV9oZGNwX3Np bmtfYWRkciAqc2luazsKLX07Ci0KLXN0cnVjdCBkcHVfaGRjcF9zaW5rX2FkZHJfbWFwIHsKLQkv KiBhZGRyZXNzZXMgdG8gcmVhZCBmcm9tIHNpbmsgKi8KLQlzdHJ1Y3QgZHB1X2hkY3Bfc2lua19h ZGRyIGJjYXBzOwotCXN0cnVjdCBkcHVfaGRjcF9zaW5rX2FkZHIgYmtzdjsKLQlzdHJ1Y3QgZHB1 X2hkY3Bfc2lua19hZGRyIHIwOwotCXN0cnVjdCBkcHVfaGRjcF9zaW5rX2FkZHIgYnN0YXR1czsK LQlzdHJ1Y3QgZHB1X2hkY3Bfc2lua19hZGRyIGNwX2lycV9zdGF0dXM7Ci0Jc3RydWN0IGRwdV9o ZGNwX3NpbmtfYWRkciBrc3ZfZmlmbzsKLQlzdHJ1Y3QgZHB1X2hkY3Bfc2lua19hZGRyIHZfaDA7 Ci0Jc3RydWN0IGRwdV9oZGNwX3NpbmtfYWRkciB2X2gxOwotCXN0cnVjdCBkcHVfaGRjcF9zaW5r X2FkZHIgdl9oMjsKLQlzdHJ1Y3QgZHB1X2hkY3Bfc2lua19hZGRyIHZfaDM7Ci0Jc3RydWN0IGRw dV9oZGNwX3NpbmtfYWRkciB2X2g0OwotCi0JLyogYWRkcmVzc2VzIHRvIHdyaXRlIHRvIHNpbmsg Ki8KLQlzdHJ1Y3QgZHB1X2hkY3Bfc2lua19hZGRyIGFuOwotCXN0cnVjdCBkcHVfaGRjcF9zaW5r X2FkZHIgYWtzdjsKLQlzdHJ1Y3QgZHB1X2hkY3Bfc2lua19hZGRyIGFpbmZvOwotfTsKLQotc3Ry dWN0IGRwdV9oZGNwX2ludF9zZXQgewotCS8qIGludGVycnVwdCByZWdpc3RlciAqLwotCXUzMiBp bnRfcmVnOwotCi0JLyogaW50ZXJydXB0IGVuYWJsZS9kaXNhYmxlIG1hc2tzICovCi0JdTMyIGF1 dGhfc3VjY2Vzc19tYXNrOwotCXUzMiBhdXRoX2ZhaWxfbWFzazsKLQl1MzIgZW5jcnlwdGlvbl9y ZWFkeV9tYXNrOwotCXUzMiBlbmNyeXB0aW9uX25vdF9yZWFkeV9tYXNrOwotCXUzMiB0eF9yZXFf bWFzazsKLQl1MzIgdHhfcmVxX2RvbmVfbWFzazsKLQotCS8qIGludGVycnVwdCBhY2tub3dsZWRn bWVudCAqLwotCXUzMiBhdXRoX3N1Y2Nlc3NfYWNrOwotCXUzMiBhdXRoX2ZhaWxfYWNrOwotCXUz MiBhdXRoX2ZhaWxfaW5mb19hY2s7Ci0JdTMyIGVuY3J5cHRpb25fcmVhZHlfYWNrOwotCXUzMiBl bmNyeXB0aW9uX25vdF9yZWFkeV9hY2s7Ci0JdTMyIHR4X3JlcV9hY2s7Ci0JdTMyIHR4X3JlcV9k b25lX2FjazsKLQotCS8qIGludGVycnVwdCBzdGF0dXMgKi8KLQl1MzIgYXV0aF9zdWNjZXNzX2lu dDsKLQl1MzIgYXV0aF9mYWlsX2ludDsKLQl1MzIgZW5jcnlwdGlvbl9yZWFkeTsKLQl1MzIgZW5j cnlwdGlvbl9ub3RfcmVhZHk7Ci0JdTMyIHR4X3JlcV9pbnQ7Ci0JdTMyIHR4X3JlcV9kb25lX2lu dDsKLX07Ci0KLXN0cnVjdCBkcHVfaGRjcF9yZWdfc2V0IHsKLQl1MzIgc3RhdHVzOwotCXUzMiBr ZXlzX29mZnNldDsKLQl1MzIgcjBfb2Zmc2V0OwotCXUzMiB2X29mZnNldDsKLQl1MzIgY3RybDsK LQl1MzIgYWtzdl9sc2I7Ci0JdTMyIGFrc3ZfbXNiOwotCXUzMiBlbnRyb3B5X2N0cmwwOwotCXUz MiBlbnRyb3B5X2N0cmwxOwotCXUzMiBzZWNfc2hhX2N0cmw7Ci0JdTMyIHNlY19zaGFfZGF0YTsK LQl1MzIgc2hhX3N0YXR1czsKLQotCXUzMiBkYXRhMl8wOwotCXUzMiBkYXRhMzsKLQl1MzIgZGF0 YTQ7Ci0JdTMyIGRhdGE1OwotCXUzMiBkYXRhNjsKLQotCXUzMiBzZWNfZGF0YTA7Ci0JdTMyIHNl Y19kYXRhMTsKLQl1MzIgc2VjX2RhdGE3OwotCXUzMiBzZWNfZGF0YTg7Ci0JdTMyIHNlY19kYXRh OTsKLQl1MzIgc2VjX2RhdGExMDsKLQl1MzIgc2VjX2RhdGExMTsKLQl1MzIgc2VjX2RhdGExMjsK LQotCXUzMiByZXNldDsKLQl1MzIgcmVzZXRfYml0OwotCi0JdTMyIHJlcGVhdGVyOwotfTsKLQot I2RlZmluZSBIRENQX1JFR19TRVRfQ0xJRU5UX0hETUkgXAotCXswfQotCi0jZGVmaW5lIEhEQ1Bf UkVHX1NFVF9DTElFTlRfRFAgXAote0RQX0hEQ1BfU1RBVFVTLCAxNiwgMTQsIDEzLCBEUF9IRENQ X0NUUkwsIFwKLQlEUF9IRENQX1NXX0xPV0VSX0FLU1YsIERQX0hEQ1BfU1dfVVBQRVJfQUtTViwg XAotCURQX0hEQ1BfRU5UUk9QWV9DVFJMMCwgRFBfSERDUF9FTlRST1BZX0NUUkwxLCBcCi0JSERD UF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1NIQV9DVFJMLCBcCi0JSERDUF9TRUNfRFBfVFpfSFZf SExPU19IRENQX1NIQV9EQVRBLCBcCi0JRFBfSERDUF9TSEFfU1RBVFVTLCBEUF9IRENQX1JDVlBP UlRfREFUQTJfMCwgXAotCURQX0hEQ1BfUkNWUE9SVF9EQVRBMywgRFBfSERDUF9SQ1ZQT1JUX0RB VEE0LCBcCi0JRFBfSERDUF9SQ1ZQT1JUX0RBVEE1LCBEUF9IRENQX1JDVlBPUlRfREFUQTYsIFwK LQlIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBMCwgXAotCUhEQ1BfU0VD X0RQX1RaX0hWX0hMT1NfSERDUF9SQ1ZQT1JUX0RBVEExLCBcCi0JSERDUF9TRUNfRFBfVFpfSFZf SExPU19IRENQX1JDVlBPUlRfREFUQTcsIFwKLQlIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1Bf UkNWUE9SVF9EQVRBOCwgXAotCUhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERDUF9SQ1ZQT1JUX0RB VEE5LCBcCi0JSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTEwLCBcCi0J SERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTExLCBcCi0JSERDUF9TRUNf RFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTEyLCBcCi0JRFBfU1dfUkVTRVQsIEJJVCgx KSwgQklUKDEpfQotCi0jZGVmaW5lIEhEQ1BfSERNSV9TSU5LX0FERFJfTUFQIFwKLQl7eyJiY2Fw cyIsIDB4NDAsIDF9LCB7ImJrc3YiLCAweDAwLCA1fSwgeyJyMCciLCAweDA4LCAyfSwgXAotCSB7 ImJzdGF0dXMiLCAweDQxLCAyfSwgeyI/PyIsIDB4MCwgMH0sIHsia3N2LWZpZm8iLCAweDQzLCAw fSwgXAotCSB7InZfaDAiLCAweDIwLCA0fSwgeyJ2X2gxIiwgMHgyNCwgNH0sIHsidl9oMiIsIDB4 MjgsIDR9LCBcCi0JIHsidl9oMyIsIDB4MmMsIDR9LCB7InZfaDQiLCAweDMwLCA0fSwgeyJhbiIs IDB4MTgsIDh9LCBcCi0JIHsiYWtzdiIsIDB4MTAsIDV9LCB7ImFpbmZvIiwgMHgwMCwgMH0sfQot Ci0jZGVmaW5lIEhEQ1BfRFBfU0lOS19BRERSX01BUCBcCi0Je3siYmNhcHMiLCAweDY4MDI4LCAx fSwgeyJia3N2IiwgMHg2ODAwMCwgNX0sIHsicjAnIiwgMHg2ODAwNSwgMn0sIFwKLQkgeyJiaW5m byIsIDB4NjgwMkEsIDJ9LCB7ImNwX2lycV9zdGF0dXMiLCAweDY4MDI5LCAxfSwgXAotCSB7Imtz di1maWZvIiwgMHg2ODAyQywgMH0sIHsidl9oMCIsIDB4NjgwMTQsIDR9LCB7InZfaDEiLCAweDY4 MDE4LCA0fSwgXAotCSB7InZfaDIiLCAweDY4MDFDLCA0fSwgeyJ2X2gzIiwgMHg2ODAyMCwgNH0s IHsidl9oNCIsIDB4NjgwMjQsIDR9LCBcCi0JIHsiYW4iLCAweDY4MDBDLCA4fSwgeyJha3N2Iiwg MHg2ODAwNywgNX0sIHsiYWluZm8iLCAweDY4MDNCLCAxfSB9Ci0KLSNkZWZpbmUgSERDUF9IRE1J X0lOVF9TRVQgXAotCXswfQotCi0jZGVmaW5lIEhEQ1BfRFBfSU5UX1NFVCBcCi0Je0RQX0lOVFJf U1RBVFVTMiwgXAotCSBCSVQoMTcpLCBCSVQoMjApLCBCSVQoMjQpLCBCSVQoMjcpLCAwLCAwLCBc Ci0JIEJJVCgxNiksIEJJVCgxOSksIEJJVCgyMSksIEJJVCgyMyksIEJJVCgyNiksIDAsIDAsIFwK LQkgQklUKDE1KSwgQklUKDE4KSwgQklUKDIyKSwgQklUKDI1KSwgMCwgMH0KLQotc3RydWN0IGRw dV9oZGNwXzF4IHsKLQl1OCBiY2FwczsKLQl1MzIgdHBfbXNnaWQ7Ci0JdTMyIGFuXzAsIGFuXzEs IGFrc3ZfMCwgYWtzdl8xOwotCWJvb2wgc2lua19yMF9yZWFkeTsKLQlib29sIHJlYXV0aDsKLQli b29sIGtzdl9yZWFkeTsKLQllbnVtIGRwdV9oZGNwX3N0YXRlcyBoZGNwX3N0YXRlOwotCXN0cnVj dCBIRENQX1YyVjFfTVNHX1RPUE9MT0dZIGNhY2hlZF90cDsKLQlzdHJ1Y3QgSERDUF9WMlYxX01T R19UT1BPTE9HWSBjdXJyZW50X3RwOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgaGRjcF9hdXRoX3dv cms7Ci0Jc3RydWN0IGNvbXBsZXRpb24gcjBfY2hlY2tlZDsKLQlzdHJ1Y3QgY29tcGxldGlvbiBz aW5rX3IwX2F2YWlsYWJsZTsKLQlzdHJ1Y3QgZHB1X2hkY3BfaW5pdF9kYXRhIGluaXRfZGF0YTsK LQlzdHJ1Y3QgZHB1X2hkY3Bfb3BzICpvcHM7Ci0Jc3RydWN0IGRwdV9oZGNwX3JlZ19zZXQgcmVn X3NldDsKLQlzdHJ1Y3QgZHB1X2hkY3BfaW50X3NldCBpbnRfc2V0OwotCXN0cnVjdCBkcHVfaGRj cF9zaW5rX2FkZHJfbWFwIHNpbmtfYWRkcjsKLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29y a3E7Ci19OwotCi1jb25zdCBjaGFyICpkcHVfaGRjcF9zdGF0ZV9uYW1lKGVudW0gZHB1X2hkY3Bf c3RhdGVzIGhkY3Bfc3RhdGUpCi17Ci0Jc3dpdGNoIChoZGNwX3N0YXRlKSB7Ci0JY2FzZSBIRENQ X1NUQVRFX0lOQUNUSVZFOglyZXR1cm4gIkhEQ1BfU1RBVEVfSU5BQ1RJVkUiOwotCWNhc2UgSERD UF9TVEFURV9BVVRIRU5USUNBVElORzoJcmV0dXJuICJIRENQX1NUQVRFX0FVVEhFTlRJQ0FUSU5H IjsKLQljYXNlIEhEQ1BfU1RBVEVfQVVUSEVOVElDQVRFRDoJcmV0dXJuICJIRENQX1NUQVRFX0FV VEhFTlRJQ0FURUQiOwotCWNhc2UgSERDUF9TVEFURV9BVVRIX0ZBSUw6CXJldHVybiAiSERDUF9T VEFURV9BVVRIX0ZBSUwiOwotCWRlZmF1bHQ6CQkJcmV0dXJuICI/Pz8iOwotCX0KLX0KLQotc3Rh dGljIGludCBkcHVfaGRjcF8xeF9jb3VudF9vbmUodTggKmFycmF5LCB1OCBsZW4pCi17Ci0JaW50 IGksIGosIGNvdW50ID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQkJZm9yIChq ID0gMDsgaiA8IDg7IGorKykKLQkJCWNvdW50ICs9ICgoKGFycmF5W2ldID4+IGopICYgMHgxKSA/ IDEgOiAwKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2hkY3BfMXhfbG9h ZF9rZXlzKHZvaWQgKmlucHV0KQotewotCWludCByYyA9IDA7Ci0JYm9vbCB1c2Vfc3dfa2V5cyA9 IGZhbHNlOwotCXUzMiByZWdfdmFsOwotCXUzMiBrc3ZfbHNiX2FkZHIsIGtzdl9tc2JfYWRkcjsK LQl1MzIgYWtzdl9sc2IsIGFrc3ZfbXNiOwotCXU4IGFrc3ZbNV07Ci0Jc3RydWN0IGRzc19pb19k YXRhICppbzsKLQlzdHJ1Y3QgZHNzX2lvX2RhdGEgKnFmcHJvbV9pbzsKLQlzdHJ1Y3QgZHB1X2hk Y3BfMXggKmhkY3AgPSBpbnB1dDsKLQlzdHJ1Y3QgZHB1X2hkY3BfcmVnX3NldCAqcmVnX3NldDsK LQotCWlmICghaGRjcCB8fCAhaGRjcC0+aW5pdF9kYXRhLmNvcmVfaW8gfHwKLQkJIWhkY3AtPmlu aXRfZGF0YS5xZnByb21faW8pIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmMg PSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlpZiAoIWRwdV9oZGNwXzF4X3N0YXRlKEhE Q1BfU1RBVEVfSU5BQ1RJVkUpICYmCi0JICAgICFkcHVfaGRjcF8xeF9zdGF0ZShIRENQX1NUQVRF X0FVVEhfRkFJTCkpIHsKLQkJcHJfZXJyKCIlczogaW52YWxpZCBzdGF0ZS4gcmV0dXJuaW5nXG4i LAotCQkJRFBVX0hEQ1BfU1RBVEVfTkFNRSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7 Ci0JfQotCi0JaW8gPSBoZGNwLT5pbml0X2RhdGEuY29yZV9pbzsKLQlxZnByb21faW8gPSBoZGNw LT5pbml0X2RhdGEucWZwcm9tX2lvOwotCXJlZ19zZXQgPSAmaGRjcC0+cmVnX3NldDsKLQotCS8q IE9uIGNvbXBhdGlibGUgaGFyZHdhcmUsIHVzZSBTVyBrZXlzICovCi0JcmVnX3ZhbCA9IERTU19S RUdfUihxZnByb21faW8sIFNFQ19DVFJMX0hXX1ZFUlNJT04pOwotCWlmIChyZWdfdmFsID49IEhE Q1BfU0VMX01JTl9TRUNfVkVSU0lPTikgewotCQlyZWdfdmFsID0gRFNTX1JFR19SKHFmcHJvbV9p bywKLQkJCVFGUFJPTV9SQVdfRkVBVF9DT05GSUdfUk9XMF9NU0IgKwotCQkJUUZQUk9NX1JBV19W RVJTSU9OXzQpOwotCi0JCWlmICghKHJlZ192YWwgJiBCSVQoMjMpKSkKLQkJCXVzZV9zd19rZXlz ID0gdHJ1ZTsKLQl9Ci0KLQlpZiAodXNlX3N3X2tleXMpIHsKLQkJaWYgKGhkY3AxX3NldF9rZXlz KCZha3N2X21zYiwgJmFrc3ZfbHNiKSkgewotCQkJcHJfZXJyKCJzZXR0aW5nIGhkY3AgU1cga2V5 cyBmYWlsZWRcbiIpOwotCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBlbmQ7Ci0JCX0KLQl9IGVs c2UgewotCQkvKiBGZXRjaCBha3N2IGZyb20gUUZQUk9NLCB0aGlzIGluZm8gc2hvdWxkIGJlIHB1 YmxpYy4gKi8KLQkJa3N2X2xzYl9hZGRyID0gSERDUF9LU1ZfTFNCOwotCQlrc3ZfbXNiX2FkZHIg PSBIRENQX0tTVl9NU0I7Ci0KLQkJaWYgKGhkY3AtPmluaXRfZGF0YS5zZWNfYWNjZXNzKSB7Ci0J CQlrc3ZfbHNiX2FkZHIgKz0gSERDUF9LU1ZfVkVSU0lPTl80X09GRlNFVDsKLQkJCWtzdl9tc2Jf YWRkciArPSBIRENQX0tTVl9WRVJTSU9OXzRfT0ZGU0VUOwotCQl9Ci0KLQkJYWtzdl9sc2IgPSBE U1NfUkVHX1IocWZwcm9tX2lvLCBrc3ZfbHNiX2FkZHIpOwotCQlha3N2X21zYiA9IERTU19SRUdf UihxZnByb21faW8sIGtzdl9tc2JfYWRkcik7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBBS1NWPSUw MnglMDh4XG4iLCBEUFVfSERDUF9TVEFURV9OQU1FLAotCQlha3N2X21zYiwgYWtzdl9sc2IpOwot Ci0JYWtzdlswXSA9ICBha3N2X2xzYiAgICAgICAgJiAweEZGOwotCWFrc3ZbMV0gPSAoYWtzdl9s c2IgPj4gOCkgICYgMHhGRjsKLQlha3N2WzJdID0gKGFrc3ZfbHNiID4+IDE2KSAmIDB4RkY7Ci0J YWtzdlszXSA9IChha3N2X2xzYiA+PiAyNCkgJiAweEZGOwotCWFrc3ZbNF0gPSAgYWtzdl9tc2Ig ICAgICAgICYgMHhGRjsKLQotCS8qIGNoZWNrIHRoZXJlIGFyZSAyMCBvbmVzIGluIEFLU1YgKi8K LQlpZiAoZHB1X2hkY3BfMXhfY291bnRfb25lKGFrc3YsIDUpICE9IDIwKSB7Ci0JCXByX2Vycigi QUtTViBiaXQgY291bnQgZmFpbGVkXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsK LQl9Ci0KLQlEU1NfUkVHX1coaW8sIHJlZ19zZXQtPmFrc3ZfbHNiLCBha3N2X2xzYik7Ci0JRFNT X1JFR19XKGlvLCByZWdfc2V0LT5ha3N2X21zYiwgYWtzdl9tc2IpOwotCi0JLyogU2V0dXAgc2Vl ZCB2YWx1ZXMgZm9yIHJhbmRvbSBudW1iZXIgQW4gKi8KLQlEU1NfUkVHX1coaW8sIHJlZ19zZXQt PmVudHJvcHlfY3RybDAsIDB4QjFGRkIwRkYpOwotCURTU19SRUdfVyhpbywgcmVnX3NldC0+ZW50 cm9weV9jdHJsMSwgMHhGMDBERkFDRSk7Ci0KLQkvKiBtYWtlIHN1cmUgaHcgaXMgcHJvZ3JhbW1l ZCAqLwotCXdtYigpOwotCi0JLyogZW5hYmxlIGhkY3AgZW5naW5lICovCi0JRFNTX1JFR19XKGlv LCByZWdfc2V0LT5jdHJsLCAweDEpOwotCi0JaGRjcC0+aGRjcF9zdGF0ZSA9IEhEQ1BfU1RBVEVf QVVUSEVOVElDQVRJTkc7Ci1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9o ZGNwXzF4X3JlYWQoc3RydWN0IGRwdV9oZGNwXzF4ICpoZGNwLAotCQkJICBzdHJ1Y3QgZHB1X2hk Y3Bfc2lua19hZGRyICpzaW5rLAotCQkJICB1OCAqYnVmLCBib29sIHJlYWxpZ24pCi17Ci0JaW50 IGNvbnN0IG1heF9zaXplID0gMTU7Ci0JaW50IHJjID0gMCwgcmVhZF9zaXplID0gMCwgYnl0ZXNf cmVhZCA9IDA7Ci0KLQlpZiAoaGRjcC0+aW5pdF9kYXRhLmNsaWVudF9pZCA9PSBIRENQX0NMSUVO VF9EUCkgewotCQlpbnQgc2l6ZSA9IHNpbmstPmxlbiwgb2Zmc2V0ID0gc2luay0+YWRkcjsKLQot CQlkbyB7Ci0JCQlyZWFkX3NpemUgPSBtaW4oc2l6ZSwgbWF4X3NpemUpOwotCi0JCQlieXRlc19y ZWFkID0gZHJtX2RwX2RwY2RfcmVhZChoZGNwLT5pbml0X2RhdGEuZHJtX2F1eCwKLQkJCQkJb2Zm c2V0LCBidWYsIHJlYWRfc2l6ZSk7Ci0JCQlpZiAoYnl0ZXNfcmVhZCAhPSByZWFkX3NpemUpIHsK LQkJCQlwcl9lcnIoImZhaWw6IG9mZnNldCgweCV4KSwgc2l6ZSgweCV4KSwgcmMoMHgleClcbiIs Ci0JCQkJCW9mZnNldCwgcmVhZF9zaXplLCBieXRlc19yZWFkKTsKLQkJCQlicmVhazsKLQkJCX0K LQotCQkJYnVmICs9IHJlYWRfc2l6ZTsKLQkJCW9mZnNldCArPSByZWFkX3NpemU7Ci0JCQlzaXpl IC09IHJlYWRfc2l6ZTsKLQkJfSB3aGlsZSAoc2l6ZSA+IDApOwotCX0KLQotCXJldHVybiByYzsK LX0KLQotc3RhdGljIGludCBkcHVfaGRjcF8xeF93cml0ZShzdHJ1Y3QgZHB1X2hkY3BfMXggKmhk Y3AsCi0JCQkgICBzdHJ1Y3QgZHB1X2hkY3Bfc2lua19hZGRyICpzaW5rLCB1OCAqYnVmKQotewot CWludCBjb25zdCBtYXhfc2l6ZSA9IDE2OwotCWludCByYyA9IDAsIHdyaXRlX3NpemUgPSAwLCBi eXRlc193cml0dGVuID0gMDsKLQotCWlmIChoZGNwLT5pbml0X2RhdGEuY2xpZW50X2lkID09IEhE Q1BfQ0xJRU5UX0RQKSB7Ci0JCWludCBzaXplID0gc2luay0+bGVuLCBvZmZzZXQgPSBzaW5rLT5h ZGRyOwotCi0JCWRvIHsKLQkJCXdyaXRlX3NpemUgPSBtaW4oc2l6ZSwgbWF4X3NpemUpOwotCi0J CQlieXRlc193cml0dGVuID0KLQkJCQlkcm1fZHBfZHBjZF93cml0ZShoZGNwLT5pbml0X2RhdGEu ZHJtX2F1eCwKLQkJCQkJCW9mZnNldCwgYnVmLCB3cml0ZV9zaXplKTsKLQkJCWlmIChieXRlc193 cml0dGVuICE9IHdyaXRlX3NpemUpIHsKLQkJCQlwcl9lcnIoImZhaWw6IG9mZnNldCgweCV4KSwg c2l6ZSgweCV4KSwgcmMoMHgleClcbiIsCi0JCQkJCW9mZnNldCwgd3JpdGVfc2l6ZSwgYnl0ZXNf d3JpdHRlbik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWJ1ZiArPSB3cml0ZV9zaXplOwotCQkJ b2Zmc2V0ICs9IHdyaXRlX3NpemU7Ci0JCQlzaXplIC09IHdyaXRlX3NpemU7Ci0JCX0gd2hpbGUg KHNpemUgPiAwKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9oZGNw XzF4X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBkcHVfaGRjcF8xeCAqaGRjcCkKLXsKLQl1MzIg aW50cl9yZWc7Ci0Jc3RydWN0IGRzc19pb19kYXRhICppbzsKLQlzdHJ1Y3QgZHB1X2hkY3BfaW50 X3NldCAqaXNyOwotCi0JaW8gPSBoZGNwLT5pbml0X2RhdGEuY29yZV9pbzsKLQlpc3IgPSAmaGRj cC0+aW50X3NldDsKLQotCWludHJfcmVnID0gRFNTX1JFR19SKGlvLCBpc3ItPmludF9yZWcpOwot Ci0JaW50cl9yZWcgfD0gSERDUF9JTlRfQ0xSIHwgSERDUF9JTlRfRU47Ci0KLQlEU1NfUkVHX1co aW8sIGlzci0+aW50X3JlZywgaW50cl9yZWcpOwotfQotCi1zdGF0aWMgaW50IGRwdV9oZGNwXzF4 X3JlYWRfYmNhcHMoc3RydWN0IGRwdV9oZGNwXzF4ICpoZGNwKQotewotCWludCByYzsKLQlzdHJ1 Y3QgZHB1X2hkY3BfcmVnX3NldCAqcmVnX3NldCA9ICZoZGNwLT5yZWdfc2V0OwotCXN0cnVjdCBk c3NfaW9fZGF0YSAqaGRjcF9pbyA9IGhkY3AtPmluaXRfZGF0YS5oZGNwX2lvOwotCi0JaWYgKCFk cHVfaGRjcF8xeF9zdGF0ZShIRENQX1NUQVRFX0FVVEhFTlRJQ0FUSU5HKSkgewotCQlwcl9lcnIo ImludmFsaWQgc3RhdGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyYyA9IGRwdV9o ZGNwXzF4X3JlYWQoaGRjcCwgJmhkY3AtPnNpbmtfYWRkci5iY2FwcywKLQkJJmhkY3AtPmJjYXBz LCBmYWxzZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZXJyb3IgcmVhZGluZyBiY2Fwc1xuIik7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJfZGVidWcoImJjYXBzIHJlYWQ6IDB4JXhcbiIsIGhk Y3AtPmJjYXBzKTsKLQotCWhkY3AtPmN1cnJlbnRfdHAuZHNfdHlwZSA9IGhkY3AtPmJjYXBzICYg cmVnX3NldC0+cmVwZWF0ZXIgPwotCQkJRFNfUkVQRUFURVIgOiBEU19SRUNFSVZFUjsKLQotCXBy X2RlYnVnKCJkczogJXNcbiIsIGhkY3AtPmN1cnJlbnRfdHAuZHNfdHlwZSA9PSBEU19SRVBFQVRF UiA/Ci0JCQkicmVwZWF0ZXIiIDogInJlY2VpdmVyIik7Ci0KLQkvKiBXcml0ZSBCQ0FQUyB0byB0 aGUgaGFyZHdhcmUgKi8KLQlEU1NfUkVHX1coaGRjcF9pbywgcmVnX3NldC0+c2VjX2RhdGExMiwg aGRjcC0+YmNhcHMpOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9o ZGNwXzF4X3dhaXRfZm9yX2h3X3JlYWR5KHN0cnVjdCBkcHVfaGRjcF8xeCAqaGRjcCkKLXsKLQlp bnQgcmM7Ci0JdTMyIGxpbmswX3N0YXR1czsKLQlzdHJ1Y3QgZHB1X2hkY3BfcmVnX3NldCAqcmVn X3NldCA9ICZoZGNwLT5yZWdfc2V0OwotCXN0cnVjdCBkc3NfaW9fZGF0YSAqaW8gPSBoZGNwLT5p bml0X2RhdGEuY29yZV9pbzsKLQotCWlmICghZHB1X2hkY3BfMXhfc3RhdGUoSERDUF9TVEFURV9B VVRIRU5USUNBVElORykpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHN0YXRlXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JLyogV2FpdCBmb3IgSERDUCBrZXlzIHRvIGJlIGNoZWNrZWQgYW5k IHZhbGlkYXRlZCAqLwotCXJjID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvLT5iYXNlICsgcmVnX3Nl dC0+c3RhdHVzLCBsaW5rMF9zdGF0dXMsCi0JCQkJKChsaW5rMF9zdGF0dXMgPj4gcmVnX3NldC0+ a2V5c19vZmZzZXQpICYgMHg3KQotCQkJCQk9PSBIRENQX0tFWVNfU1RBVEVfVkFMSUQgfHwKLQkJ CQkhZHB1X2hkY3BfMXhfc3RhdGUoSERDUF9TVEFURV9BVVRIRU5USUNBVElORyksCi0JCQkJSERD UF9QT0xMX1NMRUVQX1VTLCBIRENQX1BPTExfVElNRU9VVF9VUyk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2Vycigia2V5IG5vdCByZWFkeVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyoKLQkgKiAx LjFfRmVhdHVyZXMgdHVybmVkIG9mZiBieSBkZWZhdWx0LgotCSAqIE5vIG5lZWQgdG8gd3JpdGUg QUluZm8gc2luY2UgMS4xX0ZlYXR1cmVzIGlzIGRpc2FibGVkLgotCSAqLwotCURTU19SRUdfVyhp bywgcmVnX3NldC0+ZGF0YTQsIDApOwotCi0JLyogV2FpdCBmb3IgQW4wIGFuZCBBbjEgYml0IHRv IGJlIHJlYWR5ICovCi0JcmMgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW8tPmJhc2UgKyByZWdfc2V0 LT5zdGF0dXMsIGxpbmswX3N0YXR1cywKLQkJCQkobGluazBfc3RhdHVzICYgKEJJVCg4KSB8IEJJ VCg5KSkpIHx8Ci0JCQkJIWRwdV9oZGNwXzF4X3N0YXRlKEhEQ1BfU1RBVEVfQVVUSEVOVElDQVRJ TkcpLAotCQkJCUhEQ1BfUE9MTF9TTEVFUF9VUywgSERDUF9QT0xMX1RJTUVPVVRfVVMpOwotCWlm IChyYykgewotCQlwcl9lcnIoIkFuIG5vdCByZWFkeVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci0JLyogQXMgcGVyIGhhcmR3YXJlIHJlY29tbWVuZGF0aW9ucywgd2FpdCBiZWZvcmUgcmVhZGlu ZyBBbiAqLwotCW1zbGVlcCgyMCk7Ci1lcnJvcjoKLQlpZiAoIWRwdV9oZGNwXzF4X3N0YXRlKEhE Q1BfU1RBVEVfQVVUSEVOVElDQVRJTkcpKQotCQlyYyA9IC1FSU5WQUw7Ci0KLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2hkY3BfMXhfc2VuZF9hbl9ha3N2X3RvX3Npbmsoc3RydWN0 IGRwdV9oZGNwXzF4ICpoZGNwKQotewotCWludCByYzsKLQl1OCBhbls4XSwgYWtzdls1XTsKLQot CWlmICghZHB1X2hkY3BfMXhfc3RhdGUoSERDUF9TVEFURV9BVVRIRU5USUNBVElORykpIHsKLQkJ cHJfZXJyKCJpbnZhbGlkIHN0YXRlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYW5b MF0gPSAgaGRjcC0+YW5fMCAgICAgICAgJiAweEZGOwotCWFuWzFdID0gKGhkY3AtPmFuXzAgPj4g OCkgICYgMHhGRjsKLQlhblsyXSA9IChoZGNwLT5hbl8wID4+IDE2KSAmIDB4RkY7Ci0JYW5bM10g PSAoaGRjcC0+YW5fMCA+PiAyNCkgJiAweEZGOwotCWFuWzRdID0gIGhkY3AtPmFuXzEgICAgICAg ICYgMHhGRjsKLQlhbls1XSA9IChoZGNwLT5hbl8xID4+IDgpICAmIDB4RkY7Ci0JYW5bNl0gPSAo aGRjcC0+YW5fMSA+PiAxNikgJiAweEZGOwotCWFuWzddID0gKGhkY3AtPmFuXzEgPj4gMjQpICYg MHhGRjsKLQotCXByX2RlYnVnKCJhbiByZWFkOiAweCUyeCUyeCUyeCUyeCUyeCUyeCUyeCUyeFxu IiwKLQkJYW5bN10sIGFuWzZdLCBhbls1XSwgYW5bNF0sIGFuWzNdLCBhblsyXSwgYW5bMV0sIGFu WzBdKTsKLQotCXJjID0gZHB1X2hkY3BfMXhfd3JpdGUoaGRjcCwgJmhkY3AtPnNpbmtfYWRkci5h biwgYW4pOwotCWlmIChyYykgewotCQlwcl9lcnIoImVycm9yIHdyaXRpbmcgYW4gdG8gc2lua1xu Iik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogQ29weSBBbiBhbmQgQUtTViB0byBieXRlIGFy cmF5cyBmb3IgdHJhbnNtaXNzaW9uICovCi0JYWtzdlswXSA9ICBoZGNwLT5ha3N2XzAgICAgICAg ICYgMHhGRjsKLQlha3N2WzFdID0gKGhkY3AtPmFrc3ZfMCA+PiA4KSAgJiAweEZGOwotCWFrc3Zb Ml0gPSAoaGRjcC0+YWtzdl8wID4+IDE2KSAmIDB4RkY7Ci0JYWtzdlszXSA9IChoZGNwLT5ha3N2 XzAgPj4gMjQpICYgMHhGRjsKLQlha3N2WzRdID0gIGhkY3AtPmFrc3ZfMSAgICAgICAgJiAweEZG OwotCi0JcHJfZGVidWcoImFrc3YgcmVhZDogMHglMnglMnglMnglMnglMnhcbiIsCi0JCWFrc3Zb NF0sIGFrc3ZbM10sIGFrc3ZbMl0sIGFrc3ZbMV0sIGFrc3ZbMF0pOwotCi0JcmMgPSBkcHVfaGRj cF8xeF93cml0ZShoZGNwLCAmaGRjcC0+c2lua19hZGRyLmFrc3YsIGFrc3YpOwotCWlmIChyYykg ewotCQlwcl9lcnIoImVycm9yIHdyaXRpbmcgYWtzdiB0byBzaW5rXG4iKTsKLQkJZ290byBlcnJv cjsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2hkY3BfMXhf cmVhZF9hbl9ha3N2X2Zyb21faHcoc3RydWN0IGRwdV9oZGNwXzF4ICpoZGNwKQotewotCXN0cnVj dCBkc3NfaW9fZGF0YSAqaW8gPSBoZGNwLT5pbml0X2RhdGEuY29yZV9pbzsKLQlzdHJ1Y3QgZHB1 X2hkY3BfcmVnX3NldCAqcmVnX3NldCA9ICZoZGNwLT5yZWdfc2V0OwotCi0JaWYgKCFkcHVfaGRj cF8xeF9zdGF0ZShIRENQX1NUQVRFX0FVVEhFTlRJQ0FUSU5HKSkgewotCQlwcl9lcnIoImludmFs aWQgc3RhdGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQloZGNwLT5hbl8wID0gRFNT X1JFR19SKGlvLCByZWdfc2V0LT5kYXRhNSk7Ci0JaWYgKGhkY3AtPmluaXRfZGF0YS5jbGllbnRf aWQgPT0gSERDUF9DTElFTlRfRFApIHsKLQkJdWRlbGF5KDEpOwotCQloZGNwLT5hbl8wID0gRFNT X1JFR19SKGlvLCByZWdfc2V0LT5kYXRhNSk7Ci0JfQotCi0JaGRjcC0+YW5fMSA9IERTU19SRUdf UihpbywgcmVnX3NldC0+ZGF0YTYpOwotCWlmIChoZGNwLT5pbml0X2RhdGEuY2xpZW50X2lkID09 IEhEQ1BfQ0xJRU5UX0RQKSB7Ci0JCXVkZWxheSgxKTsKLQkJaGRjcC0+YW5fMSA9IERTU19SRUdf UihpbywgcmVnX3NldC0+ZGF0YTYpOwotCX0KLQotCS8qIFJlYWQgQUtTViAqLwotCWhkY3AtPmFr c3ZfMCA9IERTU19SRUdfUihpbywgcmVnX3NldC0+ZGF0YTMpOwotCWhkY3AtPmFrc3ZfMSA9IERT U19SRUdfUihpbywgcmVnX3NldC0+ZGF0YTQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgZHB1X2hkY3BfMXhfZ2V0X2Jrc3ZfZnJvbV9zaW5rKHN0cnVjdCBkcHVfaGRjcF8xeCAqaGRj cCkKLXsKLQlpbnQgcmM7Ci0JdTggKmJrc3YgPSBoZGNwLT5jdXJyZW50X3RwLmJrc3Y7Ci0JdTMy IGxpbmswX2Jrc3ZfMCwgbGluazBfYmtzdl8xOwotCXN0cnVjdCBkcHVfaGRjcF9yZWdfc2V0ICpy ZWdfc2V0ID0gJmhkY3AtPnJlZ19zZXQ7Ci0Jc3RydWN0IGRzc19pb19kYXRhICpoZGNwX2lvICA9 IGhkY3AtPmluaXRfZGF0YS5oZGNwX2lvOwotCi0JcmMgPSBkcHVfaGRjcF8xeF9yZWFkKGhkY3As ICZoZGNwLT5zaW5rX2FkZHIuYmtzdiwgYmtzdiwgZmFsc2UpOwotCWlmIChyYykgewotCQlwcl9l cnIoImVycm9yIHJlYWRpbmcgYmtzdiBmcm9tIHNpbmtcbiIpOwotCQlnb3RvIGVycm9yOwotCX0K LQotCXByX2RlYnVnKCJia3N2IHJlYWQ6IDB4JTJ4JTJ4JTJ4JTJ4JTJ4XG4iLAotCQlia3N2WzRd LCBia3N2WzNdLCBia3N2WzJdLCBia3N2WzFdLCBia3N2WzBdKTsKLQotCS8qIGNoZWNrIHRoZXJl IGFyZSAyMCBvbmVzIGluIEJLU1YgKi8KLQlpZiAoZHB1X2hkY3BfMXhfY291bnRfb25lKGJrc3Ys IDUpICE9IDIwKSB7Ci0JCXByX2VycigiJXM6IEJLU1YgZG9lc24ndCBoYXZlIDIwIDEncyBhbmQg MjAgMCdzXG4iLAotCQkJRFBVX0hEQ1BfU1RBVEVfTkFNRSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJ Z290byBlcnJvcjsKLQl9Ci0KLQlsaW5rMF9ia3N2XzAgPSBia3N2WzNdOwotCWxpbmswX2Jrc3Zf MCA9IChsaW5rMF9ia3N2XzAgPDwgOCkgfCBia3N2WzJdOwotCWxpbmswX2Jrc3ZfMCA9IChsaW5r MF9ia3N2XzAgPDwgOCkgfCBia3N2WzFdOwotCWxpbmswX2Jrc3ZfMCA9IChsaW5rMF9ia3N2XzAg PDwgOCkgfCBia3N2WzBdOwotCWxpbmswX2Jrc3ZfMSA9IGJrc3ZbNF07Ci0KLQlEU1NfUkVHX1co aGRjcF9pbywgcmVnX3NldC0+c2VjX2RhdGEwLCBsaW5rMF9ia3N2XzApOwotCURTU19SRUdfVyho ZGNwX2lvLCByZWdfc2V0LT5zZWNfZGF0YTEsIGxpbmswX2Jrc3ZfMSk7Ci1lcnJvcjoKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9oZGNwXzF4X2VuYWJsZV9zaW5rX2lycV9ocGQo c3RydWN0IGRwdV9oZGNwXzF4ICpoZGNwKQotewotCXU4IGNvbnN0IHJlcXVpcmVkX21ham9yID0g MSwgcmVxdWlyZWRfbWlub3IgPSAyOwotCXU4IHNpbmtfbWFqb3IgPSAwLCBzaW5rX21pbm9yID0g MDsKLQl1OCBlbmFibGVfaHBkX2lycSA9IDB4MTsKLQlpbnQgcmM7Ci0JdW5zaWduZWQgY2hhciBy ZXZpc2lvbiA9ICpoZGNwLT5pbml0X2RhdGEucmV2aXNpb247Ci0KLQlzaW5rX21ham9yID0gKHJl dmlzaW9uID4+IDQpICYgMHgwZjsKLQlzaW5rX21pbm9yID0gcmV2aXNpb24gJiAweDBmOwotCXBy X2RlYnVnKCJyZXZpc2lvbjogJWQuJWRcbiIsIHNpbmtfbWFqb3IsIHNpbmtfbWlub3IpOwotCi0J aWYgKChzaW5rX21pbm9yIDwgcmVxdWlyZWRfbWlub3IpIHx8IChzaW5rX21ham9yIDwgcmVxdWly ZWRfbWFqb3IpIHx8Ci0JICAoaGRjcC0+Y3VycmVudF90cC5kc190eXBlICE9IERTX1JFUEVBVEVS KSkgewotCQlwcl9kZWJ1Zygic2luayBpcnEgaHBkIG5vdCBlbmFibGVkXG4iKTsKLQkJcmV0dXJu OwotCX0KLQotCXJjID0gZHB1X2hkY3BfMXhfd3JpdGUoaGRjcCwgJmhkY3AtPnNpbmtfYWRkci5h aW5mbywgJmVuYWJsZV9ocGRfaXJxKTsKLQlpZiAocmMpCi0JCXByX2RlYnVnKCJlcnJvciB3cml0 aW5nIGFpbmZvIHRvIHNpbmtcbiIpOwotfQotCi1zdGF0aWMgaW50IGRwdV9oZGNwXzF4X3Zlcmlm eV9yMChzdHJ1Y3QgZHB1X2hkY3BfMXggKmhkY3ApCi17Ci0JaW50IHJjLCByMF9yZXRyeSA9IDM7 Ci0JdTggYnVmWzJdOwotCXUzMiBsaW5rMF9zdGF0dXMsIHRpbWVvdXRfY291bnQ7Ci0JdTMyIGNv bnN0IHIwX3JlYWRfZGVsYXlfdXMgPSAxOwotCXUzMiBjb25zdCByMF9yZWFkX3RpbWVvdXRfdXMg PSByMF9yZWFkX2RlbGF5X3VzICogMTA7Ci0Jc3RydWN0IGRwdV9oZGNwX3JlZ19zZXQgKnJlZ19z ZXQgPSAmaGRjcC0+cmVnX3NldDsKLQlzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvID0gaGRjcC0+aW5p dF9kYXRhLmNvcmVfaW87Ci0KLQlpZiAoIWRwdV9oZGNwXzF4X3N0YXRlKEhEQ1BfU1RBVEVfQVVU SEVOVElDQVRJTkcpKSB7Ci0JCXByX2VycigiaW52YWxpZCBzdGF0ZVxuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCS8qIFdhaXQgZm9yIEhEQ1AgUjAgY29tcHV0YXRpb24gdG8gYmUgY29t cGxldGVkICovCi0JcmMgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW8tPmJhc2UgKyByZWdfc2V0LT5z dGF0dXMsIGxpbmswX3N0YXR1cywKLQkJCQkobGluazBfc3RhdHVzICYgQklUKHJlZ19zZXQtPnIw X29mZnNldCkpIHx8Ci0JCQkJIWRwdV9oZGNwXzF4X3N0YXRlKEhEQ1BfU1RBVEVfQVVUSEVOVElD QVRJTkcpLAotCQkJCUhEQ1BfUE9MTF9TTEVFUF9VUywgSERDUF9QT0xMX1RJTUVPVVRfVVMpOwot CWlmIChyYykgewotCQlwcl9lcnIoIlIwIG5vdCByZWFkeVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JLyoKLQkgKiBIRENQIENvbXBsaWFjZSBUZXN0IGNhc2UgMUEtMDE6Ci0JICogV2FpdCBo ZXJlIGF0IGxlYXN0IDEwMG1zIGJlZm9yZSByZWFkaW5nIFIwJwotCSAqLwotCWlmIChoZGNwLT5p bml0X2RhdGEuY2xpZW50X2lkID09IEhEQ1BfQ0xJRU5UX0hETUkpIHsKLQkJbXNsZWVwKDEwMCk7 Ci0JfSBlbHNlIHsKLQkJaWYgKCFoZGNwLT5zaW5rX3IwX3JlYWR5KSB7Ci0JCQlyZWluaXRfY29t cGxldGlvbigmaGRjcC0+c2lua19yMF9hdmFpbGFibGUpOwotCQkJdGltZW91dF9jb3VudCA9IHdh aXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgKLQkJCQkmaGRjcC0+c2lua19yMF9hdmFpbGFibGUs IEhaIC8gMik7Ci0KLQkJCWlmIChoZGNwLT5yZWF1dGgpIHsKLQkJCQlwcl9lcnIoInNpbmsgUjAg bm90IHJlYWR5XG4iKTsKLQkJCQlyYyA9IC1FSU5WQUw7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0K LQkJfQotCX0KLQotCWRvIHsKLQkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwotCi0JCXJj ID0gZHB1X2hkY3BfMXhfcmVhZChoZGNwLCAmaGRjcC0+c2lua19hZGRyLnIwLAotCQkJYnVmLCBm YWxzZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJlcnJvciByZWFkaW5nIFIwJyBmcm9tIHNp bmtcbiIpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCXByX2RlYnVnKCJzaW5rIFIwJ3JlYWQ6 ICUyeCUyeFxuIiwgYnVmWzFdLCBidWZbMF0pOwotCi0JCURTU19SRUdfVyhpbywgcmVnX3NldC0+ ZGF0YTJfMCwgKCgodTMyKWJ1ZlsxXSkgPDwgOCkgfCBidWZbMF0pOwotCi0JCXJjID0gcmVhZGxf cG9sbF90aW1lb3V0KGlvLT5iYXNlICsgcmVnX3NldC0+c3RhdHVzLAotCQkJbGluazBfc3RhdHVz LCAobGluazBfc3RhdHVzICYgQklUKDEyKSkgfHwKLQkJCSFkcHVfaGRjcF8xeF9zdGF0ZShIRENQ X1NUQVRFX0FVVEhFTlRJQ0FUSU5HKSwKLQkJCXIwX3JlYWRfZGVsYXlfdXMsIHIwX3JlYWRfdGlt ZW91dF91cyk7Ci0JfSB3aGlsZSAocmMgJiYgLS1yMF9yZXRyeSk7Ci1lcnJvcjoKLQlpZiAoIWRw dV9oZGNwXzF4X3N0YXRlKEhEQ1BfU1RBVEVfQVVUSEVOVElDQVRJTkcpKQotCQlyYyA9IC1FSU5W QUw7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2hkY3BfMXhfYXV0aGVudGlj YXRpb25fcGFydDEoc3RydWN0IGRwdV9oZGNwXzF4ICpoZGNwKQotewotCWludCByYzsKLQotCWlm ICghZHB1X2hkY3BfMXhfc3RhdGUoSERDUF9TVEFURV9BVVRIRU5USUNBVElORykpIHsKLQkJcHJf ZXJyKCJpbnZhbGlkIHN0YXRlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHB1X2hk Y3BfMXhfZW5hYmxlX2ludGVycnVwdHMoaGRjcCk7Ci0KLQlyYyA9IGRwdV9oZGNwXzF4X3JlYWRf YmNhcHMoaGRjcCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycm9yOwotCi0JcmMgPSBkcHVfaGRjcF8x eF93YWl0X2Zvcl9od19yZWFkeShoZGNwKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyb3I7Ci0KLQly YyA9IGRwdV9oZGNwXzF4X3JlYWRfYW5fYWtzdl9mcm9tX2h3KGhkY3ApOwotCWlmIChyYykKLQkJ Z290byBlcnJvcjsKLQotCXJjID0gZHB1X2hkY3BfMXhfZ2V0X2Jrc3ZfZnJvbV9zaW5rKGhkY3Ap OwotCWlmIChyYykKLQkJZ290byBlcnJvcjsKLQotCXJjID0gZHB1X2hkY3BfMXhfc2VuZF9hbl9h a3N2X3RvX3NpbmsoaGRjcCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycm9yOwotCi0JZHB1X2hkY3Bf MXhfZW5hYmxlX3NpbmtfaXJxX2hwZChoZGNwKTsKLQotCXJjID0gZHB1X2hkY3BfMXhfdmVyaWZ5 X3IwKGhkY3ApOwotCWlmIChyYykKLQkJZ290byBlcnJvcjsKLQotCXByX2luZm8oIlNVQ0NFU1NG VUxcbiIpOwotCi0JcmV0dXJuIDA7Ci1lcnJvcjoKLQlwcl9lcnIoIiVzOiBGQUlMRURcbiIsIERQ VV9IRENQX1NUQVRFX05BTUUpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9o ZGNwXzF4X3RyYW5zZmVyX3ZfaChzdHJ1Y3QgZHB1X2hkY3BfMXggKmhkY3ApCi17Ci0JaW50IHJj ID0gMDsKLQlzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvID0gaGRjcC0+aW5pdF9kYXRhLmhkY3BfaW87 Ci0Jc3RydWN0IGRwdV9oZGNwX3JlZ19zZXQgKnJlZ19zZXQgPSAmaGRjcC0+cmVnX3NldDsKLQlz dHJ1Y3QgZHB1X2hkY3BfMXhfcmVnX2RhdGEgcmVnX2RhdGFbXSAgPSB7Ci0JCXtyZWdfc2V0LT5z ZWNfZGF0YTcsICAmaGRjcC0+c2lua19hZGRyLnZfaDB9LAotCQl7cmVnX3NldC0+c2VjX2RhdGE4 LCAgJmhkY3AtPnNpbmtfYWRkci52X2gxfSwKLQkJe3JlZ19zZXQtPnNlY19kYXRhOSwgICZoZGNw LT5zaW5rX2FkZHIudl9oMn0sCi0JCXtyZWdfc2V0LT5zZWNfZGF0YTEwLCAmaGRjcC0+c2lua19h ZGRyLnZfaDN9LAotCQl7cmVnX3NldC0+c2VjX2RhdGExMSwgJmhkY3AtPnNpbmtfYWRkci52X2g0 fSwKLQl9OwotCXN0cnVjdCBkcHVfaGRjcF9zaW5rX2FkZHIgc2luayA9IHsiViIsIHJlZ19kYXRh LT5zaW5rLT5hZGRyfTsKLQl1MzIgc2l6ZSA9IEFSUkFZX1NJWkUocmVnX2RhdGEpOwotCXU4IGJ1 ZlsweEZGXSA9IHswfTsKLQl1MzIgaSA9IDAsIGxlbiA9IDA7Ci0KLQlpZiAoIWRwdV9oZGNwXzF4 X3N0YXRlKEhEQ1BfU1RBVEVfQVVUSEVOVElDQVRJTkcpKSB7Ci0JCXByX2VycigiaW52YWxpZCBz dGF0ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBzaXpl OyBpKyspIHsKLQkJc3RydWN0IGRwdV9oZGNwXzF4X3JlZ19kYXRhICpyZCA9IHJlZ19kYXRhICsg aTsKLQotCQlsZW4gKz0gcmQtPnNpbmstPmxlbjsKLQl9Ci0KLQlzaW5rLmxlbiA9IGxlbjsKLQot CXJjID0gZHB1X2hkY3BfMXhfcmVhZChoZGNwLCAmc2luaywgYnVmLCBmYWxzZSk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiZXJyb3IgcmVhZGluZyAlc1xuIiwgc2luay5uYW1lKTsKLQkJZ290byBl bmQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQlzdHJ1Y3QgZHB1X2hk Y3BfMXhfcmVnX2RhdGEgKnJkID0gcmVnX2RhdGEgKyBpOwotCQl1MzIgcmVnX2RhdGE7Ci0KLQkJ bWVtY3B5KCZyZWdfZGF0YSwgYnVmICsgKHNpemVvZih1MzIpICogaSksIHNpemVvZih1MzIpKTsK LQkJRFNTX1JFR19XKGlvLCByZC0+cmVnX2lkLCByZWdfZGF0YSk7Ci0JfQotZW5kOgotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCBkcHVfaGRjcF8xeF92YWxpZGF0ZV9kb3duc3RyZWFtKHN0 cnVjdCBkcHVfaGRjcF8xeCAqaGRjcCkKLXsKLQlpbnQgcmM7Ci0JdTggYnVmWzJdID0gezAsIDB9 OwotCXU4IGRldmljZV9jb3VudCwgZGVwdGg7Ci0JdTggbWF4X2Nhc2NhZGVfZXhjZWVkZWQsIG1h eF9kZXZzX2V4Y2VlZGVkOwotCXUxNiBic3RhdHVzOwotCXN0cnVjdCBkcHVfaGRjcF9yZWdfc2V0 ICpyZWdfc2V0ID0gJmhkY3AtPnJlZ19zZXQ7Ci0KLQlpZiAoIWRwdV9oZGNwXzF4X3N0YXRlKEhE Q1BfU1RBVEVfQVVUSEVOVElDQVRJTkcpKSB7Ci0JCXByX2VycigiaW52YWxpZCBzdGF0ZVxuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJjID0gZHB1X2hkY3BfMXhfcmVhZChoZGNwLCAm aGRjcC0+c2lua19hZGRyLmJzdGF0dXMsCi0JCQlidWYsIGZhbHNlKTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJlcnJvciByZWFkaW5nIGJzdGF0dXNcbiIpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQli c3RhdHVzID0gYnVmWzFdOwotCWJzdGF0dXMgPSAoYnN0YXR1cyA8PCA4KSB8IGJ1ZlswXTsKLQot CWRldmljZV9jb3VudCA9IGJzdGF0dXMgJiAweDdGOwotCi0JcHJfZGVidWcoImRldmljZSBjb3Vu dCAlZFxuIiwgZGV2aWNlX2NvdW50KTsKLQotCS8qIENhc2NhZGVkIHJlcGVhdGVyIGRlcHRoICov Ci0JZGVwdGggPSAoYnN0YXR1cyA+PiA4KSAmIDB4NzsKLQlwcl9kZWJ1ZygiZGVwdGggJWRcbiIs IGRlcHRoKTsKLQotCS8qCi0JICogSERDUCBDb21wbGlhbmNlIDFCLTA1OgotCSAqIENoZWNrIGlm IG5vLiBvZiBkZXZpY2VzIGNvbm5lY3RlZCB0byByZXBlYXRlcgotCSAqIGV4Y2VlZCBtYXhfZGV2 aWNlc19jb25uZWN0ZWQgZnJvbSBiaXQgNyBvZiBCc3RhdHVzLgotCSAqLwotCW1heF9kZXZzX2V4 Y2VlZGVkID0gKGJzdGF0dXMgJiBCSVQoNykpID4+IDc7Ci0JaWYgKG1heF9kZXZzX2V4Y2VlZGVk ID09IDB4MDEpIHsKLQkJcHJfZXJyKCJuby4gb2YgZGV2cyBjb25uZWN0ZWQgZXhjZWVkIG1heCBh bGxvd2VkXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKgotCSAq IEhEQ1AgQ29tcGxpYW5jZSAxQi0wNjoKLQkgKiBDaGVjayBpZiBuby4gb2YgY2FzY2FkZSBjb25u ZWN0ZWQgdG8gcmVwZWF0ZXIKLQkgKiBleGNlZWQgbWF4X2Nhc2NhZGVfY29ubmVjdGVkIGZyb20g Yml0IDExIG9mIEJzdGF0dXMuCi0JICovCi0JbWF4X2Nhc2NhZGVfZXhjZWVkZWQgPSAoYnN0YXR1 cyAmIEJJVCgxMSkpID4+IDExOwotCWlmIChtYXhfY2FzY2FkZV9leGNlZWRlZCA9PSAweDAxKSB7 Ci0JCXByX2Vycigibm8uIG9mIGNhc2NhZGUgY29ubmVjdGlvbnMgZXhjZWVkIG1heCBhbGxvd2Vk XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBVcGRhdGUgdG9w b2xvZ3kgaW5mb3JtYXRpb24gKi8KLQloZGNwLT5jdXJyZW50X3RwLmRldl9jb3VudCA9IGRldmlj ZV9jb3VudDsKLQloZGNwLT5jdXJyZW50X3RwLm1heF9jYXNjYWRlX2V4Y2VlZGVkID0gbWF4X2Nh c2NhZGVfZXhjZWVkZWQ7Ci0JaGRjcC0+Y3VycmVudF90cC5tYXhfZGV2X2V4Y2VlZGVkID0gbWF4 X2RldnNfZXhjZWVkZWQ7Ci0JaGRjcC0+Y3VycmVudF90cC5kZXB0aCA9IGRlcHRoOwotCi0JRFNT X1JFR19XKGhkY3AtPmluaXRfZGF0YS5oZGNwX2lvLAotCQkgIHJlZ19zZXQtPnNlY19kYXRhMTIs IGhkY3AtPmJjYXBzIHwgKGJzdGF0dXMgPDwgOCkpOwotZW5kOgotCXJldHVybiByYzsKLX0KLQot c3RhdGljIGludCBkcHVfaGRjcF8xeF9yZWFkX2tzdl9maWZvKHN0cnVjdCBkcHVfaGRjcF8xeCAq aGRjcCkKLXsKLQl1MzIga3N2X3JlYWRfcmV0cnkgPSAyMCwga3N2X2J5dGVzLCByYyA9IDA7Ci0J dTggKmtzdl9maWZvID0gaGRjcC0+Y3VycmVudF90cC5rc3ZfbGlzdDsKLQotCWlmICghZHB1X2hk Y3BfMXhfc3RhdGUoSERDUF9TVEFURV9BVVRIRU5USUNBVElORykpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIHN0YXRlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbWVtc2V0KGtzdl9maWZv LCAwLCBzaXplb2YoaGRjcC0+Y3VycmVudF90cC5rc3ZfbGlzdCkpOwotCi0JLyogZWFjaCBLU1Yg aXMgNSBieXRlcyBsb25nICovCi0Ja3N2X2J5dGVzID0gNSAqIGhkY3AtPmN1cnJlbnRfdHAuZGV2 X2NvdW50OwotCWhkY3AtPnNpbmtfYWRkci5rc3ZfZmlmby5sZW4gPSBrc3ZfYnl0ZXM7Ci0KLQl3 aGlsZSAoa3N2X2J5dGVzICYmIC0ta3N2X3JlYWRfcmV0cnkpIHsKLQkJcmMgPSBkcHVfaGRjcF8x eF9yZWFkKGhkY3AsICZoZGNwLT5zaW5rX2FkZHIua3N2X2ZpZm8sCi0JCQkJa3N2X2ZpZm8sIHRy dWUpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoImNvdWxkIG5vdCByZWFkIGtzdiBmaWZvICglZClc biIsCi0JCQkJa3N2X3JlYWRfcmV0cnkpOwotCQllbHNlCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAo cmMpCi0JCXByX2VycigiZXJyb3IgcmVhZGluZyBrc3ZfZmlmb1xuIik7Ci0KLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2hkY3BfMXhfd3JpdGVfa3N2X2ZpZm8oc3RydWN0IGRwdV9o ZGNwXzF4ICpoZGNwKQotewotCWludCBpLCByYyA9IDA7Ci0JdTggKmtzdl9maWZvID0gaGRjcC0+ Y3VycmVudF90cC5rc3ZfbGlzdDsKLQl1MzIga3N2X2J5dGVzID0gaGRjcC0+c2lua19hZGRyLmtz dl9maWZvLmxlbjsKLQlzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvID0gaGRjcC0+aW5pdF9kYXRhLmNv cmVfaW87Ci0Jc3RydWN0IGRzc19pb19kYXRhICpzZWNfaW8gPSBoZGNwLT5pbml0X2RhdGEuaGRj cF9pbzsKLQlzdHJ1Y3QgZHB1X2hkY3BfcmVnX3NldCAqcmVnX3NldCA9ICZoZGNwLT5yZWdfc2V0 OwotCXUzMiBzaGFfc3RhdHVzID0gMCwgc3RhdHVzOwotCi0JaWYgKCFkcHVfaGRjcF8xeF9zdGF0 ZShIRENQX1NUQVRFX0FVVEhFTlRJQ0FUSU5HKSkgewotCQlwcl9lcnIoImludmFsaWQgc3RhdGVc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiByZXNldCBTSEEgQ29udHJvbGxlciAq LwotCURTU19SRUdfVyhzZWNfaW8sIHJlZ19zZXQtPnNlY19zaGFfY3RybCwgMHgxKTsKLQlEU1Nf UkVHX1coc2VjX2lvLCByZWdfc2V0LT5zZWNfc2hhX2N0cmwsIDB4MCk7Ci0KLQlmb3IgKGkgPSAw OyBpIDwga3N2X2J5dGVzIC0gMTsgaSsrKSB7Ci0JCS8qIFdyaXRlIEtTViBieXRlIGFuZCBkbyBu b3Qgc2V0IERPTkUgYml0WzBdICovCi0JCURTU19SRUdfV19ORChzZWNfaW8sIHJlZ19zZXQtPnNl Y19zaGFfZGF0YSwga3N2X2ZpZm9baV0gPDwgMTYpOwotCi0JCS8qCi0JCSAqIE9uY2UgNjQgYnl0 ZXMgaGF2ZSBiZWVuIHdyaXR0ZW4sIHdlIG5lZWQgdG8gcG9sbCBmb3IKLQkJICogSERDUF9TSEFf QkxPQ0tfRE9ORSBiZWZvcmUgd3JpdGluZyBhbnkgZnVydGhlcgotCQkgKi8KLQkJaWYgKGkgJiYg ISgoaSArIDEpICUgNjQpKSB7Ci0JCQlyYyA9IHJlYWRsX3BvbGxfdGltZW91dChpby0+YmFzZSAr IHJlZ19zZXQtPnNoYV9zdGF0dXMsCi0JCQkJc2hhX3N0YXR1cywgKHNoYV9zdGF0dXMgJiBCSVQo MCkpIHx8Ci0JCQkJIWRwdV9oZGNwXzF4X3N0YXRlKEhEQ1BfU1RBVEVfQVVUSEVOVElDQVRJTkcp LAotCQkJCUhEQ1BfUE9MTF9TTEVFUF9VUywgSERDUF9QT0xMX1RJTUVPVVRfVVMpOwotCQkJaWYg KHJjKSB7Ci0JCQkJcHJfZXJyKCJibG9jayBub3QgZG9uZVxuIik7Ci0JCQkJZ290byBlcnJvcjsK LQkJCX0KLQkJfQotCX0KLQotCS8qIFdyaXRlIGwgdG8gRE9ORSBiaXRbMF0gKi8KLQlEU1NfUkVH X1dfTkQoc2VjX2lvLCByZWdfc2V0LT5zZWNfc2hhX2RhdGEsCi0JCShrc3ZfZmlmb1trc3ZfYnl0 ZXMgLSAxXSA8PCAxNikgfCAweDEpOwotCi0JLyogTm93IHdhaXQgZm9yIEhEQ1BfU0hBX0NPTVBf RE9ORSAqLwotCXJjID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvLT5iYXNlICsgcmVnX3NldC0+c2hh X3N0YXR1cywgc2hhX3N0YXR1cywKLQkJCQkoc2hhX3N0YXR1cyAmIEJJVCg0KSkgfHwKLQkJCQkh ZHB1X2hkY3BfMXhfc3RhdGUoSERDUF9TVEFURV9BVVRIRU5USUNBVElORyksCi0JCQkJSERDUF9Q T0xMX1NMRUVQX1VTLCBIRENQX1BPTExfVElNRU9VVF9VUyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiViBjb21wdXRhdGlvbiBub3QgZG9uZVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyog V2FpdCBmb3IgVl9NQVRDSEVTICovCi0JcmMgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW8tPmJhc2Ug KyByZWdfc2V0LT5zdGF0dXMsIHN0YXR1cywKLQkJCQkoc3RhdHVzICYgQklUKHJlZ19zZXQtPnZf b2Zmc2V0KSkgfHwKLQkJCQkhZHB1X2hkY3BfMXhfc3RhdGUoSERDUF9TVEFURV9BVVRIRU5USUNB VElORyksCi0JCQkJSERDUF9QT0xMX1NMRUVQX1VTLCBIRENQX1BPTExfVElNRU9VVF9VUyk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiViBtaXNtYXRjaFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQl9 Ci1lcnJvcjoKLQlpZiAoIWRwdV9oZGNwXzF4X3N0YXRlKEhEQ1BfU1RBVEVfQVVUSEVOVElDQVRJ TkcpKQotCQlyYyA9IC1FSU5WQUw7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1 X2hkY3BfMXhfd2FpdF9mb3Jfa3N2X3JlYWR5KHN0cnVjdCBkcHVfaGRjcF8xeCAqaGRjcCkKLXsK LQlpbnQgcmMsIHRpbWVvdXQ7Ci0KLQlpZiAoIWRwdV9oZGNwXzF4X3N0YXRlKEhEQ1BfU1RBVEVf QVVUSEVOVElDQVRJTkcpKSB7Ci0JCXByX2VycigiaW52YWxpZCBzdGF0ZVxuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCS8qCi0JICogV2FpdCB1bnRpbCBSRUFEWSBiaXQgaXMgc2V0IGlu IEJDQVBTLCBhcyBwZXIgSERDUCBzcGVjaWZpY2F0aW9ucwotCSAqIG1heGltdW0gcGVybWl0dGVk IHRpbWUgdG8gY2hlY2sgZm9yIFJFQURZIGJpdCBpcyBmaXZlIHNlY29uZHMuCi0JICovCi0JcmMg PSBkcHVfaGRjcF8xeF9yZWFkKGhkY3AsICZoZGNwLT5zaW5rX2FkZHIuYmNhcHMsCi0JCSZoZGNw LT5iY2FwcywgZmFsc2UpOwotCWlmIChyYykgewotCQlwcl9lcnIoImVycm9yIHJlYWRpbmcgYmNh cHNcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChoZGNwLT5pbml0X2RhdGEuY2xpZW50 X2lkID09IEhEQ1BfQ0xJRU5UX0hETUkpIHsKLQkJdGltZW91dCA9IDUwOwotCi0JCXdoaWxlICgh KGhkY3AtPmJjYXBzICYgQklUKDUpKSAmJiAtLXRpbWVvdXQpIHsKLQkJCXJjID0gZHB1X2hkY3Bf MXhfcmVhZChoZGNwLAotCQkJCSZoZGNwLT5zaW5rX2FkZHIuYmNhcHMsCi0JCQkJJmhkY3AtPmJj YXBzLCBmYWxzZSk7Ci0JCQlpZiAocmMgfHwKLQkJCSAgICFkcHVfaGRjcF8xeF9zdGF0ZShIRENQ X1NUQVRFX0FVVEhFTlRJQ0FUSU5HKSkgewotCQkJCXByX2VycigiZXJyb3IgcmVhZGluZyBiY2Fw c1xuIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJCW1zbGVlcCgxMDApOwotCQl9Ci0JfSBl bHNlIHsKLQkJdTggY3BfYnVmID0gMDsKLQkJc3RydWN0IGRwdV9oZGNwX3NpbmtfYWRkciAqc2lu ayA9Ci0JCQkmaGRjcC0+c2lua19hZGRyLmNwX2lycV9zdGF0dXM7Ci0KLQkJdGltZW91dCA9IGpp ZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7Ci0KLQkJd2hpbGUgKDEpIHsKLQkJCXJjID0gZHB1X2hk Y3BfMXhfcmVhZChoZGNwLCBzaW5rLCAmY3BfYnVmLCBmYWxzZSk7Ci0JCQlpZiAocmMpCi0JCQkJ Z290byBlcnJvcjsKLQotCQkJaWYgKGNwX2J1ZiAmIEJJVCgwKSkKLQkJCQlicmVhazsKLQotCQkJ LyogbWF4IHRpbWVvdXQgb2YgNSBzZWMgYXMgcGVyIGhkY3AgMS54IHNwZWMgKi8KLQkJCWlmIChh YnModGltZW91dCAtIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcykpID4gNTAwMCkgewotCQkJCXRp bWVvdXQgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAoaGRjcC0+a3N2X3JlYWR5IHx8 IGhkY3AtPnJlYXV0aCB8fAotCQkJICAgICFkcHVfaGRjcF8xeF9zdGF0ZShIRENQX1NUQVRFX0FV VEhFTlRJQ0FUSU5HKSkKLQkJCQlicmVhazsKLQotCQkJLyogcmUtcmVhZCBhZnRlciBhIG1pbmlt dW0gZGVsYXkgKi8KLQkJCW1zbGVlcCgyMCk7Ci0JCX0KLQl9Ci0KLQlpZiAoIXRpbWVvdXQgfHwg aGRjcC0+cmVhdXRoIHx8Ci0JICAgICFkcHVfaGRjcF8xeF9zdGF0ZShIRENQX1NUQVRFX0FVVEhF TlRJQ0FUSU5HKSkgewotCQlwcl9lcnIoIkRTIEtTViBub3QgcmVhZHlcbiIpOwotCQlyYyA9IC1F SU5WQUw7Ci0JfSBlbHNlIHsKLQkJaGRjcC0+a3N2X3JlYWR5ID0gdHJ1ZTsKLQl9Ci1lcnJvcjoK LQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2hkY3BfMXhfYXV0aGVudGljYXRpb25f cGFydDIoc3RydWN0IGRwdV9oZGNwXzF4ICpoZGNwKQotewotCWludCByYzsKLQlpbnQgdl9yZXRy eSA9IDM7Ci0KLQlyYyA9IGRwdV9oZGNwXzF4X3ZhbGlkYXRlX2Rvd25zdHJlYW0oaGRjcCk7Ci0J aWYgKHJjKQotCQlnb3RvIGVycm9yOwotCi0JcmMgPSBkcHVfaGRjcF8xeF9yZWFkX2tzdl9maWZv KGhkY3ApOwotCWlmIChyYykKLQkJZ290byBlcnJvcjsKLQotCWRvIHsKLQkJcmMgPSBkcHVfaGRj cF8xeF90cmFuc2Zlcl92X2goaGRjcCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZXJyb3I7Ci0KLQkJ LyogZG8gbm90IHByb2NlZWQgZnVydGhlciBpZiBubyBkZXZpY2UgY29ubmVjdGVkICovCi0JCWlm ICghaGRjcC0+Y3VycmVudF90cC5kZXZfY291bnQpCi0JCQlnb3RvIGVycm9yOwotCi0JCXJjID0g ZHB1X2hkY3BfMXhfd3JpdGVfa3N2X2ZpZm8oaGRjcCk7Ci0JfSB3aGlsZSAoLS12X3JldHJ5ICYm IHJjKTsKLWVycm9yOgotCWlmIChyYykgewotCQlwcl9lcnIoIiVzOiBGQUlMRURcbiIsIERQVV9I RENQX1NUQVRFX05BTUUpOwotCX0gZWxzZSB7Ci0JCWhkY3AtPmhkY3Bfc3RhdGUgPSBIRENQX1NU QVRFX0FVVEhFTlRJQ0FURUQ7Ci0KLQkJcHJfaW5mbygiU1VDQ0VTU0ZVTFxuIik7Ci0JfQotCi0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfaGRjcF8xeF9jYWNoZV90b3BvbG9neShz dHJ1Y3QgZHB1X2hkY3BfMXggKmhkY3ApCi17Ci0JaWYgKCFoZGNwIHx8ICFoZGNwLT5pbml0X2Rh dGEuY29yZV9pbykgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0J fQotCi0JbWVtY3B5KCh2b2lkICopJmhkY3AtPmNhY2hlZF90cCwKLQkJKHZvaWQgKikgJmhkY3At PmN1cnJlbnRfdHAsCi0JCXNpemVvZihoZGNwLT5jYWNoZWRfdHApKTsKLQloZGNwMV9jYWNoZV9y ZXBlYXRlcl90b3BvbG9neSgodm9pZCAqKSZoZGNwLT5jYWNoZWRfdHApOwotfQotCi1zdGF0aWMg dm9pZCBkcHVfaGRjcF8xeF9ub3RpZnlfdG9wb2xvZ3kodm9pZCkKLXsKLQloZGNwMV9ub3RpZnlf dG9wb2xvZ3koKTsKLX0KLQotc3RhdGljIHZvaWQgZHB1X2hkY3BfMXhfdXBkYXRlX2F1dGhfc3Rh dHVzKHN0cnVjdCBkcHVfaGRjcF8xeCAqaGRjcCkKLXsKLQlpZiAoZHB1X2hkY3BfMXhfc3RhdGUo SERDUF9TVEFURV9BVVRIRU5USUNBVEVEKSkgewotCQlkcHVfaGRjcF8xeF9jYWNoZV90b3BvbG9n eShoZGNwKTsKLQkJZHB1X2hkY3BfMXhfbm90aWZ5X3RvcG9sb2d5KCk7Ci0JfQotCi0JaWYgKGhk Y3AtPmluaXRfZGF0YS5ub3RpZnlfc3RhdHVzICYmCi0JICAgICFkcHVfaGRjcF8xeF9zdGF0ZShI RENQX1NUQVRFX0lOQUNUSVZFKSkgewotCQloZGNwLT5pbml0X2RhdGEubm90aWZ5X3N0YXR1cygK LQkJCWhkY3AtPmluaXRfZGF0YS5jYl9kYXRhLAotCQkJaGRjcC0+aGRjcF9zdGF0ZSk7Ci0JfQot fQotCi1zdGF0aWMgdm9pZCBkcHVfaGRjcF8xeF9hdXRoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQotewotCWludCByYzsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IHRvX2RlbGF5 ZWRfd29yayh3b3JrKTsKLQlzdHJ1Y3QgZHB1X2hkY3BfMXggKmhkY3AgPSBjb250YWluZXJfb2Yo ZHcsCi0JCXN0cnVjdCBkcHVfaGRjcF8xeCwgaGRjcF9hdXRoX3dvcmspOwotCXN0cnVjdCBkc3Nf aW9fZGF0YSAqaW87Ci0KLQlpZiAoIWhkY3ApIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4i KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghZHB1X2hkY3BfMXhfc3RhdGUoSERDUF9TVEFURV9B VVRIRU5USUNBVElORykpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHN0YXRlXG4iKTsKLQkJcmV0dXJu OwotCX0KLQotCWhkY3AtPnNpbmtfcjBfcmVhZHkgPSBmYWxzZTsKLQloZGNwLT5yZWF1dGggPSBm YWxzZTsKLQloZGNwLT5rc3ZfcmVhZHkgPSBmYWxzZTsKLQotCWlvID0gaGRjcC0+aW5pdF9kYXRh LmNvcmVfaW87Ci0JLyogRW5hYmxpbmcgU29mdHdhcmUgRERDIGZvciBIRE1JIGFuZCBSRUYgdGlt ZXIgZm9yIERQICovCi0JaWYgKGhkY3AtPmluaXRfZGF0YS5jbGllbnRfaWQgPT0gSERDUF9DTElF TlRfSERNSSkKLQkJRFNTX1JFR19XX05EKGlvLCBSRUdfSERNSV9ERENfQVJCSVRSQVRJT04sIERT U19SRUdfUihpbywKLQkJCQlSRUdfSERNSV9ERENfQVJCSVRSQVRJT04pICYgfihCSVQoNCkpKTsK LQllbHNlIGlmIChoZGNwLT5pbml0X2RhdGEuY2xpZW50X2lkID09IEhEQ1BfQ0xJRU5UX0RQKSB7 Ci0JCURTU19SRUdfVyhpbywgRFBfRFBfSFBEX1JFRlRJTUVSLCAweDEwMDEzKTsKLQl9Ci0KLQkv KgotCSAqIHByb2dyYW0gaHcgdG8gZW5hYmxlIGVuY3J5cHRpb24gYXMgc29vbiBhcwotCSAqIGF1 dGhlbnRpY2F0aW9uIGlzIHN1Y2Nlc3NmdWwuCi0JICovCi0JaGRjcDFfc2V0X2VuYyh0cnVlKTsK LQotCXJjID0gZHB1X2hkY3BfMXhfYXV0aGVudGljYXRpb25fcGFydDEoaGRjcCk7Ci0JaWYgKHJj KQotCQlnb3RvIGVuZDsKLQotCWlmIChoZGNwLT5jdXJyZW50X3RwLmRzX3R5cGUgPT0gRFNfUkVQ RUFURVIpIHsKLQkJcmMgPSBkcHVfaGRjcF8xeF93YWl0X2Zvcl9rc3ZfcmVhZHkoaGRjcCk7Ci0J CWlmIChyYykKLQkJCWdvdG8gZW5kOwotCX0gZWxzZSB7Ci0JCWhkY3AtPmhkY3Bfc3RhdGUgPSBI RENQX1NUQVRFX0FVVEhFTlRJQ0FURUQ7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWhkY3AtPmtzdl9y ZWFkeSA9IGZhbHNlOwotCi0JcmMgPSBkcHVfaGRjcF8xeF9hdXRoZW50aWNhdGlvbl9wYXJ0Miho ZGNwKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JLyoKLQkgKiBEaXNhYmxpbmcgc29mdHdh cmUgRERDIGJlZm9yZSBnb2luZyBpbnRvIHBhcnQzIHRvIG1ha2Ugc3VyZQotCSAqIHRoZXJlIGlz IG5vIEFyYml0cmF0aW9uIGJldHdlZW4gc29mdHdhcmUgYW5kIGhhcmR3YXJlIGZvciBEREMKLQkg Ki8KLQlpZiAoaGRjcC0+aW5pdF9kYXRhLmNsaWVudF9pZCA9PSBIRENQX0NMSUVOVF9IRE1JKQot CQlEU1NfUkVHX1dfTkQoaW8sIFJFR19IRE1JX0REQ19BUkJJVFJBVElPTiwgRFNTX1JFR19SKGlv LAotCQkJCVJFR19IRE1JX0REQ19BUkJJVFJBVElPTikgfCAoQklUKDQpKSk7Ci1lbmQ6Ci0JaWYg KHJjICYmICFkcHVfaGRjcF8xeF9zdGF0ZShIRENQX1NUQVRFX0lOQUNUSVZFKSkKLQkJaGRjcC0+ aGRjcF9zdGF0ZSA9IEhEQ1BfU1RBVEVfQVVUSF9GQUlMOwotCi0JZHB1X2hkY3BfMXhfdXBkYXRl X2F1dGhfc3RhdHVzKGhkY3ApOwotfQotCi1zdGF0aWMgaW50IGRwdV9oZGNwXzF4X2F1dGhlbnRp Y2F0ZSh2b2lkICppbnB1dCkKLXsKLQlzdHJ1Y3QgZHB1X2hkY3BfMXggKmhkY3AgPSAoc3RydWN0 IGRwdV9oZGNwXzF4ICopaW5wdXQ7Ci0KLQlpZiAoIWhkY3ApIHsKLQkJcHJfZXJyKCJpbnZhbGlk IGlucHV0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZmx1c2hfZGVsYXllZF93b3Jr KCZoZGNwLT5oZGNwX2F1dGhfd29yayk7Ci0KLQlpZiAoIWRwdV9oZGNwXzF4X3N0YXRlKEhEQ1Bf U1RBVEVfSU5BQ1RJVkUpKSB7Ci0JCXByX2VycigiaW52YWxpZCBzdGF0ZVxuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCWlmICghZHB1X2hkY3BfMXhfbG9hZF9rZXlzKGlucHV0KSkgewot Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhoZGNwLT53b3JrcSwKLQkJCSZoZGNwLT5oZGNwX2F1dGhf d29yaywgSFovMik7Ci0JfSBlbHNlIHsKLQkJaGRjcC0+aGRjcF9zdGF0ZSA9IEhEQ1BfU1RBVEVf QVVUSF9GQUlMOwotCQlkcHVfaGRjcF8xeF91cGRhdGVfYXV0aF9zdGF0dXMoaGRjcCk7Ci0JfQot Ci0JcmV0dXJuIDA7Ci19IC8qIGhkY3BfMXhfYXV0aGVudGljYXRlICovCi0KLXN0YXRpYyBpbnQg ZHB1X2hkY3BfMXhfcmVhdXRoZW50aWNhdGUodm9pZCAqaW5wdXQpCi17Ci0Jc3RydWN0IGRwdV9o ZGNwXzF4ICpoZGNwID0gKHN0cnVjdCBkcHVfaGRjcF8xeCAqKWlucHV0OwotCXN0cnVjdCBkc3Nf aW9fZGF0YSAqaW87Ci0Jc3RydWN0IGRwdV9oZGNwX3JlZ19zZXQgKnJlZ19zZXQ7Ci0Jc3RydWN0 IGRwdV9oZGNwX2ludF9zZXQgKmlzcjsKLQl1MzIgcmV0ID0gMCwgcmVnOwotCi0JaWYgKCFoZGNw IHx8ICFoZGNwLT5pbml0X2RhdGEuY29yZV9pbykgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpbyA9IGhkY3AtPmluaXRfZGF0YS5jb3Jl X2lvOwotCXJlZ19zZXQgPSAmaGRjcC0+cmVnX3NldDsKLQlpc3IgPSAmaGRjcC0+aW50X3NldDsK LQotCWlmICghZHB1X2hkY3BfMXhfc3RhdGUoSERDUF9TVEFURV9BVVRIX0ZBSUwpKSB7Ci0JCXBy X2VycigiaW52YWxpZCBzdGF0ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIERp c2FibGUgSERDUCBpbnRlcnJ1cHRzICovCi0JRFNTX1JFR19XKGlvLCBpc3ItPmludF9yZWcsIERT U19SRUdfUihpbywgaXNyLT5pbnRfcmVnKSAmIH5IRENQX0lOVF9FTik7Ci0KLQlyZWcgPSBEU1Nf UkVHX1IoaW8sIHJlZ19zZXQtPnJlc2V0KTsKLQlEU1NfUkVHX1coaW8sIHJlZ19zZXQtPnJlc2V0 LCByZWcgfCByZWdfc2V0LT5yZXNldF9iaXQpOwotCi0JLyogRGlzYWJsZSBlbmNyeXB0aW9uIGFu ZCBkaXNhYmxlIHRoZSBIRENQIGJsb2NrICovCi0JRFNTX1JFR19XKGlvLCByZWdfc2V0LT5jdHJs LCAwKTsKLQotCURTU19SRUdfVyhpbywgcmVnX3NldC0+cmVzZXQsIHJlZyAmIH5yZWdfc2V0LT5y ZXNldF9iaXQpOwotCi0JaGRjcC0+aGRjcF9zdGF0ZSA9IEhEQ1BfU1RBVEVfSU5BQ1RJVkU7Ci0J ZHB1X2hkY3BfMXhfYXV0aGVudGljYXRlKGhkY3ApOwotCi0JcmV0dXJuIHJldDsKLX0gLyogaGRj cF8xeF9yZWF1dGhlbnRpY2F0ZSAqLwotCi1zdGF0aWMgdm9pZCBkcHVfaGRjcF8xeF9vZmYodm9p ZCAqaW5wdXQpCi17Ci0Jc3RydWN0IGRwdV9oZGNwXzF4ICpoZGNwID0gKHN0cnVjdCBkcHVfaGRj cF8xeCAqKWlucHV0OwotCXN0cnVjdCBkc3NfaW9fZGF0YSAqaW87Ci0Jc3RydWN0IGRwdV9oZGNw X3JlZ19zZXQgKnJlZ19zZXQ7Ci0Jc3RydWN0IGRwdV9oZGNwX2ludF9zZXQgKmlzcjsKLQlpbnQg cmMgPSAwOwotCXUzMiByZWc7Ci0KLQlpZiAoIWhkY3AgfHwgIWhkY3AtPmluaXRfZGF0YS5jb3Jl X2lvKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlp byA9IGhkY3AtPmluaXRfZGF0YS5jb3JlX2lvOwotCXJlZ19zZXQgPSAmaGRjcC0+cmVnX3NldDsK LQlpc3IgPSAmaGRjcC0+aW50X3NldDsKLQotCWlmIChkcHVfaGRjcF8xeF9zdGF0ZShIRENQX1NU QVRFX0lOQUNUSVZFKSkgewotCQlwcl9lcnIoImludmFsaWQgc3RhdGVcbiIpOwotCQlyZXR1cm47 Ci0JfQotCi0JLyoKLQkgKiBEaXNhYmxlIEhEQ1AgaW50ZXJydXB0cy4KLQkgKiBBbHNvLCBuZWVk IHRvIHNldCB0aGUgc3RhdGUgdG8gaW5hY3RpdmUgaGVyZSBzbyB0aGF0IGFueSBvbmdvaW5nCi0J ICogcmVhdXRoIHdvcmtzIHdpbGwga25vdyB0aGF0IHRoZSBIRENQIHNlc3Npb24gaGFzIGJlZW4g dHVybmVkIG9mZi4KLQkgKi8KLQltdXRleF9sb2NrKGhkY3AtPmluaXRfZGF0YS5tdXRleCk7Ci0J RFNTX1JFR19XKGlvLCBpc3ItPmludF9yZWcsCi0JCURTU19SRUdfUihpbywgaXNyLT5pbnRfcmVn KSAmIH5IRENQX0lOVF9FTik7Ci0JaGRjcC0+aGRjcF9zdGF0ZSA9IEhEQ1BfU1RBVEVfSU5BQ1RJ VkU7Ci0JbXV0ZXhfdW5sb2NrKGhkY3AtPmluaXRfZGF0YS5tdXRleCk7Ci0KLQkvKiBjb21wbGV0 ZSBhbnkgd2FpdCBwZW5kaW5nICovCi0JY29tcGxldGVfYWxsKCZoZGNwLT5zaW5rX3IwX2F2YWls YWJsZSk7Ci0JY29tcGxldGVfYWxsKCZoZGNwLT5yMF9jaGVja2VkKTsKLQkvKgotCSAqIENhbmNl bCBhbnkgcGVuZGluZyBhdXRoL3JlYXV0aCBhdHRlbXB0cy4KLQkgKiBJZiBvbmUgaXMgb25nb2lu ZywgdGhpcyB3aWxsIHdhaXQgZm9yIGl0IHRvIGZpbmlzaC4KLQkgKiBObyBtb3JlIHJlYXV0aGVu dGlhY3Rpb24gYXR0ZW1wdHMgd2lsbCBiZSBzY2hlZHVsZWQgc2luY2Ugd2UKLQkgKiBzZXQgdGhl IGN1cnJlY3Qgc3RhdGUgdG8gaW5hY3RpdmUuCi0JICovCi0JcmMgPSBjYW5jZWxfZGVsYXllZF93 b3JrX3N5bmMoJmhkY3AtPmhkY3BfYXV0aF93b3JrKTsKLQlpZiAocmMpCi0JCXByX2RlYnVnKCIl czogRGVsZXRlZCBoZGNwIGF1dGggd29ya1xuIiwKLQkJCURQVV9IRENQX1NUQVRFX05BTUUpOwot Ci0JaGRjcDFfc2V0X2VuYyhmYWxzZSk7Ci0KLQlyZWcgPSBEU1NfUkVHX1IoaW8sIHJlZ19zZXQt PnJlc2V0KTsKLQlEU1NfUkVHX1coaW8sIHJlZ19zZXQtPnJlc2V0LCByZWcgfCByZWdfc2V0LT5y ZXNldF9iaXQpOwotCi0JLyogRGlzYWJsZSBlbmNyeXB0aW9uIGFuZCBkaXNhYmxlIHRoZSBIRENQ IGJsb2NrICovCi0JRFNTX1JFR19XKGlvLCByZWdfc2V0LT5jdHJsLCAwKTsKLQotCURTU19SRUdf VyhpbywgcmVnX3NldC0+cmVzZXQsIHJlZyAmIH5yZWdfc2V0LT5yZXNldF9iaXQpOwotCi0JaGRj cC0+c2lua19yMF9yZWFkeSA9IGZhbHNlOwotCi0JcHJfZGVidWcoIiVzOiBIRENQOiBPZmZcbiIs IERQVV9IRENQX1NUQVRFX05BTUUpOwotfSAvKiBoZGNwXzF4X29mZiAqLwotCi1zdGF0aWMgaW50 IGRwdV9oZGNwXzF4X2lzcih2b2lkICppbnB1dCkKLXsKLQlzdHJ1Y3QgZHB1X2hkY3BfMXggKmhk Y3AgPSAoc3RydWN0IGRwdV9oZGNwXzF4ICopaW5wdXQ7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qg ZHNzX2lvX2RhdGEgKmlvOwotCXUzMiBoZGNwX2ludF92YWw7Ci0Jc3RydWN0IGRwdV9oZGNwX3Jl Z19zZXQgKnJlZ19zZXQ7Ci0Jc3RydWN0IGRwdV9oZGNwX2ludF9zZXQgKmlzcjsKLQotCWlmICgh aGRjcCB8fCAhaGRjcC0+aW5pdF9kYXRhLmNvcmVfaW8pIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlu cHV0XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlvID0gaGRj cC0+aW5pdF9kYXRhLmNvcmVfaW87Ci0JcmVnX3NldCA9ICZoZGNwLT5yZWdfc2V0OwotCWlzciA9 ICZoZGNwLT5pbnRfc2V0OwotCi0JaGRjcF9pbnRfdmFsID0gRFNTX1JFR19SKGlvLCBpc3ItPmlu dF9yZWcpOwotCi0JLyogSWdub3JlIEhEQ1AgaW50ZXJydXB0cyBpZiBIRENQIGlzIGRpc2FibGVk ICovCi0JaWYgKGRwdV9oZGNwXzF4X3N0YXRlKEhEQ1BfU1RBVEVfSU5BQ1RJVkUpKSB7Ci0JCURT U19SRUdfVyhpbywgaXNyLT5pbnRfcmVnLCBoZGNwX2ludF92YWwgfCBIRENQX0lOVF9DTFIpOwot CQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoaGRjcF9pbnRfdmFsICYgaXNyLT5hdXRoX3N1Y2Nlc3Nf aW50KSB7Ci0JCS8qIEFVVEhfU1VDQ0VTU19JTlQgKi8KLQkJRFNTX1JFR19XKGlvLCBpc3ItPmlu dF9yZWcsCi0JCQkoaGRjcF9pbnRfdmFsIHwgaXNyLT5hdXRoX3N1Y2Nlc3NfYWNrKSk7Ci0JCXBy X2RlYnVnKCIlczogQVVUSCBTVUNDRVNTXG4iLCBEUFVfSERDUF9TVEFURV9OQU1FKTsKLQotCQlp ZiAoZHB1X2hkY3BfMXhfc3RhdGUoSERDUF9TVEFURV9BVVRIRU5USUNBVElORykpCi0JCQljb21w bGV0ZV9hbGwoJmhkY3AtPnIwX2NoZWNrZWQpOwotCX0KLQotCWlmIChoZGNwX2ludF92YWwgJiBp c3ItPmF1dGhfZmFpbF9pbnQpIHsKLQkJLyogQVVUSF9GQUlMX0lOVCAqLwotCQl1MzIgbGlua19z dGF0dXMgPSBEU1NfUkVHX1IoaW8sIHJlZ19zZXQtPnN0YXR1cyk7Ci0KLQkJRFNTX1JFR19XKGlv LCBpc3ItPmludF9yZWcsCi0JCQkoaGRjcF9pbnRfdmFsIHwgaXNyLT5hdXRoX2ZhaWxfYWNrKSk7 Ci0KLQkJcHJfZGVidWcoIiVzOiBBVVRIIEZBSUwsIExJTkswX1NUQVRVUz0weCUwOHhcbiIsCi0J CQlEUFVfSERDUF9TVEFURV9OQU1FLCBsaW5rX3N0YXR1cyk7Ci0KLQkJaWYgKGRwdV9oZGNwXzF4 X3N0YXRlKEhEQ1BfU1RBVEVfQVVUSEVOVElDQVRFRCkpIHsKLQkJCWhkY3AtPmhkY3Bfc3RhdGUg PSBIRENQX1NUQVRFX0FVVEhfRkFJTDsKLQkJCWRwdV9oZGNwXzF4X3VwZGF0ZV9hdXRoX3N0YXR1 cyhoZGNwKTsKLQkJfSBlbHNlIGlmIChkcHVfaGRjcF8xeF9zdGF0ZShIRENQX1NUQVRFX0FVVEhF TlRJQ0FUSU5HKSkgewotCQkJY29tcGxldGVfYWxsKCZoZGNwLT5yMF9jaGVja2VkKTsKLQkJfQot Ci0JCS8qIENsZWFyIEFVVEhfRkFJTF9JTkZPIGFzIHdlbGwgKi8KLQkJRFNTX1JFR19XKGlvLCBp c3ItPmludF9yZWcsCi0JCQkoaGRjcF9pbnRfdmFsIHwgaXNyLT5hdXRoX2ZhaWxfaW5mb19hY2sp KTsKLQl9Ci0KLQlpZiAoaGRjcF9pbnRfdmFsICYgaXNyLT50eF9yZXFfaW50KSB7Ci0JCS8qIERE Q19YRkVSX1JFUV9JTlQgKi8KLQkJRFNTX1JFR19XKGlvLCBpc3ItPmludF9yZWcsCi0JCQkoaGRj cF9pbnRfdmFsIHwgaXNyLT50eF9yZXFfYWNrKSk7Ci0JCXByX2RlYnVnKCIlczogRERDX1hGRVJf UkVRX0lOVCByZWNlaXZlZFxuIiwKLQkJCURQVV9IRENQX1NUQVRFX05BTUUpOwotCX0KLQotCWlm IChoZGNwX2ludF92YWwgJiBpc3ItPnR4X3JlcV9kb25lX2ludCkgewotCQkvKiBERENfWEZFUl9E T05FX0lOVCAqLwotCQlEU1NfUkVHX1coaW8sIGlzci0+aW50X3JlZywKLQkJCShoZGNwX2ludF92 YWwgfCBpc3ItPnR4X3JlcV9kb25lX2FjaykpOwotCQlwcl9kZWJ1ZygiJXM6IEREQ19YRkVSX0RP TkUgcmVjZWl2ZWRcbiIsCi0JCQlEUFVfSERDUF9TVEFURV9OQU1FKTsKLQl9Ci0KLQlpZiAoaGRj cF9pbnRfdmFsICYgaXNyLT5lbmNyeXB0aW9uX3JlYWR5KSB7Ci0JCS8qIEVuY3J5cHRpb24gZW5h YmxlZCAqLwotCQlEU1NfUkVHX1coaW8sIGlzci0+aW50X3JlZywKLQkJCShoZGNwX2ludF92YWwg fCBpc3ItPmVuY3J5cHRpb25fcmVhZHlfYWNrKSk7Ci0JCXByX2RlYnVnKCIlczogZW5jcnlwdGlv biByZWFkeSByZWNlaXZlZFxuIiwKLQkJCURQVV9IRENQX1NUQVRFX05BTUUpOwotCX0KLQotCWlm IChoZGNwX2ludF92YWwgJiBpc3ItPmVuY3J5cHRpb25fbm90X3JlYWR5KSB7Ci0JCS8qIEVuY3J5 cHRpb24gZW5hYmxlZCAqLwotCQlEU1NfUkVHX1coaW8sIGlzci0+aW50X3JlZywKLQkJCShoZGNw X2ludF92YWwgfCBpc3ItPmVuY3J5cHRpb25fbm90X3JlYWR5X2FjaykpOwotCQlwcl9kZWJ1Zygi JXM6IGVuY3J5cHRpb24gbm90IHJlYWR5IHJlY2VpdmVkXG4iLAotCQkJRFBVX0hEQ1BfU1RBVEVf TkFNRSk7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgZHB1X2hkY3BfMXhf ZGVpbml0KHZvaWQgKmlucHV0KQotewotCXN0cnVjdCBkcHVfaGRjcF8xeCAqaGRjcCA9IChzdHJ1 Y3QgZHB1X2hkY3BfMXggKilpbnB1dDsKLQotCWlmICghaGRjcCkgewotCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGhkY3AtPndvcmtxKQotCQlkZXN0 cm95X3dvcmtxdWV1ZShoZGNwLT53b3JrcSk7Ci0KLQlrZnJlZShoZGNwKTsKLX0gLyogaGRjcF8x eF9kZWluaXQgKi8KLQotc3RhdGljIHZvaWQgZHB1X2hkY3BfMXhfdXBkYXRlX2NsaWVudF9yZWdf c2V0KHN0cnVjdCBkcHVfaGRjcF8xeCAqaGRjcCkKLXsKLQlpZiAoaGRjcC0+aW5pdF9kYXRhLmNs aWVudF9pZCA9PSBIRENQX0NMSUVOVF9EUCkgewotCQlzdHJ1Y3QgZHB1X2hkY3BfcmVnX3NldCBy ZWdfc2V0ID0gSERDUF9SRUdfU0VUX0NMSUVOVF9EUDsKLQkJc3RydWN0IGRwdV9oZGNwX3Npbmtf YWRkcl9tYXAgc2lua19hZGRyID0gSERDUF9EUF9TSU5LX0FERFJfTUFQOwotCQlzdHJ1Y3QgZHB1 X2hkY3BfaW50X3NldCBpc3IgPSBIRENQX0RQX0lOVF9TRVQ7Ci0KLQkJaGRjcC0+cmVnX3NldCA9 IHJlZ19zZXQ7Ci0JCWhkY3AtPnNpbmtfYWRkciA9IHNpbmtfYWRkcjsKLQkJaGRjcC0+aW50X3Nl dCA9IGlzcjsKLQl9Ci19Ci0KLXN0YXRpYyBib29sIGRwdV9oZGNwXzF4X2lzX2NwX2lycV9yYWlz ZWQoc3RydWN0IGRwdV9oZGNwXzF4ICpoZGNwKQotewotCWludCByZXQ7Ci0JdTggYnVmID0gMDsK LQlzdHJ1Y3QgZHB1X2hkY3Bfc2lua19hZGRyIHNpbmsgPSB7ImlycSIsIDB4MjAxLCAxfTsKLQot CXJldCA9IGRwdV9oZGNwXzF4X3JlYWQoaGRjcCwgJnNpbmssICZidWYsIGZhbHNlKTsKLQlpZiAo cmV0KQotCQlwcl9lcnIoImVycm9yIHJlYWRpbmcgaXJxX3ZlY3RvclxuIik7Ci0KLQlyZXR1cm4g YnVmICYgQklUKDIpID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfaGRjcF8x eF9jbGVhcl9jcF9pcnEoc3RydWN0IGRwdV9oZGNwXzF4ICpoZGNwKQotewotCWludCByZXQ7Ci0J dTggYnVmID0gQklUKDIpOwotCXN0cnVjdCBkcHVfaGRjcF9zaW5rX2FkZHIgc2luayA9IHsiaXJx IiwgMHgyMDEsIDF9OwotCi0JcmV0ID0gZHB1X2hkY3BfMXhfd3JpdGUoaGRjcCwgJnNpbmssICZi dWYpOwotCWlmIChyZXQpCi0JCXByX2VycigiZXJyb3IgY2xlYXJpbmcgaXJxX3ZlY3RvclxuIik7 Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2hkY3BfMXhfY3BfaXJxKHZvaWQgKmlucHV0KQotewotCXN0 cnVjdCBkcHVfaGRjcF8xeCAqaGRjcCA9IChzdHJ1Y3QgZHB1X2hkY3BfMXggKilpbnB1dDsKLQl1 OCBidWYgPSAwOwotCWludCByZXQ7Ci0KLQlpZiAoIWhkY3ApIHsKLQkJcHJfZXJyKCJpbnZhbGlk IGlucHV0XG4iKTsKLQkJZ290byBpcnFfbm90X2hhbmRsZWQ7Ci0JfQotCi0JaWYgKCFkcHVfaGRj cF8xeF9pc19jcF9pcnFfcmFpc2VkKGhkY3ApKSB7Ci0JCXByX2RlYnVnKCJjcF9pcnEgbm90IHJh aXNlZFxuIik7Ci0JCWdvdG8gaXJxX25vdF9oYW5kbGVkOwotCX0KLQotCXJldCA9IGRwdV9oZGNw XzF4X3JlYWQoaGRjcCwgJmhkY3AtPnNpbmtfYWRkci5jcF9pcnFfc3RhdHVzLAotCQkJJmJ1Ziwg ZmFsc2UpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJlcnJvciByZWFkaW5nIGNwX2lycV9zdGF0 dXNcbiIpOwotCQlnb3RvIGlycV9ub3RfaGFuZGxlZDsKLQl9Ci0KLQlpZiAoKGJ1ZiAmIEJJVCgy KSkgfHwgKGJ1ZiAmIEJJVCgzKSkpIHsKLQkJcHJfZXJyKCIlc1xuIiwKLQkJCWJ1ZiAmIEJJVCgy KSA/ICJMSU5LX0lOVEVHUklUWV9GQUlMVVJFIiA6Ci0JCQkJIlJFQVVUSEVOVElDQVRJT05fUkVR VUVTVCIpOwotCi0JCWhkY3AtPnJlYXV0aCA9IHRydWU7Ci0KLQkJaWYgKCFkcHVfaGRjcF8xeF9z dGF0ZShIRENQX1NUQVRFX0lOQUNUSVZFKSkKLQkJCWhkY3AtPmhkY3Bfc3RhdGUgPSBIRENQX1NU QVRFX0FVVEhfRkFJTDsKLQotCQljb21wbGV0ZV9hbGwoJmhkY3AtPnNpbmtfcjBfYXZhaWxhYmxl KTsKLQkJZHB1X2hkY3BfMXhfdXBkYXRlX2F1dGhfc3RhdHVzKGhkY3ApOwotCX0gZWxzZSBpZiAo YnVmICYgQklUKDEpKSB7Ci0JCXByX2RlYnVnKCJSMCcgQVZBSUxBQkxFXG4iKTsKLQkJaGRjcC0+ c2lua19yMF9yZWFkeSA9IHRydWU7Ci0JCWNvbXBsZXRlX2FsbCgmaGRjcC0+c2lua19yMF9hdmFp bGFibGUpOwotCX0gZWxzZSBpZiAoKGJ1ZiAmIEJJVCgwKSkpIHsKLQkJcHJfZGVidWcoIktTVnMg UkVBRFlcbiIpOwotCi0JCWhkY3AtPmtzdl9yZWFkeSA9IHRydWU7Ci0JfSBlbHNlIHsKLQkJcHJf ZGVidWcoInNwdXJpb3VzIGludGVycnVwdFxuIik7Ci0JfQotCi0JZHB1X2hkY3BfMXhfY2xlYXJf Y3BfaXJxKGhkY3ApOwotCXJldHVybiAwOwotCi1pcnFfbm90X2hhbmRsZWQ6Ci0JcmV0dXJuIC1F SU5WQUw7Ci19Ci0KLXZvaWQgKmRwdV9oZGNwXzF4X2luaXQoc3RydWN0IGRwdV9oZGNwX2luaXRf ZGF0YSAqaW5pdF9kYXRhKQotewotCXN0cnVjdCBkcHVfaGRjcF8xeCAqaGRjcCA9IE5VTEw7Ci0J Y2hhciBuYW1lWzIwXTsKLQlzdGF0aWMgc3RydWN0IGRwdV9oZGNwX29wcyBvcHMgPSB7Ci0JCS5p c3IgPSBkcHVfaGRjcF8xeF9pc3IsCi0JCS5jcF9pcnEgPSBkcHVfaGRjcF8xeF9jcF9pcnEsCi0J CS5yZWF1dGhlbnRpY2F0ZSA9IGRwdV9oZGNwXzF4X3JlYXV0aGVudGljYXRlLAotCQkuYXV0aGVu dGljYXRlID0gZHB1X2hkY3BfMXhfYXV0aGVudGljYXRlLAotCQkub2ZmID0gZHB1X2hkY3BfMXhf b2ZmCi0JfTsKLQotCWlmICghaW5pdF9kYXRhIHx8ICFpbml0X2RhdGEtPmNvcmVfaW8gfHwgIWlu aXRfZGF0YS0+cWZwcm9tX2lvIHx8Ci0JCSFpbml0X2RhdGEtPm11dGV4IHx8ICFpbml0X2RhdGEt Pm5vdGlmeV9zdGF0dXMgfHwKLQkJIWluaXRfZGF0YS0+d29ya3EgfHwgIWluaXRfZGF0YS0+Y2Jf ZGF0YSkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlnb3RvIGVycm9yOwotCX0K LQotCWlmIChpbml0X2RhdGEtPnNlY19hY2Nlc3MgJiYgIWluaXRfZGF0YS0+aGRjcF9pbykgewot CQlwcl9lcnIoImhkY3BfaW8gcmVxdWlyZWRcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWhk Y3AgPSBremFsbG9jKHNpemVvZigqaGRjcCksIEdGUF9LRVJORUwpOwotCWlmICghaGRjcCkKLQkJ Z290byBlcnJvcjsKLQotCWhkY3AtPmluaXRfZGF0YSA9ICppbml0X2RhdGE7Ci0JaGRjcC0+b3Bz ID0gJm9wczsKLQotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImhkY3BfMXhfJWQiLAot CQloZGNwLT5pbml0X2RhdGEuY2xpZW50X2lkKTsKLQotCWhkY3AtPndvcmtxID0gY3JlYXRlX3dv cmtxdWV1ZShuYW1lKTsKLQlpZiAoIWhkY3AtPndvcmtxKSB7Ci0JCXByX2VycigiRXJyb3IgY3Jl YXRpbmcgd29ya3F1ZXVlXG4iKTsKLQkJa2ZyZWUoaGRjcCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci0JZHB1X2hkY3BfMXhfdXBkYXRlX2NsaWVudF9yZWdfc2V0KGhkY3ApOwotCi0JSU5JVF9ERUxB WUVEX1dPUksoJmhkY3AtPmhkY3BfYXV0aF93b3JrLCBkcHVfaGRjcF8xeF9hdXRoX3dvcmspOwot Ci0JaGRjcC0+aGRjcF9zdGF0ZSA9IEhEQ1BfU1RBVEVfSU5BQ1RJVkU7Ci0JaW5pdF9jb21wbGV0 aW9uKCZoZGNwLT5yMF9jaGVja2VkKTsKLQlpbml0X2NvbXBsZXRpb24oJmhkY3AtPnNpbmtfcjBf YXZhaWxhYmxlKTsKLQotCXByX2RlYnVnKCJIRENQIG1vZHVsZSBpbml0aWFsaXplZC4gSERDUF9T VEFURT0lc1xuIiwKLQkJRFBVX0hEQ1BfU1RBVEVfTkFNRSk7Ci0KLQlyZXR1cm4gKHZvaWQgKilo ZGNwOwotCi1lcnJvcjoKLQlyZXR1cm4gTlVMTDsKLX0gLyogaGRjcF8xeF9pbml0ICovCi0KLXN0 cnVjdCBkcHVfaGRjcF9vcHMgKmRwdV9oZGNwXzF4X3N0YXJ0KHZvaWQgKmlucHV0KQotewotCXJl dHVybiAoKHN0cnVjdCBkcHVfaGRjcF8xeCAqKWlucHV0KS0+b3BzOwotfQotLSAKVGhlIFF1YWxj b21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9y YSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==