From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alan Cox Subject: [PATCH 3/8] From: Zhao Yakui Date: Wed, 08 Aug 2012 14:54:15 +0100 Message-ID: <20120808135400.974.24119.stgit@bluebook> References: <20120808135225.974.25210.stgit@bluebook> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lxorguk.ukuu.org.uk (lxorguk.ukuu.org.uk [81.2.110.251]) by gabe.freedesktop.org (Postfix) with ESMTP id 4AA14A09CF for ; Wed, 8 Aug 2012 05:56:17 -0700 (PDT) In-Reply-To: <20120808135225.974.25210.stgit@bluebook> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: airlied@linux.ie, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogQWxhbiBDb3ggPGFsYW5AbGludXguaW50ZWwuY29tPgoKQWRkIHRoZSBzdXBwb3J0IG9m IGRpc3BsYXkgcG9ydCBvbiBDRFYKCkltcG9ydCB0aGUgcGllY2VzIHdlIG5lZWQgaW4gb3JkZXIg dG8gZG8gRGlzcGxheVBvcnQuIERvbid0IHdpcmUgdGhlbQp1cCB5ZXQgYXMgdGhlcmUgaXMgd29y ayB0byBkbyB0byBpbnRlZ3JhdGUgdGhlbS4KICAgIApTaWduZWQtb2ZmLWJ5OiBaaGFvIFlha3Vp IDx5YWt1aS56aGFvQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogQWxhbiBDb3ggPGFsYW5AbGlu dXguaW50ZWwuY29tPgotLS0KCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL2Nkdl9pbnRlbF9kcC5j ICB8IDE1MDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvcHNiX2ludGVsX2Rydi5oIHwgICAgNiAKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAv cHNiX2ludGVsX3JlZy5oIHwgIDE1NSArKysKIDMgZmlsZXMgY2hhbmdlZCwgMTY2MSBpbnNlcnRp b25zKCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvY2R2X2ludGVsX2RwLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL2Nkdl9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9jZHZfaW50ZWxfZHAu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmQ1NDVkCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9jZHZfaW50ZWxfZHAuYwpAQCAtMCwwICsx LDE1MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3Jz OgorICogICAgS2VpdGggUGFja2FyZCA8a2VpdGhwQGtlaXRocC5jb20+CisgKgorICovCisKKyNp bmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAi ZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImRybV9jcnRjLmgiCisjaW5jbHVk ZSAiZHJtX2NydGNfaGVscGVyLmgiCisjaW5jbHVkZSAicHNiX2Rydi5oIgorI2luY2x1ZGUgInBz Yl9pbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJwc2JfZHJtLmgiCisjaW5jbHVkZSAicHNiX2ludGVs X3JlZy5oIgorI2luY2x1ZGUgImRybV9kcF9oZWxwZXIuaCIKKworCisjZGVmaW5lIERQX0xJTktf U1RBVFVTX1NJWkUJNgorI2RlZmluZSBEUF9MSU5LX0NIRUNLX1RJTUVPVVQJKDEwICogMTAwMCkK KworI2RlZmluZSBEUF9MSU5LX0NPTkZJR1VSQVRJT05fU0laRQk5CisKKyNkZWZpbmUgQ0RWX0ZB U1RfTElOS19UUkFJTgkxCisKK3N0cnVjdCBwc2JfaW50ZWxfZHAgeworCXVpbnQzMl90IG91dHB1 dF9yZWc7CisJdWludDMyX3QgRFA7CisJdWludDhfdCAgbGlua19jb25maWd1cmF0aW9uW0RQX0xJ TktfQ09ORklHVVJBVElPTl9TSVpFXTsKKwlib29sIGhhc19hdWRpbzsKKwlpbnQgZm9yY2VfYXVk aW87CisJdWludDMyX3QgY29sb3JfcmFuZ2U7CisJdWludDhfdCBsaW5rX2J3OworCXVpbnQ4X3Qg bGFuZV9jb3VudDsKKwl1aW50OF90IGRwY2RbNF07CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQg Km91dHB1dDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2FsZ29f ZHBfYXV4X2RhdGEgYWxnbzsKKwl1aW50OF90CXRyYWluX3NldFs0XTsKKwl1aW50OF90IGxpbmtf c3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOworfTsKKworc3RydWN0IGRkaV9yZWdvZmYgewor CXVpbnQzMl90CVByZUVtcGgxOworCXVpbnQzMl90CVByZUVtcGgyOworCXVpbnQzMl90CVZTd2lu ZzE7CisJdWludDMyX3QJVlN3aW5nMjsKKwl1aW50MzJfdAlWU3dpbmczOworCXVpbnQzMl90CVZT d2luZzQ7CisJdWludDMyX3QJVlN3aW5nNTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGRpX3JlZ29m ZiBkZGlfRFBfdHJhaW5fdGFibGVbXSA9IHsKKwl7LlByZUVtcGgxID0gMHg4MTJjLCAuUHJlRW1w aDIgPSAweDgxMjQsIC5WU3dpbmcxID0gMHg4MTU0LAorCS5WU3dpbmcyID0gMHg4MTQ4LCAuVlN3 aW5nMyA9IDB4ODE0QywgLlZTd2luZzQgPSAweDgxNTAsCisJLlZTd2luZzUgPSAweDgxNTgsfSwK Kwl7LlByZUVtcGgxID0gMHg4MjJjLCAuUHJlRW1waDIgPSAweDgyMjQsIC5WU3dpbmcxID0gMHg4 MjU0LAorCS5WU3dpbmcyID0gMHg4MjQ4LCAuVlN3aW5nMyA9IDB4ODI0QywgLlZTd2luZzQgPSAw eDgyNTAsCisJLlZTd2luZzUgPSAweDgyNTgsfSwKK307CisKK3N0YXRpYyB1aW50MzJfdCBkcF92 c3dpbmdfcHJlbXBoX3RhYmxlW10gPSB7CisgICAgICAgIDB4NTUzMzg5NTQsCTB4NDAwMCwKKyAg ICAgICAgMHg1NTRkODk1NCwJMHgyMDAwLAorICAgICAgICAweDU1NjY4OTU0LAkwLAorICAgICAg ICAweDU1OWFjMGQ0LAkweDYwMDAsCit9OworLyoqCisgKiBpc19lZHAgLSBpcyB0aGUgZ2l2ZW4g cG9ydCBhdHRhY2hlZCB0byBhbiBlRFAgcGFuZWwgKGVpdGhlciBDUFUgb3IgUENIKQorICogQGlu dGVsX2RwOiBEUCBzdHJ1Y3QKKyAqCisgKiBJZiBhIENQVSBvciBQQ0ggRFAgb3V0cHV0IGlzIGF0 dGFjaGVkIHRvIGFuIGVEUCBwYW5lbCwgdGhpcyBmdW5jdGlvbgorICogd2lsbCByZXR1cm4gdHJ1 ZSwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgaXNfZWRwKHN0cnVjdCBw c2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQpCit7CisJcmV0dXJuIG91dHB1dC0+dHlwZSA9PSBJTlRF TF9PVVRQVVRfRURQOworfQorCisKK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9kcF9zdGFydF9saW5r X3RyYWluKHN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQpOworc3RhdGljIHZvaWQgcHNi X2ludGVsX2RwX2NvbXBsZXRlX2xpbmtfdHJhaW4oc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91 dHB1dCk7CitzdGF0aWMgdm9pZCBwc2JfaW50ZWxfZHBfbGlua19kb3duKHN0cnVjdCBwc2JfaW50 ZWxfb3V0cHV0ICpvdXRwdXQpOworCitzdGF0aWMgaW50Citwc2JfaW50ZWxfZHBfbWF4X2xhbmVf Y291bnQoc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCkKK3sKKwlzdHJ1Y3QgcHNiX2lu dGVsX2RwICppbnRlbF9kcCA9IG91dHB1dC0+ZGV2X3ByaXY7CisJaW50IG1heF9sYW5lX2NvdW50 ID0gNDsKKworCWlmIChpbnRlbF9kcC0+ZHBjZFtEUF9EUENEX1JFVl0gPj0gMHgxMSkgeworCQlt YXhfbGFuZV9jb3VudCA9IGludGVsX2RwLT5kcGNkW0RQX01BWF9MQU5FX0NPVU5UXSAmIDB4MWY7 CisJCXN3aXRjaCAobWF4X2xhbmVfY291bnQpIHsKKwkJY2FzZSAxOiBjYXNlIDI6IGNhc2UgNDoK KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbWF4X2xhbmVfY291bnQgPSA0OworCQl9CisJfQor CXJldHVybiBtYXhfbGFuZV9jb3VudDsKK30KKworc3RhdGljIGludAorcHNiX2ludGVsX2RwX21h eF9saW5rX2J3KHN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQpCit7CisJc3RydWN0IHBz Yl9pbnRlbF9kcCAqaW50ZWxfZHAgPSBvdXRwdXQtPmRldl9wcml2OworCWludCBtYXhfbGlua19i dyA9IGludGVsX2RwLT5kcGNkW0RQX01BWF9MSU5LX1JBVEVdOworCisJc3dpdGNoIChtYXhfbGlu a19idykgeworCWNhc2UgRFBfTElOS19CV18xXzYyOgorCWNhc2UgRFBfTElOS19CV18yXzc6CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCW1heF9saW5rX2J3ID0gRFBfTElOS19CV18xXzYyOworCQli cmVhazsKKwl9CisJcmV0dXJuIG1heF9saW5rX2J3OworfQorCitzdGF0aWMgaW50Citwc2JfaW50 ZWxfZHBfbGlua19jbG9jayh1aW50OF90IGxpbmtfYncpCit7CisJaWYgKGxpbmtfYncgPT0gRFBf TElOS19CV18yXzcpCisJCXJldHVybiAyNzAwMDA7CisJZWxzZQorCQlyZXR1cm4gMTYyMDAwOwor fQorCitzdGF0aWMgaW50Citwc2JfaW50ZWxfZHBfbGlua19yZXF1aXJlZChpbnQgcGl4ZWxfY2xv Y2ssIGludCBicHApCit7CisJcmV0dXJuIChwaXhlbF9jbG9jayAqIGJwcCArIDcpIC8gODsKK30K Kworc3RhdGljIGludAorcHNiX2ludGVsX2RwX21heF9kYXRhX3JhdGUoaW50IG1heF9saW5rX2Ns b2NrLCBpbnQgbWF4X2xhbmVzKQoreworCXJldHVybiAobWF4X2xpbmtfY2xvY2sgKiBtYXhfbGFu ZXMgKiAxOSkgLyAyMDsKK30KKworc3RhdGljIGludAorcHNiX2ludGVsX2RwX21vZGVfdmFsaWQo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJICAgIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlKQoreworCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQgPSB0b19w c2JfaW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNv bm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKwlpbnQgbWF4X2xpbmtfY2xvY2sgPSBwc2JfaW50ZWxfZHBfbGlua19jbG9j ayhwc2JfaW50ZWxfZHBfbWF4X2xpbmtfYncob3V0cHV0KSk7CisJaW50IG1heF9sYW5lcyA9IHBz Yl9pbnRlbF9kcF9tYXhfbGFuZV9jb3VudChvdXRwdXQpOworCisJaWYgKGlzX2VkcChvdXRwdXQp ICYmIGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlKSB7CisJCWlmIChtb2RlLT5oZGlzcGxheSA+ IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT5oZGlzcGxheSkKKwkJCXJldHVybiBNT0RFX1BB TkVMOworCisJCWlmIChtb2RlLT52ZGlzcGxheSA+IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2Rl LT52ZGlzcGxheSkKKwkJCXJldHVybiBNT0RFX1BBTkVMOworCX0KKworCS8qIG9ubHkgcmVmdXNl IHRoZSBtb2RlIG9uIG5vbiBlRFAgc2luY2Ugd2UgaGF2ZSBzZWVuIHNvbWUgd2VpcmQgZURQIHBh bmVscworCSAgIHdoaWNoIGFyZSBvdXRzaWRlIHNwZWMgdG9sZXJhbmNlcyBidXQgc29tZWhvdyB3 b3JrIGJ5IG1hZ2ljICovCisJaWYgKCFpc19lZHAob3V0cHV0KSAmJgorCSAgICAocHNiX2ludGVs X2RwX2xpbmtfcmVxdWlyZWQobW9kZS0+Y2xvY2ssIDI0KQorCSAgICAgPiBwc2JfaW50ZWxfZHBf bWF4X2RhdGFfcmF0ZShtYXhfbGlua19jbG9jaywgbWF4X2xhbmVzKSkpCisJCXJldHVybiBNT0RF X0NMT0NLX0hJR0g7CisKKwlpZiAobW9kZS0+Y2xvY2sgPCAxMDAwMCkKKwkJcmV0dXJuIE1PREVf Q0xPQ0tfTE9XOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorcGFj a19hdXgodWludDhfdCAqc3JjLCBpbnQgc3JjX2J5dGVzKQoreworCWludAlpOworCXVpbnQzMl90 IHYgPSAwOworCisJaWYgKHNyY19ieXRlcyA+IDQpCisJCXNyY19ieXRlcyA9IDQ7CisJZm9yIChp ID0gMDsgaSA8IHNyY19ieXRlczsgaSsrKQorCQl2IHw9ICgodWludDMyX3QpIHNyY1tpXSkgPDwg KCgzLWkpICogOCk7CisJcmV0dXJuIHY7Cit9CisKK3N0YXRpYyB2b2lkCit1bnBhY2tfYXV4KHVp bnQzMl90IHNyYywgdWludDhfdCAqZHN0LCBpbnQgZHN0X2J5dGVzKQoreworCWludCBpOworCWlm IChkc3RfYnl0ZXMgPiA0KQorCQlkc3RfYnl0ZXMgPSA0OworCWZvciAoaSA9IDA7IGkgPCBkc3Rf Ynl0ZXM7IGkrKykKKwkJZHN0W2ldID0gc3JjID4+ICgoMy1pKSAqIDgpOworfQorCitzdGF0aWMg aW50Citwc2JfaW50ZWxfZHBfYXV4X2NoKHN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQs CisJCXVpbnQ4X3QgKnNlbmQsIGludCBzZW5kX2J5dGVzLAorCQl1aW50OF90ICpyZWN2LCBpbnQg cmVjdl9zaXplKQoreworCXN0cnVjdCBwc2JfaW50ZWxfZHAgKmludGVsX2RwID0gb3V0cHV0LT5k ZXZfcHJpdjsKKwl1aW50MzJfdCBvdXRwdXRfcmVnID0gaW50ZWxfZHAtPm91dHB1dF9yZWc7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG91dHB1dC0+YmFzZS5kZXY7CisJdWludDMyX3QgY2hf Y3RsID0gb3V0cHV0X3JlZyArIDB4MTA7CisJdWludDMyX3QgY2hfZGF0YSA9IGNoX2N0bCArIDQ7 CisJaW50IGk7CisJaW50IHJlY3ZfYnl0ZXM7CisJdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90 IGF1eF9jbG9ja19kaXZpZGVyOworCWludCB0cnksIHByZWNoYXJnZTsKKworCS8qIFRoZSBjbG9j ayBkaXZpZGVyIGlzIGJhc2VkIG9mZiB0aGUgaHJhd2NsaywKKwkgKiBhbmQgd291bGQgbGlrZSB0 byBydW4gYXQgMk1Iei4gU28sIHRha2UgdGhlCisJICogaHJhd2NsayB2YWx1ZSBhbmQgZGl2aWRl IGJ5IDIgYW5kIHVzZSB0aGF0CisJICogT24gQ0RWIHBsYXRmb3JtIGl0IHVzZXMgMjAwTUh6IGFz IGhyYXdjbGsuCisJICoKKwkgKi8KKwlhdXhfY2xvY2tfZGl2aWRlciA9IDIwMCAvIDI7CisKKwlw cmVjaGFyZ2UgPSA0OworCisJaWYgKFJFR19SRUFEKGNoX2N0bCkgJiBEUF9BVVhfQ0hfQ1RMX1NF TkRfQlVTWSkgeworCQlEUk1fRVJST1IoImRwX2F1eF9jaCBub3Qgc3RhcnRlZCBzdGF0dXMgMHgl MDh4XG4iLAorCQkJICBSRUdfUkVBRChjaF9jdGwpKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisK KwkvKiBNdXN0IHRyeSBhdCBsZWFzdCAzIHRpbWVzIGFjY29yZGluZyB0byBEUCBzcGVjICovCisJ Zm9yICh0cnkgPSAwOyB0cnkgPCA1OyB0cnkrKykgeworCQkvKiBMb2FkIHRoZSBzZW5kIGRhdGEg aW50byB0aGUgYXV4IGNoYW5uZWwgZGF0YSByZWdpc3RlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8 IHNlbmRfYnl0ZXM7IGkgKz0gNCkKKwkJCVJFR19XUklURShjaF9kYXRhICsgaSwKKwkJCQkgICBw YWNrX2F1eChzZW5kICsgaSwgc2VuZF9ieXRlcyAtIGkpKTsKKwkKKwkJLyogU2VuZCB0aGUgY29t bWFuZCBhbmQgd2FpdCBmb3IgaXQgdG8gY29tcGxldGUgKi8KKwkJUkVHX1dSSVRFKGNoX2N0bCwK KwkJCSAgIERQX0FVWF9DSF9DVExfU0VORF9CVVNZIHwKKwkJCSAgIERQX0FVWF9DSF9DVExfVElN RV9PVVRfNDAwdXMgfAorCQkJICAgKHNlbmRfYnl0ZXMgPDwgRFBfQVVYX0NIX0NUTF9NRVNTQUdF X1NJWkVfU0hJRlQpIHwKKwkJCSAgIChwcmVjaGFyZ2UgPDwgRFBfQVVYX0NIX0NUTF9QUkVDSEFS R0VfMlVTX1NISUZUKSB8CisJCQkgICAoYXV4X2Nsb2NrX2RpdmlkZXIgPDwgRFBfQVVYX0NIX0NU TF9CSVRfQ0xPQ0tfMlhfU0hJRlQpIHwKKwkJCSAgIERQX0FVWF9DSF9DVExfRE9ORSB8CisJCQkg ICBEUF9BVVhfQ0hfQ1RMX1RJTUVfT1VUX0VSUk9SIHwKKwkJCSAgIERQX0FVWF9DSF9DVExfUkVD RUlWRV9FUlJPUik7CisJCWZvciAoOzspIHsKKwkJCXN0YXR1cyA9IFJFR19SRUFEKGNoX2N0bCk7 CisJCQlpZiAoKHN0YXR1cyAmIERQX0FVWF9DSF9DVExfU0VORF9CVVNZKSA9PSAwKQorCQkJCWJy ZWFrOworCQkJdWRlbGF5KDEwMCk7CisJCX0KKwkKKwkJLyogQ2xlYXIgZG9uZSBzdGF0dXMgYW5k IGFueSBlcnJvcnMgKi8KKwkJUkVHX1dSSVRFKGNoX2N0bCwKKwkJCSAgIHN0YXR1cyB8CisJCQkg ICBEUF9BVVhfQ0hfQ1RMX0RPTkUgfAorCQkJICAgRFBfQVVYX0NIX0NUTF9USU1FX09VVF9FUlJP UiB8CisJCQkgICBEUF9BVVhfQ0hfQ1RMX1JFQ0VJVkVfRVJST1IpOworCQlpZiAoc3RhdHVzICYg RFBfQVVYX0NIX0NUTF9ET05FKQorCQkJYnJlYWs7CisJfQorCisJaWYgKChzdGF0dXMgJiBEUF9B VVhfQ0hfQ1RMX0RPTkUpID09IDApIHsKKwkJRFJNX0VSUk9SKCJkcF9hdXhfY2ggbm90IGRvbmUg c3RhdHVzIDB4JTA4eFxuIiwgc3RhdHVzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBD aGVjayBmb3IgdGltZW91dCBvciByZWNlaXZlIGVycm9yLgorCSAqIFRpbWVvdXRzIG9jY3VyIHdo ZW4gdGhlIHNpbmsgaXMgbm90IGNvbm5lY3RlZAorCSAqLworCWlmIChzdGF0dXMgJiBEUF9BVVhf Q0hfQ1RMX1JFQ0VJVkVfRVJST1IpIHsKKwkJRFJNX0VSUk9SKCJkcF9hdXhfY2ggcmVjZWl2ZSBl cnJvciBzdGF0dXMgMHglMDh4XG4iLCBzdGF0dXMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkv KiBUaW1lb3V0cyBvY2N1ciB3aGVuIHRoZSBkZXZpY2UgaXNuJ3QgY29ubmVjdGVkLCBzbyB0aGV5 J3JlCisJICogIm5vcm1hbCIgLS0gZG9uJ3QgZmlsbCB0aGUga2VybmVsIGxvZyB3aXRoIHRoZXNl ICovCisJaWYgKHN0YXR1cyAmIERQX0FVWF9DSF9DVExfVElNRV9PVVRfRVJST1IpIHsKKwkJRFJN X0RFQlVHX0tNUygiZHBfYXV4X2NoIHRpbWVvdXQgc3RhdHVzIDB4JTA4eFxuIiwgc3RhdHVzKTsK KwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJLyogVW5sb2FkIGFueSBieXRlcyBzZW50IGJh Y2sgZnJvbSB0aGUgb3RoZXIgc2lkZSAqLworCXJlY3ZfYnl0ZXMgPSAoKHN0YXR1cyAmIERQX0FV WF9DSF9DVExfTUVTU0FHRV9TSVpFX01BU0spID4+CisJCSAgICAgIERQX0FVWF9DSF9DVExfTUVT U0FHRV9TSVpFX1NISUZUKTsKKwlpZiAocmVjdl9ieXRlcyA+IHJlY3Zfc2l6ZSkKKwkJcmVjdl9i eXRlcyA9IHJlY3Zfc2l6ZTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgcmVjdl9ieXRlczsgaSArPSA0 KQorCQl1bnBhY2tfYXV4KFJFR19SRUFEKGNoX2RhdGEgKyBpKSwKKwkJCSAgIHJlY3YgKyBpLCBy ZWN2X2J5dGVzIC0gaSk7CisKKwlyZXR1cm4gcmVjdl9ieXRlczsKK30KKworLyogV3JpdGUgZGF0 YSB0byB0aGUgYXV4IGNoYW5uZWwgaW4gbmF0aXZlIG1vZGUgKi8KK3N0YXRpYyBpbnQKK3BzYl9p bnRlbF9kcF9hdXhfbmF0aXZlX3dyaXRlKHN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQs CisJCQkgIHVpbnQxNl90IGFkZHJlc3MsIHVpbnQ4X3QgKnNlbmQsIGludCBzZW5kX2J5dGVzKQor eworCWludCByZXQ7CisJdWludDhfdAltc2dbMjBdOworCWludCBtc2dfYnl0ZXM7CisJdWludDhf dAlhY2s7CisKKwlpZiAoc2VuZF9ieXRlcyA+IDE2KQorCQlyZXR1cm4gLTE7CisJbXNnWzBdID0g QVVYX05BVElWRV9XUklURSA8PCA0OworCW1zZ1sxXSA9IGFkZHJlc3MgPj4gODsKKwltc2dbMl0g PSBhZGRyZXNzICYgMHhmZjsKKwltc2dbM10gPSBzZW5kX2J5dGVzIC0gMTsKKwltZW1jcHkoJm1z Z1s0XSwgc2VuZCwgc2VuZF9ieXRlcyk7CisJbXNnX2J5dGVzID0gc2VuZF9ieXRlcyArIDQ7CisJ Zm9yICg7OykgeworCQlyZXQgPSBwc2JfaW50ZWxfZHBfYXV4X2NoKG91dHB1dCwgbXNnLCBtc2df Ynl0ZXMsICZhY2ssIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWlmICgo YWNrICYgQVVYX05BVElWRV9SRVBMWV9NQVNLKSA9PSBBVVhfTkFUSVZFX1JFUExZX0FDSykKKwkJ CWJyZWFrOworCQllbHNlIGlmICgoYWNrICYgQVVYX05BVElWRV9SRVBMWV9NQVNLKSA9PSBBVVhf TkFUSVZFX1JFUExZX0RFRkVSKQorCQkJdWRlbGF5KDEwMCk7CisJCWVsc2UKKwkJCXJldHVybiAt RUlPOworCX0KKwlyZXR1cm4gc2VuZF9ieXRlczsKK30KKworLyogV3JpdGUgYSBzaW5nbGUgYnl0 ZSB0byB0aGUgYXV4IGNoYW5uZWwgaW4gbmF0aXZlIG1vZGUgKi8KK3N0YXRpYyBpbnQKK3BzYl9p bnRlbF9kcF9hdXhfbmF0aXZlX3dyaXRlXzEoc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1 dCwKKwkJCSAgICB1aW50MTZfdCBhZGRyZXNzLCB1aW50OF90IGJ5dGUpCit7CisJcmV0dXJuIHBz Yl9pbnRlbF9kcF9hdXhfbmF0aXZlX3dyaXRlKG91dHB1dCwgYWRkcmVzcywgJmJ5dGUsIDEpOwor fQorCisvKiByZWFkIGJ5dGVzIGZyb20gYSBuYXRpdmUgYXV4IGNoYW5uZWwgKi8KK3N0YXRpYyBp bnQKK3BzYl9pbnRlbF9kcF9hdXhfbmF0aXZlX3JlYWQoc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQg Km91dHB1dCwKKwkJCSB1aW50MTZfdCBhZGRyZXNzLCB1aW50OF90ICpyZWN2LCBpbnQgcmVjdl9i eXRlcykKK3sKKwl1aW50OF90IG1zZ1s0XTsKKwlpbnQgbXNnX2J5dGVzOworCXVpbnQ4X3QgcmVw bHlbMjBdOworCWludCByZXBseV9ieXRlczsKKwl1aW50OF90IGFjazsKKwlpbnQgcmV0OworCisJ bXNnWzBdID0gQVVYX05BVElWRV9SRUFEIDw8IDQ7CisJbXNnWzFdID0gYWRkcmVzcyA+PiA4Owor CW1zZ1syXSA9IGFkZHJlc3MgJiAweGZmOworCW1zZ1szXSA9IHJlY3ZfYnl0ZXMgLSAxOworCisJ bXNnX2J5dGVzID0gNDsKKwlyZXBseV9ieXRlcyA9IHJlY3ZfYnl0ZXMgKyAxOworCisJZm9yICg7 OykgeworCQlyZXQgPSBwc2JfaW50ZWxfZHBfYXV4X2NoKG91dHB1dCwgbXNnLCBtc2dfYnl0ZXMs CisJCQkJICAgICAgcmVwbHksIHJlcGx5X2J5dGVzKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0 dXJuIC1FUFJPVE87CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJYWNrID0gcmVw bHlbMF07CisJCWlmICgoYWNrICYgQVVYX05BVElWRV9SRVBMWV9NQVNLKSA9PSBBVVhfTkFUSVZF X1JFUExZX0FDSykgeworCQkJbWVtY3B5KHJlY3YsIHJlcGx5ICsgMSwgcmV0IC0gMSk7CisJCQly ZXR1cm4gcmV0IC0gMTsKKwkJfQorCQllbHNlIGlmICgoYWNrICYgQVVYX05BVElWRV9SRVBMWV9N QVNLKSA9PSBBVVhfTkFUSVZFX1JFUExZX0RFRkVSKQorCQkJdWRlbGF5KDEwMCk7CisJCWVsc2UK KwkJCXJldHVybiAtRUlPOworCX0KK30KKworc3RhdGljIGludAorcHNiX2ludGVsX2RwX2kyY19h dXhfY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgbW9kZSwKKwkJICAgIHVpbnQ4 X3Qgd3JpdGVfYnl0ZSwgdWludDhfdCAqcmVhZF9ieXRlKQoreworCXN0cnVjdCBpMmNfYWxnb19k cF9hdXhfZGF0YSAqYWxnb19kYXRhID0gYWRhcHRlci0+YWxnb19kYXRhOworCXN0cnVjdCBwc2Jf aW50ZWxfZHAgKmludGVsX2RwID0gY29udGFpbmVyX29mKGFkYXB0ZXIsCisJCQkJCQlzdHJ1Y3Qg cHNiX2ludGVsX2RwLAorCQkJCQkJYWRhcHRlcik7CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQg Km91dHB1dCA9IGludGVsX2RwLT5vdXRwdXQ7CisJdWludDE2X3QgYWRkcmVzcyA9IGFsZ29fZGF0 YS0+YWRkcmVzczsKKwl1aW50OF90IG1zZ1s1XTsKKwl1aW50OF90IHJlcGx5WzJdOworCXVuc2ln bmVkIHJldHJ5OworCWludCBtc2dfYnl0ZXM7CisJaW50IHJlcGx5X2J5dGVzOworCWludCByZXQ7 CisKKwkvKiBTZXQgdXAgdGhlIGNvbW1hbmQgYnl0ZSAqLworCWlmIChtb2RlICYgTU9ERV9JMkNf UkVBRCkKKwkJbXNnWzBdID0gQVVYX0kyQ19SRUFEIDw8IDQ7CisJZWxzZQorCQltc2dbMF0gPSBB VVhfSTJDX1dSSVRFIDw8IDQ7CisKKwlpZiAoIShtb2RlICYgTU9ERV9JMkNfU1RPUCkpCisJCW1z Z1swXSB8PSBBVVhfSTJDX01PVCA8PCA0OworCisJbXNnWzFdID0gYWRkcmVzcyA+PiA4OworCW1z Z1syXSA9IGFkZHJlc3M7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1PREVfSTJDX1dSSVRF OgorCQltc2dbM10gPSAwOworCQltc2dbNF0gPSB3cml0ZV9ieXRlOworCQltc2dfYnl0ZXMgPSA1 OworCQlyZXBseV9ieXRlcyA9IDE7CisJCWJyZWFrOworCWNhc2UgTU9ERV9JMkNfUkVBRDoKKwkJ bXNnWzNdID0gMDsKKwkJbXNnX2J5dGVzID0gNDsKKwkJcmVwbHlfYnl0ZXMgPSAyOworCQlicmVh azsKKwlkZWZhdWx0OgorCQltc2dfYnl0ZXMgPSAzOworCQlyZXBseV9ieXRlcyA9IDE7CisJCWJy ZWFrOworCX0KKworCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDU7IHJldHJ5KyspIHsKKwkJcmV0 ID0gcHNiX2ludGVsX2RwX2F1eF9jaChvdXRwdXQsCisJCQkJICAgICAgbXNnLCBtc2dfYnl0ZXMs CisJCQkJICAgICAgcmVwbHksIHJlcGx5X2J5dGVzKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCURS TV9ERUJVR19LTVMoImF1eF9jaCBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0Owor CQl9CisKKwkJc3dpdGNoIChyZXBseVswXSAmIEFVWF9OQVRJVkVfUkVQTFlfTUFTSykgeworCQlj YXNlIEFVWF9OQVRJVkVfUkVQTFlfQUNLOgorCQkJLyogSTJDLW92ZXItQVVYIFJlcGx5IGZpZWxk IGlzIG9ubHkgdmFsaWQKKwkJCSAqIHdoZW4gcGFpcmVkIHdpdGggQVVYIEFDSy4KKwkJCSAqLwor CQkJYnJlYWs7CisJCWNhc2UgQVVYX05BVElWRV9SRVBMWV9OQUNLOgorCQkJRFJNX0RFQlVHX0tN UygiYXV4X2NoIG5hdGl2ZSBuYWNrXG4iKTsKKwkJCXJldHVybiAtRVJFTU9URUlPOworCQljYXNl IEFVWF9OQVRJVkVfUkVQTFlfREVGRVI6CisJCQl1ZGVsYXkoMTAwKTsKKwkJCWNvbnRpbnVlOwor CQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJhdXhfY2ggaW52YWxpZCBuYXRpdmUgcmVwbHkgMHgl MDJ4XG4iLAorCQkJCSAgcmVwbHlbMF0pOworCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCX0KKwor CQlzd2l0Y2ggKHJlcGx5WzBdICYgQVVYX0kyQ19SRVBMWV9NQVNLKSB7CisJCWNhc2UgQVVYX0ky Q19SRVBMWV9BQ0s6CisJCQlpZiAobW9kZSA9PSBNT0RFX0kyQ19SRUFEKSB7CisJCQkJKnJlYWRf Ynl0ZSA9IHJlcGx5WzFdOworCQkJfQorCQkJcmV0dXJuIHJlcGx5X2J5dGVzIC0gMTsKKwkJY2Fz ZSBBVVhfSTJDX1JFUExZX05BQ0s6CisJCQlEUk1fREVCVUdfS01TKCJhdXhfaTJjIG5hY2tcbiIp OworCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCWNhc2UgQVVYX0kyQ19SRVBMWV9ERUZFUjoKKwkJ CURSTV9ERUJVR19LTVMoImF1eF9pMmMgZGVmZXJcbiIpOworCQkJdWRlbGF5KDEwMCk7CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigiYXV4X2kyYyBpbnZhbGlkIHJlcGx5IDB4 JTAyeFxuIiwgcmVwbHlbMF0pOworCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCX0KKwl9CisKKwlE Uk1fRVJST1IoInRvbyBtYW55IHJldHJpZXMsIGdpdmluZyB1cFxuIik7CisJcmV0dXJuIC1FUkVN T1RFSU87Cit9CisKK3N0YXRpYyBpbnQKK3BzYl9pbnRlbF9kcF9pMmNfaW5pdChzdHJ1Y3QgcHNi X2ludGVsX291dHB1dCAqb3V0cHV0LCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBwc2Jf aW50ZWxfZHAgKmludGVsX2RwID0gb3V0cHV0LT5kZXZfcHJpdjsKKwlEUk1fREVCVUdfS01TKCJp MmNfaW5pdCAlc1xuIiwgbmFtZSk7CisJaW50ZWxfZHAtPmFsZ28ucnVubmluZyA9IGZhbHNlOwor CWludGVsX2RwLT5hbGdvLmFkZHJlc3MgPSAwOworCWludGVsX2RwLT5hbGdvLmF1eF9jaCA9IHBz Yl9pbnRlbF9kcF9pMmNfYXV4X2NoOworCisJbWVtc2V0KCZpbnRlbF9kcC0+YWRhcHRlciwgJ1ww Jywgc2l6ZW9mIChpbnRlbF9kcC0+YWRhcHRlcikpOworCWludGVsX2RwLT5hZGFwdGVyLm93bmVy ID0gVEhJU19NT0RVTEU7CisJaW50ZWxfZHAtPmFkYXB0ZXIuY2xhc3MgPSBJMkNfQ0xBU1NfRERD OworCXN0cm5jcHkgKGludGVsX2RwLT5hZGFwdGVyLm5hbWUsIG5hbWUsIHNpemVvZihpbnRlbF9k cC0+YWRhcHRlci5uYW1lKSAtIDEpOworCWludGVsX2RwLT5hZGFwdGVyLm5hbWVbc2l6ZW9mKGlu dGVsX2RwLT5hZGFwdGVyLm5hbWUpIC0gMV0gPSAnXDAnOworCWludGVsX2RwLT5hZGFwdGVyLmFs Z29fZGF0YSA9ICZpbnRlbF9kcC0+YWxnbzsKKwlpbnRlbF9kcC0+YWRhcHRlci5kZXYucGFyZW50 ID0gJm91dHB1dC0+YmFzZS5rZGV2OworCisJcmV0dXJuIGkyY19kcF9hdXhfYWRkX2J1cygmaW50 ZWxfZHAtPmFkYXB0ZXIpOworfQorCitzdGF0aWMgYm9vbAorcHNiX2ludGVsX2RwX21vZGVfZml4 dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKKwkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQorewor CXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQgPSBlbmNfdG9fcHNiX2ludGVsX291dHB1 dChlbmNvZGVyKTsKKwlzdHJ1Y3QgcHNiX2ludGVsX2RwICppbnRlbF9kcCA9IG91dHB1dC0+ZGV2 X3ByaXY7CisJaW50IGxhbmVfY291bnQsIGNsb2NrOworCWludCBtYXhfbGFuZV9jb3VudCA9IHBz Yl9pbnRlbF9kcF9tYXhfbGFuZV9jb3VudChvdXRwdXQpOworCWludCBtYXhfY2xvY2sgPSBwc2Jf aW50ZWxfZHBfbWF4X2xpbmtfYncob3V0cHV0KSA9PSBEUF9MSU5LX0JXXzJfNyA/IDEgOiAwOwor CXN0YXRpYyBpbnQgYndzWzJdID0geyBEUF9MSU5LX0JXXzFfNjIsIERQX0xJTktfQldfMl83IH07 CisKKworCWZvciAobGFuZV9jb3VudCA9IDE7IGxhbmVfY291bnQgPD0gbWF4X2xhbmVfY291bnQ7 IGxhbmVfY291bnQgPDw9IDEpIHsKKwkJZm9yIChjbG9jayA9IG1heF9jbG9jazsgY2xvY2sgPj0g MDsgY2xvY2stLSkgeworCQkJaW50IGxpbmtfYXZhaWwgPSBwc2JfaW50ZWxfZHBfbWF4X2RhdGFf cmF0ZShwc2JfaW50ZWxfZHBfbGlua19jbG9jayhid3NbY2xvY2tdKSwgbGFuZV9jb3VudCk7CisK KwkJCWlmIChwc2JfaW50ZWxfZHBfbGlua19yZXF1aXJlZChtb2RlLT5jbG9jaywgMjQpCisJCQkJ CTw9IGxpbmtfYXZhaWwpIHsKKwkJCQlpbnRlbF9kcC0+bGlua19idyA9IGJ3c1tjbG9ja107CisJ CQkJaW50ZWxfZHAtPmxhbmVfY291bnQgPSBsYW5lX2NvdW50OworCQkJCWFkanVzdGVkX21vZGUt PmNsb2NrID0gcHNiX2ludGVsX2RwX2xpbmtfY2xvY2soaW50ZWxfZHAtPmxpbmtfYncpOworCQkJ CURSTV9ERUJVR19LTVMoIkRpc3BsYXkgcG9ydCBsaW5rIGJ3ICUwMnggbGFuZSAiCisJCQkJCQki Y291bnQgJWQgY2xvY2sgJWRcbiIsCisJCQkJICAgICAgIGludGVsX2RwLT5saW5rX2J3LCBpbnRl bF9kcC0+bGFuZV9jb3VudCwKKwkJCQkgICAgICAgYWRqdXN0ZWRfbW9kZS0+Y2xvY2spOworCQkJ CXJldHVybiB0cnVlOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdHJ1 Y3QgcHNiX2ludGVsX2RwX21fbiB7CisJdWludDMyX3QJdHU7CisJdWludDMyX3QJZ21jaF9tOwor CXVpbnQzMl90CWdtY2hfbjsKKwl1aW50MzJfdAlsaW5rX207CisJdWludDMyX3QJbGlua19uOwor fTsKKworc3RhdGljIHZvaWQKK3BzYl9pbnRlbF9yZWR1Y2VfcmF0aW8odWludDMyX3QgKm51bSwg dWludDMyX3QgKmRlbikKK3sKKwkvKgorCXdoaWxlICgqbnVtID4gMHhmZmZmZmYgfHwgKmRlbiA+ IDB4ZmZmZmZmKSB7CisJCSpudW0gPj49IDE7CisJCSpkZW4gPj49IDE7CisJfSovCisJdWludDY0 X3QgdmFsdWUsIG07CisJbSA9ICpudW07CisJdmFsdWUgPSBtICogKDB4ODAwMDAwKTsKKwltID0g ZG9fZGl2KHZhbHVlLCAqZGVuKTsKKwkqbnVtID0gdmFsdWU7CisJKmRlbiA9IDB4ODAwMDAwOwor fQorCitzdGF0aWMgdm9pZAorcHNiX2ludGVsX2RwX2NvbXB1dGVfbV9uKGludCBicHAsCisJCSAg ICAgaW50IG5sYW5lcywKKwkJICAgICBpbnQgcGl4ZWxfY2xvY2ssCisJCSAgICAgaW50IGxpbmtf Y2xvY2ssCisJCSAgICAgc3RydWN0IHBzYl9pbnRlbF9kcF9tX24gKm1fbikKK3sKKwltX24tPnR1 ID0gNjQ7CisJbV9uLT5nbWNoX20gPSAocGl4ZWxfY2xvY2sgKiBicHAgKyA3KSA+PiAzOworCW1f bi0+Z21jaF9uID0gbGlua19jbG9jayAqIG5sYW5lczsKKwlwc2JfaW50ZWxfcmVkdWNlX3JhdGlv KCZtX24tPmdtY2hfbSwgJm1fbi0+Z21jaF9uKTsKKwltX24tPmxpbmtfbSA9IHBpeGVsX2Nsb2Nr OworCW1fbi0+bGlua19uID0gbGlua19jbG9jazsKKwlwc2JfaW50ZWxfcmVkdWNlX3JhdGlvKCZt X24tPmxpbmtfbSwgJm1fbi0+bGlua19uKTsKK30KKwordm9pZAorcHNiX2ludGVsX2RwX3NldF9t X24oc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwK KwkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqbW9k ZV9jb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXI7CisJc3RydWN0IHBzYl9pbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9fcHNiX2ludGVsX2Ny dGMoY3J0Yyk7CisJaW50IGxhbmVfY291bnQgPSA0LCBicHAgPSAyNDsKKwlzdHJ1Y3QgcHNiX2lu dGVsX2RwX21fbiBtX247CisJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCisJLyoKKwkg KiBGaW5kIHRoZSBsYW5lIGNvdW50IGluIHRoZSBpbnRlbF9lbmNvZGVyIHByaXZhdGUKKwkgKi8K KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZtb2RlX2NvbmZpZy0+ZW5jb2Rlcl9saXN0 LCBoZWFkKSB7CisJCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQ7CisJCXN0 cnVjdCBwc2JfaW50ZWxfZHAgKmludGVsX2RwOworCisJCWlmIChlbmNvZGVyLT5jcnRjICE9IGNy dGMpCisJCQljb250aW51ZTsKKworCQlpbnRlbF9vdXRwdXQgPSBlbmNfdG9fcHNiX2ludGVsX291 dHB1dChlbmNvZGVyKTsKKwkJaW50ZWxfZHAgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCQlp ZiAoaW50ZWxfb3V0cHV0LT50eXBlID09IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVCkgeworCQkJ bGFuZV9jb3VudCA9IGludGVsX2RwLT5sYW5lX2NvdW50OworCQkJYnJlYWs7CisJCX0gZWxzZSBp ZiAoaXNfZWRwKGludGVsX291dHB1dCkpIHsKKwkJCWxhbmVfY291bnQgPSBpbnRlbF9kcC0+bGFu ZV9jb3VudDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBDb21wdXRlIHRoZSBHTUNI IGFuZCBMaW5rIHJhdGlvcy4gVGhlICczJyBoZXJlIGlzCisJICogdGhlIG51bWJlciBvZiBieXRl c19wZXJfcGl4ZWwgcG9zdC1MVVQsIHdoaWNoIHdlIGFsd2F5cworCSAqIHNldCB1cCBmb3IgOC1i aXRzIG9mIFIvRy9CLCBvciAzIGJ5dGVzIHRvdGFsLgorCSAqLworCXBzYl9pbnRlbF9kcF9jb21w dXRlX21fbihicHAsIGxhbmVfY291bnQsCisJCQkgICAgIG1vZGUtPmNsb2NrLCBhZGp1c3RlZF9t b2RlLT5jbG9jaywgJm1fbik7CisKKwl7CisJCVJFR19XUklURShQSVBFX0dNQ0hfREFUQV9NKHBp cGUpLAorCQkJICAgKChtX24udHUgLSAxKSA8PCBQSVBFX0dNQ0hfREFUQV9NX1RVX1NJWkVfU0hJ RlQpIHwKKwkJCSAgIG1fbi5nbWNoX20pOworCQlSRUdfV1JJVEUoUElQRV9HTUNIX0RBVEFfTihw aXBlKSwgbV9uLmdtY2hfbik7CisJCVJFR19XUklURShQSVBFX0RQX0xJTktfTShwaXBlKSwgbV9u LmxpbmtfbSk7CisJCVJFR19XUklURShQSVBFX0RQX0xJTktfTihwaXBlKSwgbV9uLmxpbmtfbik7 CisJfQorfQorCitzdGF0aWMgdm9pZAorcHNiX2ludGVsX2RwX21vZGVfc2V0KHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2Rlciwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCSAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IHBzYl9pbnRl bF9vdXRwdXQgKmludGVsX291dHB1dCA9IGVuY190b19wc2JfaW50ZWxfb3V0cHV0KGVuY29kZXIp OworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGVuY29kZXItPmNydGM7CisJc3RydWN0IHBzYl9p bnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9fcHNiX2ludGVsX2NydGMoY3J0Yyk7CisJc3RydWN0 IHBzYl9pbnRlbF9kcCAqaW50ZWxfZHAgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCisKKwlp bnRlbF9kcC0+RFAgPSBEUF9WT0xUQUdFXzBfNCB8IERQX1BSRV9FTVBIQVNJU18wOworCWludGVs X2RwLT5EUCB8PSBpbnRlbF9kcC0+Y29sb3JfcmFuZ2U7CisKKwlpZiAoYWRqdXN0ZWRfbW9kZS0+ ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKKwkJaW50ZWxfZHAtPkRQIHw9IERQX1NZTkNf SFNfSElHSDsKKwlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lO QykKKwkJaW50ZWxfZHAtPkRQIHw9IERQX1NZTkNfVlNfSElHSDsKKworCWludGVsX2RwLT5EUCB8 PSBEUF9MSU5LX1RSQUlOX09GRjsKKworCXN3aXRjaCAoaW50ZWxfZHAtPmxhbmVfY291bnQpIHsK KwljYXNlIDE6CisJCWludGVsX2RwLT5EUCB8PSBEUF9QT1JUX1dJRFRIXzE7CisJCWJyZWFrOwor CWNhc2UgMjoKKwkJaW50ZWxfZHAtPkRQIHw9IERQX1BPUlRfV0lEVEhfMjsKKwkJYnJlYWs7CisJ Y2FzZSA0OgorCQlpbnRlbF9kcC0+RFAgfD0gRFBfUE9SVF9XSURUSF80OworCQlicmVhazsKKwl9 CisJaWYgKGludGVsX2RwLT5oYXNfYXVkaW8pCisJCWludGVsX2RwLT5EUCB8PSBEUF9BVURJT19P VVRQVVRfRU5BQkxFOworCisJbWVtc2V0KGludGVsX2RwLT5saW5rX2NvbmZpZ3VyYXRpb24sIDAs IERQX0xJTktfQ09ORklHVVJBVElPTl9TSVpFKTsKKwlpbnRlbF9kcC0+bGlua19jb25maWd1cmF0 aW9uWzBdID0gaW50ZWxfZHAtPmxpbmtfYnc7CisJaW50ZWxfZHAtPmxpbmtfY29uZmlndXJhdGlv blsxXSA9IGludGVsX2RwLT5sYW5lX2NvdW50OworCisJLyoKKwkgKiBDaGVjayBmb3IgRFBDRCB2 ZXJzaW9uID4gMS4xIGFuZCBlbmhhbmNlZCBmcmFtaW5nIHN1cHBvcnQKKwkgKi8KKwlpZiAoaW50 ZWxfZHAtPmRwY2RbRFBfRFBDRF9SRVZdID49IDB4MTEgJiYKKwkgICAgKGludGVsX2RwLT5kcGNk W0RQX01BWF9MQU5FX0NPVU5UXSAmIERQX0VOSEFOQ0VEX0ZSQU1FX0NBUCkpIHsKKwkJaW50ZWxf ZHAtPmxpbmtfY29uZmlndXJhdGlvblsxXSB8PSBEUF9MQU5FX0NPVU5UX0VOSEFOQ0VEX0ZSQU1F X0VOOworCQlpbnRlbF9kcC0+RFAgfD0gRFBfRU5IQU5DRURfRlJBTUlORzsKKwl9CisKKwkvKiBD UFQgRFAncyBwaXBlIHNlbGVjdCBpcyBkZWNpZGVkIGluIFRSQU5TX0RQX0NUTCAqLworCWlmIChp bnRlbF9jcnRjLT5waXBlID09IDEpCisJCWludGVsX2RwLT5EUCB8PSBEUF9QSVBFQl9TRUxFQ1Q7 CisKKwlEUk1fREVCVUdfS01TKCJEUCBleHBlY3RlZCByZWcgaXMgJXhcbiIsIGludGVsX2RwLT5E UCk7Cit9CisKKworLyogSWYgdGhlIHNpbmsgc3VwcG9ydHMgaXQsIHRyeSB0byBzZXQgdGhlIHBv d2VyIHN0YXRlIGFwcHJvcHJpYXRlbHkgKi8KK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9kcF9zaW5r X2RwbXMoc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCwgaW50IG1vZGUpCit7CisJc3Ry dWN0IHBzYl9pbnRlbF9kcCAqaW50ZWxfZHAgPSBvdXRwdXQtPmRldl9wcml2OworCWludCByZXQs IGk7CisKKwkvKiBTaG91bGQgaGF2ZSBhIHZhbGlkIERQQ0QgYnkgdGhpcyBwb2ludCAqLworCWlm IChpbnRlbF9kcC0+ZHBjZFtEUF9EUENEX1JFVl0gPCAweDExKQorCQlyZXR1cm47CisKKwlpZiAo bW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKSB7CisJCXJldCA9IHBzYl9pbnRlbF9kcF9hdXhfbmF0 aXZlX3dyaXRlXzEob3V0cHV0LCBEUF9TRVRfUE9XRVIsCisJCQkJCQkgIERQX1NFVF9QT1dFUl9E Myk7CisJCWlmIChyZXQgIT0gMSkKKwkJCURSTV9ERUJVR19EUklWRVIoImZhaWxlZCB0byB3cml0 ZSBzaW5rIHBvd2VyIHN0YXRlXG4iKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBXaGVuIHR1cm5p bmcgb24sIHdlIG5lZWQgdG8gcmV0cnkgZm9yIDFtcyB0byBnaXZlIHRoZSBzaW5rCisJCSAqIHRp bWUgdG8gd2FrZSB1cC4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCXJl dCA9IHBzYl9pbnRlbF9kcF9hdXhfbmF0aXZlX3dyaXRlXzEob3V0cHV0LAorCQkJCQkJCSAgRFBf U0VUX1BPV0VSLAorCQkJCQkJCSAgRFBfU0VUX1BPV0VSX0QwKTsKKwkJCWlmIChyZXQgPT0gMSkK KwkJCQlicmVhazsKKwkJCXVkZWxheSgxMDAwKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQg cHNiX2ludGVsX2RwX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0 cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQgPSBlbmNfdG9fcHNiX2ludGVsX291dHB1dChl bmNvZGVyKTsKKworCS8qIFdha2UgdXAgdGhlIHNpbmsgZmlyc3QgKi8KKwlwc2JfaW50ZWxfZHBf c2lua19kcG1zKG91dHB1dCwgRFJNX01PREVfRFBNU19PTik7CisKKwlwc2JfaW50ZWxfZHBfbGlu a19kb3duKG91dHB1dCk7Cit9CisKK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9kcF9jb21taXQoc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpv dXRwdXQgPSBlbmNfdG9fcHNiX2ludGVsX291dHB1dChlbmNvZGVyKTsKKworCXBzYl9pbnRlbF9k cF9zdGFydF9saW5rX3RyYWluKG91dHB1dCk7CisKKwlwc2JfaW50ZWxfZHBfY29tcGxldGVfbGlu a190cmFpbihvdXRwdXQpOworCit9CisKK3N0YXRpYyB2b2lkCitwc2JfaW50ZWxfZHBfZHBtcyhz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKQoreworCXN0cnVjdCBwc2JfaW50 ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSBlbmNfdG9fcHNiX2ludGVsX291dHB1dChlbmNvZGVy KTsKKwlzdHJ1Y3QgcHNiX2ludGVsX2RwICppbnRlbF9kcCA9IGludGVsX291dHB1dC0+ZGV2X3By aXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwl1aW50MzJfdCBk cF9yZWcgPSBSRUdfUkVBRChpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CisKKwlpZiAobW9kZSAhPSBE Uk1fTU9ERV9EUE1TX09OKSB7CisJCXBzYl9pbnRlbF9kcF9zaW5rX2RwbXMoaW50ZWxfb3V0cHV0 LCBtb2RlKTsKKwkJcHNiX2ludGVsX2RwX2xpbmtfZG93bihpbnRlbF9vdXRwdXQpOworCX0gZWxz ZSB7CisJCXBzYl9pbnRlbF9kcF9zaW5rX2RwbXMoaW50ZWxfb3V0cHV0LCBtb2RlKTsKKwkJaWYg KCEoZHBfcmVnICYgRFBfUE9SVF9FTikpIHsKKwkJCXBzYl9pbnRlbF9kcF9zdGFydF9saW5rX3Ry YWluKGludGVsX291dHB1dCk7CisJCQlwc2JfaW50ZWxfZHBfY29tcGxldGVfbGlua190cmFpbihp bnRlbF9vdXRwdXQpOworCQl9CisJfQorfQorCisvKgorICogTmF0aXZlIHJlYWQgd2l0aCByZXRy eSBmb3IgbGluayBzdGF0dXMgYW5kIHJlY2VpdmVyIGNhcGFiaWxpdHkgcmVhZHMgZm9yCisgKiBj YXNlcyB3aGVyZSB0aGUgc2luayBtYXkgc3RpbGwgYmUgYXNsZWVwLgorICovCitzdGF0aWMgYm9v bAorcHNiX2ludGVsX2RwX2F1eF9uYXRpdmVfcmVhZF9yZXRyeShzdHJ1Y3QgcHNiX2ludGVsX291 dHB1dCAqb3V0cHV0LCB1aW50MTZfdCBhZGRyZXNzLAorCQkJICAgICAgIHVpbnQ4X3QgKnJlY3Ys IGludCByZWN2X2J5dGVzKQoreworCWludCByZXQsIGk7CisKKwkvKgorCSAqIFNpbmtzIGFyZSAq c3VwcG9zZWQqIHRvIGNvbWUgdXAgd2l0aGluIDFtcyBmcm9tIGFuIG9mZiBzdGF0ZSwKKwkgKiBi dXQgd2UncmUgYWxzbyBzdXBwb3NlZCB0byByZXRyeSAzIHRpbWVzIHBlciB0aGUgc3BlYy4KKwkg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXJldCA9IHBzYl9pbnRlbF9kcF9hdXhf bmF0aXZlX3JlYWQob3V0cHV0LCBhZGRyZXNzLCByZWN2LAorCQkJCQkgICAgICAgcmVjdl9ieXRl cyk7CisJCWlmIChyZXQgPT0gcmVjdl9ieXRlcykKKwkJCXJldHVybiB0cnVlOworCQl1ZGVsYXko MTAwMCk7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRmV0Y2ggQVVYIENIIHJl Z2lzdGVycyAweDIwMiAtIDB4MjA3IHdoaWNoIGNvbnRhaW4KKyAqIGxpbmsgc3RhdHVzIGluZm9y bWF0aW9uCisgKi8KK3N0YXRpYyBib29sCitwc2JfaW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKHN0 cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQpCit7CisJc3RydWN0IHBzYl9pbnRlbF9kcCAq aW50ZWxfZHAgPSBvdXRwdXQtPmRldl9wcml2OworCXJldHVybiBwc2JfaW50ZWxfZHBfYXV4X25h dGl2ZV9yZWFkX3JldHJ5KG91dHB1dCwKKwkJCQkJICAgICAgRFBfTEFORTBfMV9TVEFUVVMsCisJ CQkJCSAgICAgIGludGVsX2RwLT5saW5rX3N0YXR1cywKKwkJCQkJICAgICAgRFBfTElOS19TVEFU VVNfU0laRSk7Cit9CisKK3N0YXRpYyB1aW50OF90Citwc2JfaW50ZWxfZHBfbGlua19zdGF0dXMo dWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSwKKwkJICAgICBpbnQgcikK K3sKKwlyZXR1cm4gbGlua19zdGF0dXNbciAtIERQX0xBTkUwXzFfU1RBVFVTXTsKK30KKworc3Rh dGljIHVpbnQ4X3QKK3BzYl9pbnRlbF9nZXRfYWRqdXN0X3JlcXVlc3Rfdm9sdGFnZSh1aW50OF90 IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdLAorCQkJCSBpbnQgbGFuZSkKK3sKKwlp bnQJICAgIGkgPSBEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxhbmUgPj4gMSk7CisJaW50 CSAgICBzID0gKChsYW5lICYgMSkgPworCQkJIERQX0FESlVTVF9WT0xUQUdFX1NXSU5HX0xBTkUx X1NISUZUIDoKKwkJCSBEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19MQU5FMF9TSElGVCk7CisJdWlu dDhfdCBsID0gcHNiX2ludGVsX2RwX2xpbmtfc3RhdHVzKGxpbmtfc3RhdHVzLCBpKTsKKworCXJl dHVybiAoKGwgPj4gcykgJiAzKSA8PCBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NISUZUOworfQor CitzdGF0aWMgdWludDhfdAorcHNiX2ludGVsX2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFz aXModWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSwKKwkJCQkgICAgICBp bnQgbGFuZSkKK3sKKwlpbnQJICAgIGkgPSBEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxh bmUgPj4gMSk7CisJaW50CSAgICBzID0gKChsYW5lICYgMSkgPworCQkJIERQX0FESlVTVF9QUkVf RU1QSEFTSVNfTEFORTFfU0hJRlQgOgorCQkJIERQX0FESlVTVF9QUkVfRU1QSEFTSVNfTEFORTBf U0hJRlQpOworCXVpbnQ4X3QgbCA9IHBzYl9pbnRlbF9kcF9saW5rX3N0YXR1cyhsaW5rX3N0YXR1 cywgaSk7CisKKwlyZXR1cm4gKChsID4+IHMpICYgMykgPDwgRFBfVFJBSU5fUFJFX0VNUEhBU0lT X1NISUZUOworfQorCisKKyNpZiAwCitzdGF0aWMgY2hhcgkqdm9sdGFnZV9uYW1lc1tdID0gewor CSIwLjRWIiwgIjAuNlYiLCAiMC44ViIsICIxLjJWIgorfTsKK3N0YXRpYyBjaGFyCSpwcmVfZW1w aF9uYW1lc1tdID0geworCSIwZEIiLCAiMy41ZEIiLCAiNmRCIiwgIjkuNWRCIgorfTsKK3N0YXRp YyBjaGFyCSpsaW5rX3RyYWluX25hbWVzW10gPSB7CisJInBhdHRlcm4gMSIsICJwYXR0ZXJuIDIi LCAiaWRsZSIsICJvZmYiCit9OworI2VuZGlmCisKKyNkZWZpbmUgQ0RWX0RQX1ZPTFRBR0VfTUFY CSAgICBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HXzEyMDAKKy8qCitzdGF0aWMgdWludDhfdAorcHNi X2ludGVsX2RwX3ByZV9lbXBoYXNpc19tYXgodWludDhfdCB2b2x0YWdlX3N3aW5nKQoreworCXN3 aXRjaCAodm9sdGFnZV9zd2luZyAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgeworCWNh c2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR180MDA6CisJCXJldHVybiBEUF9UUkFJTl9QUkVfRU1Q SEFTSVNfNjsKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfNjAwOgorCQlyZXR1cm4gRFBf VFJBSU5fUFJFX0VNUEhBU0lTXzY7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HXzgwMDoK KwkJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIQVNJU18zXzU7CisJY2FzZSBEUF9UUkFJTl9WT0xU QUdFX1NXSU5HXzEyMDA6CisJZGVmYXVsdDoKKwkJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIQVNJ U18wOworCX0KK30KKyovCitzdGF0aWMgdm9pZAorcHNiX2ludGVsX2dldF9hZGp1c3RfdHJhaW4o c3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCkKK3sKKwlzdHJ1Y3QgcHNiX2ludGVsX2Rw ICppbnRlbF9kcCA9IG91dHB1dC0+ZGV2X3ByaXY7CisJdWludDhfdCB2ID0gMDsKKwl1aW50OF90 IHAgPSAwOworCWludCBsYW5lOworCisJZm9yIChsYW5lID0gMDsgbGFuZSA8IGludGVsX2RwLT5s YW5lX2NvdW50OyBsYW5lKyspIHsKKwkJdWludDhfdCB0aGlzX3YgPSBwc2JfaW50ZWxfZ2V0X2Fk anVzdF9yZXF1ZXN0X3ZvbHRhZ2UoaW50ZWxfZHAtPmxpbmtfc3RhdHVzLCBsYW5lKTsKKwkJdWlu dDhfdCB0aGlzX3AgPSBwc2JfaW50ZWxfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcyhp bnRlbF9kcC0+bGlua19zdGF0dXMsIGxhbmUpOworCisJCWlmICh0aGlzX3YgPiB2KQorCQkJdiA9 IHRoaXNfdjsKKwkJaWYgKHRoaXNfcCA+IHApCisJCQlwID0gdGhpc19wOworCX0KKwkKKwlpZiAo diA+PSBDRFZfRFBfVk9MVEFHRV9NQVgpCisJCXYgPSBDRFZfRFBfVk9MVEFHRV9NQVggfCBEUF9U UkFJTl9NQVhfU1dJTkdfUkVBQ0hFRDsKKworCWlmIChwID09IERQX1RSQUlOX1BSRV9FTVBIQVNJ U19NQVNLKQorCQlwIHw9IERQX1RSQUlOX01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRDsKKwkJCisJ Zm9yIChsYW5lID0gMDsgbGFuZSA8IDQ7IGxhbmUrKykKKwkJaW50ZWxfZHAtPnRyYWluX3NldFts YW5lXSA9IHYgfCBwOworfQorCisKK3N0YXRpYyB1aW50OF90Citwc2JfaW50ZWxfZ2V0X2xhbmVf c3RhdHVzKHVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sCisJCSAgICAg IGludCBsYW5lKQoreworCWludCBpID0gRFBfTEFORTBfMV9TVEFUVVMgKyAobGFuZSA+PiAxKTsK KwlpbnQgcyA9IChsYW5lICYgMSkgKiA0OworCXVpbnQ4X3QgbCA9IHBzYl9pbnRlbF9kcF9saW5r X3N0YXR1cyhsaW5rX3N0YXR1cywgaSk7CisKKwlyZXR1cm4gKGwgPj4gcykgJiAweGY7Cit9CisK Ky8qIENoZWNrIGZvciBjbG9jayByZWNvdmVyeSBpcyBkb25lIG9uIGFsbCBjaGFubmVscyAqLwor c3RhdGljIGJvb2wKK3BzYl9pbnRlbF9jbG9ja19yZWNvdmVyeV9vayh1aW50OF90IGxpbmtfc3Rh dHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdLCBpbnQgbGFuZV9jb3VudCkKK3sKKwlpbnQgbGFuZTsK Kwl1aW50OF90IGxhbmVfc3RhdHVzOworCisJZm9yIChsYW5lID0gMDsgbGFuZSA8IGxhbmVfY291 bnQ7IGxhbmUrKykgeworCQlsYW5lX3N0YXR1cyA9IHBzYl9pbnRlbF9nZXRfbGFuZV9zdGF0dXMo bGlua19zdGF0dXMsIGxhbmUpOworCQlpZiAoKGxhbmVfc3RhdHVzICYgRFBfTEFORV9DUl9ET05F KSA9PSAwKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogQ2hl Y2sgdG8gc2VlIGlmIGNoYW5uZWwgZXEgaXMgZG9uZSBvbiBhbGwgY2hhbm5lbHMgKi8KKyNkZWZp bmUgQ0hBTk5FTF9FUV9CSVRTIChEUF9MQU5FX0NSX0RPTkV8XAorCQkJIERQX0xBTkVfQ0hBTk5F TF9FUV9ET05FfFwKKwkJCSBEUF9MQU5FX1NZTUJPTF9MT0NLRUQpCitzdGF0aWMgYm9vbAorcHNi X2ludGVsX2NoYW5uZWxfZXFfb2soc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCkKK3sK KwlzdHJ1Y3QgcHNiX2ludGVsX2RwICppbnRlbF9kcCA9IG91dHB1dC0+ZGV2X3ByaXY7CisJdWlu dDhfdCBsYW5lX2FsaWduOworCXVpbnQ4X3QgbGFuZV9zdGF0dXM7CisJaW50IGxhbmU7CisKKwls YW5lX2FsaWduID0gcHNiX2ludGVsX2RwX2xpbmtfc3RhdHVzKGludGVsX2RwLT5saW5rX3N0YXR1 cywKKwkJCQkJICBEUF9MQU5FX0FMSUdOX1NUQVRVU19VUERBVEVEKTsKKwlpZiAoKGxhbmVfYWxp Z24gJiBEUF9JTlRFUkxBTkVfQUxJR05fRE9ORSkgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCWZv ciAobGFuZSA9IDA7IGxhbmUgPCBpbnRlbF9kcC0+bGFuZV9jb3VudDsgbGFuZSsrKSB7CisJCWxh bmVfc3RhdHVzID0gcHNiX2ludGVsX2dldF9sYW5lX3N0YXR1cyhpbnRlbF9kcC0+bGlua19zdGF0 dXMsIGxhbmUpOworCQlpZiAoKGxhbmVfc3RhdHVzICYgQ0hBTk5FTF9FUV9CSVRTKSAhPSBDSEFO TkVMX0VRX0JJVFMpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitz dGF0aWMgYm9vbAorcHNiX2ludGVsX2RwX3NldF9saW5rX3RyYWluKHN0cnVjdCBwc2JfaW50ZWxf b3V0cHV0ICpvdXRwdXQsCisJCQl1aW50MzJfdCBkcF9yZWdfdmFsdWUsCisJCQl1aW50OF90IGRw X3RyYWluX3BhdCkKK3sKKwkKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb3V0cHV0LT5iYXNl LmRldjsKKwlpbnQgcmV0OworCXN0cnVjdCBwc2JfaW50ZWxfZHAgKmludGVsX2RwID0gb3V0cHV0 LT5kZXZfcHJpdjsKKworCVJFR19XUklURShpbnRlbF9kcC0+b3V0cHV0X3JlZywgZHBfcmVnX3Zh bHVlKTsKKwlSRUdfUkVBRChpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CisKKwlyZXQgPSBwc2JfaW50 ZWxfZHBfYXV4X25hdGl2ZV93cml0ZV8xKG91dHB1dCwKKwkJCQkgICAgRFBfVFJBSU5JTkdfUEFU VEVSTl9TRVQsCisJCQkJICAgIGRwX3RyYWluX3BhdCk7CisKKwlpZiAocmV0ICE9IDEpIHsKKwkJ RFJNX0RFQlVHX0tNUygiRmFpbHVyZSBpbiBzZXR0aW5nIGxpbmsgcGF0dGVybiAleFxuIiwKKwkJ CQlkcF90cmFpbl9wYXQpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CisKKworc3RhdGljIGJvb2wKK3BzYl9pbnRlbF9kcGxpbmtfc2V0X2xldmVsKHN0cnVjdCBwc2Jf aW50ZWxfb3V0cHV0ICpvdXRwdXQsCisJCQl1aW50OF90IGRwX3RyYWluX3BhdCkKK3sKKwkKKwlp bnQgcmV0OworCXN0cnVjdCBwc2JfaW50ZWxfZHAgKmludGVsX2RwID0gb3V0cHV0LT5kZXZfcHJp djsKKworCXJldCA9IHBzYl9pbnRlbF9kcF9hdXhfbmF0aXZlX3dyaXRlKG91dHB1dCwKKwkJCQkJ RFBfVFJBSU5JTkdfTEFORTBfU0VULAorCQkJCQlpbnRlbF9kcC0+dHJhaW5fc2V0LAorCQkJCQlp bnRlbF9kcC0+bGFuZV9jb3VudCk7CisKKwlpZiAocmV0ICE9IGludGVsX2RwLT5sYW5lX2NvdW50 KSB7CisJCURSTV9ERUJVR19LTVMoIkZhaWx1cmUgaW4gc2V0dGluZyBsZXZlbCAlZCwgbGFuZV9j bnQ9ICVkXG4iLAorCQkJCWludGVsX2RwLT50cmFpbl9zZXRbMF0sIGludGVsX2RwLT5sYW5lX2Nv dW50KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZv aWQKK3BzYl9pbnRlbF9kcF9zZXRfdnN3aW5nX3ByZW1waChzdHJ1Y3QgcHNiX2ludGVsX291dHB1 dCAqb3V0cHV0LCB1aW50OF90IHNpZ25hbF9sZXZlbCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gb3V0cHV0LT5iYXNlLmRldjsKKwlzdHJ1Y3QgcHNiX2ludGVsX2RwICppbnRlbF9kcCA9 IG91dHB1dC0+ZGV2X3ByaXY7CisJc3RydWN0IGRkaV9yZWdvZmYgKmRkaV9yZWc7CisJaW50IHZz d2luZywgcHJlbXBoLCBpbmRleDsKKworCWlmIChpbnRlbF9kcC0+b3V0cHV0X3JlZyA9PSBEUF9C KQorCQlkZGlfcmVnID0gJmRkaV9EUF90cmFpbl90YWJsZVswXTsKKwllbHNlCisJCWRkaV9yZWcg PSAmZGRpX0RQX3RyYWluX3RhYmxlWzFdOworCisJdnN3aW5nID0gKHNpZ25hbF9sZXZlbCAmIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSyk7CisJcHJlbXBoID0gKChzaWduYWxfbGV2ZWwgJiBE UF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSykpID4+CisJCQkJRFBfVFJBSU5fUFJFX0VNUEhBU0lT X1NISUZUOworCisJaWYgKHZzd2luZyArIHByZW1waCA+IDMpCisJCXJldHVybjsKKyNpZmRlZiBD RFZfRkFTVF9MSU5LX1RSQUlOCisJcmV0dXJuOworI2VuZGlmCisJRFJNX0RFQlVHX0tNUygiVGVz dDJcbiIpOworCS8vcmV0dXJuIDsKKwlwc2Jfc2JfcmVzZXQoZGV2KTsKKwkvKiA7U3dpbmcgdm9s dGFnZSBwcm9ncmFtbWluZworICAgICAgICA7Z2Z4X2RwaW9fc2V0X3JlZygweGMwNTgsIDB4MDUw NTMxM0EpICovCisJcHNiX3NiX3dyaXRlKGRldiwgZGRpX3JlZy0+VlN3aW5nNSwgMHgwNTA1MzEz QSk7CisKKwkvKiA7Z2Z4X2RwaW9fc2V0X3JlZygweDgxNTQsIDB4NDM0MDYwNTUpICovCisJcHNi X3NiX3dyaXRlKGRldiwgZGRpX3JlZy0+VlN3aW5nMSwgMHg0MzQwNjA1NSk7CisKKwkvKiA7Z2Z4 X2RwaW9fc2V0X3JlZygweDgxNDgsIDB4NTUzMzg5NTQpCisJICogVGhlIFZTd2luZ19QcmVFbXBo IHRhYmxlIGlzIGFsc28gY29uc2lkZXJlZCBiYXNlZCBvbiB0aGUgdnN3aW5nL3ByZW1wCisJICov CisJaW5kZXggPSAodnN3aW5nICsgcHJlbXBoKSAqIDI7CisJaWYgKHByZW1waCA9PSAxICYmIHZz d2luZyA9PSAxKSB7CisJCXBzYl9zYl93cml0ZShkZXYsIGRkaV9yZWctPlZTd2luZzIsIDB4MDU1 NzM4OTU0KTsKKwl9IGVsc2UKKwkJcHNiX3NiX3dyaXRlKGRldiwgZGRpX3JlZy0+VlN3aW5nMiwg ZHBfdnN3aW5nX3ByZW1waF90YWJsZVtpbmRleF0pOworCisJLyogO2dmeF9kcGlvX3NldF9yZWco MHg4MTRjLCAweDQwODAyMDQwKSAqLworCWlmICgodnN3aW5nICsgcHJlbXBoKSA9PSBEUF9UUkFJ Tl9WT0xUQUdFX1NXSU5HXzEyMDApCisJCXBzYl9zYl93cml0ZShkZXYsIGRkaV9yZWctPlZTd2lu ZzMsIDB4NzA4MDIwNDApOworCWVsc2UKKwkJcHNiX3NiX3dyaXRlKGRldiwgZGRpX3JlZy0+VlN3 aW5nMywgMHg0MDgwMjA0MCk7CisKKwkvKiA7Z2Z4X2RwaW9fc2V0X3JlZygweDgxNTAsIDB4MmI0 MDU1NTUpICovCisJLy9wc2Jfc2Jfd3JpdGUoZGV2LCBkZGlfcmVnLT5WU3dpbmc0LCAweDJiNDA1 NTU1KTsKKworCS8qIDtnZnhfZHBpb19zZXRfcmVnKDB4ODE1NCwgMHhjMzQwNjA1NSkgKi8KKwlw c2Jfc2Jfd3JpdGUoZGV2LCBkZGlfcmVnLT5WU3dpbmcxLCAweGMzNDA2MDU1KTsKKworCS8qIDtQ cmUgZW1waGFzaXMgcHJvZ3JhbW1pbmcKKwkgKiA7Z2Z4X2RwaW9fc2V0X3JlZygweGMwMmMsIDB4 MWYwMzAwNDApCisJICovCisJcHNiX3NiX3dyaXRlKGRldiwgZGRpX3JlZy0+UHJlRW1waDEsIDB4 MWYwMzAwNDApOworCisJLyogO2dmeF9kcGlvX3NldF9yZWcoMHg4MTI0LCAweDAwMDA0MDAwKSAq LworCWluZGV4ID0gMiAqIHByZW1waCArIDE7CisJcHNiX3NiX3dyaXRlKGRldiwgZGRpX3JlZy0+ UHJlRW1waDIsIGRwX3Zzd2luZ19wcmVtcGhfdGFibGVbaW5kZXhdKTsKKwlyZXR1cm47CQorfQor CisKKy8qIEVuYWJsZSBjb3JyZXNwb25kaW5nIHBvcnQgYW5kIHN0YXJ0IHRyYWluaW5nIHBhdHRl cm4gMSAqLworc3RhdGljIHZvaWQKK3BzYl9pbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKHN0cnVj dCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IG91dHB1dC0+YmFzZS5kZXY7CisJc3RydWN0IHBzYl9pbnRlbF9kcCAqaW50ZWxfZHAgPSBvdXRw dXQtPmRldl9wcml2OworCWludCBpOworCXVpbnQ4X3Qgdm9sdGFnZTsKKwlib29sIGNsb2NrX3Jl Y292ZXJ5ID0gZmFsc2U7CisJaW50IHRyaWVzOworCXUzMiByZWc7CisJdWludDMyX3QgRFAgPSBp bnRlbF9kcC0+RFA7CisKKwlEUCB8PSBEUF9QT1JUX0VOOworCQlEUCAmPSB+RFBfTElOS19UUkFJ Tl9NQVNLOworCQkKKwkJcmVnID0gRFA7CQorCQlyZWcgfD0gRFBfTElOS19UUkFJTl9QQVRfMTsK KwkvKiBFbmFibGUgb3V0cHV0LCB3YWl0IGZvciBpdCB0byBiZWNvbWUgYWN0aXZlICovCisJUkVH X1dSSVRFKGludGVsX2RwLT5vdXRwdXRfcmVnLCByZWcpOworCVJFR19SRUFEKGludGVsX2RwLT5v dXRwdXRfcmVnKTsKKwlwc2JfaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisKKwlEUk1fREVC VUdfS01TKCJMaW5rIGNvbmZpZ1xuIik7CisJLyogV3JpdGUgdGhlIGxpbmsgY29uZmlndXJhdGlv biBkYXRhICovCisJcHNiX2ludGVsX2RwX2F1eF9uYXRpdmVfd3JpdGUob3V0cHV0LCBEUF9MSU5L X0JXX1NFVCwKKwkJCQkgIGludGVsX2RwLT5saW5rX2NvbmZpZ3VyYXRpb24sCisJCQkJICAyKTsK KworCW1lbXNldChpbnRlbF9kcC0+dHJhaW5fc2V0LCAwLCA0KTsKKwl2b2x0YWdlID0gMDsKKwl0 cmllcyA9IDA7CisJY2xvY2tfcmVjb3ZlcnkgPSBmYWxzZTsKKworCURSTV9ERUJVR19LTVMoIlN0 YXJ0IHRyYWluXG4iKTsKKwkJcmVnID0gRFAgfCBEUF9MSU5LX1RSQUlOX1BBVF8xOworCisKKwlm b3IgKDs7KSB7CisJCS8qIFVzZSBpbnRlbF9kcC0+dHJhaW5fc2V0WzBdIHRvIHNldCB0aGUgdm9s dGFnZSBhbmQgcHJlIGVtcGhhc2lzIHZhbHVlcyAqLworCisJCWlmICghcHNiX2ludGVsX2RwX3Nl dF9saW5rX3RyYWluKG91dHB1dCwgcmVnLCBEUF9UUkFJTklOR19QQVRURVJOXzEpKSB7CisJCQlE Uk1fREVCVUdfS01TKCJGYWlsdXJlIGluIGF1eC10cmFuc2ZlciBzZXR0aW5nIHBhdHRlcm4gMVxu Iik7CisJCX0KKwkJcHNiX2ludGVsX2RwX3NldF92c3dpbmdfcHJlbXBoKG91dHB1dCwgaW50ZWxf ZHAtPnRyYWluX3NldFswXSk7CisJCS8qIFNldCB0cmFpbmluZyBwYXR0ZXJuIDEgKi8KKworCQlw c2JfaW50ZWxfZHBsaW5rX3NldF9sZXZlbChvdXRwdXQsIERQX1RSQUlOSU5HX1BBVFRFUk5fMSk7 CisKKwkJdWRlbGF5KDIwMCk7CisJCWlmICghcHNiX2ludGVsX2RwX2dldF9saW5rX3N0YXR1cyhv dXRwdXQpKQorCQkJYnJlYWs7CisKKwkJaWYgKHBzYl9pbnRlbF9jbG9ja19yZWNvdmVyeV9vayhp bnRlbF9kcC0+bGlua19zdGF0dXMsIGludGVsX2RwLT5sYW5lX2NvdW50KSkgeworCQkJRFJNX0RF QlVHX0tNUygiUFQxIHRyYWluIGlzIGRvbmVcbiIpOworCQkJY2xvY2tfcmVjb3ZlcnkgPSB0cnVl OworCQkJYnJlYWs7CisJCX0KKworCQkvKiBDaGVjayB0byBzZWUgaWYgd2UndmUgdHJpZWQgdGhl IG1heCB2b2x0YWdlICovCisJCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9kcC0+bGFuZV9jb3VudDsg aSsrKQorCQkJaWYgKChpbnRlbF9kcC0+dHJhaW5fc2V0W2ldICYgRFBfVFJBSU5fTUFYX1NXSU5H X1JFQUNIRUQpID09IDApCisJCQkJYnJlYWs7CisJCWlmIChpID09IGludGVsX2RwLT5sYW5lX2Nv dW50KQorCQkJYnJlYWs7CisKKwkJLyogQ2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIHRyaWVkIHRoZSBz YW1lIHZvbHRhZ2UgNSB0aW1lcyAqLworCQlpZiAoKGludGVsX2RwLT50cmFpbl9zZXRbMF0gJiBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spID09IHZvbHRhZ2UpIHsKKwkJCSsrdHJpZXM7CisJ CQlpZiAodHJpZXMgPT0gNSkKKwkJCQlicmVhazsKKwkJfSBlbHNlCisJCQl0cmllcyA9IDA7CisJ CXZvbHRhZ2UgPSBpbnRlbF9kcC0+dHJhaW5fc2V0WzBdICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19NQVNLOworCisJCS8qIENvbXB1dGUgbmV3IGludGVsX2RwLT50cmFpbl9zZXQgYXMgcmVxdWVz dGVkIGJ5IHRhcmdldCAqLworCQlwc2JfaW50ZWxfZ2V0X2FkanVzdF90cmFpbihvdXRwdXQpOwor CisJfQorCisJaWYgKCFjbG9ja19yZWNvdmVyeSkgeworCQlEUk1fREVCVUdfS01TKCJmYWlsdXJl IGluIERQIHBhdHRlciAxIHRyYWluaW5nLCB0cmFpbiBzZXQgJXhcbiIsIGludGVsX2RwLT50cmFp bl9zZXRbMF0pOworCX0KKwkKKwlpbnRlbF9kcC0+RFAgPSBEUDsKK30KKworc3RhdGljIHZvaWQK K3BzYl9pbnRlbF9kcF9jb21wbGV0ZV9saW5rX3RyYWluKHN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0 ICpvdXRwdXQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG91dHB1dC0+YmFzZS5kZXY7 CisJc3RydWN0IHBzYl9pbnRlbF9kcCAqaW50ZWxfZHAgPSBvdXRwdXQtPmRldl9wcml2OworCWJv b2wgY2hhbm5lbF9lcSA9IGZhbHNlOworCWludCB0cmllcywgY3JfdHJpZXM7CisJdTMyIHJlZzsK Kwl1aW50MzJfdCBEUCA9IGludGVsX2RwLT5EUDsKKworCS8qIGNoYW5uZWwgZXF1YWxpemF0aW9u ICovCisJdHJpZXMgPSAwOworCWNyX3RyaWVzID0gMDsKKwljaGFubmVsX2VxID0gZmFsc2U7CisK KwlEUk1fREVCVUdfS01TKCJcbiIpOworCQlyZWcgPSBEUCB8IERQX0xJTktfVFJBSU5fUEFUXzI7 CisKKwlmb3IgKDs7KSB7CisJCS8qIGNoYW5uZWwgZXEgcGF0dGVybiAqLworCQlpZiAoIXBzYl9p bnRlbF9kcF9zZXRfbGlua190cmFpbihvdXRwdXQsIHJlZywKKwkJCQkJICAgICBEUF9UUkFJTklO R19QQVRURVJOXzIpKSB7CisJCQlEUk1fREVCVUdfS01TKCJGYWlsdXJlIGluIGF1eC10cmFuc2Zl ciBzZXR0aW5nIHBhdHRlcm4gMlxuIik7CisJCX0KKwkJLyogVXNlIGludGVsX2RwLT50cmFpbl9z ZXRbMF0gdG8gc2V0IHRoZSB2b2x0YWdlIGFuZCBwcmUgZW1waGFzaXMgdmFsdWVzICovCisKKwkJ aWYgKGNyX3RyaWVzID4gNSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdHJhaW4gRFAsIGFi b3J0aW5nXG4iKTsKKwkJCXBzYl9pbnRlbF9kcF9saW5rX2Rvd24ob3V0cHV0KTsKKwkJCWJyZWFr OworCQl9CisKKwkJcHNiX2ludGVsX2RwX3NldF92c3dpbmdfcHJlbXBoKG91dHB1dCwgaW50ZWxf ZHAtPnRyYWluX3NldFswXSk7CisKKwkJcHNiX2ludGVsX2RwbGlua19zZXRfbGV2ZWwob3V0cHV0 LCBEUF9UUkFJTklOR19QQVRURVJOXzIpOworCisJCXVkZWxheSgxMDAwKTsKKwkJaWYgKCFwc2Jf aW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKG91dHB1dCkpCisJCQlicmVhazsKKworCQkvKiBNYWtl IHN1cmUgY2xvY2sgaXMgc3RpbGwgb2sgKi8KKwkJaWYgKCFwc2JfaW50ZWxfY2xvY2tfcmVjb3Zl cnlfb2soaW50ZWxfZHAtPmxpbmtfc3RhdHVzLCBpbnRlbF9kcC0+bGFuZV9jb3VudCkpIHsKKwkJ CXBzYl9pbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKG91dHB1dCk7CisJCQljcl90cmllcysrOwor CQkJY29udGludWU7CisJCX0KKworCQlpZiAocHNiX2ludGVsX2NoYW5uZWxfZXFfb2sob3V0cHV0 KSkgeworCQkJRFJNX0RFQlVHX0tNUygiUFQyIHRyYWluIGlzIGRvbmVcbiIpOworCQkJY2hhbm5l bF9lcSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFRyeSA1IHRpbWVzLCB0aGVuIHRy eSBjbG9jayByZWNvdmVyeSBpZiB0aGF0IGZhaWxzICovCisJCWlmICh0cmllcyA+IDUpIHsKKwkJ CXBzYl9pbnRlbF9kcF9saW5rX2Rvd24ob3V0cHV0KTsKKwkJCXBzYl9pbnRlbF9kcF9zdGFydF9s aW5rX3RyYWluKG91dHB1dCk7CisJCQl0cmllcyA9IDA7CisJCQljcl90cmllcysrOworCQkJY29u dGludWU7CisJCX0KKworCQkvKiBDb21wdXRlIG5ldyBpbnRlbF9kcC0+dHJhaW5fc2V0IGFzIHJl cXVlc3RlZCBieSB0YXJnZXQgKi8KKwkJcHNiX2ludGVsX2dldF9hZGp1c3RfdHJhaW4ob3V0cHV0 KTsKKwkJKyt0cmllczsKKworCX0KKworCXJlZyA9IERQIHwgRFBfTElOS19UUkFJTl9PRkY7CisK KwlSRUdfV1JJVEUoaW50ZWxfZHAtPm91dHB1dF9yZWcsIHJlZyk7CisJUkVHX1JFQUQoaW50ZWxf ZHAtPm91dHB1dF9yZWcpOworCXBzYl9pbnRlbF9kcF9hdXhfbmF0aXZlX3dyaXRlXzEob3V0cHV0 LAorCQkJCSAgICBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwgRFBfVFJBSU5JTkdfUEFUVEVSTl9E SVNBQkxFKTsKK30KKworc3RhdGljIHZvaWQKK3BzYl9pbnRlbF9kcF9saW5rX2Rvd24oc3RydWN0 IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g b3V0cHV0LT5iYXNlLmRldjsKKwlzdHJ1Y3QgcHNiX2ludGVsX2RwICppbnRlbF9kcCA9IG91dHB1 dC0+ZGV2X3ByaXY7CisJdWludDMyX3QgRFAgPSBpbnRlbF9kcC0+RFA7CisKKwlpZiAoKFJFR19S RUFEKGludGVsX2RwLT5vdXRwdXRfcmVnKSAmIERQX1BPUlRfRU4pID09IDApCisJCXJldHVybjsK KworCURSTV9ERUJVR19LTVMoIlxuIik7CisKKworCXsKKwkJRFAgJj0gfkRQX0xJTktfVFJBSU5f TUFTSzsKKwkJUkVHX1dSSVRFKGludGVsX2RwLT5vdXRwdXRfcmVnLCBEUCB8IERQX0xJTktfVFJB SU5fUEFUX0lETEUpOworCX0KKwlSRUdfUkVBRChpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CisKKwlt c2xlZXAoMTcpOworCisJUkVHX1dSSVRFKGludGVsX2RwLT5vdXRwdXRfcmVnLCBEUCAmIH5EUF9Q T1JUX0VOKTsKKwlSRUdfUkVBRChpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Cit9CisKK3N0YXRpYyBl bnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitjZHZfZHBfZGV0ZWN0KHN0cnVjdCBwc2JfaW50ZWxf b3V0cHV0ICpvdXRwdXQpCit7CisJc3RydWN0IHBzYl9pbnRlbF9kcCAqaW50ZWxfZHAgPSBvdXRw dXQtPmRldl9wcml2OworCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOworCisJc3Rh dHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJaWYgKHBzYl9pbnRlbF9kcF9h dXhfbmF0aXZlX3JlYWQob3V0cHV0LCAweDAwMCwgaW50ZWxfZHAtPmRwY2QsCisJCQkJICAgICBz aXplb2YgKGludGVsX2RwLT5kcGNkKSkgPT0gc2l6ZW9mIChpbnRlbF9kcC0+ZHBjZCkpCisJewor CQlpZiAoaW50ZWxfZHAtPmRwY2RbRFBfRFBDRF9SRVZdICE9IDApCisJCQlzdGF0dXMgPSBjb25u ZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwl9CisJaWYgKHN0YXR1cyA9PSBjb25uZWN0b3Jfc3Rh dHVzX2Nvbm5lY3RlZCkKKwkJRFJNX0RFQlVHX0tNUygiRFBDRDogUmV2PSV4IExOX1JhdGU9JXgg TE5fQ05UPSV4IExOX0RPV05TUD0leFxuIiwKKwkJCWludGVsX2RwLT5kcGNkWzBdLCBpbnRlbF9k cC0+ZHBjZFsxXSwKKwkJCWludGVsX2RwLT5kcGNkWzJdLCBpbnRlbF9kcC0+ZHBjZFszXSk7CisJ cmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBVc2VzIENSVF9IT1RQTFVHX0VOIGFuZCBDUlRf SE9UUExVR19TVEFUIHRvIGRldGVjdCBEUCBjb25uZWN0aW9uLgorICoKKyAqIFxyZXR1cm4gdHJ1 ZSBpZiBEUCBwb3J0IGlzIGNvbm5lY3RlZC4KKyAqIFxyZXR1cm4gZmFsc2UgaWYgRFAgcG9ydCBp cyBkaXNjb25uZWN0ZWQuCisgKi8KK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitw c2JfaW50ZWxfZHBfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wg Zm9yY2UpCit7CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCA9IHRvX3BzYl9pbnRl bF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgcHNiX2ludGVsX2RwICppbnRlbF9kcCA9IG91 dHB1dC0+ZGV2X3ByaXY7CisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXM7CisJc3Ry dWN0IGVkaWQgKmVkaWQgPSBOVUxMOworCisJaW50ZWxfZHAtPmhhc19hdWRpbyA9IGZhbHNlOwor CisJc3RhdHVzID0gY2R2X2RwX2RldGVjdChvdXRwdXQpOworCWlmIChzdGF0dXMgIT0gY29ubmVj dG9yX3N0YXR1c19jb25uZWN0ZWQpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoaW50ZWxfZHAt PmZvcmNlX2F1ZGlvKSB7CisJCWludGVsX2RwLT5oYXNfYXVkaW8gPSBpbnRlbF9kcC0+Zm9yY2Vf YXVkaW8gPiAwOworCX0gZWxzZSB7CisJCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCAm aW50ZWxfZHAtPmFkYXB0ZXIpOworCQlpZiAoZWRpZCkgeworCQkJaW50ZWxfZHAtPmhhc19hdWRp byA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKwkJCWNvbm5lY3Rvci0+ZGlzcGxh eV9pbmZvLnJhd19lZGlkID0gTlVMTDsKKwkJCWtmcmVlKGVkaWQpOworCQl9CisJfQorCisJcmV0 dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0aWMgaW50IHBzYl9pbnRl bF9kcF9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1 Y3QgcHNiX2ludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9fcHNiX2ludGVsX291dHB1dChj b25uZWN0b3IpOworCXN0cnVjdCBwc2JfaW50ZWxfZHAgKmludGVsX2RwID0gaW50ZWxfb3V0cHV0 LT5kZXZfcHJpdjsKKwlzdHJ1Y3QgZWRpZCAqZWRpZCA9IE5VTEw7CisJaW50IHJldCA9IDA7CisK KworCWVkaWQgPSBkcm1fZ2V0X2VkaWQoJmludGVsX291dHB1dC0+YmFzZSwKKwkJCSAJJmludGVs X2RwLT5hZGFwdGVyKTsKKwlpZiAoZWRpZCkgeworCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRl X2VkaWRfcHJvcGVydHkoJmludGVsX291dHB1dC0+CisJCQkJCQkJYmFzZSwgZWRpZCk7CisJCXJl dCA9IGRybV9hZGRfZWRpZF9tb2RlcygmaW50ZWxfb3V0cHV0LT5iYXNlLCBlZGlkKTsKKwkJa2Zy ZWUoZWRpZCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wKK3BzYl9pbnRl bF9kcF9kZXRlY3RfYXVkaW8oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlz dHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqb3V0cHV0ID0gdG9fcHNiX2ludGVsX291dHB1dChjb25u ZWN0b3IpOworCXN0cnVjdCBwc2JfaW50ZWxfZHAgKmludGVsX2RwID0gb3V0cHV0LT5kZXZfcHJp djsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlib29sIGhhc19hdWRpbyA9IGZhbHNlOworCisJZWRp ZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsICZpbnRlbF9kcC0+YWRhcHRlcik7CisJaWYgKGVk aWQpIHsKKwkJaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCisJ CWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnJhd19lZGlkID0gTlVMTDsKKwkJa2ZyZWUoZWRpZCk7 CisJfQorCisJcmV0dXJuIGhhc19hdWRpbzsKK30KKworc3RhdGljIGludAorcHNiX2ludGVsX2Rw X3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkgICAgICBz dHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKKwkJICAgICAgdWludDY0X3QgdmFsKQorewor CXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gY29ubmVjdG9yLT5kZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQgPSB0b19wc2JfaW50ZWxf b3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IHBzYl9pbnRlbF9kcCAqaW50ZWxfZHAgPSBvdXRw dXQtPmRldl9wcml2OworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX3Byb3BlcnR5 X3NldF92YWx1ZShjb25uZWN0b3IsIHByb3BlcnR5LCB2YWwpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlpZiAocHJvcGVydHkgPT0gZGV2X3ByaXYtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5 KSB7CisJCWludCBpID0gdmFsOworCQlib29sIGhhc19hdWRpbzsKKworCQlpZiAoaSA9PSBpbnRl bF9kcC0+Zm9yY2VfYXVkaW8pCisJCQlyZXR1cm4gMDsKKworCQlpbnRlbF9kcC0+Zm9yY2VfYXVk aW8gPSBpOworCisJCWlmIChpID09IDApCisJCQloYXNfYXVkaW8gPSBwc2JfaW50ZWxfZHBfZGV0 ZWN0X2F1ZGlvKGNvbm5lY3Rvcik7CisJCWVsc2UKKwkJCWhhc19hdWRpbyA9IGkgPiAwOworCisJ CWlmIChoYXNfYXVkaW8gPT0gaW50ZWxfZHAtPmhhc19hdWRpbykKKwkJCXJldHVybiAwOworCisJ CWludGVsX2RwLT5oYXNfYXVkaW8gPSBoYXNfYXVkaW87CisJCWdvdG8gZG9uZTsKKwl9CisKKwlp ZiAocHJvcGVydHkgPT0gZGV2X3ByaXYtPmJyb2FkY2FzdF9yZ2JfcHJvcGVydHkpIHsKKwkJaWYg KHZhbCA9PSAhIWludGVsX2RwLT5jb2xvcl9yYW5nZSkKKwkJCXJldHVybiAwOworCisJCWludGVs X2RwLT5jb2xvcl9yYW5nZSA9IHZhbCA/IERQX0NPTE9SX1JBTkdFXzE2XzIzNSA6IDA7CisJCWdv dG8gZG9uZTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKKworZG9uZToKKwlpZiAob3V0cHV0LT5l bmMuY3J0YykgeworCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBvdXRwdXQtPmVuYy5jcnRjOwor CQlkcm1fY3J0Y19oZWxwZXJfc2V0X21vZGUoY3J0YywgJmNydGMtPm1vZGUsCisJCQkJCSBjcnRj LT54LCBjcnRjLT55LAorCQkJCQkgY3J0Yy0+ZmIpOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgdm9pZAorcHNiX2ludGVsX2RwX2Rlc3Ryb3kgKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCit7CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCA9IHRvX3BzYl9p bnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgcHNiX2ludGVsX2RwICppbnRlbF9kcCA9 IG91dHB1dC0+ZGV2X3ByaXY7CisKKwlpMmNfZGVsX2FkYXB0ZXIoJmludGVsX2RwLT5hZGFwdGVy KTsKKwlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOworCWRybV9jb25uZWN0 b3JfY2xlYW51cChjb25uZWN0b3IpOworCWtmcmVlKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyB2 b2lkIHBzYl9pbnRlbF9kcF9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQoreworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHBzYl9pbnRlbF9kcF9oZWxwZXJfZnVu Y3MgPSB7CisJLmRwbXMgPSBwc2JfaW50ZWxfZHBfZHBtcywKKwkubW9kZV9maXh1cCA9IHBzYl9p bnRlbF9kcF9tb2RlX2ZpeHVwLAorCS5wcmVwYXJlID0gcHNiX2ludGVsX2RwX3ByZXBhcmUsCisJ Lm1vZGVfc2V0ID0gcHNiX2ludGVsX2RwX21vZGVfc2V0LAorCS5jb21taXQgPSBwc2JfaW50ZWxf ZHBfY29tbWl0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNz IHBzYl9pbnRlbF9kcF9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1faGVscGVyX2Nv bm5lY3Rvcl9kcG1zLAorCS5kZXRlY3QgPSBwc2JfaW50ZWxfZHBfZGV0ZWN0LAorCS5maWxsX21v ZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5zZXRfcHJv cGVydHkgPSBwc2JfaW50ZWxfZHBfc2V0X3Byb3BlcnR5LAorCS5kZXN0cm95ID0gcHNiX2ludGVs X2RwX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzIHBzYl9pbnRlbF9kcF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRf bW9kZXMgPSBwc2JfaW50ZWxfZHBfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gcHNiX2ludGVs X2RwX21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IHBzYl9pbnRlbF9iZXN0X2VuY29kZXIs Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHBzYl9pbnRlbF9k cF9lbmNfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBwc2JfaW50ZWxfZHBfZW5jb2Rlcl9kZXN0cm95 LAorfTsKKworCitzdGF0aWMgdm9pZAorcHNiX2ludGVsX2RwX2FkZF9wcm9wZXJ0aWVzKHN0cnVj dCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQsIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCit7CisJcHNiX2ludGVsX2F0dGFjaF9mb3JjZV9hdWRpb19wcm9wZXJ0eShjb25uZWN0b3Ip OworCXBzYl9pbnRlbF9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShjb25uZWN0b3IpOwor fQorCit2b2lkCitwc2JfaW50ZWxfZHBfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1 Y3QgcHNiX2ludGVsX21vZGVfZGV2aWNlICptb2RlX2RldiwgaW50IG91dHB1dF9yZWcpCit7CisJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXI7CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQ7CisJc3Ry dWN0IHBzYl9pbnRlbF9kcCAqaW50ZWxfZHA7CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisJ aW50IHR5cGU7CisKKwlwc2JfaW50ZWxfb3V0cHV0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBz Yl9pbnRlbF9vdXRwdXQpICsKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBzYl9pbnRlbF9kcCks IEdGUF9LRVJORUwpOworCWlmICghcHNiX2ludGVsX291dHB1dCkKKwkJcmV0dXJuOworCisJaW50 ZWxfZHAgPSAoc3RydWN0IHBzYl9pbnRlbF9kcCAqKShwc2JfaW50ZWxfb3V0cHV0ICsgMSk7CisJ cHNiX2ludGVsX291dHB1dC0+bW9kZV9kZXYgPSBtb2RlX2RldjsKKwljb25uZWN0b3IgPSAmcHNi X2ludGVsX291dHB1dC0+YmFzZTsKKwllbmNvZGVyID0gJnBzYl9pbnRlbF9vdXRwdXQtPmVuYzsK Kwlwc2JfaW50ZWxfb3V0cHV0LT5kZXZfcHJpdj1pbnRlbF9kcDsKKwlpbnRlbF9kcC0+b3V0cHV0 ID0gcHNiX2ludGVsX291dHB1dDsKKworCWludGVsX2RwLT5vdXRwdXRfcmVnID0gb3V0cHV0X3Jl ZzsKKwkKKwl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0OworCXBzYl9pbnRl bF9vdXRwdXQtPnR5cGUgPSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQ7CisKKwlkcm1fY29ubmVj dG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZwc2JfaW50ZWxfZHBfY29ubmVjdG9yX2Z1bmNzLCB0 eXBlKTsKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmcHNiX2ludGVsX2Rw X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09O TkVDVE9SX1BPTExfSFBEOworCisJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IDA7CisJ Y29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSAwOworCisJZHJtX2VuY29kZXJfaW5pdChk ZXYsIGVuY29kZXIsICZwc2JfaW50ZWxfZHBfZW5jX2Z1bmNzLAorCQkJIERSTV9NT0RFX0VOQ09E RVJfVE1EUyk7CisJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmcHNiX2ludGVsX2Rw X2hlbHBlcl9mdW5jcyk7CisKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJnBz Yl9pbnRlbF9vdXRwdXQtPmJhc2UsCisJCQkJCSAgJnBzYl9pbnRlbF9vdXRwdXQtPmVuYyk7CisK Kwlkcm1fc3lzZnNfY29ubmVjdG9yX2FkZChjb25uZWN0b3IpOworCisJLyogU2V0IHVwIHRoZSBE REMgYnVzLiAqLworCXN3aXRjaCAob3V0cHV0X3JlZykgeworCQljYXNlIERQX0I6CisJCQluYW1l ID0gIkRQRERDLUIiOworCQkJcHNiX2ludGVsX291dHB1dC0+ZGRpX3NlbGVjdCA9IChEUF9NQVNL IHwgRERJMF9TRUxFQ1QpOworCQkJYnJlYWs7CisJCWNhc2UgRFBfQzoKKwkJCW5hbWUgPSAiRFBE REMtQyI7CisJCQlwc2JfaW50ZWxfb3V0cHV0LT5kZGlfc2VsZWN0ID0gKERQX01BU0sgfCBEREkx X1NFTEVDVCk7CisJCQlicmVhazsKKwl9CisKKwlwc2JfaW50ZWxfZHBfaTJjX2luaXQocHNiX2lu dGVsX291dHB1dCwgbmFtZSk7CisJcHNiX2ludGVsX2RwX2FkZF9wcm9wZXJ0aWVzKHBzYl9pbnRl bF9vdXRwdXQsIGNvbm5lY3Rvcik7CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9n bWE1MDAvcHNiX2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxf ZHJ2LmgKaW5kZXggN2IzNTdiMC4uNzMyMTRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9wc2JfaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2Jf aW50ZWxfZHJ2LmgKQEAgLTI5LDEwICsyOSw2IEBACiAgKiBEaXNwbGF5IHJlbGF0ZWQgc3R1ZmYK ICAqLwogCi0vKiBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBhbiBJeHh4IERWTyAqLwotLyogVGhl IGk4MzAtPmk4NjUgdXNlIG11bHRpcGxlIERWT3Mgd2l0aCBtdWx0aXBsZSBpMmNzICovCi0vKiB0 aGUgaTkxNSwgaTk0NSBoYXZlIGEgc2luZ2xlIHNEVk8gaTJjIGJ1cyAtIHdoaWNoIGlzIGRpZmZl cmVudCAqLwotI2RlZmluZSBNQVhfT1VUUFVUUyA2CiAvKiBtYXhpbXVtIGNvbm5lY3RvcnMgcGVy IGNydGNzIGluIHRoZSBtb2RlIHNldCAqLwogI2RlZmluZSBJTlRFTEZCX0NPTk5fTElNSVQgNAog CkBAIC02OSw2ICs2NSw4IEBACiAjZGVmaW5lIElOVEVMX09VVFBVVF9IRE1JIDYKICNkZWZpbmUg SU5URUxfT1VUUFVUX01JUEkgNwogI2RlZmluZSBJTlRFTF9PVVRQVVRfTUlQSTIgOAorI2RlZmlu ZSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQgOQorI2RlZmluZSBJTlRFTF9PVVRQVVRfRURQIDEw CiAKICNkZWZpbmUgSU5URUxfRFZPX0NISVBfTk9ORSAwCiAjZGVmaW5lIElOVEVMX0RWT19DSElQ X0xWRFMgMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfcmVn LmggYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9yZWcuaAppbmRleCA4ZThjOGVm Li5kMzA5MWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9y ZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9yZWcuaApAQCAtMTM0 Nyw1ICsxMzQ3LDE2MCBAQCBObyBzdGF0dXMgYml0cyBhcmUgY2hhbmdlZC4KICNkZWZpbmUgTEFO RV9QTExfRU5BQkxFCQkoMHgzIDw8IDIwKQogI2RlZmluZSBMQU5FX1BMTF9QSVBFKHApCSgoKHAp ID09IDApID8gKDEgPDwgMjEpIDogKDAgPDwgMjEpKQogCisjZGVmaW5lIERQX0IJCQkJMHg2NDEw MAorI2RlZmluZSBEUF9DCQkJCTB4NjQyMDAKKworI2RlZmluZSAgIERQX1BPUlRfRU4JCQkoMSA8 PCAzMSkKKyNkZWZpbmUgICBEUF9QSVBFQl9TRUxFQ1QJCSgxIDw8IDMwKQorI2RlZmluZSAgIERQ X1BJUEVfTUFTSwkJCSgxIDw8IDMwKQorCisvKiBMaW5rIHRyYWluaW5nIG1vZGUgLSBzZWxlY3Qg YSBzdWl0YWJsZSBtb2RlIGZvciBlYWNoIHN0YWdlICovCisjZGVmaW5lICAgRFBfTElOS19UUkFJ Tl9QQVRfMQkJKDAgPDwgMjgpCisjZGVmaW5lICAgRFBfTElOS19UUkFJTl9QQVRfMgkJKDEgPDwg MjgpCisjZGVmaW5lICAgRFBfTElOS19UUkFJTl9QQVRfSURMRQkoMiA8PCAyOCkKKyNkZWZpbmUg ICBEUF9MSU5LX1RSQUlOX09GRgkJKDMgPDwgMjgpCisjZGVmaW5lICAgRFBfTElOS19UUkFJTl9N QVNLCQkoMyA8PCAyOCkKKyNkZWZpbmUgICBEUF9MSU5LX1RSQUlOX1NISUZUCQkyOAorCisvKiBT aWduYWwgdm9sdGFnZXMuIFRoZXNlIGFyZSBtb3N0bHkgY29udHJvbGxlZCBieSB0aGUgb3RoZXIg ZW5kICovCisjZGVmaW5lICAgRFBfVk9MVEFHRV8wXzQJCSgwIDw8IDI1KQorI2RlZmluZSAgIERQ X1ZPTFRBR0VfMF82CQkoMSA8PCAyNSkKKyNkZWZpbmUgICBEUF9WT0xUQUdFXzBfOAkJKDIgPDwg MjUpCisjZGVmaW5lICAgRFBfVk9MVEFHRV8xXzIJCSgzIDw8IDI1KQorI2RlZmluZSAgIERQX1ZP TFRBR0VfTUFTSwkJKDcgPDwgMjUpCisjZGVmaW5lICAgRFBfVk9MVEFHRV9TSElGVAkJMjUKKwor LyogU2lnbmFsIHByZS1lbXBoYXNpcyBsZXZlbHMsIGxpa2Ugdm9sdGFnZXMsIHRoZSBvdGhlciBl bmQgdGVsbHMgdXMgd2hhdAorICogdGhleSB3YW50CisgKi8KKyNkZWZpbmUgICBEUF9QUkVfRU1Q SEFTSVNfMAkJKDAgPDwgMjIpCisjZGVmaW5lICAgRFBfUFJFX0VNUEhBU0lTXzNfNQkJKDEgPDwg MjIpCisjZGVmaW5lICAgRFBfUFJFX0VNUEhBU0lTXzYJCSgyIDw8IDIyKQorI2RlZmluZSAgIERQ X1BSRV9FTVBIQVNJU185XzUJCSgzIDw8IDIyKQorI2RlZmluZSAgIERQX1BSRV9FTVBIQVNJU19N QVNLCQkoNyA8PCAyMikKKyNkZWZpbmUgICBEUF9QUkVfRU1QSEFTSVNfU0hJRlQJCTIyCisKKy8q IEhvdyBtYW55IHdpcmVzIHRvIHVzZS4gSSBndWVzcyAzIHdhcyB0b28gaGFyZCAqLworI2RlZmlu ZSAgIERQX1BPUlRfV0lEVEhfMQkJKDAgPDwgMTkpCisjZGVmaW5lICAgRFBfUE9SVF9XSURUSF8y CQkoMSA8PCAxOSkKKyNkZWZpbmUgICBEUF9QT1JUX1dJRFRIXzQJCSgzIDw8IDE5KQorI2RlZmlu ZSAgIERQX1BPUlRfV0lEVEhfTUFTSwkJKDcgPDwgMTkpCisKKy8qIE15c3RpYyBEUENEIHZlcnNp b24gMS4xIHNwZWNpYWwgbW9kZSAqLworI2RlZmluZSAgIERQX0VOSEFOQ0VEX0ZSQU1JTkcJCSgx IDw8IDE4KQorCisvKiogbG9ja2VkIG9uY2UgcG9ydCBpcyBlbmFibGVkICovCisjZGVmaW5lICAg RFBfUE9SVF9SRVZFUlNBTAkJKDEgPDwgMTUpCisKKy8qKiBzZW5kcyB0aGUgY2xvY2sgb24gbGFu ZSAxNSBvZiB0aGUgUEVHIGZvciBkZWJ1ZyAqLworI2RlZmluZSAgIERQX0NMT0NLX09VVFBVVF9F TkFCTEUJKDEgPDwgMTMpCisKKyNkZWZpbmUgICBEUF9TQ1JBTUJMSU5HX0RJU0FCTEUJCSgxIDw8 IDEyKQorI2RlZmluZSAgIERQX1NDUkFNQkxJTkdfRElTQUJMRV9JUk9OTEFLRQkoMSA8PCA3KQor CisvKiogbGltaXQgUkdCIHZhbHVlcyB0byBhdm9pZCBjb25mdXNpbmcgVFZzICovCisjZGVmaW5l ICAgRFBfQ09MT1JfUkFOR0VfMTZfMjM1CQkoMSA8PCA4KQorCisvKiogVHVybiBvbiB0aGUgYXVk aW8gbGluayAqLworI2RlZmluZSAgIERQX0FVRElPX09VVFBVVF9FTkFCTEUJKDEgPDwgNikKKwor LyoqIHZzIGFuZCBocyBzeW5jIHBvbGFyaXR5ICovCisjZGVmaW5lICAgRFBfU1lOQ19WU19ISUdI CQkoMSA8PCA0KQorI2RlZmluZSAgIERQX1NZTkNfSFNfSElHSAkJKDEgPDwgMykKKworLyoqIEEg ZmFudGFzeSAqLworI2RlZmluZSAgIERQX0RFVEVDVEVECQkJKDEgPDwgMikKKworLyoqIFRoZSBh dXggY2hhbm5lbCBwcm92aWRlcyBhIHdheSB0byB0YWxrIHRvIHRoZQorICogc2lnbmFsIHNpbmsg Zm9yIEREQyBldGMuIE1heCBwYWNrZXQgc2l6ZSBzdXBwb3J0ZWQKKyAqIGlzIDIwIGJ5dGVzIGlu IGVhY2ggZGlyZWN0aW9uLCBoZW5jZSB0aGUgNSBmaXhlZAorICogZGF0YSByZWdpc3RlcnMKKyAq LworI2RlZmluZSBEUEJfQVVYX0NIX0NUTAkJCTB4NjQxMTAKKyNkZWZpbmUgRFBCX0FVWF9DSF9E QVRBMQkJMHg2NDExNAorI2RlZmluZSBEUEJfQVVYX0NIX0RBVEEyCQkweDY0MTE4CisjZGVmaW5l IERQQl9BVVhfQ0hfREFUQTMJCTB4NjQxMWMKKyNkZWZpbmUgRFBCX0FVWF9DSF9EQVRBNAkJMHg2 NDEyMAorI2RlZmluZSBEUEJfQVVYX0NIX0RBVEE1CQkweDY0MTI0CisKKyNkZWZpbmUgRFBDX0FV WF9DSF9DVEwJCQkweDY0MjEwCisjZGVmaW5lIERQQ19BVVhfQ0hfREFUQTEJCTB4NjQyMTQKKyNk ZWZpbmUgRFBDX0FVWF9DSF9EQVRBMgkJMHg2NDIxOAorI2RlZmluZSBEUENfQVVYX0NIX0RBVEEz CQkweDY0MjFjCisjZGVmaW5lIERQQ19BVVhfQ0hfREFUQTQJCTB4NjQyMjAKKyNkZWZpbmUgRFBD X0FVWF9DSF9EQVRBNQkJMHg2NDIyNAorCisjZGVmaW5lICAgRFBfQVVYX0NIX0NUTF9TRU5EX0JV U1kJICAgICgxIDw8IDMxKQorI2RlZmluZSAgIERQX0FVWF9DSF9DVExfRE9ORQkJICAgICgxIDw8 IDMwKQorI2RlZmluZSAgIERQX0FVWF9DSF9DVExfSU5URVJSVVBUCSAgICAoMSA8PCAyOSkKKyNk ZWZpbmUgICBEUF9BVVhfQ0hfQ1RMX1RJTUVfT1VUX0VSUk9SCSAgICAoMSA8PCAyOCkKKyNkZWZp bmUgICBEUF9BVVhfQ0hfQ1RMX1RJTUVfT1VUXzQwMHVzCSAgICAoMCA8PCAyNikKKyNkZWZpbmUg ICBEUF9BVVhfQ0hfQ1RMX1RJTUVfT1VUXzYwMHVzCSAgICAoMSA8PCAyNikKKyNkZWZpbmUgICBE UF9BVVhfQ0hfQ1RMX1RJTUVfT1VUXzgwMHVzCSAgICAoMiA8PCAyNikKKyNkZWZpbmUgICBEUF9B VVhfQ0hfQ1RMX1RJTUVfT1VUXzE2MDB1cwkgICAgKDMgPDwgMjYpCisjZGVmaW5lICAgRFBfQVVY X0NIX0NUTF9USU1FX09VVF9NQVNLCSAgICAoMyA8PCAyNikKKyNkZWZpbmUgICBEUF9BVVhfQ0hf Q1RMX1JFQ0VJVkVfRVJST1IJICAgICgxIDw8IDI1KQorI2RlZmluZSAgIERQX0FVWF9DSF9DVExf TUVTU0FHRV9TSVpFX01BU0sgICAgKDB4MWYgPDwgMjApCisjZGVmaW5lICAgRFBfQVVYX0NIX0NU TF9NRVNTQUdFX1NJWkVfU0hJRlQgICAyMAorI2RlZmluZSAgIERQX0FVWF9DSF9DVExfUFJFQ0hB UkdFXzJVU19NQVNLICAgKDB4ZiA8PCAxNikKKyNkZWZpbmUgICBEUF9BVVhfQ0hfQ1RMX1BSRUNI QVJHRV8yVVNfU0hJRlQgIDE2CisjZGVmaW5lICAgRFBfQVVYX0NIX0NUTF9BVVhfQUtTVl9TRUxF Q1QJICAgICgxIDw8IDE1KQorI2RlZmluZSAgIERQX0FVWF9DSF9DVExfTUFOQ0hFU1RFUl9URVNU CSAgICAoMSA8PCAxNCkKKyNkZWZpbmUgICBEUF9BVVhfQ0hfQ1RMX1NZTkNfVEVTVAkgICAgKDEg PDwgMTMpCisjZGVmaW5lICAgRFBfQVVYX0NIX0NUTF9ERUdMSVRDSF9URVNUCSAgICAoMSA8PCAx MikKKyNkZWZpbmUgICBEUF9BVVhfQ0hfQ1RMX1BSRUNIQVJHRV9URVNUCSAgICAoMSA8PCAxMSkK KyNkZWZpbmUgICBEUF9BVVhfQ0hfQ1RMX0JJVF9DTE9DS18yWF9NQVNLICAgICgweDdmZikKKyNk ZWZpbmUgICBEUF9BVVhfQ0hfQ1RMX0JJVF9DTE9DS18yWF9TSElGVCAgIDAKKworLyoKKyAqIENv bXB1dGluZyBHTUNIIE0gYW5kIE4gdmFsdWVzIGZvciB0aGUgRGlzcGxheSBQb3J0IGxpbmsKKyAq CisgKiBHTUNIIE0vTiA9IGRvdCBjbG9jayAqIGJ5dGVzIHBlciBwaXhlbCAvIGxzX2NsayAqICMg b2YgbGFuZXMKKyAqCisgKiBsc19jbGsgKHdlIGFzc3VtZSkgaXMgdGhlIERQIGxpbmsgY2xvY2sg KDEuNjIgb3IgMi43IEdIeikKKyAqCisgKiBUaGUgR01DSCB2YWx1ZSBpcyB1c2VkIGludGVybmFs bHkKKyAqCisgKiBieXRlc19wZXJfcGl4ZWwgaXMgdGhlIG51bWJlciBvZiBieXRlcyBjb21pbmcg b3V0IG9mIHRoZSBwbGFuZSwKKyAqIHdoaWNoIGlzIGFmdGVyIHRoZSBMVVRzLCBzbyB3ZSB3YW50 IHRoZSBieXRlcyBmb3Igb3VyIGNvbG9yIGZvcm1hdC4KKyAqIEZvciBvdXIgY3VycmVudCB1c2Fn ZSwgdGhpcyBpcyBhbHdheXMgMywgb25lIGJ5dGUgZm9yIFIsIEcgYW5kIEIuCisgKi8KKworI2Rl ZmluZSBfUElQRUFfR01DSF9EQVRBX00JCQkweDcwMDUwCisjZGVmaW5lIF9QSVBFQl9HTUNIX0RB VEFfTQkJCTB4NzEwNTAKKworLyogVHJhbnNmZXIgdW5pdCBzaXplIGZvciBkaXNwbGF5IHBvcnQg LSAxLCBkZWZhdWx0IGlzIDB4M2YgKGZvciBUVSBzaXplIDY0KSAqLworI2RlZmluZSAgIFBJUEVf R01DSF9EQVRBX01fVFVfU0laRV9NQVNLCQkoMHgzZiA8PCAyNSkKKyNkZWZpbmUgICBQSVBFX0dN Q0hfREFUQV9NX1RVX1NJWkVfU0hJRlQJMjUKKworI2RlZmluZSAgIFBJUEVfR01DSF9EQVRBX01f TUFTSwkJCSgweGZmZmZmZikKKworI2RlZmluZSBfUElQRUFfR01DSF9EQVRBX04JCQkweDcwMDU0 CisjZGVmaW5lIF9QSVBFQl9HTUNIX0RBVEFfTgkJCTB4NzEwNTQKKyNkZWZpbmUgICBQSVBFX0dN Q0hfREFUQV9OX01BU0sJCQkoMHhmZmZmZmYpCisKKy8qCisgKiBDb21wdXRpbmcgTGluayBNIGFu ZCBOIHZhbHVlcyBmb3IgdGhlIERpc3BsYXkgUG9ydCBsaW5rCisgKgorICogTGluayBNIC8gTiA9 IHBpeGVsX2Nsb2NrIC8gbHNfY2xrCisgKgorICogKHRoZSBEUCBzcGVjIGNhbGxzIHBpeGVsX2Ns b2NrIHRoZSAnc3RybV9jbGsnKQorICoKKyAqIFRoZSBMaW5rIHZhbHVlIGlzIHRyYW5zbWl0dGVk IGluIHRoZSBNYWluIFN0cmVhbQorICogQXR0cmlidXRlcyBhbmQgVkItSUQuCisgKi8KKworI2Rl ZmluZSBfUElQRUFfRFBfTElOS19NCQkJCTB4NzAwNjAKKyNkZWZpbmUgX1BJUEVCX0RQX0xJTktf TQkJCQkweDcxMDYwCisjZGVmaW5lICAgUElQRUFfRFBfTElOS19NX01BU0sJCQkoMHhmZmZmZmYp CisKKyNkZWZpbmUgX1BJUEVBX0RQX0xJTktfTgkJCQkweDcwMDY0CisjZGVmaW5lIF9QSVBFQl9E UF9MSU5LX04JCQkJMHg3MTA2NAorI2RlZmluZSAgIFBJUEVBX0RQX0xJTktfTl9NQVNLCQkJKDB4 ZmZmZmZmKQorCisjZGVmaW5lIFBJUEVfR01DSF9EQVRBX00ocGlwZSkgX1BJUEUocGlwZSwgX1BJ UEVBX0dNQ0hfREFUQV9NLCBfUElQRUJfR01DSF9EQVRBX00pCisjZGVmaW5lIFBJUEVfR01DSF9E QVRBX04ocGlwZSkgX1BJUEUocGlwZSwgX1BJUEVBX0dNQ0hfREFUQV9OLCBfUElQRUJfR01DSF9E QVRBX04pCisjZGVmaW5lIFBJUEVfRFBfTElOS19NKHBpcGUpIF9QSVBFKHBpcGUsIF9QSVBFQV9E UF9MSU5LX00sIF9QSVBFQl9EUF9MSU5LX00pCisjZGVmaW5lIFBJUEVfRFBfTElOS19OKHBpcGUp IF9QSVBFKHBpcGUsIF9QSVBFQV9EUF9MSU5LX04sIF9QSVBFQl9EUF9MSU5LX04pCiAKICNlbmRp ZgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK