From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from kripserver.net ([91.143.80.239]:42323 "EHLO mail.kripserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751659Ab2DDHVE (ORCPT ); Wed, 4 Apr 2012 03:21:04 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.kripserver.net (Postfix) with ESMTP id 527333AE0C8 for ; Wed, 4 Apr 2012 07:12:48 +0000 (UTC) Received: from mail.kripserver.net ([91.143.80.239]) by localhost (mail.kripserver.net [127.0.0.1]) (amavisd-new, port 10024) with LMTP id jmgDTkCNuEZy for ; Wed, 4 Apr 2012 07:12:42 +0000 (UTC) Received: from [192.168.189.220] (p4FD49133.dip0.t-ipconnect.de [79.212.145.51]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kripserver.net (Postfix) with ESMTPSA id 290FB3AE09C for ; Wed, 4 Apr 2012 07:12:39 +0000 (UTC) Message-ID: <4F7BF437.4090206@kripserver.net> Date: Wed, 04 Apr 2012 09:11:51 +0200 From: Jannis MIME-Version: 1.0 To: linux-media@vger.kernel.org Subject: [PATCH] Add support for TechniSat SkyStar S2 / CX24120-13Z frontend Content-Type: multipart/mixed; boundary="------------080201090607070703070100" Sender: linux-media-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------080201090607070703070100 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi all, some (longer) time ago, I posted to this list concerning the CX24120-frontend (http://www.spinics.net/lists/linux-media/msg33717.html). By now I modified the patch to work with linux-3.4-r1 (after the DVB-interface changes): [ 2.434181] b2c2-flexcop: B2C2 FlexcopII/II(b)/III digital TV receiver chip loaded successfully [ 2.434240] flexcop-pci: will use the HW PID filter. [ 2.434242] flexcop-pci: card revision 2 [ 2.438105] DVB: registering new adapter (FlexCop Digital TV device) [ 2.440018] b2c2-flexcop: MAC address = 00:08:c9:e0:87:57 [ 2.440024] CX24120: cx24120_attach: -> Conexant cx24120/cx24118 - DVBS/S2 Satellite demod/tuner [ 2.440025] CX24120: cx24120_attach: -> Driver version: 'SVT - 0.0.4a 03.04.2012' [ 2.440149] CX24120: cx24120_attach: -> Demod CX24120 rev. 0x07 detected. [ 2.440150] CX24120: cx24120_attach: -> Conexant cx24120/cx24118 - DVBS/S2 Satellite demod/tuner ATTACHED. [ 2.440440] b2c2-flexcop: ISL6421 successfully attached. [ 2.440440] b2c2-flexcop: found 'Conexant CX24120/CX24118' . [ 2.440442] DVB: registering adapter 0 frontend 0 (Conexant CX24120/CX24118)... [ 2.440648] b2c2-flexcop: initialization of 'Sky2PC/SkyStar S2 DVB-S/S2 rev 3.3' at the 'PCI' bus controlled by a 'FlexCopIIb' complete As stated in the original message, the patch is not written by me, the author is Sergey Tyurin, I just modified it so it keeps working with current kernels. Since I don't know an appropiate location for publishing this, I thought this is best sent upstream. This patch was tested with some channels (SDTV, HDTV and audio only (radio)) from Astra-19.2E in Europe. If you have any comments abouth things that stop the patch from going upstream, please feel free to tell me and I'll see if I can change them. Best regards, Jannis Achstetter --------------080201090607070703070100 Content-Type: text/plain; charset=UTF-8; name="S2lip-cx24120_3.4-r1.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="S2lip-cx24120_3.4-r1.diff" ZGlmZiAtTnVyRWJCdyAtLXN0cmlwLXRyYWlsaW5nLWNyIGxpbnV4LTMuNC1yMS9kcml2ZXJz L21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmggbGludXgtMy40LXIxLVMyL2RyaXZl cnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaAotLS0gbGludXgtMy40LXIxL2Ry aXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaAkyMDEyLTA0LTAzIDE1OjIz OjQ0LjgyNDE0MzQ5NSArMDQwMAorKysgbGludXgtMy40LXIxLVMyL2RyaXZlcnMvbWVkaWEv ZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaAkyMDEyLTA0LTAzIDE1OjI2OjQwLjc1NjE0MDEx NiArMDQwMApAQCAtOTEsNiArOTEsOCBAQAogCWludCBmZWVkY291bnQ7CiAJaW50IHBpZF9m aWx0ZXJpbmc7CiAJaW50IGZ1bGx0c19zdHJlYW1pbmdfc3RhdGU7CisJLyogdGhlIHN0cmVh bSB3aWxsIGJlIGFjdGl2YXRlZCBieSBhbiBleHRlcm5hbGx5IChieSB0aGUgZmUgZm9yIGV4 YW1wbGUpICovCisJaW50IG5lZWRfZXh0ZXJuYWxfc3RyZWFtX2NvbnRyb2w7CiAKIAkvKiBi dXMgc3BlY2lmaWMgY2FsbGJhY2tzICovCiAJZmxleGNvcF9pYmlfdmFsdWUoKnJlYWRfaWJp X3JlZykgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqLApAQCAtMTc3LDYgKzE3OSw4IEBACiAJ CXN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCwgaW50IG9ub2ZmKTsKIHZvaWQg ZmxleGNvcF9od19maWx0ZXJfaW5pdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKTsKIAor ZXh0ZXJuIHZvaWQgZmxleGNvcF9leHRlcm5hbF9zdHJlYW1fY29udHJvbChzdHJ1Y3QgZHZi X2Zyb250ZW5kICpmZSwgdTggb25vZmYpOworCiB2b2lkIGZsZXhjb3Bfc21jX2N0cmwoc3Ry dWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKTsKIAogdm9pZCBmbGV4Y29wX3Nl dF9tYWNfZmlsdGVyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHU4IG1hY1s2XSk7CmRp ZmYgLU51ckViQncgLS1zdHJpcC10cmFpbGluZy1jciBsaW51eC0zLjQtcjEvZHJpdmVycy9t ZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMgbGludXgtMy40LXIxLVMyL2RyaXZl cnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCi0tLSBsaW51eC0zLjQtcjEv ZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMJMjAxMi0wNC0wMyAx NToyMzo0NC44MjgxNDMzODggKzA0MDAKKysrIGxpbnV4LTMuNC1yMS1TMi9kcml2ZXJzL21l ZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYwkyMDEyLTA0LTAzIDE1OjI2OjQwLjc2 MDE0MTUxMyArMDQwMApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgImN4MjQxMTMuaCIK ICNpbmNsdWRlICJjeDI0MTIzLmgiCiAjaW5jbHVkZSAiaXNsNjQyMS5oIgorI2luY2x1ZGUg ImN4MjQxMjAuaCIKICNpbmNsdWRlICJtdDM1Mi5oIgogI2luY2x1ZGUgImJjbTM1MTAuaCIK ICNpbmNsdWRlICJueHQyMDB4LmgiCkBAIC0yNiw2ICsyNywxNSBAQAogI2RlZmluZSBGRV9T VVBQT1JURUQoZmUpIChkZWZpbmVkKENPTkZJR19EVkJfIyNmZSkgfHwgXAogCShkZWZpbmVk KENPTkZJR19EVkJfIyNmZSMjX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKSkKIAorI2lm IEZFX1NVUFBPUlRFRChCQ00zNTEwKSB8fCBGRV9TVVBQT1JURUQoQ1gyNDEyMCkKK3N0YXRp YyBpbnQgZmxleGNvcF9mZV9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQg KmZlLAorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3LCBjaGFyKiBuYW1lKQoreworCXN0 cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBmZS0+ZHZiLT5wcml2OworCXJldHVybiByZXF1 ZXN0X2Zpcm13YXJlKGZ3LCBuYW1lLCBmYy0+ZGV2KTsKK30KKyNlbmRpZgorCiAvKiBsbmIg Y29udHJvbCAqLwogI2lmIEZFX1NVUFBPUlRFRChNVDMxMikgfHwgRkVfU1VQUE9SVEVEKFNU VjAyOTkpCiBzdGF0aWMgaW50IGZsZXhjb3Bfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9u dGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKQEAgLTQ0NSwxMyArNDU1LDYg QEAKIAogLyogQWlyU3RhciBBVFNDIDFzdCBnZW5lcmF0aW9uICovCiAjaWYgRkVfU1VQUE9S VEVEKEJDTTM1MTApCi1zdGF0aWMgaW50IGZsZXhjb3BfZmVfcmVxdWVzdF9maXJtd2FyZShz dHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdywg Y2hhciogbmFtZSkKLXsKLQlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjID0gZmUtPmR2Yi0+ cHJpdjsKLQlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZShmdywgbmFtZSwgZmMtPmRldik7Ci19 Ci0KIHN0YXRpYyBzdHJ1Y3QgYmNtMzUxMF9jb25maWcgYWlyMnBjX2F0c2NfZmlyc3RfZ2Vu X2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyAgICA9IDB4MGYsCiAJLnJlcXVlc3RfZmly bXdhcmUgPSBmbGV4Y29wX2ZlX3JlcXVlc3RfZmlybXdhcmUsCkBAIC02MTksMTAgKzYyMiw0 MCBAQAogI2RlZmluZSBjYWJsZXN0YXIyX2F0dGFjaCBOVUxMCiAjZW5kaWYKIAorLyogU2t5 U3RhciBTMiBQQ0kgRFZCLVMvUzIgY2FyZCBiYXNlZCBvbiBDb25leGFudCBjeDI0MTIwL2N4 MjQxMTggKi8KKyNpZiBGRV9TVVBQT1JURUQoQ1gyNDEyMCkgJiYgRkVfU1VQUE9SVEVEKElT TDY0MjEpCitzdGF0aWMgY29uc3Qgc3RydWN0IGN4MjQxMjBfY29uZmlnIHNreXN0YXIyX3Jl djNfM19jeDI0MTIwX2NvbmZpZyA9IHsKKwkuaTJjX2FkZHIgPSAweDU1LAorCS5yZXF1ZXN0 X2Zpcm13YXJlID0gZmxleGNvcF9mZV9yZXF1ZXN0X2Zpcm13YXJlLAorfTsKKworc3RhdGlj IGludCBza3lzdGFyUzJfcmV2MzNfYXR0YWNoKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMs IHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworLy8Jc3RydWN0IGR2Yl9mcm9udGVuZF9v cHMgKm9wczsKKwkKKwlmYy0+ZmUgPSBkdmJfYXR0YWNoKGN4MjQxMjBfYXR0YWNoLAorCQkm c2t5c3RhcjJfcmV2M18zX2N4MjQxMjBfY29uZmlnLCBpMmMpOworCWlmIChmYy0+ZmUgPT0g TlVMTCkgcmV0dXJuIDA7CisJZmMtPmRldl90eXBlID0gRkNfU0tZUzJfUkVWMzM7CisJZmMt PmZjX2kyY19hZGFwWzJdLm5vX2Jhc2VfYWRkciA9IDE7CisJaWYgKCAoZHZiX2F0dGFjaChp c2w2NDIxX2F0dGFjaCwgZmMtPmZlLAorCQkmZmMtPmZjX2kyY19hZGFwWzJdLmkyY19hZGFw LCAweDA4LCAwLCAwKSA9PSBOVUxMKSApIHsKKwkJZXJyKCJJU0w2NDIxIGNvdWxkIE5PVCBi ZSBhdHRhY2hlZCEiKTsKKwkJcmV0dXJuIDA7CisJfQorCWluZm8oIklTTDY0MjEgc3VjY2Vz c2Z1bGx5IGF0dGFjaGVkLiIpOworLy8Jb3BzID0gJmZjLT5mZS0+b3BzOworCXJldHVybiAx OworfQorI2Vsc2UKKyNkZWZpbmUgc2t5c3RhclMyX3JldjMzX2F0dGFjaCBOVUxMCisjZW5k aWYKKwogc3RhdGljIHN0cnVjdCB7CiAJZmxleGNvcF9kZXZpY2VfdHlwZV90IHR5cGU7CiAJ aW50ICgqYXR0YWNoKShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKiwgc3RydWN0IGkyY19hZGFw dGVyICopOwogfSBmbGV4Y29wX2Zyb250ZW5kc1tdID0geworCXsgRkNfU0tZUzJfUkVWMzMs IHNreXN0YXJTMl9yZXYzM19hdHRhY2ggfSwKIAl7IEZDX1NLWV9SRVYyNywgc2t5c3RhcjJf cmV2MjdfYXR0YWNoIH0sCiAJeyBGQ19TS1lfUkVWMjgsIHNreXN0YXIyX3JldjI4X2F0dGFj aCB9LAogCXsgRkNfU0tZX1JFVjI2LCBza3lzdGFyMl9yZXYyNl9hdHRhY2ggfSwKZGlmZiAt TnVyRWJCdyAtLXN0cmlwLXRyYWlsaW5nLWNyIGxpbnV4LTMuNC1yMS9kcml2ZXJzL21lZGlh L2R2Yi9iMmMyL2ZsZXhjb3AtaHctZmlsdGVyLmMgbGludXgtMy40LXIxLVMyL2RyaXZlcnMv bWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYwotLS0gbGludXgtMy40LXIxL2Ry aXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYwkyMDEyLTA0LTAzIDE1 OjIzOjQ0LjgyODE0MzM4OCArMDQwMAorKysgbGludXgtMy40LXIxLVMyL2RyaXZlcnMvbWVk aWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYwkyMDEyLTA0LTAzIDE1OjI2OjQwLjc2 MDE0MTUxMyArMDQwMApAQCAtMTEsNiArMTEsMTIgQEAKIAlkZWJfdHMoInJjdl9kYXRhIGlz IG5vdzogJyVzJ1xuIiwgb25vZmYgPyAib24iIDogIm9mZiIpOwogfQogCit2b2lkIGZsZXhj b3BfZXh0ZXJuYWxfc3RyZWFtX2NvbnRyb2woc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4 IG9ub2ZmKQoreworCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBmZS0+ZHZiLT5wcml2 OworCWZsZXhjb3BfcmN2X2RhdGFfY3RybChmYywgb25vZmYpOworfQorCiB2b2lkIGZsZXhj b3Bfc21jX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQogewog CWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCwgU01DX0VuYWJsZV9zaWcsIG9ub2Zm KTsKQEAgLTE5OSw2ICsyMDUsNyBAQAogCiAJLyogaWYgaXQgd2FzIHRoZSBmaXJzdCBvciBs YXN0IGZlZWQgcmVxdWVzdCBjaGFuZ2UgdGhlIHN0cmVhbS1zdGF0dXMgKi8KIAlpZiAoZmMt PmZlZWRjb3VudCA9PSBvbm9mZikgeworCQlpZiAoIWZjLT5uZWVkX2V4dGVybmFsX3N0cmVh bV9jb250cm9sKQogCQlmbGV4Y29wX3Jjdl9kYXRhX2N0cmwoZmMsIG9ub2ZmKTsKIAkJaWYg KGZjLT5zdHJlYW1fY29udHJvbCkgLyogZGV2aWNlIHNwZWNpZmljIHN0cmVhbSBjb250cm9s ICovCiAJCQlmYy0+c3RyZWFtX2NvbnRyb2woZmMsIG9ub2ZmKTsKZGlmZiAtTnVyRWJCdyAt LXN0cmlwLXRyYWlsaW5nLWNyIGxpbnV4LTMuNC1yMS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMy L2ZsZXhjb3AtbWlzYy5jIGxpbnV4LTMuNC1yMS1TMi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMy L2ZsZXhjb3AtbWlzYy5jCi0tLSBsaW51eC0zLjQtcjEvZHJpdmVycy9tZWRpYS9kdmIvYjJj Mi9mbGV4Y29wLW1pc2MuYwkyMDEyLTA0LTAzIDE1OjIzOjQ0LjgzMjE0MzI4MCArMDQwMAor KysgbGludXgtMy40LXIxLVMyL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNj LmMJMjAxMi0wNC0wMyAxNToyNjo0MC43NjAxNDE1MTMgKzA0MDAKQEAgLTU2LDYgKzU2LDcg QEAKIAlbRkNfU0tZX1JFVjI2XQk9ICJTa3kyUEMvU2t5U3RhciAyIERWQi1TIHJldiAyLjYi LAogCVtGQ19TS1lfUkVWMjddCT0gIlNreTJQQy9Ta3lTdGFyIDIgRFZCLVMgcmV2IDIuN2Ev dSIsCiAJW0ZDX1NLWV9SRVYyOF0JPSAiU2t5MlBDL1NreVN0YXIgMiBEVkItUyByZXYgMi44 IiwKKwlbRkNfU0tZUzJfUkVWMzNdPSAiU2t5MlBDL1NreVN0YXIgUzIgRFZCLVMvUzIgcmV2 IDMuMyIsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqZmxleGNvcF9idXNfbmFtZXNbXSA9 IHsKZGlmZiAtTnVyRWJCdyAtLXN0cmlwLXRyYWlsaW5nLWNyIGxpbnV4LTMuNC1yMS9kcml2 ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmggbGludXgtMy40LXIxLVMyL2RyaXZl cnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaAotLS0gbGludXgtMy40LXIxL2RyaXZl cnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaAkyMDEyLTA0LTAzIDE1OjIzOjQ0Ljgz MjE0MzI4MCArMDQwMAorKysgbGludXgtMy40LXIxLVMyL2RyaXZlcnMvbWVkaWEvZHZiL2Iy YzIvZmxleGNvcC1yZWcuaAkyMDEyLTA0LTAzIDE1OjI2OjQwLjc2MDE0MTUxMyArMDQwMApA QCAtMjQsNiArMjQsNyBAQAogCUZDX1NLWV9SRVYyNiwKIAlGQ19TS1lfUkVWMjcsCiAJRkNf U0tZX1JFVjI4LAorCUZDX1NLWVMyX1JFVjMzLAogfSBmbGV4Y29wX2RldmljZV90eXBlX3Q7 CiAKIHR5cGVkZWYgZW51bSB7CmRpZmYgLU51ckViQncgLS1zdHJpcC10cmFpbGluZy1jciBs aW51eC0zLjQtcjEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnIGxpbnV4LTMuNC1y MS1TMi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKLS0tIGxpbnV4LTMuNC1yMS9k cml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcJMjAxMi0wNC0wMyAxNToyMzo0NC44MjQx NDM0OTUgKzA0MDAKKysrIGxpbnV4LTMuNC1yMS1TMi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMy L0tjb25maWcJMjAxMi0wNC0wMyAxNToyNjo0MC43NjAxNDE1MTMgKzA0MDAKQEAgLTEsNiAr MSw3IEBACiBjb25maWcgRFZCX0IyQzJfRkxFWENPUAogCXRyaXN0YXRlICJUZWNobmlzYXQv QjJDMiBGbGV4Q29wSUkoYikgYW5kIEZsZXhDb3BJSUkgYWRhcHRlcnMiCiAJZGVwZW5kcyBv biBEVkJfQ09SRSAmJiBJMkMKKwlzZWxlY3QgRFZCX0NYMjQxMjAgaWYgIURWQl9GRV9DVVNU T01JU0UKIAlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBE VkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTVQzNTIgaWYg IURWQl9GRV9DVVNUT01JU0UKZGlmZiAtTnVyRWJCdyAtLXN0cmlwLXRyYWlsaW5nLWNyIGxp bnV4LTMuNC1yMS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMC5jIGxpbnV4 LTMuNC1yMS1TMi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMC5jCi0tLSBs aW51eC0zLjQtcjEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjAuYwkxOTcw LTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMAorKysgbGludXgtMy40LXIxLVMyL2Ry aXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIwLmMJMjAxMi0wNC0wMyAxNjoxMDo1 OS4wMDAwMDAwMDAgKzA0MDAKQEAgLTAsMCArMSwxMDUzIEBACisvKgkKKyAgICBDb25leGFu dCBjeDI0MTIwL2N4MjQxMTggLSBEVkJTL1MyIFNhdGVsbGl0ZSBkZW1vZC90dW5lciBkcml2 ZXIKKwlWZXJzaW9uIDAuMC40YQkwMy4wNC4yMDEyCisJCisJQ29weXJpZ2h0IChDKSAyMDA5 IFNlcmdleSBUeXVyaW4gPGZvcnVtLmZyZWUteC5kZT4KKwlVcGRhdGVkIDIwMTIgYnkgSmFu bmlzIEFjaHN0ZXR0ZXIgPGphbm5pc19hY2hzdGV0dGVyQHdlYi5kZT4KKworICAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAg IEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwg VVNBLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9t b2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51 eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImN4 MjQxMjAuaCIKKyNpbmNsdWRlICJjeDI0MTIwX2NvbnN0LmgiCisKKy8vPT09PT09PT09PT09 PT09PT09PT09PT09PT0KKyNkZWZpbmUgZGJnaW5mbyhhcmdzLi4uKSBkbyB7IGlmKGN4MjQx MjBfZGVidWcpIHsgcHJpbnRrKEtFUk5fREVCVUcgIkNYMjQxMjA6ICVzOiA+Pj4gIiwgX19m dW5jX18pOyBcCisJCQlwcmludGsoYXJncyk7IH0gIH0gd2hpbGUgKDApCisjZGVmaW5lIGlu Zm8oYXJncy4uLikgZG8geyBwcmludGsoS0VSTl9JTkZPICJDWDI0MTIwOiAlczogLT4gIiwg X19mdW5jX18pOyBcCisJCQlwcmludGsoYXJncyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGVy cihhcmdzLi4uKSBkbyB7ICBwcmludGsoS0VSTl9FUlIgIkNYMjQxMjA6ICVzOiAjIyMgRVJS T1I6ICIsIF9fZnVuY19fKTsgXAorCQkJcHJpbnRrKGFyZ3MpOyB9IHdoaWxlICgwKQorLy89 PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzdGF0aWMgaW50IGN4MjQxMjBfZGVidWc9 MDsKK3N0YXRpYyBpbnQgcmVnX2RlYnVnPTA7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBG cm9udGVuZCBtb2R1bGUgZm9yIENvbmV4YW50IENYMjQxMjAvQ1gyNDExOCBoYXJkd2FyZSIp OworbW9kdWxlX3BhcmFtKGN4MjQxMjBfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFS TV9ERVNDKGN4MjQxMjBfZGVidWcsICJBY3RpdmF0ZXMgZnJvbnRlbmQgZGVidWdnaW5nIChk ZWZhdWx0OjApIik7CisKKy8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3Ry dWN0IGN4MjQxMjBfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCWNvbnN0 IHN0cnVjdCBjeDI0MTIwX2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBkdmJfZnJvbnRlbmQg ZnJvbnRlbmQ7CisJdTggbmVlZF9zZXRfbXBlZ19vdXQ7CisJdTggYXR0YWNoZWQ7CisJdTgg ZHZiX3MyX21vZGU7CisJdTggY29sZF9pbml0OwkKK307IAorLy8gIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gIyMjIyBDb21tYW5kIG1lc3NhZ2UgdG8gZmly bXdhcmUgIyMjIworc3RydWN0IGN4MjQxMjBfY21kIHsJCQkvLyB0b3RhbCBzaXplID0gMzYK Kwl1OCBpZDsJCQkJCQkvLyBbMDBdIC0gbWVzc2FnZSBpZAorCXU4IGFyZ1szMF07CQkJCQkv LyBbMDRdIC0gbWVzc2FnZSBmaXJzdCBieXRlCisJdTggbGVuOwkJCQkJCS8vIFszNF0gLSBt ZXNzYWdlIGxlbmdoIG9yIGZpcnN0IHJlZ2lzdGVycyB0byByZWFkCisJdTggcmVnOwkJCQkJ CS8vIFszNV0gLSBudW1iZXIgb2YgcmVnaXN0ZXJzIHRvIHJlYWQKK307CisKKy8vPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorc3RhdGljIGludCBjeDI0MTIwX3JlYWRyZWcoc3RydWN0IGN4MjQxMjBfc3Rh dGUgKnN0YXRlLCB1OCByZWcpIAoreworCWludCByZXQ7CisJdTggYnVmID0gMDsKKwlzdHJ1 Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeyAJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5pMmNf YWRkciwKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0gMSwKKwkJCS5idWYgPSAmcmVnCX0s CisJCQkKKwkJeyAJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5pMmNfYWRkciwKKwkJCS5mbGFn cyA9IEkyQ19NX1JELAorCQkJLmxlbiA9IDEsCisJCQkuYnVmID0gJmJ1Zgl9CisJfTsKKwly ZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKTsKKwlpZiAocmV0ICE9IDIp IHsKKwkJZXJyKCJSZWFkIGVycm9yOiByZWc9MHglMDJ4LCAgcmV0PTB4JTAyeClcbiIsIHJl ZywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKHJlZ19kZWJ1ZykgZGJnaW5mbygi cmVnPTB4JTAyeDsgZGF0YT0weCUwMnhcbiIsIHJlZywgYnVmKTsKKwlyZXR1cm4gYnVmOwor fSAvLyBlbmQgY3gyNDEyMF9yZWFkcmVnCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbnQg Y3gyNDEyMF93cml0ZXJlZyhzdHJ1Y3QgY3gyNDEyMF9zdGF0ZSAqc3RhdGUsIHU4IHJlZywg dTggZGF0YSkgCit7CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OworCXN0cnVjdCBpMmNf bXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5pMmNfYWRkciwgCisJCS5m bGFncyA9IDAsIAorCQkuYnVmID0gYnVmLCAKKwkJLmxlbiA9IDIgfTsKKwlpbnQgcmV0Owor CXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwlpZiAocmV0ICE9 IDEpIHsKKwkJZXJyKCJXcml0ZSBlcnJvcjogaTJjX3dyaXRlIGVycm9yKGVyciA9PSAlaSwg MHglMDJ4OiAweCUwMngpXG4iLCByZXQsIHJlZywgZGF0YSk7CisJCXJldHVybiByZXQ7CisJ fQorCWlmIChyZWdfZGVidWcpIGRiZ2luZm8oInJlZz0weCUwMng7IGRhdGE9MHglMDJ4XG4i LCByZWcsIGRhdGEpOworCXJldHVybiAwOworfSAvLyBlbmQgY3gyNDEyMF93cml0ZXJlZwor Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitzdGF0aWMgaW50IGN4MjQxMjBfd3JpdGVyZWdOKHN0cnVjdCBj eDI0MTIwX3N0YXRlICpzdGF0ZSwgdTggcmVnLCBjb25zdCB1OCAqdmFsdWVzLCB1MTYgbGVu LCB1OCBpbmNyKQoreworCXU4IGJ1Zls1XTsgLyogbWF4aW11bSA0IGRhdGEgYnl0ZXMgYXQg b25jZSAtIGZsZXhjb3AgbGltaXRhdGlvbiAodmVyeSBsaW1pdGVkIGkyYy1pbnRlcmZhY2Ug dGhpcyBvbmUpICovCisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHN0YXRl LT5jb25maWctPmkyY19hZGRyLCAKKwkJLmZsYWdzID0gMCwgCisJCS5idWYgPSBidWYsIAor CQkubGVuID0gbGVuIH07CisJaW50IHJldDsKKworCWRvIHsKKwkJYnVmWzBdID0gcmVnOwor CQltc2cubGVuID0gbGVuID4gNCA/IDQgOiBsZW47CisJCW1lbWNweSgmYnVmWzFdLCB2YWx1 ZXMsIG1zZy5sZW4pOworCQlsZW4gIC09IG1zZy5sZW47CQkJCQkvLyBkYXRhIGxlbmd0aCBy ZXZlcnMgY291bnRlcgorCQl2YWx1ZXMgKz0gbXNnLmxlbjsJCQkJCS8vIGluY3IgZGF0YSBw b2ludGVyCisJCWlmIChpbmNyKSByZWcgKz0gbXNnLmxlbjsgCQkJCisJCW1zZy5sZW4rKzsg CQkJCQkJCS8qIGRvbid0IGZvcmdldCB0aGUgYWRkciBieXRlICovCisJCXJldCA9IGkyY190 cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwkJaWYgKHJldCAhPSAxKSB7CisJCQll cnIoImkyY193cml0ZSBlcnJvcihlcnIgPT0gJWksIDB4JTAyeClcbiIsIHJldCwgcmVnKTsK KwkJCXJldHVybiByZXQ7CisJCX0KKwkJaWYgKHJlZ19kZWJ1ZykgeworCQkJaWYoICEocmVn ID09IDB4RkEpICYmICEocmVnID09IDB4MjApICYmICEocmVnID09IDB4MjEpKSB7CQkvLyBF eGNsdWRlIGZpcm13YXJlIHVwbG9hZCAmIGRpc2VxYyBtZXNzYWdlcworCQkJCWRiZ2luZm8o InJlZz0weCUwMng7IGRhdGE9MHglMDJ4LDB4JTAyeCwweCUwMngsMHglMDJ4XG4iLAkvLyBm cm9tIGRlYnVnCisJCQkJCQlyZWcsIAlidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLCBidWZbNF0p OworCQkJfQorCQl9CisJfSB3aGlsZSAobGVuKTsKKwlyZXR1cm4gMDsKK30gLy8gZW5kIGN4 MjQxMjBfd3JpdGVyZWdOCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zy b250ZW5kX29wcyBjeDI0MTIwX29wczsKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RydWN0IGR2Yl9m cm9udGVuZCAqY3gyNDEyMF9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMjBfY29uZmlnICpj b25maWcsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXN0cnVjdCBjeDI0MTIwX3N0 YXRlICpzdGF0ZSA9IE5VTEw7CisJaW50IGRlbW9kX3JldjsKKworCWluZm8oIkNvbmV4YW50 IGN4MjQxMjAvY3gyNDExOCAtIERWQlMvUzIgU2F0ZWxsaXRlIGRlbW9kL3R1bmVyXG4iKTsK KwlpbmZvKCJEcml2ZXIgdmVyc2lvbjogJ1NWVCAtIDAuMC40YQkwMy4wNC4yMDEyJ1xuIik7 CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyNDEyMF9zdGF0ZSksCisJCQkJ CQlHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkgeworCQllcnIoIiMjIyBVbmFi bGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjeDI0MTIwX3N0YXRlIHN0cnVjdHVyZS4gOihc biIpOworCQlnb3RvIGVycm9yOworCX0KKwkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KKwlzdGF0 ZS0+Y29uZmlnID0gY29uZmlnOworCXN0YXRlLT5pMmMgPSBpMmM7CisJLyogY2hlY2sgaWYg dGhlIGRlbW9kIGlzIHByZXNlbnQgYW5kIGhhcyBwcm9wZXIgdHlwZSAqLworCWRlbW9kX3Jl diA9IGN4MjQxMjBfcmVhZHJlZyhzdGF0ZSwgQ1gyNDEyMF9SRUdfUkVWSVNJT04pOworCXN3 aXRjaCAoZGVtb2RfcmV2KSB7CisJY2FzZSAweDA3OgorCQlpbmZvKCJEZW1vZCBDWDI0MTIw IHJldi4gMHgwNyBkZXRlY3RlZC5cbiIpOworCQlicmVhazsKKwljYXNlIDB4MDU6CisJCWlu Zm8oIkRlbW9kIENYMjQxMjAgcmV2LiAweDA1IGRldGVjdGVkLlxuIik7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCWVycigiIyMjIFVuc3VwcG9ydGVkIGRlbW9kIHJldmlzaW9uOiAweCV4 IGRldGVjdGVkLiBFeGl0LlxuIiwgZGVtb2RfcmV2KTsKKwkJZ290byBlcnJvcjsKKwl9CisJ LyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLworCXN0YXRlLT5hdHRhY2hlZCA9IDB4MTA7CQkJ Ly8gc2V0IGF0dGFjaGVkIGZsYWcKKwlzdGF0ZS0+Y29sZF9pbml0PTA7CisJbWVtY3B5KCZz dGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyNDEyMF9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zy b250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3Rh dGU7CisJaW5mbygiQ29uZXhhbnQgY3gyNDEyMC9jeDI0MTE4IC0gRFZCUy9TMiBTYXRlbGxp dGUgZGVtb2QvdHVuZXIgQVRUQUNIRUQuXG4iKTsKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVu ZDsKKworZXJyb3I6CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfSAKK0VYUE9S VF9TWU1CT0woY3gyNDEyMF9hdHRhY2gpOyAvLyBlbmQgY3gyNDEyMF9hdHRhY2gKKy8vPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorc3RhdGljIGludCBjeDI0MTIwX3Rlc3Rfcm9tKHN0cnVjdCBjeDI0MTIw X3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgZXJyLCByZXQ7CisJZXJyID0gY3gyNDEyMF9yZWFk cmVnKHN0YXRlLCAweEZEKTsKKwlpZiAoZXJyICYgNCApCisJCXsKKwkJCXJldCA9IGN4MjQx MjBfcmVhZHJlZyhzdGF0ZSwgMHhERikgJiAweEZFOworCQkJZXJyID0gY3gyNDEyMF93cml0 ZXJlZyhzdGF0ZSwgMHhERiwgcmV0KTsKKwkJfQorCXJldHVybiBlcnI7Cit9IC8vIGVuZCAg Y3gyNDEyMF90ZXN0X3JvbQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW50IGN4MjQxMjBf cmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVj dCBjeDI0MTIwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCQorCSpz bnIgPSAoY3gyNDEyMF9yZWFkcmVnKHN0YXRlLCBDWDI0MTIwX1JFR19RVUFMSVRZX0gpPDw4 KSB8CisJCQkJIChjeDI0MTIwX3JlYWRyZWcoc3RhdGUsIENYMjQxMjBfUkVHX1FVQUxJVFlf TCkpOworCWRiZ2luZm8oInJlYWQgU05SIGluZGV4ID0gJWRcbiIsICpzbnIpOworCQorCXJl dHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjeDI0MTIwX3JlYWRfc25yKTsgLy8gZW5kIGN4 MjQxMjBfcmVhZF9zbnIKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGludCBjeDI0MTIwX3Jl YWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3Qg Y3gyNDEyMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCSpiZXIg PSAgKGN4MjQxMjBfcmVhZHJlZyhzdGF0ZSwgQ1gyNDEyMF9SRUdfQkVSX0hIKSA8PCAyNCkJ fAkvLyBCRVIgaGlnaCBieXRlIG9mIGhpZ2ggd29yZAorCQkoY3gyNDEyMF9yZWFkcmVnKHN0 YXRlLCBDWDI0MTIwX1JFR19CRVJfSEwpIDw8IDE2KQkJfAkvLyBCRVIgbG93IGJ5dGUgb2Yg aGlnaCB3b3JkCisJCShjeDI0MTIwX3JlYWRyZWcoc3RhdGUsIENYMjQxMjBfUkVHX0JFUl9M SCkgIDw8IDgpCQl8CS8vIEJFUiBoaWdoIGJ5dGUgb2YgbG93IHdvcmQKKwkJIGN4MjQxMjBf cmVhZHJlZyhzdGF0ZSwgQ1gyNDEyMF9SRUdfQkVSX0xMKTsJCQkJLy8gQkVSIGxvdyBieXRl IG9mIGxvdyB3b3JkCisJCWRiZ2luZm8oInJlYWQgQkVSIGluZGV4ID0gJWRcbiIsICpiZXIp OworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGN4MjQxMjBfcmVhZF9iZXIpOyAv LyBlbmQgY3gyNDEyMF9yZWFkX2JlcgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW50IGN4 MjQxMjBfbWVzc2FnZV9zZW5kKHN0cnVjdCBjeDI0MTIwX3N0YXRlICpzdGF0ZSwgc3RydWN0 IGN4MjQxMjBfY21kICpjbWQpOworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW50IGN4MjQx MjBfbXNnX21wZWdfb3V0cHV0X2dsb2JhbF9jb25maWcoc3RydWN0IGN4MjQxMjBfc3RhdGUg KnN0YXRlLCB1OCBmbGFnKQoreworCXU4IHRyaXN0YXRlOworCXN0cnVjdCBjeDI0MTIwX2Nt ZCBjbWQ7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBjeDI0MTIwX2NtZCkp OworCQorCWNtZC5pZCA9IDB4MTM7CQkJCQkJLy8gKDE5KSBtZXNzYWdlIEVuYWJsZS9EaXNh YmxlIG1wZWcgb3V0cHV0ID8/PworCWNtZC5hcmdbMF0gPSAxOworCWNtZC5hcmdbMV0gPSAw OworCXRyaXN0YXRlID0gZmxhZyA/IDAgOiAodTgpKC0xKTsKKwljbWQuYXJnWzJdID0gdHJp c3RhdGU7CisJY21kLmFyZ1szXSA9IDE7CQkJCQkJCisJY21kLmxlbiA9IDQ7CisKKwlpZihm bGFnKSBkYmdpbmZvKCJNUEVHIG91dHB1dCBESVNBQkxFRFxuIik7CisJZWxzZSBkYmdpbmZv KCJNUEVHIG91dHB1dCBFTkFCTEVEXG4iKTsKKyAgCisJcmV0dXJuIGN4MjQxMjBfbWVzc2Fn ZV9zZW5kKHN0YXRlLCAmY21kKTsKK30JCS8vIGVuZAljeDI0MTIwX21zZ19tcGVnX291dHB1 dF9nbG9iYWxfY29uZmlnCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbnQgY3gyNDEyMF9t ZXNzYWdlX3NlbmQoc3RydWN0IGN4MjQxMjBfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgY3gyNDEy MF9jbWQgKmNtZCkKK3sKKwl1OCB4eHp6OworCXUzMiBtc2dfY21kX21hc2s7CisJaW50IHJl dCwgZmljdXM7CisKKwlpZihzdGF0ZS0+ZHZiX3MyX21vZGUgJiAweDAyKSB7CQkvLyBpcyBN UEVHIGVuYWJsZWQ/CisJCQkJCQkJCQkJLy8gaWYgeWVzOgorCQl4eHp6ID0gY21kLT5pZCAt IDB4MTE7CQkJLy8gbG9vayBmb3Igc3BlY2lmaWMgbWVzc2FnZSBpZAorCQlpZiAoIHh4enog PD0gMHgxMyApIHsKKwkJCW1zZ19jbWRfbWFzayA9IDEgPDwgeHh6ejsKKwkJCS8vMHgwRjgw MjEgLy8gaWYgY21kX2lkIDE3IG9yIDIyIG9yIDMzLTM2LCA0MiwgNDcsIDU3LTYxIGV0Yy4g ZGlzYWJsZSBtcGVnIG91dHB1dAorCQkJaWYgKCBtc2dfY21kX21hc2sgJiAweDBGODAyMSAp IHsJCS8vIDAwMDAxMTExMTAwMDAwMDAwMDEwMDAwMWIKKwkJCQljeDI0MTIwX21zZ19tcGVn X291dHB1dF9nbG9iYWxfY29uZmlnKHN0YXRlLCAwKTsKKwkJCQltc2xlZXAoMTAwKTsKKwkJ CQlzdGF0ZS0+ZHZiX3MyX21vZGUgJj0gIDB4RkQ7CQkvLyByZXNldCBtcGVnIG91dCBlbmFi bGUgZmxhZworCQkJfQorCQl9CisJfQorCXJldCA9IGN4MjQxMjBfd3JpdGVyZWcoc3RhdGUs IDB4MDAgLyogcmVnIGlkKi8sIGNtZC0+aWQgLyogdmFsdWUgKi8pOwkJCS8vIG1lc3NhZ2Ug c3RhcnQgJiB0YXJnZXQKKwlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnTihzdGF0ZSwgMHgwMSAv KiByZWcgbXNnKi8sICZjbWQtPmFyZ1swXSwgY21kLT5sZW4gLyogbGVuKi8sIDEgLyogaW5j ciAqLyk7CQkvLyBtZXNzYWdlIGRhdGEKKwlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRl LCAweDFGIC8qIHJlZyBtc2dfZW5kICovLCAweDAxIC8qIHZhbHVlICovKTsJCS8vIG1lc3Nh Z2UgZW5kCisKKwlmaWN1cyA9IDEwMDA7CisJd2hpbGUgKCBjeDI0MTIwX3JlYWRyZWcoc3Rh dGUsIDB4MUYpKSB7IAkvLyBpcyBjb21tYW5kIGRvbmU/Pz8KKwkJbXNsZWVwKDEpOworCQlp ZiggISgtLWZpY3VzKSkgeworCQkJZXJyKCJUb28gbG9uZyB3YWl0aW5nICdkb25lJyBzdGF0 ZSBmcm9tIHJlZygweDFGKS4gOihcbiIpOworCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCX0K Kwl9CisJZGJnaW5mbygiU3VjY2Vzc2Z1bGx5IHNlbmQgbWVzc2FnZSAweCUwMnhcbiIsIGNt ZC0+aWQpOworCisJaWYgKCBjbWQtPnJlZyA+IDMwICkgeworCQllcnIoIlRvbyBtdWNoIHJl Z2lzdGVycyB0byByZWFkLiBjbWQtPnJlZyA9ICVkIiwgY21kLT5yZWcpOworCQlyZXR1cm4g LUVSRU1PVEVJTzsKKwl9CisJZmljdXMgPSAwOworCWlmICggY21kLT5yZWcgKSB7CQkJCQkv LyBjbWQtPnJlZyAtIHF0eSBjb25zZWN1dGl2ZSByZWdzIHRvIHJlYWQgCisJCXdoaWxlICgg ZmljdXMgPCBjbWQtPnJlZyApewkJLy8gc3RhcnRzIGZyb20gcmVnIE5vIGNtZC0+bGVuCisJ CQkJCQkJCQkJLy8gbnVtYmVyIG9mIHJlZ2lzdGVycyB0byByZWFkIGlzIGNtZC0+cmVnCisJ CQkJCQkJCQkJLy8gYW5kIHdyaXRlIHJlc3VsdHMgc3RhcnRzIGZyb20gY21kLT5hcmdbMF0u CisJCQljbWQtPmFyZ1tmaWN1c10gPSBjeDI0MTIwX3JlYWRyZWcoc3RhdGUsIChjbWQtPmxl bitmaWN1cysxKSk7IAkJCisJCQkrK2ZpY3VzOworCQl9CisJfQkJCisJcmV0dXJuIDA7Cit9 IC8vIGVuZCBjeDI0MTIwX21lc3NhZ2Vfc2VuZAorLy89PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMg aW50IGN4MjQxMjBfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQorewor ICAgICAgICBzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKnAgPSAmZmUtPmR0dl9w cm9wZXJ0eV9jYWNoZTsKKwlzdHJ1Y3QgY3gyNDEyMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVt b2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyNDEyMF9jbWQgY21kOworCXUzMiBzcmF0ZSwg ZnJlcTsKKwlmZV9jb2RlX3JhdGVfdCBmZWM7CisJZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3Qg aW52ZXJzaW9uOworCXU4IHNtYnIxLCBzbWJyMjsKKwlpbnQgcmV0OworCQorCW1lbXNldCgm Y21kLCAwLCBzaXplb2Yoc3RydWN0IGN4MjQxMjBfY21kKSk7CisJCisJY21kLmlkID0gQ01E X1RVTkVSRVFVRVNUOwkJLy8gMHgxMSBzZXQgdHVuZXIgcGFyYW1ldHJzCisJY21kLmxlbiA9 IDE1OwkJCisJCisJZnJlcSA9IHAtPmZyZXF1ZW5jeTsKKwlzcmF0ZSA9IHAtPnN5bWJvbF9y YXRlOworCWZlYyA9IHAtPmZlY19pbm5lcjsKKwlpbnZlcnNpb24gPSBwLT5pbnZlcnNpb247 CisJCisJLy8gY2hlY2sgc3ltYm9sIHJhdGUKKwlpZiAoIHNyYXRlICA+IDMxMDAwMDAwICkg eyAgICAgIAkvLyBpZiBzeW1ib2wgcmF0ZSA+IDMxIDAwMAorCQlzbWJyMSA9ICgtKHNyYXRl IDwgMzEwMDAwMDEpICYgMykgKyAyOwkJLy8gZWJwCisJCXNtYnIyID0gKC0oc3JhdGUgPCAz MTAwMDAwMSkgJiA2KSArIDQ7CQkvLyBlZGkKKwl9IGVsc2UgeworCQlzbWJyMSA9IDM7CisJ CXNtYnIyID0gNjsKKwl9CisKKwlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRlLCAweEU2 LCBzbWJyMSk7CisJcmV0ID0gY3gyNDEyMF9yZWFkcmVnKHN0YXRlLCAweEYwKTsKKwlyZXQg Jj0gMHhGRkZGRkZGMDsKKwlyZXQgfD0gc21icjI7CisJcmV0ID0gY3gyNDEyMF93cml0ZXJl ZyhzdGF0ZSwgMHhGMCwgcmV0KTsKKwkKKwljbWQuYXJnWzBdID0gMDsJCS8vIENNRF9UVU5F Ul9SRVFVRVNUCisJCisJLy8gRnJlcXVlbmN5CisJY21kLmFyZ1sxXSA9IChmcmVxICYgMHhG RjAwMDApID4+IDE2OwkJLyogaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpbiBrSHogKi8KKwlj bWQuYXJnWzJdID0gKGZyZXEgJiAweDAwRkYwMCkgPj4gODsKKwljbWQuYXJnWzNdID0gKGZy ZXEgJiAweDAwMDBGRik7CisJCisJLy8gU3ltYm9sIFJhdGUKKwljbWQuYXJnWzRdID0gKChz cmF0ZS8xMDAwKSAmIDB4RkYwMCkgPj4gODsKKwljbWQuYXJnWzVdID0gKChzcmF0ZS8xMDAw KSAmIDB4MDBGRik7CisJCisJLy8gSW52ZXJzaW9uCisJaWYgKCBpbnZlcnNpb24gKSB7Cisg ICAgCWlmICggaW52ZXJzaW9uID09IDEgKSBjbWQuYXJnWzZdID0gNDsKKwkJZWxzZSBjbWQu YXJnWzZdID0gMHgwQzsKKwl9IGVsc2UgeworCQljbWQuYXJnWzZdID0gMDsKKwl9CisKKwkv LyBGRUMKKwlzd2l0Y2ggKCBmZWMgKQkJCS8vIGZlYyA9IHAtPnUucXBzay5mZWNfaW5uZXIK Kwl7CisJCWNhc2UgMToJCQkJCQkJLy8gRkVDXzFfMgorCQkJY21kLmFyZ1s3XSA9IDB4MkU7 IGJyZWFrOwkvLyBbMTFdID0gMCBieSBtZW1zZXQJCisJCWNhc2UgMjoJCQkJCQkJLy8gRkVD XzJfMworCQkJY21kLmFyZ1s3XSA9IDB4MkY7IGJyZWFrOworCQljYXNlIDM6CQkJCQkJCS8v IEZFQ18zXzQKKwkJCWNtZC5hcmdbN10gPSAweDMwOyBicmVhazsKKwkJY2FzZSA1OgkJCQkJ CQkvLyBGRUNfNV82CisJCQljbWQuYXJnWzddID0gMHgzMTsgYnJlYWs7CisJCWNhc2UgNzoJ CQkJCQkJLy8gRkVDXzdfOAorCQkJY21kLmFyZ1s3XSA9IDB4MzI7IGJyZWFrOworCQlkZWZh dWx0OgkJCQkJCQkJLy8gRkVDX05PTkUsIEZFQ180XzUsIEZFQ182XzcsIEZFQ184XzksIAor ICAgIAkJCQkJCQkJCQkJLy8gRkVDX0FVVE8sIEZFQ18zXzUsIEZFQ185XzEwCisJCQlpZiAo IHN0YXRlLT5kdmJfczJfbW9kZSAmIDEgKSB7CS8vIGlmIERWQi1TMiBtb2RlCQorCQkJCWNt ZC5hcmdbN10gPSAwOwkJCQkKKwkJCQljbWQuYXJnWzExXSA9IDA7CisJCQl9IGVsc2Ugewor CQkJCWNtZC5hcmdbN10gPSAweDJFOworCQkJCWNtZC5hcmdbMTFdID0gMHhBQzsKKwkJCX0g CisJCQlicmVhazsKKwl9CisJY21kLmFyZ1s4XSA9IDB4MTM7CisJY21kLmFyZ1s5XSA9IDB4 ODg7CisJY21kLmFyZ1sxMF0gPSAwOworCWNtZC5hcmdbMTJdID0gc21icjI7CisJY21kLmFy Z1sxM10gPSBzbWJyMTsKKwljbWQuYXJnWzE0XSA9IDA7CisKKwlzdGF0ZS0+bmVlZF9zZXRf bXBlZ19vdXQgfD0gMHgwMTsJCS8vIGFmdGVyIHR1bmUgd2UgbmVlZCByZXN0YXJ0IG1wZWcg b3V0ID8/Pz8/CisKKwlyZXR1cm4gY3gyNDEyMF9tZXNzYWdlX3NlbmQoc3RhdGUsICZjbWQp OworCQorfSAKK0VYUE9SVF9TWU1CT0woY3gyNDEyMF9zZXRfZnJvbnRlbmQpOwkJLy8gZW5k IGN4MjQxMjBfc2V0X2Zyb250ZW5kCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgY3gyNDEyMF9t ZXNzYWdlX2ZpbGwoc3RydWN0IGN4MjQxMjBfY21kICpjbWQsCisJCXU4IG1zZ19pZCwgCisJ CXU4ICptc2dfYWRkciwKKwkJdTggbXNnX2xlbiwKKwkJdTggbnVtX3JlZ3MpCit7CisJY21k LT5pZCA9IG1zZ19pZDsKKwltZW1jcHkoJmNtZC0+YXJnWzBdLCBtc2dfYWRkciwgbXNnX2xl bik7CisJY21kLT5sZW4gPSBtc2dfbGVuOworCWNtZC0+cmVnID0gbnVtX3JlZ3M7Cit9IC8v IGVuZCBjeDI0MTIwX21lc3NhZ2VfZmlsbAorLy89PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW50 IGN4MjQxMjBfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUs IHUxNiAqc2lnbmFsX3N0cmVuZ3RoKQoreworCXN0cnVjdCBjeDI0MTIwX3N0YXRlICpzdGF0 ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDI0MTIwX2NtZCBjbWQ7CisJ aW50IHJlc3VsdCwgc2lnc3RyX2gsIHNpZ3N0cl9sOworCisJY3gyNDEyMF9tZXNzYWdlX2Zp bGwoJmNtZCwgMHgxQS8qbXNnX2lkKi8sICZjeDI0MTIwX21zZ19yZWFkX3NpZ3N0clswXSwg MS8qbXNnX2xlbiovLCAwLypudW1fcmVncyovKTsKKworCWlmKCAhKGN4MjQxMjBfbWVzc2Fn ZV9zZW5kKHN0YXRlLCAmY21kKSkgKSB7CisJCXNpZ3N0cl9oID0gKGN4MjQxMjBfcmVhZHJl ZyhzdGF0ZSwgQ1gyNDEyMF9SRUdfU0lHU1RSX0gpID4+IDYpIDw8IDg7CisJCXNpZ3N0cl9s ID0gY3gyNDEyMF9yZWFkcmVnKHN0YXRlLCBDWDI0MTIwX1JFR19TSUdTVFJfTCApOworCQlk YmdpbmZvKCJTaWduYWwgc3RyZW5ndGggZnJvbSBmaXJtd2FyZT0gMHgleFxuIiwgKHNpZ3N0 cl9oIHwgc2lnc3RyX2wpKTsKKwkJKnNpZ25hbF9zdHJlbmd0aCA9ICgoc2lnc3RyX2ggfCBz aWdzdHJfbCkgIDw8IDUpICYgMHgwMDAwRkZGRjsKKwkJZGJnaW5mbygiU2lnbmFsIHN0cmVu Z3RoPSAweCV4XG4iLCAqc2lnbmFsX3N0cmVuZ3RoKTsKKwkJcmVzdWx0ID0gMDsKKwl9IGVs c2UgeworCQllcnIoImVycm9yIHJlYWRpbmcgc2lnbmFsIHN0cmVuZ3RoXG4iKTsKKwkJcmVz dWx0ID0gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1C T0woY3gyNDEyMF9yZWFkX3NpZ25hbF9zdHJlbmd0aCk7CQkvLyBlbmQgY3gyNDEyMF9yZWFk X3NpZ25hbF9zdHJlbmd0aAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW50IGN4MjQxMjBf bXNnX21wZWdfb3V0cHV0X2NvbmZpZyhzdHJ1Y3QgY3gyNDEyMF9zdGF0ZSAqc3RhdGUsIHU4 IG51bSwgCisJCQlzdHJ1Y3QgY3gyNDEyMF9za3lzdGFyMl9tcGVnX2NvbmZpZyAqY29uZmln X21zZykKK3sKKwlzdHJ1Y3QgY3gyNDEyMF9jbWQgY21kOworCQorCW1lbXNldCgmY21kLCAw LCBzaXplb2Yoc3RydWN0IGN4MjQxMjBfY21kKSk7CisgIAorCWNtZC5pZCA9IENNRF9NUEVH X0lOSVQ7ICAgICAgICAgIC8vIGNtZC0+aWQ9MjAgLSBtZXNzYWdlIGlkCisJY21kLmxlbiA9 IDc7ICAgICAgICAgICAgCisJY21kLmFyZ1swXSA9IG51bTsgICAgIC8vIHNlcXVlbnRhbCBu dW1iZXIgLSBjYW4gYmUgMCwxLDIKKwljbWQuYXJnWzFdID0gIAkoKGNvbmZpZ19tc2ctPngx ICYgMHgwMSkgPDwgMSkgfAorCQkJCQkoKGNvbmZpZ19tc2ctPngxID4+IDEpICYgMHgwMSk7 CisJY21kLmFyZ1syXSA9IDB4MDU7CisJY21kLmFyZ1szXSA9IDB4MDI7CisJY21kLmFyZ1s0 XSA9ICgoY29uZmlnX21zZy0+eDIgPj4gMSkgJiAweDAxKTsKKwljbWQuYXJnWzVdID0gKGNv bmZpZ19tc2ctPngyICYgMHhGMCkgfCAoY29uZmlnX21zZy0+eDMgJiAweDBGKTsKKwljbWQu YXJnWzZdID0gc3RhdGUtPmF0dGFjaGVkOyAJLyogMHgxMCBpZiBzdWNjZXNmdWxseSBhdHRh Y2hlZCAqLworICAKKyAgcmV0dXJuIGN4MjQxMjBfbWVzc2FnZV9zZW5kKHN0YXRlLCAmY21k KTsKK30JLy8gZW5kIGN4MjQxMjBfbXNnX21wZWdfb3V0cHV0X2NvbmZpZworLy89PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CitzdGF0aWMgaW50IGN4MjQxMjBfZGlzZXFjX3NlbmRfYnVyc3Qoc3RydWN0IGR2 Yl9mcm9udGVuZCAqZmUsIGZlX3NlY19taW5pX2NtZF90IGJ1cnN0KQoreworCXN0cnVjdCBj eDI0MTIwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBj eDI0MTIwX2NtZCBjbWQ7CisJCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgY3gy NDEyMF9jbWQpKTsKKwkKKwljbWQuaWQgPSBDTURfRElTRVFDX0JVUlNUOworCWNtZC5hcmdb MF0gPSAweDAwOworCWlmIChidXJzdCkKKwkJY21kLmFyZ1sxXSA9IDB4MDE7CisJZGJnaW5m bygiYnVyc3Qgc2VudC5cbiIpOworCisgIHJldHVybiBjeDI0MTIwX21lc3NhZ2Vfc2VuZChz dGF0ZSwgJmNtZCk7Cit9CitFWFBPUlRfU1lNQk9MKGN4MjQxMjBfZGlzZXFjX3NlbmRfYnVy c3QpOwkJLy8gZW5kIGN4MjQxMjBfZGlzZXFjX3NlbmRfYnVyc3QKKy8vPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorc3RhdGljIGludCBjeDI0MTIwX3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZl LCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3QgY3gyNDEyMF9zdGF0ZSAq c3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyNDEyMF9jbWQgY21k OworCisJZGJnaW5mbygiY21kKDB4MjMsNCkgLSB0b25lID0gJWRcbiIsIHRvbmUpOworCWlm ICgodG9uZSAhPSBTRUNfVE9ORV9PTikgJiYgKHRvbmUgIT0gU0VDX1RPTkVfT0ZGKSkgewor CQllcnIoIkludmFsaWQgdG9uZT0lZFxuIiwgdG9uZSk7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBjeDI0MTIwX2NtZCkpOworCWNt ZC5pZCA9IENNRF9TRVRUT05FOwkvLyAweDIzCisJY21kLmxlbiA9IDQ7CisJaWYgKCF0b25l KQorCQljbWQuYXJnWzNdID0gMHgwMTsKKyAgcmV0dXJuIGN4MjQxMjBfbWVzc2FnZV9zZW5k KHN0YXRlLCAmY21kKTsKK30KK0VYUE9SVF9TWU1CT0woY3gyNDEyMF9zZXRfdG9uZSk7CQkv LyBlbmQgY3gyNDEyMF9zZXRfdG9uZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW50IGN4 MjQxMjBfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCWZlX3NlY192b2x0 YWdlX3Qgdm9sdGFnZSkKK3sKKwlzdHJ1Y3QgY3gyNDEyMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyNDEyMF9jbWQgY21kOworCisJbWVtc2V0 KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgY3gyNDEyMF9jbWQpKTsKKwljbWQuaWQgPSBDTURf U0VUVk9MVEFHRTsJCS8vCisJY21kLmxlbiA9IDI7CisJaWYgKCEodm9sdGFnZSAtIDEpKQor CQljbWQuYXJnWzFdID0gMHgwMTsKKwlyZXR1cm4gY3gyNDEyMF9tZXNzYWdlX3NlbmQoc3Rh dGUsICZjbWQpOworfQorRVhQT1JUX1NZTUJPTChjeDI0MTIwX3NldF92b2x0YWdlKTsJCS8v IGVuZCBjeDI0MTIwX3NldF92b2x0YWdlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbnQg Y3gyNDEyMF9zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCXN0cnVj dCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmQpCit7CisJc3RydWN0IGN4MjQxMjBfc3RhdGUg KnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMjBfY21kIGNt ZDsKKwlpbnQgYmFja19jb3VudDsKKwkKKwlkYmdpbmZvKCJTdGFydCBzZW5kaW5nIGRpc2Vx YyBzZXF1ZW5jZT09PT09PT09PT09PT09PVxuIik7CisJCisJbWVtc2V0KCZjbWQsIDAsIHNp emVvZihzdHJ1Y3QgY3gyNDEyMF9jbWQpKTsKKwkKKwljbWQuaWQgPSBDTURfRElTRVFDX01T RzE7CQkvLyAweDIwCisJY21kLmxlbiA9IDExOworCWNtZC5hcmdbMF0gPSAweDAwOworCWNt ZC5hcmdbMV0gPSAweDAwOworCWNtZC5hcmdbMl0gPSAweDAzOworCWNtZC5hcmdbM10gPSAw eDE2OworCWNtZC5hcmdbNF0gPSAweDI4OworCWNtZC5hcmdbNV0gPSAweDAxOworCWNtZC5h cmdbNl0gPSAweDAxOworCWNtZC5hcmdbN10gPSAweDE0OworCWNtZC5hcmdbOF0gPSAweDE5 OworCWNtZC5hcmdbOV0gPSAweDE0OworCWNtZC5hcmdbMTBdID0gMHgxRTsKKwlpZiAoIGN4 MjQxMjBfbWVzc2FnZV9zZW5kKHN0YXRlLCAmY21kKSApIHsKKwkJZXJyKCJzZW5kIDFzdCBt ZXNzYWdlKDB4JXgpIGZpbGVkPT09PT09PT09PVxuIiwgY21kLmlkKTsKKwkJcmV0dXJuIC1F UkVNT1RFSU87CisJfQorCWNtZC5pZCA9IENNRF9ESVNFUUNfTVNHMjsJCS8vIDB4MjEKKwlj bWQubGVuID0gZC0+bXNnX2xlbiArIDY7CisJY21kLmFyZ1swXSA9IDB4MDA7CisJY21kLmFy Z1sxXSA9IDB4MDE7CisJY21kLmFyZ1syXSA9IDB4MDI7CisJY21kLmFyZ1szXSA9IDB4MDA7 CisJY21kLmFyZ1s0XSA9IDB4MDA7CisJY21kLmFyZ1s1XSA9IGQtPm1zZ19sZW47CisJCisJ bWVtY3B5KCZjbWQuYXJnWzZdLCAmZC0+bXNnLCBkLT5tc2dfbGVuKTsKKwkKKwlpZiAoIGN4 MjQxMjBfbWVzc2FnZV9zZW5kKHN0YXRlLCAmY21kKSApIHsKKwkJZXJyKCJzZW5kIDJkIG1l c3NhZ2UoMHgleCkgZmlsZWQ9PT09PT09PVxuIiwgY21kLmlkKTsKKwkJcmV0dXJuIC1FUkVN T1RFSU87CisJfQorCWJhY2tfY291bnQgPSAxMDA7CisJZG8geworCQlpZiAoICEoY3gyNDEy MF9yZWFkcmVnKHN0YXRlLCAweDkzKSAmIDB4MDEpICkgewkKKwkJCWRiZ2luZm8oImRpc2Vx YyBzZXF1ZW5jZSBzZW50IHN1Y2Nlc3M9PT09PT09PT09LlxuIik7CisJCQlyZXR1cm4gMDsK KwkJfQorCQltc2xlZXAoNSk7CisJCS0tYmFja19jb3VudDsKKwl9IHdoaWxlICggYmFja19j b3VudCApOworCWVycigiVG9vIGxvbmcgd2FpdGluZyBmb3IgZGlzZXFjLj09PT09PT09PT09 PT1cbiIpOworCXJldHVybiAtRVRJTUVET1VUOworfQorRVhQT1JUX1NZTUJPTChjeDI0MTIw X3NlbmRfZGlzZXFjX21zZyk7CQkvLyBlbmQgY3gyNDEyMF9zZW5kX2Rpc2VxY19tc2cKKy8v PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorc3RhdGljIGludCBjeDI0MTIwX3JlYWRfc3RhdHVzKHN0cnVjdCBk dmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCBjeDI0 MTIwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDI0 MTIwX2NtZCBjbWQ7CisJaW50IHJldCwgY2xvY2tfc2VxX251bSwgR2V0dGVkRkVDOworCXU4 IG1vZGVfY29kZSwgbW9kZV84UFNLX2ZsYWcsIGF0dGFjaGVkX2ZsYWcsIGNsb2NrX2lkOwor CQorCXJldCA9IGN4MjQxMjBfcmVhZHJlZyhzdGF0ZSwgQ1gyNDEyMF9SRUdfU1RBVFVTKTsJ CS8vMHgzQQorCWRiZ2luZm8oInN0YXR1cyA9IDB4JXhcbiIsIHJldCk7CisJKnN0YXR1cyA9 IDA7CisJaWYgKCByZXQgJiBDWDI0MTIwX0hBU19TSUdOQUwgKSAqc3RhdHVzID0gRkVfSEFT X1NJR05BTDsKKwlpZiAoIHJldCAmIENYMjQxMjBfSEFTX0NBUlJJRVIpICpzdGF0dXMgfD0g RkVfSEFTX0NBUlJJRVI7CisJaWYgKCByZXQgJiBDWDI0MTIwX0hBU19WSVRFUkJJKSAqc3Rh dHVzIHw9IChGRV9IQVNfVklURVJCSSArIEZFX0hBU19TWU5DKTsKKwkKKwlpZiAoIHJldCAm IENYMjQxMjBfSEFTX0xPQ0sgKSB7CQkvLyAweDA4CisJCSpzdGF0dXMgfD0gRkVfSEFTX0xP Q0s7CisJCWlmICggc3RhdGUtPm5lZWRfc2V0X21wZWdfb3V0ICYgMSApIHsJCQkvLyBqdXN0 IHR1bmVkPz8/CisJCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBjeDI0MTIwX2Nt ZCkpOworCQkJY21kLmlkID0gQ01EX0NMT0NLX1JFQUQ7CisJCQljbWQuYXJnWzBdID0gMHgw MDsKKwkJCWNtZC5sZW4gPSAxOwkJCS8vIGNtZC5yZWcgIT0gMCwgc28gaXQgaXMgZmlyc3Qg cmVnaXN0ZXIgdG8gcmVhZCAKKwkJCWNtZC5yZWcgPSA2OwkJCS8vIG51bWJlciBvZiByZWdp c3RlcnMgdG8gcmVhZCAoMHgwMS0weDA2KQorCQkJaWYgKCAhY3gyNDEyMF9tZXNzYWdlX3Nl bmQoc3RhdGUsICZjbWQpICkgewkJCS8vIGluIGNtZFswXS1bNV0gLSByZXN1bHQKKwkJCQkJ CQkJCQkJCQkJCQkvLyAgICAgIDB4MDItMHgwNworCQkJCXJldCA9IGN4MjQxMjBfcmVhZHJl ZyhzdGF0ZSwgQ1gyNDEyMF9SRUdfRkVDTU9ERSkgJiAweDNGOwkJLy8gbnR2IC0gMHg4RSgx NDIpICYgM0YgPSAxNAorCQkJCUdldHRlZEZFQyA9IHJldDsJCQkJCQkJCQkJCQkvLyAJCSAw eDBkPSAxMworCQkJCWRiZ2luZm8oIkdldCBGRUM6ICVkXG4iLCByZXQpOworCQkJCWlmICgg c3RhdGUtPmR2Yl9zMl9tb2RlICYgMHgwMSApIHsJCQkJCQkJLy8gaXMgRFZCLVMyPworCQkJ CQlzd2l0Y2ggKHJldC00KSB7CisJCQkJCQljYXNlIDA6CisJCQkJCQkJbW9kZV9jb2RlID0g MHgwMTsgZ290byBtb2RlX1FQU0s7CS8vIEZFQ18xXzIgLSBxcHNrIG9ubHkKKwkJCQkJCWNh c2UgMToKKwkJCQkJCWNhc2UgODoKKwkJCQkJCQltb2RlX2NvZGUgPSAweDY0OyBnb3RvIG1v ZGVfOFBTSzsJLy8gRkVDXzNfNSAoMTApLSA4UFNLIG9ubHkKKwkJCQkJCWNhc2UgMjoKKwkJ CQkJCWNhc2UgOToKKwkJCQkJCQltb2RlX2NvZGUgPSAweDAyOyBnb3RvIG1vZGVfOFBTSzsJ Ly8gRkVDXzJfMworCQkJCQkJY2FzZSAzOgorCQkJCQkJY2FzZSAxMDoKKwkJCQkJCQltb2Rl X2NvZGUgPSAweDAzOyBnb3RvIG1vZGVfOFBTSzsJLy8gRkVDXzNfNAkvLyAxNC00PTEwIC0g bnR2KworCQkJCQkJY2FzZSA0OgorCQkJCQkJCW1vZGVfY29kZSA9IDB4MDQ7IGdvdG8gbW9k ZV9RUFNLOwkvLyBGRUNfNF81IC0gcXBzayBvbmx5CisJCQkJCQljYXNlIDU6CisJCQkJCQlj YXNlIDExOgorCQkJCQkJCW1vZGVfY29kZSA9IDB4MDU7IGdvdG8gbW9kZV84UFNLOwkvLyBG RUNfNV82CisJCQkJCQljYXNlIDY6CisJCQkJCQljYXNlIDEyOgorCQkJCQkJCW1vZGVfY29k ZSA9IDB4MDg7IGdvdG8gbW9kZV84UFNLOwkvLyBGRUNfOF85CisJCQkJCQljYXNlIDc6CisJ CQkJCQljYXNlIDEzOgorCQkJCQkJCW1vZGVfY29kZSA9IDB4NjU7IGdvdG8gbW9kZV84UFNL OwkvLyBGRUNfOV8xMCAoMTEpLSA4UFNLIG9ubHkKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJ aW5mbygiVW5rbm93biBEVkItUzIgbW9kZWZlYyAobm90IFFQU0sgb3IgOFBTSyk6ICVkXG4i LCByZXQtNCk7CisJCQkJCQkJbW9kZV9jb2RlID0gMHgwMTsgCQkJCQkJLy8gc2V0IGxpa2Ug Zm9yIG1vZGUgMAorCQkJCQltb2RlXzhQU0s6CisJCQkJCQlpZiAoIHJldCA+IDExICkgewkJ Ly8gMTQKKwkJCQkJCQltb2RlXzhQU0tfZmxhZyA9IDB4NjM7CQkJLy8gRFZCLVMyLThQU0sg ZmxhZworCQkJCQkJCWRiZ2luZm8oIkRWQi1TMjogOFBTSyBtb2RlOiAlZCwgbW9kZV9jb2Rl PSAweCV4XG4iLCByZXQtNCwgbW9kZV9jb2RlKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCW1v ZGVfUVBTSzoKKwkJCQkJCQltb2RlXzhQU0tfZmxhZyA9IDB4MDA7CisgICAJCSAgICAgCSAg ICAgIAkJZGJnaW5mbygiRFZCLVMyOiBRUFNLIG1vZGU6ICVkXG4iLCByZXQtNCk7CisJCQkJ CQl9CisJCQkJCQlicmVhazsKKwkJCQkJfSAvLyBlbmQgc3dpdGNoCisJCQkJfSAvLyBlbmQg aWYgZHZiX3MyX21vZGUgLy8gZHZiLXMyCisJCQkJZWxzZSB7CQkJCQkJCQkvLyBzdGF0ZS0+ ZHZiX3MyX21vZGUgJiAxID0gMCAtPiAjIyMjIERWQi1TCisJCQkJCXN3aXRjaCAoIHJldCAt IDIgKSB7CisJCQkJCQljYXNlIDA6CisJCQkJCQkJbW9kZV9jb2RlID0gMjsgYnJlYWs7CS8v IEZFQ18yXzMKKwkJCQkJCWNhc2UgMToKKwkJCQkJCQltb2RlX2NvZGUgPSAzOyBicmVhazsJ Ly8gRkVDXzNfNAorCQkJCQkJY2FzZSAyOgorCQkJCQkJCW1vZGVfY29kZSA9IDQ7IGJyZWFr OwkvLyBGRUNfNF81CisJCQkJCQljYXNlIDM6CisJCQkJCQkJbW9kZV9jb2RlID0gNTsgYnJl YWs7CS8vIEZFQ181XzYKKwkJCQkJCWNhc2UgNDoKKwkJCQkJCQltb2RlX2NvZGUgPSA2OyBi cmVhazsJLy8gRkVDXzZfNworCQkJCQkJY2FzZSA1OgorCQkJCQkJCW1vZGVfY29kZSA9IDc7 IGJyZWFrOwkvLyBGRUNfN184CisJCQkJCQlkZWZhdWx0OiAKKwkJCQkJCQltb2RlX2NvZGUg PSAxO2JyZWFrOwkvLyBGRUNfMV8yCisJCQkJCX0KKwkJCQkJbW9kZV84UFNLX2ZsYWcgPSAw OworCQkJCX0gLy8gZW5kIG9mIHN3aXRjaCBmb3IgZHZiLXMKKwkJCQkKKwkJCQlhdHRhY2hl ZF9mbGFnID0gMHgxMDsKKwkJCQlpZiAoc3RhdGUtPmF0dGFjaGVkID09IDB4MTApICAvLyBt dXN0IGJlIDB4MTAgaWYgc3VjY2Vzc2Z1bGx5IGF0dGFjaGVkIGluIGZsZXhjb3BfZmVfdHVu ZXIKKwkJCQkJYXR0YWNoZWRfZmxhZyA9IDA7CisJCQkJcmV0ID0gMDsKKwkJCQlpZiAoIHN0 YXRlLT5kdmJfczJfbW9kZSAmIDB4MDEgKQkJLy8gaWYgZHZiLXMyCisJCQkJCXJldCA9IChj eDI0MTIwX3JlYWRyZWcoc3RhdGUsIENYMjQxMjBfUkVHX0ZFQ01PREUpID4+IDcpICYgMHgw MTsgIC8vIFFQU0sgb3IgOFBTSyA/Pz8KKwkJCQkJCSAvLyBiaXQgNCAgICAgICAgICBiaXQg NQkJCWJpdCAwICAgICAgICAgICAgICAgICBiaXQgMworCQkJCWNsb2NrX2lkID0gKHJldCA8 PCAzKSB8IGF0dGFjaGVkX2ZsYWcgfCAoc3RhdGUtPmR2Yl9zMl9tb2RlICYgMSkgfCA0OwkJ Ly8gcG9zc2libGUgaWQ6IDQsIDUsIDEzLiAxMi1pbXBvc3NpYmxlLCAKKwkJCQkvLyBudHYg UzIgPSAweDhFIC0+IDggfCAxIHwgNCA9IDEzCQkJCQkJCQkJCQkvLyBiZWNhdXNlIDd0aCBi aXQgb2YgcmV0IC0gaXMgUzIgZmxhZworCQkJCS8vIDEvMiBTMiA9IDB4MGQgLT4gMCB8IDEg fCA0ID0gNQorCQkJCWRiZ2luZm8oIkNoZWNrIGNsb2NrIHRhYmxlIGZvcjogY2xvY2tfaWQ9 MHgleCwgOFBTS19tYXNrPTB4JXgsIG1vZGVfY29kZT0weCV4XG4iLCAKKwkJCQkgCWNsb2Nr X2lkLCBtb2RlXzhQU0tfZmxhZywgbW9kZV9jb2RlKTsKKwkJCQkKKwkJCQljbG9ja19zZXFf bnVtID0gMDsKKwkJCQl3aGlsZSAoIChjbG9ja19yYXRpb3NfdGFibGVbY2xvY2tfc2VxX251 bV0ucmF0aW9faWQgIT0gY2xvY2tfaWQpIHx8CisJCQkJCQkoY2xvY2tfcmF0aW9zX3RhYmxl W2Nsb2NrX3NlcV9udW1dLm1vZGVfeFBTSyAhPSBtb2RlXzhQU0tfZmxhZykgfHwKKwkJCQkJ CShjbG9ja19yYXRpb3NfdGFibGVbY2xvY2tfc2VxX251bV0uZmVjX21vZGUgIT0gbW9kZV9j b2RlKSApCisJCQkJeworCQkJCS8qCWRiZ2luZm8oIkNoZWNrIHRhYmxlIHN0cmluZyglZCk6 IGNsb2NrX2lkPSVkLCA4UFNLX2ZsYWc9JWQsIG1vZGVfY29kZT0lZFxuIiwJY2xvY2tfc2Vx X251bSwgCisJCQkJICoJCWNsb2NrX3JhdGlvc190YWJsZVtjbG9ja19zZXFfbnVtXS5yYXRp b19pZCwKKwkJCQkgKgkJY2xvY2tfcmF0aW9zX3RhYmxlW2Nsb2NrX3NlcV9udW1dLm1vZGVf eFBTSywKKwkJCQkgKgkJY2xvY2tfcmF0aW9zX3RhYmxlW2Nsb2NrX3NlcV9udW1dLmZlY19t b2RlKTsKKwkJCQkgKi8KKwkJCQkJKytjbG9ja19zZXFfbnVtOworCQkJCQlpZiAoIGNsb2Nr X3NlcV9udW0gPT0gQVJSQVlfU0laRShjbG9ja19yYXRpb3NfdGFibGUpICkgeworCQkJCQkJ aW5mbygiQ2hlY2sgaW4gY2xvY2sgdGFibGUgZmlsZWQ6IHVuc3VwcG9ydGVkIG1vZHVsYXRp b24gdHVuZWQgLSBkYXRhIHJlY2VwdGlvbiBpbiBkYW5nZXIuIDooXG4iKTsKKwkJCQkJCWdv dG8gc2V0dGluZ3NfZW5kOworCQkJCQl9CisJCQkJfQorCS8vIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworCQkJCWRiZ2luZm8oIkNoZWNrIHN1Y2Nlc2Z1bDogR2V0RkVDOiAl ZDsgcG9zdCBsb2NrOiBtPSVkLCBuPSVkOyBjbG9ja19zZXFfaWR4OiAlZCBtPSVkLCBuPSVk LCByYXRlPSVkXG4iLAorCQkJCQlHZXR0ZWRGRUMsCisJCQkJCWNtZC5hcmdbMl0gfCAoY21k LmFyZ1sxXSA8PCA4KSB8IChjbWQuYXJnWzBdIDw8IDE2KSwgCQkvLyByZWdpc3RlcnMgd2Fz IHJlYWRlZCBlYXJseQorCQkJCQljbWQuYXJnWzVdIHwgKGNtZC5hcmdbNF0gPDwgOCkgfCAo Y21kLmFyZ1szXSA8PCAxNiksCQkvLyBpbiBtZXNzYWdlIHdpdGggaWQgPSAweDE2CisJCQkJ CWNsb2NrX3NlcV9udW0sCisJCQkJCWNsb2NrX3JhdGlvc190YWJsZVtjbG9ja19zZXFfbnVt XS5tX3JhdCwKKwkJCQkJY2xvY2tfcmF0aW9zX3RhYmxlW2Nsb2NrX3NlcV9udW1dLm5fcmF0 LAorCQkJCQljbG9ja19yYXRpb3NfdGFibGVbY2xvY2tfc2VxX251bV0ucmF0ZSk7CisgCS8v IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCQkJCWNtZC5pZCA9IENNRF9DTE9D S19TRVQ7CisJCQkJY21kLmxlbiA9IDEwOworCQkJCWNtZC5yZWcgPSAwOworCQkJCWNtZC5h cmdbMF0gPSAwOworCQkJCWNtZC5hcmdbMV0gPSBzdGF0ZS0+YXR0YWNoZWQ7CQkvLyBtdXN0 IGJlIDB4MTAgaWYgc3VjY2Vzc2Z1bGx5IGF0dGFjaGVkIGluIGZsZXhjb3BfZmVfdHVuZXIK KwkJCQkKKwkJCQljbWQuYXJnWzJdID0gKGNsb2NrX3JhdGlvc190YWJsZVtjbG9ja19zZXFf bnVtXS5tX3JhdCA+PiAxNikgJiAweEZGOworCQkJCWNtZC5hcmdbM10gPSAoY2xvY2tfcmF0 aW9zX3RhYmxlW2Nsb2NrX3NlcV9udW1dLm1fcmF0ID4+ICA4KSAmIDB4RkY7CisJCQkJY21k LmFyZ1s0XSA9IChjbG9ja19yYXRpb3NfdGFibGVbY2xvY2tfc2VxX251bV0ubV9yYXQgPj4g IDApICYgMHhGRjsKKworCQkJCWNtZC5hcmdbNV0gPSAoY2xvY2tfcmF0aW9zX3RhYmxlW2Ns b2NrX3NlcV9udW1dLm5fcmF0ID4+IDE2KSAmIDB4RkY7CisJCQkJY21kLmFyZ1s2XSA9IChj bG9ja19yYXRpb3NfdGFibGVbY2xvY2tfc2VxX251bV0ubl9yYXQgPj4gIDgpICYgMHhGRjsK KwkJCQljbWQuYXJnWzddID0gKGNsb2NrX3JhdGlvc190YWJsZVtjbG9ja19zZXFfbnVtXS5u X3JhdCA+PiAgMCkgJiAweEZGOworCisJCQkJY21kLmFyZ1s4XSA9IChjbG9ja19yYXRpb3Nf dGFibGVbY2xvY2tfc2VxX251bV0ucmF0ZSA+PiA4KSAmIDB4RkY7CisJCQkJY21kLmFyZ1s5 XSA9IChjbG9ja19yYXRpb3NfdGFibGVbY2xvY2tfc2VxX251bV0ucmF0ZSA+PiAwKSAmIDB4 RkY7CisJCQkJCisJCQkJY3gyNDEyMF9tZXNzYWdlX3NlbmQoc3RhdGUsICZjbWQpOworCQkJ CQorCQkJc2V0dGluZ3NfZW5kOgorCQkJCW1zbGVlcCgyMDApOworCQkJCWN4MjQxMjBfbXNn X21wZWdfb3V0cHV0X2dsb2JhbF9jb25maWcoc3RhdGUsIDEpOwkKKwkJCQlzdGF0ZS0+ZHZi X3MyX21vZGUgfD0gMHgwMjsJCQkJCQkJLy8gc2V0IG1wZWcgZmxhZworCQkJCXN0YXRlLT5u ZWVkX3NldF9tcGVnX291dCAmPSAweEZFOwkJCQkJLy8gY2xvY2tzIHNldCBkb25lIC0+IGNs ZWFyIGZsYWcKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wo Y3gyNDEyMF9yZWFkX3N0YXR1cyk7CQkvLyBlbmQgY3gyNDEyMF9yZWFkX3N0YXR1cworLy89 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CitpbnQgY3gyNDEyMF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZl KQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJc3RydWN0IGN4MjQxMjBfc3Rh dGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMjBfY21k IGNtZDsKKwl1OCByZXQsIHJldF9FQSwgcmVnMSwgZkwsIGZIOworCXUzMiB2Y28sIHh0YWxf a2h6OworCXU2NCBpbnZfdmNvLCByZXMsIHh4eXl6ejsKKwlpbnQgcmVzZXRfcmVzdWx0Owor CisJaWYoIHN0YXRlLT5jb2xkX2luaXQgKSByZXR1cm4gMDsKKworCXJldCA9IGN4MjQxMjBf d3JpdGVyZWcoc3RhdGUsIDB4RUEsIDB4MDApOworCXJldCA9IGN4MjQxMjBfdGVzdF9yb20o c3RhdGUpOworCXJldCA9IGN4MjQxMjBfcmVhZHJlZyhzdGF0ZSwgMHhGQikgJiAweEZFOwor CXJldCA9IGN4MjQxMjBfd3JpdGVyZWcoc3RhdGUsIDB4RkIsIHJldCk7CisJcmV0ID0gY3gy NDEyMF9yZWFkcmVnKHN0YXRlLCAweEZDKSAmIDB4RkU7CisJcmV0ID0gY3gyNDEyMF93cml0 ZXJlZyhzdGF0ZSwgMHhGQywgcmV0KTsKKwlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRl LCAweEMzLCAweDA0KTsKKwlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRlLCAweEM0LCAw eDA0KTsKKwlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRlLCAweENFLCAweDAwKTsKKwly ZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRlLCAweENGLCAweDAwKTsKKwlyZXRfRUEgPSBj eDI0MTIwX3JlYWRyZWcoc3RhdGUsIDB4RUEpICYgMHhGRTsKKwlyZXQgPSBjeDI0MTIwX3dy aXRlcmVnKHN0YXRlLCAweEVBLCByZXRfRUEpOworCXJldCA9IGN4MjQxMjBfd3JpdGVyZWco c3RhdGUsIDB4RUIsIDB4MEMpOworCXJldCA9IGN4MjQxMjBfd3JpdGVyZWcoc3RhdGUsIDB4 RUMsIDB4MDYpOworCXJldCA9IGN4MjQxMjBfd3JpdGVyZWcoc3RhdGUsIDB4RUQsIDB4MDUp OworCXJldCA9IGN4MjQxMjBfd3JpdGVyZWcoc3RhdGUsIDB4RUUsIDB4MDMpOworCXJldCA9 IGN4MjQxMjBfd3JpdGVyZWcoc3RhdGUsIDB4RUYsIDB4MDUpOworCXJldCA9IGN4MjQxMjBf d3JpdGVyZWcoc3RhdGUsIDB4RjMsIDB4MDMpOworCXJldCA9IGN4MjQxMjBfd3JpdGVyZWco c3RhdGUsIDB4RjQsIDB4NDQpOworCQorCXJlZzEgPSAweEYwOworCWRvIHsKKwkJY3gyNDEy MF93cml0ZXJlZyhzdGF0ZSwgcmVnMSwgMHgwNCk7CisJCWN4MjQxMjBfd3JpdGVyZWcoc3Rh dGUsIHJlZzEgLSAxMCwgMHgwMik7CisJCSsrcmVnMTsKKwl9IHdoaWxlICggcmVnMSAhPSAw eEYzICk7CisKKwlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRlLCAweEVBLCAocmV0X0VB IHwgMHgwMSkpOworCQlyZWcxID0gMHhDNTsKKwlkbyB7CisJCXJldCA9IGN4MjQxMjBfd3Jp dGVyZWcoc3RhdGUsIHJlZzEsIDB4MDApOworCQlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0 YXRlLCByZWcxICsgMSwgMHgwMCk7CisJCXJlZzEgKz0gMjsKKyAgICB9IHdoaWxlICggcmVn MSAhPSAweENCICk7CisgICAgCisgICAgcmV0ID0gY3gyNDEyMF93cml0ZXJlZyhzdGF0ZSwg MHhFNCwgMHgwMyk7CisgICAgcmV0ID0gY3gyNDEyMF93cml0ZXJlZyhzdGF0ZSwgMHhFQiwg MHgwQSk7CisgICAgCisgICAgZGJnaW5mbygiUmVxdWVzdGluZyBmaXJtd2FyZSAoJXMpIHRv IGRvd25sb2FkLi4uXG4iLCBDWDI0MTIwX0ZJUk1XQVJFKTsKKyAgICByZXQgPSBzdGF0ZS0+ Y29uZmlnLT5yZXF1ZXN0X2Zpcm13YXJlKGZlLCAmZncsIENYMjQxMjBfRklSTVdBUkUpOwor CWlmIChyZXQpIHsKKwkJZXJyKCJDb3VsZCBub3QgbG9hZCBmaXJtd2FyZSAoJXMpOiAlZFxu IiwgQ1gyNDEyMF9GSVJNV0FSRSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZGJnaW5m bygiRmlybXdhcmUgZm91bmQgYW5kIGl0IHNpemUgaXMgJWQgYnl0ZXMgKCUwMnggJTAyeCAu LiAlMDJ4ICUwMngpXG4iLAorICAgICAgICAoaW50KWZ3LT5zaXplLAkJCQkvLyBmaXJtd2Fy ZV9zaXplIGluIGJ5dGVzIHUzMioKKyAgICAgICAgZnctPmRhdGFbMF0sCQkJLy8gZncgMXN0 IGJ5dGUKKyAgICAgICAgZnctPmRhdGFbMV0sCQkJLy8gZncgMmQgYnl0ZQorICAgICAgICBm dy0+ZGF0YVtmdy0+c2l6ZSAtIDJdLAkvLyBmdyBiZWZvcmUgbGFzdCBieXRlCisgICAgICAg IGZ3LT5kYXRhW2Z3LT5zaXplIC0gMV0pOwkvLyBmdyBsYXN0IGJ5dGUKKyAgICAgICAgCisg ICAgcmV0ID0gY3gyNDEyMF90ZXN0X3JvbShzdGF0ZSk7CisJcmV0ID0gY3gyNDEyMF9yZWFk cmVnKHN0YXRlLCAweEZCKSAmIDB4RkU7CisJcmV0ID0gY3gyNDEyMF93cml0ZXJlZyhzdGF0 ZSwgMHhGQiwgcmV0KTsKKwlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRlLCAweEUwLCAw eDc2KTsKKwlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRlLCAweEY3LCAweDgxKTsKKwly ZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRlLCAweEY4LCAweDAwKTsKKwlyZXQgPSBjeDI0 MTIwX3dyaXRlcmVnKHN0YXRlLCAweEY5LCAweDAwKTsKKwlyZXQgPSBjeDI0MTIwX3dyaXRl cmVnTihzdGF0ZSwgMHhGQSwgZnctPmRhdGEsIChmdy0+c2l6ZSAtIDEpLCAweDAwKTsKKwly ZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRlLCAweEY3LCAweEMwKTsKKwlyZXQgPSBjeDI0 MTIwX3dyaXRlcmVnKHN0YXRlLCAweEUwLCAweDAwKTsKKwlyZXQgPSAoZnctPnNpemUgLSAy KSAmIDB4MDBGRjsKKwlyZXQgPSBjeDI0MTIwX3dyaXRlcmVnKHN0YXRlLCAweEY4LCByZXQp OwkvLyByZXQgbm93IGlzIDB4N2EKKwlyZXQgPSAoKGZ3LT5zaXplIC0gMikgPj4gOCkgJiAw eDAwRkY7CisJcmV0ID0gY3gyNDEyMF93cml0ZXJlZyhzdGF0ZSwgMHhGOSwgcmV0KTsJLy8g cmV0IG5vdyBpcyAweGFmCisJcmV0ID0gY3gyNDEyMF93cml0ZXJlZyhzdGF0ZSwgMHhGNywg MHgwMCk7CisJcmV0ID0gY3gyNDEyMF93cml0ZXJlZyhzdGF0ZSwgMHhEQywgMHgwMCk7CisJ cmV0ID0gY3gyNDEyMF93cml0ZXJlZyhzdGF0ZSwgMHhEQywgMHgwNyk7CisJbXNsZWVwKDUw MCk7CisJCisJcmV0ID0gY3gyNDEyMF9yZWFkcmVnKHN0YXRlLCAweEUxKTsJCS8vIG5vdyBp cyAweGQ1IC0gbGFzdCBieXRlIG9mIHRoZSBmaXJtd2FyZQorICAgIGlmICggcmV0ID09IGZ3 LT5kYXRhW2Z3LT5zaXplIC0gMV0gKSB7CisJCWRiZ2luZm8oIkZpcm13YXJlIHVwbG9hZGVk IHN1Y2Nlc3NmdWxseVxuIik7CisJCXJlc2V0X3Jlc3VsdCA9IDA7CisJfSBlbHNlIHsKKwkJ ZXJyKCJGaXJtd2FyZSB1cGxvYWQgZmFpbGVkLiBMYXN0IGJ5dGUgcmV0dXJuZWQ9MHgleFxu IiwgcmV0ICk7CisJCXJlc2V0X3Jlc3VsdCA9IC1FUkVNT1RFSU87CisJfQorCXJldCA9IGN4 MjQxMjBfd3JpdGVyZWcoc3RhdGUsIDB4REMsIDB4MDApOwkJCisJcmVsZWFzZV9maXJtd2Fy ZShmdyk7CisJaWYgKHJlc2V0X3Jlc3VsdCkgCisJCXJldHVybiByZXNldF9yZXN1bHQ7CisJ CQorCS8vPT09PT09PT09PT09PT09PT09IFN0YXJ0IHR1bmVyCisJY3gyNDEyMF9tZXNzYWdl X2ZpbGwoJmNtZCwgQ01EX1NUQVJUX1RVTkVSLCAmY3gyNDEyMF9tc2dfdHVuZXJfaW5pdFsw XSwgMywgMCk7CS8vIDB4MUIKKwlpZihjeDI0MTIwX21lc3NhZ2Vfc2VuZChzdGF0ZSwgJmNt ZCkpIHsKKwkJZXJyKCJFcnJvciB0dW5lciBzdGFydCEgOihcbiIpOworCQlyZXR1cm4gLUVS RU1PVEVJTzsKKwl9CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgY3gyNDEyMF9j bWQpKTsKKwkKKwljbWQuaWQgPSBDTURfVkNPX1NFVDsJCS8vIDB4MTAKKwljbWQubGVuID0g MTI7CisJCisJLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCS8vIENhbGMgVkNPCisJeHRh bF9raHogPSAxMDExMTsKKwl4eHl5enogPSAweDQwMDAwMDAwMFVMTDsJLy8gMTcxNzk4Njkx ODQKKwl2Y28gPSB4dGFsX2toeiAqIDEwICogNDsJLy8gNDA0NDQwCisJaW52X3ZjbyA9IHh4 eXl6eiAvIHZjbzsJCS8vIDQyNDc4ID0gMHgwMEE1RUUKKwlyZXMgPSB4eHl5enogJSB2Y287 CQkJLy8gNjY4NjQgPSAweDAxMDUzMAkKKwkKKwlpZiggaW52X3ZjbyA+IHh0YWxfa2h6ICog MTAgKiAyKSArK2ludl92Y287CisJCQorCWZIID0gKGludl92Y28gPj4gOCkgJiAweEZGOwor CWZMID0gKGludl92Y28pICYgMHhGRjsKKyAgICBkYmdpbmZvKCJ2Y289ICVkLCBpbnZfdmNv PSAlbGxkLCByZXM9ICVsbGQsIGZMPSAweCV4LCBmSD0gMHgleFxuIiwgdmNvLCBpbnZfdmNv LCByZXMsIGZMLCBmSCk7CisgICAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgIAor CWNtZC5hcmdbMF0gPSAweDA2OworCWNtZC5hcmdbMV0gPSAweDJCOworCWNtZC5hcmdbMl0g PSAweEQ4OworCWNtZC5hcmdbM10gPSBmSDsJCS8vIDB4QTUKKwljbWQuYXJnWzRdID0gZkw7 CQkvLyAweEVFCisJY21kLmFyZ1s1XSA9IDB4MDM7CisJY21kLmFyZ1s2XSA9IDB4OUQ7CisJ Y21kLmFyZ1s3XSA9IDB4RkM7CisJY21kLmFyZ1s4XSA9IDB4MDY7CisJY21kLmFyZ1s5XSA9 IDB4MDM7CisJY21kLmFyZ1sxMF0gPSAweDI3OworCWNtZC5hcmdbMTFdID0gMHg3RjsKKwkK KwlpZihjeDI0MTIwX21lc3NhZ2Vfc2VuZChzdGF0ZSwgJmNtZCkpIHsKKwkJZXJyKCJFcnJv ciBzZXQgVkNPISA6KFxuIik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwltZW1zZXQo JmNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBjeDI0MTIwX2NtZCkpOworCS8vIHNldCBiYW5kd2lk dGgKKwljbWQuaWQgPSBDTURfQkFORFdJRFRIOwkJLy8gMHgxNQorCWNtZC5sZW4gPSAxMjsK KwljbWQuYXJnWzBdID0gMHgwMDsKKwljbWQuYXJnWzFdID0gMHgwMDsKKwljbWQuYXJnWzJd ID0gMHgwMDsKKwljbWQuYXJnWzNdID0gMHgwMDsKKwljbWQuYXJnWzRdID0gMHgwNTsKKwlj bWQuYXJnWzVdID0gMHgwMjsKKwljbWQuYXJnWzZdID0gMHgwMjsKKwljbWQuYXJnWzddID0g MHgwMDsKKwljbWQuYXJnWzhdID0gMHgwNTsKKwljbWQuYXJnWzldID0gMHgwMjsKKwljbWQu YXJnWzEwXSA9IDB4MDI7CisJY21kLmFyZ1sxMV0gPSAweDAwOworCQorCWlmICggY3gyNDEy MF9tZXNzYWdlX3NlbmQoc3RhdGUsICZjbWQpICkgeworCQllcnIoIkVycm9yIHNldCBiYW5k d2lkdGghIDooXG4iKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCXJldCA9IGN4MjQx MjBfcmVhZHJlZyhzdGF0ZSwgMHhCQSk7CisJaWYgKCByZXQgPiAzKSB7CisJCWRiZ2luZm8o IlJlc2V0LXJlYWRyZWcgMHhCQTogJXhcbiIsIHJldCk7CisJCWVycigiRXJyb3IgaW50aXRp bGl6aW5nIHR1bmVyISA6KFxuIik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlkYmdp bmZvKCJUdW5lciBpbml0aWFsaXplZCBjb3JyZWN0bHkuXG4iKTsKKworCXJldCA9IGN4MjQx MjBfd3JpdGVyZWcoc3RhdGUsIDB4RUIsIDB4MEEpOworCWlmIChjeDI0MTIwX21zZ19tcGVn X291dHB1dF9nbG9iYWxfY29uZmlnKHN0YXRlLCAwKSB8fAorCQljeDI0MTIwX21zZ19tcGVn X291dHB1dF9jb25maWcoc3RhdGUsIDAsICZpbml0aWFsX21wZWdfY29uZmlnKSB8fAorCQlj eDI0MTIwX21zZ19tcGVnX291dHB1dF9jb25maWcoc3RhdGUsIDEsICZpbml0aWFsX21wZWdf Y29uZmlnKSB8fAorCQljeDI0MTIwX21zZ19tcGVnX291dHB1dF9jb25maWcoc3RhdGUsIDIs ICZpbml0aWFsX21wZWdfY29uZmlnKSApCisJeworCQllcnIoIkVycm9yIGluaXRpbGl6aW5n IG1wZWcgb3V0cHV0LiA6KFxuIik7CisgICAgICAgIHJldHVybiAtRVJFTU9URUlPOworCX0g ZWxzZSB7CisJCWNtZC5pZCA9IDB4M0M7CS8vIDYwCisJCWNtZC5sZW4gPSAweDAzOworCQlj bWQuYXJnWzBdID0gMHgwMDsKKwkJY21kLmFyZ1sxXSA9IDB4MTA7CisJCWNtZC5hcmdbMl0g PSAweDEwOworCQlpZihjeDI0MTIwX21lc3NhZ2Vfc2VuZChzdGF0ZSwgJmNtZCkpIHsKKwkJ CWVycigiRXJyb3Igc2VuZGluZyBmaW5hbCBpbml0IG1lc3NhZ2UuIDooXG4iKTsKKwkJCXJl dHVybiAtRVJFTU9URUlPOworCQl9CQorICAgIH0KKwlzdGF0ZS0+Y29sZF9pbml0PTE7CisJ cmV0dXJuIDA7Cit9IAorRVhQT1JUX1NZTUJPTChjeDI0MTIwX2luaXQpOwkJLy8gZW5kIGN4 MjQxMjBfcmVzZXQKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIGludCBjeDI0MTIwX3R1bmUo c3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGJvb2wgcmVfdHVuZSwKKyAgICAgICAgdW5zaWdu ZWQgaW50IG1vZGVfZmxhZ3MsIHVuc2lnbmVkIGludCAqZGVsYXksIGZlX3N0YXR1c190ICpw X3N0YXR1cykKK3sKKyAgICAgICAgc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpw ID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisJc3RydWN0IGN4MjQxMjBfc3RhdGUgKnN0 YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IGRlbGF5X2NudCwgc2RfaWR4ID0g MDsKKwlmZV9zdGF0dXNfdCBzdGF0dXM7CisJCisJaWYgKHJlX3R1bmUpIHsKKwkJCisvLwkJ ZGJnaW5mbygiQ29tcGFyZSBzeW1yYXRlIHdpdGggdGFibGU6IHN5bXJhdGU9ICVkLCBpbiB0 YWJsZT0gJWRcbiIsIAorLy8JCQkJcC0+dS5xcHNrLnN5bWJvbF9yYXRlLCBzeW1yYXRlc19w YWlyc1tzZF9pZHhdLnN5bXJhdGUpOworCisJCXdoaWxlICggcC0+c3ltYm9sX3JhdGUgPiBz eW1yYXRlc19wYWlyc1tzZF9pZHhdLnN5bXJhdGUgKSB7CisJCQkrK3NkX2lkeDsKKwkJfQor CQlkYmdpbmZvKCJGb3VuZCBzeW1yYXRlIGRlbGF5ID0gJWRcbiIsIHN5bXJhdGVzX3BhaXJz W3NkX2lkeF0uZGVsYXkpOworCQlzdGF0ZS0+ZHZiX3MyX21vZGUgJj0gMHhGRTsJCQkvLyBj bGVhciBiaXQgLT4gdHJ5IG5vdCBEVkItUzIKKwkJZGJnaW5mbygidHJ5aW5nIERWQi1TID09 PT09PT09PT09PT09PT09XG4iKTsKKwkJY3gyNDEyMF9zZXRfZnJvbnRlbmQoZmUpOworCQkK KwkJZGVsYXlfY250ID0gc3ltcmF0ZXNfcGFpcnNbc2RfaWR4XS5kZWxheTsKKwkJZGJnaW5m bygiV2FpdCBmb3IgTE9DSyBmb3IgRFZCLVMgPT09PT09PT09PT09PT09PT1cbiIpOworCQl3 aGlsZSAoZGVsYXlfY250ID49IDApIHsKKwkJCWN4MjQxMjBfcmVhZF9zdGF0dXMoZmUsICZz dGF0dXMpOworCQkJaWYgKHN0YXR1cyAmIEZFX0hBU19MT0NLKSB7CisJCQkJZGJnaW5mbygi RFZCLVMgTE9DS0VEPT09PT09PT09PT09PT09PVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJ CQltc2xlZXAoMTAwKTsKKwkJCWRlbGF5X2NudCAtPTEwMDsKKwkJfQorCQlkYmdpbmZvKCJX YWl0aW5nIGZpbmlzaGVkIC0gTk8gbG9jayBmb3IgRFZCLVMgPT09PT09PT09PT09PT09PT1c biIpOworCQkKKwkJY3gyNDEyMF9yZWFkX3N0YXR1cyhmZSwgJnN0YXR1cyk7CisJCWlmICgg IShzdGF0dXMgJiBGRV9IQVNfTE9DSykgKSB7CQkvLyBpZiBubyBsb2NrIG9uIFMKKwkJCWRi Z2luZm8oInRyeWluZyBEVkItUzIgKysrKysrKysrKysrKysrKysrKysrKysrKytcbiIpOwor CQkJc3RhdGUtPmR2Yl9zMl9tb2RlIHw9IDB4MDE7CQkJLy8gbWF5IGJlIGl0IGxvY2tlZCBv biBTMiA/CisJCQlwLT5mZWNfaW5uZXIgPSBGRUNfQVVUTzsKKwkJCWN4MjQxMjBfc2V0X2Zy b250ZW5kKGZlKTsKKwkJCWRlbGF5X2NudCA9IHN5bXJhdGVzX3BhaXJzW3NkX2lkeF0uZGVs YXk7CisJCQlkYmdpbmZvKCJXYWl0IGZvciBMT0NLIGZvciBEVkItUzIgKysrKysrKysrKysr KysrK1xuIik7CisJCQl3aGlsZSAoZGVsYXlfY250ID49IDApIHsKKwkJCQljeDI0MTIwX3Jl YWRfc3RhdHVzKGZlLCAmc3RhdHVzKTsKKwkJCQlpZiAoc3RhdHVzICYgRkVfSEFTX0xPQ0sp IHsKKwkJCQkJZGJnaW5mbygiRFZCLVMyIExPQ0tFRCsrKysrKysrKysrKysrKytcbiIpOwor CQkJCQlicmVhazsKKwkJCQl9CisJCQkJbXNsZWVwKDEwMCk7CisJCQkJZGVsYXlfY250IC09 MTAwOworCQkJfQorCQkJZGJnaW5mbygiV2FpdGluZyBmaW5pc2hlZCAtIE5PIGxvY2sgZm9y IERWQi1TMiArKysrKysrKysrKysrKysrXG4iKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30K K0VYUE9SVF9TWU1CT0woY3gyNDEyMF90dW5lKTsJLy8gZW5kIG9mIGN4MjQxMjBfdHVuZQor Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitzdGF0aWMgaW50IGN4MjQxMjBfZ2V0X2FsZ28oc3RydWN0IGR2 Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIERWQkZFX0FMR09fSFc7Cit9CitFWFBPUlRf U1lNQk9MKGN4MjQxMjBfZ2V0X2FsZ28pOworLy89PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgaW50 IGN4MjQxMjBfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisgIHJldHVybiAw OworfQorRVhQT1JUX1NZTUJPTChjeDI0MTIwX3NsZWVwKTsKKy8vPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor LypzdGF0aWMgaW50IGN4MjQxMjBfd2FrZXVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQor ICogeworICogICByZXR1cm4gMDsKKyAqIH0KKyAqIEVYUE9SVF9TWU1CT0woY3gyNDEyMF93 YWtldXApOworICovCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0YXRpYyBpbnQgY3gyNDEyMF9nZXRf ZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIDA7Cit9CitF WFBPUlRfU1lNQk9MKGN4MjQxMjBfZ2V0X2Zyb250ZW5kKTsKKy8vPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor c3RhdGljIHZvaWQgY3gyNDEyMF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQor eworCXN0cnVjdCBjeDI0MTIwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2 OworCWRiZ2luZm8oIkNsZWFyIHN0YXRlIHN0cnVjdHVyZVxuIik7CisJa2ZyZWUoc3RhdGUp OworfQorRVhQT1JUX1NZTUJPTChjeDI0MTIwX3JlbGVhc2UpOworLy89PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CitzdGF0aWMgaW50IGN4MjQxMjBfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5k ICpmZSwgdTMyICp1Y2Jsb2NrcykJLy8gVU5DT1JSRUNURURfQkxPQ0tTCit7CisJc3RydWN0 IGN4MjQxMjBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwkqdWNi bG9ja3MgPSAoY3gyNDEyMF9yZWFkcmVnKHN0YXRlLCBDWDI0MTIwX1JFR19VQ0JfSCkgPDwg OCkgfAorCQljeDI0MTIwX3JlYWRyZWcoc3RhdGUsIENYMjQxMjBfUkVHX1VDQl9MKTsKKwlk YmdpbmZvKCJCbG9ja3MgPSAlZFxuIiwgKnVjYmxvY2tzKTsKKwlyZXR1cm4gMDsKK30KK0VY UE9SVF9TWU1CT0woY3gyNDEyMF9yZWFkX3VjYmxvY2tzKTsKKy8vICMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBj eDI0MTIwX29wcyA9IHsKKworCS5kZWxzeXMgPSB7IFNZU19EVkJTMiB9LAorCS5pbmZvID0g eworCQkubmFtZSA9ICJDb25leGFudCBDWDI0MTIwL0NYMjQxMTgiLAorCQkuZnJlcXVlbmN5 X21pbiA9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSAyMTUwMDAwLAorCQkuZnJlcXVl bmN5X3N0ZXBzaXplID0gMTAxMSwgLyoga0h6IGZvciBRUFNLIGZyb250ZW5kcyAqLworCQku ZnJlcXVlbmN5X3RvbGVyYW5jZSA9IDUwMDAsCisJCS5zeW1ib2xfcmF0ZV9taW4gPSAxMDAw MDAwLAorCQkuc3ltYm9sX3JhdGVfbWF4ID0gNDUwMDAwMDAsCisJCS5jYXBzID0gCQkJCQkJ Ly8gMHg1MDAwMDZmZgorCQkJRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwJCS8vMHgwMCAwMDAg MDAxCisJCQlGRV9DQU5fRkVDXzFfMiB8IAkJCS8vMHgwMCAwMDAgMDAyCisJCQlGRV9DQU5f RkVDXzJfMyB8IAkJCS8vMHgwMCAwMDAgMDA0CisJCQlGRV9DQU5fRkVDXzNfNCB8CQkJLy8w eDAwIDAwMCAwMDgKKwkJCUZFX0NBTl9GRUNfNF81IHwgCQkJLy8weDAwIDAwMCAwMTAKKwkJ CUZFX0NBTl9GRUNfNV82IHwgCQkJLy8weDAwIDAwMCAwMjAKKwkJCUZFX0NBTl9GRUNfNl83 IHwJCQkvLzB4MDAgMDAwIDA0MAorCQkJRkVfQ0FOX0ZFQ183XzggfCAJCQkvLzB4MDAgMDAw IDA4MAorCQkJRkVfQ0FOX0ZFQ19BVVRPIHwJCQkvLzB4MDAgMDAwIDIwMAorCQkJRkVfQ0FO X1FQU0sgfCAJCQkJLy8weDAwIDAwMCA0MDAKKy8vPz8/CQlGRV9IQVNfRVhURU5ERURfQ0FQ UyB8CQkvLzB4MDAgODAwIDAwMCAgIAkvKiBXZSBuZWVkIG1vcmUgYml0c3BhY2UgZm9yIG5l d2VyIEFQSXMsIGluZGljYXRlIHRoaXMuICovCisJCQlGRV9DQU5fMkdfTU9EVUxBVElPTiB8 CQkvLzB4MTAgMDAwIDAwMCAgIAkvKiBmcm9udGVuZCBzdXBwb3J0cyAiMm5kIGdlbmVyYXRp b24gbW9kdWxhdGlvbiIgKERWQi1TMikgKi8KKwkJCUZFX0NBTl9SRUNPVkVSCQkJCS8vMHg0 MCAwMDAgMDAwCQkvKiBmcm9udGVuZCBjYW4gcmVjb3ZlciBmcm9tIGEgY2FibGUgdW5wbHVn IGF1dG9tYXRpY2FsbHkgKi8KKwl9LAkJCQkJCQkJCS8vc3VtPTUwIDAwMCA2RkYKKwkucmVs ZWFzZSA9IAkJCQkJY3gyNDEyMF9yZWxlYXNlLAorCQorCS5pbml0ID0gCQkJCQljeDI0MTIw X2luaXQsIAorCS5zbGVlcCA9IAkJCQkJY3gyNDEyMF9zbGVlcCwKKwkKKwkudHVuZSA9IAkJ CQkJY3gyNDEyMF90dW5lLAorCS5nZXRfZnJvbnRlbmRfYWxnbyA9IAkJY3gyNDEyMF9nZXRf YWxnbywKKwkuc2V0X2Zyb250ZW5kID0gCQkJY3gyNDEyMF9zZXRfZnJvbnRlbmQsCisKKwku Z2V0X2Zyb250ZW5kID0gCQkJY3gyNDEyMF9nZXRfZnJvbnRlbmQsCisJLnJlYWRfc3RhdHVz ID0gCQkJCWN4MjQxMjBfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyID0gCQkJCWN4MjQxMjBf cmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gCWN4MjQxMjBfcmVhZF9zaWdu YWxfc3RyZW5ndGgsCisJLnJlYWRfc25yID0gCQkJCWN4MjQxMjBfcmVhZF9zbnIsCisJLnJl YWRfdWNibG9ja3MgPSAJCQljeDI0MTIwX3JlYWRfdWNibG9ja3MsCisJCisJLmRpc2VxY19z ZW5kX21hc3Rlcl9jbWQgPSAJY3gyNDEyMF9zZW5kX2Rpc2VxY19tc2csCisJCisJLmRpc2Vx Y19zZW5kX2J1cnN0ID0gCQljeDI0MTIwX2Rpc2VxY19zZW5kX2J1cnN0LAorCS5zZXRfdG9u ZSA9IAkJCQljeDI0MTIwX3NldF90b25lLAorCS5zZXRfdm9sdGFnZSA9IAkJCQljeDI0MTIw X3NldF92b2x0YWdlLAorfTsKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTU9EVUxFX1BBUk1fREVTQyhj eDI0MTIwX2RlYnVnLCAicHJpbnRzIHNvbWUgdmVyYm9zZSBkZWJ1Z2dpbmcgaW5mb3JtYXRp b24gKGRlZmF1bHQ6MCkiKTsKK01PRFVMRV9BVVRIT1IoIlNlcmdleSBUeXVyaW4iKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtTnVyRWJCdyAtLXN0cmlwLXRyYWlsaW5nLWNy IGxpbnV4LTMuNC1yMS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMF9jb25z dC5oIGxpbnV4LTMuNC1yMS1TMi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEy MF9jb25zdC5oCi0tLSBsaW51eC0zLjQtcjEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRz L2N4MjQxMjBfY29uc3QuaAkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMAor KysgbGludXgtMy40LXIxLVMyL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIw X2NvbnN0LmgJMjAxMi0wNC0wMyAxNjozNzoyMC42ODQxMzk5MDUgKzA0MDAKQEAgLTAsMCAr MSwyNTkgQEAKKy8qCisgKiBDb25leGFudCBDWDI0MTIwL0NYMjQxMTggLSBEVkItUy9TMiBk ZW1vZC90dW5lciBkcml2ZXIKKyAqIERWQlMvUzIgU2F0ZWxsaXRlIGRlbW9kL3R1bmVyIGRy aXZlciBzdGF0aWMgZGVmaW5pdGlucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTZXJn ZXkgVHl1cmluIDxmb3J1bS5mcmVlLXguZGU+CisgKiBVcGRhdGVkIDIwMTIgYnkgSmFubmlz IEFjaHN0ZXR0ZXIgPGphbm5pc19hY2hzdGV0dGVyQHdlYi5kZT4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0 aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAq LworCisjZGVmaW5lIENYMjQxMjBfRklSTVdBUkUgImR2Yi1mZS1jeDI0MTIwLTEuMjAuNTgu Mi5mdyIKKworLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyAjIyMgY3gy NDEyMCBpMmMgcmVnaXN0ZXJzICMjIworI2RlZmluZSBDWDI0MTIwX1JFR19DTURfU1RBUlQg KDB4MDApCS8vIHdyaXRlIGNtZF9pZCwgYW5kIHRoZW4gc3RhcnQgd3JpdGUgYXJncyB0byBu ZXh0IHJlZ2lzdGVyOgorI2RlZmluZSBDWDI0MTIwX1JFR19DTURfQVJHUyAoMHgwMSkJCS8v IHdyaXRlIGNvbW1hbmQgYXJndW1lbnRzLCBtYXggNCBhdCBvbmNlLCB0aGVuIG5leHQgNCwg ZXRjLgorI2RlZmluZSBDWDI0MTIwX1JFR19DTURfRU5EICgweDFGKQkJLy8gd3JpdGUgMHgw MSBmb3IgZW5kLCBhbmQgcmVhZCBpdCBmb3IgY29tbWFuZCByZXN1bHQKKworI2RlZmluZSBD WDI0MTIwX1JFR19GRUNNT0RFICgweDM5KQkJLy8gRkVDIHN0YXR1cworI2RlZmluZSBDWDI0 MTIwX1JFR19TVEFUVVMgKDB4M0EpCQkvLyBUdW5lciBzdGF0dXMgLSBzaWduYWwsIGNhcnJp ZXIsIHN5bmMsIGxvY2sgLi4uCisjZGVmaW5lIENYMjQxMjBfUkVHX1FVQUxJVFlfSCAoMHg0 MCkJLy8gU05SIGhpZ2ggYnl0ZQorI2RlZmluZSBDWDI0MTIwX1JFR19RVUFMSVRZX0wgKDB4 NDEpCS8vIFNOUiBsb3cgYnl0ZQorCisjZGVmaW5lIENYMjQxMjBfUkVHX0JFUl9ISCAoMHg0 NykJCS8vIEJFUiBoaWdoIGJ5dGUgb2YgaGlnaCB3b3JkCisjZGVmaW5lIENYMjQxMjBfUkVH X0JFUl9ITCAoMHg0OCkJCS8vIEJFUiBsb3cgYnl0ZSBvZiBoaWdoIHdvcmQKKyNkZWZpbmUg Q1gyNDEyMF9SRUdfQkVSX0xIICgweDQ5KQkJLy8gQkVSIGhpZ2ggYnl0ZSBvZiBsb3cgd29y ZAorI2RlZmluZSBDWDI0MTIwX1JFR19CRVJfTEwgKDB4NEEpCQkvLyBCRVIgbG93IGJ5dGUg b2YgbG93IHdvcmQKKworI2RlZmluZSBDWDI0MTIwX1JFR19TSUdTVFJfSCAoMHgzQSkJCS8v IFNpZ25hbCBzdHJlbmd0aCBoaWdoIGJ5dGUgJiA/Pz8gc3RhdHVzIHJlZ2lzdGVyID8/Pwor I2RlZmluZSBDWDI0MTIwX1JFR19TSUdTVFJfTCAoMHgzQikJCS8vIFNpZ25hbCBzdHJlbmd0 aCBsb3cgYnl0ZQorCisjZGVmaW5lIENYMjQxMjBfUkVHX1VDQl9IICgweDUwKQkJLy8gVUNC IGhpZ2ggYnl0ZQorI2RlZmluZSBDWDI0MTIwX1JFR19VQ0JfTCAoMHg1MSkJCS8vIFVDQiBs b3cgYnl0ZQorCisjZGVmaW5lIENYMjQxMjBfUkVHX1JFVklTSU9OICgweEZGKQkJLy8gQ2hp cCByZXZpc2lvbiAocm8pLiBNdXN0IGJlIDB4NyBvciAweDUKKworLy8gIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisvKiBDb21tYW5kIG1lc3NhZ2VzICovCitlbnVtIGNvbW1h bmRfbWVzc2FnZV9pZCB7CisJQ01EX1ZDT19TRVQJCQk9IDB4MTAsCQkvLyBjbWRsZW4gPSAx MjsKKwlDTURfVFVORVJFUVVFU1QJCT0gMHgxMSwJCS8vIGNtZC5sZW4gPSAxNTsKKwkKKwlD TURfTVBFR19PTk9GRgkJPSAweDEzLAkJLy8gY21kLmxlbiA9IDQ7CisJQ01EX01QRUdfSU5J VAkJPSAweDE0LAkJLy8gY21kLmxlbiA9IDc7CisJQ01EX0JBTkRXSURUSAkJPSAweDE1LAkJ Ly8gY21kLmxlbiA9IDEyOworCUNNRF9DTE9DS19SRUFECQk9IDB4MTYsCQkvLyByZWFkIGNs b2NrIGZyb20gcmVnaXN0ZXJzIDB4MDEtMHgwNgorCUNNRF9DTE9DS19TRVQJCT0gMHgxNywJ CS8vIGNtZC5sZW4gPSAxMDsKKwkKKwlDTURfRElTRVFDX01TRzEJCT0gMHgyMCwJCS8vIGNt ZC5sZW4gPSAxMTsKKwlDTURfRElTRVFDX01TRzIJCT0gMHgyMSwJCS8vIGNtZC5sZW4gPSBk LT5tc2dfbGVuICsgNjsKKwlDTURfU0VUVk9MVEFHRQkJPSAweDIyLAkJLy8gY21kLmxlbiA9 IDI7CisJQ01EX1NFVFRPTkUJCQk9IDB4MjMsCQkvLyBjbWQubGVuID0gNDsKKwlDTURfRElT RVFDX0JVUlNUCT0gMHgyNCwJCS8vIGNtZC5sZW4gbm90IHVzZWQgISEhCisJCisJQ01EX1JF QURfU05SCQk9IDB4MUEsCQkvLyBSZWFkIHNpZ25hbCBzdHJlbmd0aAorCUNNRF9TVEFSVF9U VU5FUgkJPSAweDFCLAkJLy8gPz8/CisJCisJQ01EX1RVTkVSX0lOSVQJCT0gMHgzQywJCS8v IGNtZC5sZW4gPSAweDAzOworfTsKKy8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworLyogc2lnbmFsIHN0YXR1cyAqLworI2RlZmluZSBDWDI0MTIwX0hBU19TSUdOQUwgICgw eDAxKQorI2RlZmluZSBDWDI0MTIwX0hBU19DQVJSSUVSICgweDAyKQorI2RlZmluZSBDWDI0 MTIwX0hBU19WSVRFUkJJCSgweDA0KQorI2RlZmluZSBDWDI0MTIwX0hBU19MT0NLIAkoMHgw OCkKKyNkZWZpbmUgQ1gyNDEyMF9IQVNfVU5LMSAJKDB4MTApCisjZGVmaW5lIENYMjQxMjBf SEFTX1VOSzIgCSgweDIwKQorI2RlZmluZSBDWDI0MTIwX1NUQVRVU19NQVNLICgweDBmKQor I2RlZmluZSBDWDI0MTIwX1NJR05BTF9NQVNLICgweGMwKQorCitzdGF0aWMgdTggY3gyNDEy MF9tc2dfdHVuZXJfaW5pdFtdID0geyAwLDAsMCwwLDAsMCB9Oworc3RhdGljIHU4IGN4MjQx MjBfbXNnX3JlYWRfc2lnc3RyW10gPSB7MCwwfTsKKworc3RhdGljIHN0cnVjdCBjeDI0MTIw X3NreXN0YXIyX21wZWdfY29uZmlnIHsKKwl1OCB4MTsKKwl1OCB4MjsKKwl1OCB4MzsKK30g aW5pdGlhbF9tcGVnX2NvbmZpZyA9IHsJCisJMHhBMSwgCS8vIDEwMTAwMDAxCisJMHg3Niwg CS8vIDAxMTEwMTEwCisJMHgwNywJLy8gMDAwMDAxMTEKK307CisKK3N0YXRpYyBzdHJ1Y3Qg Y3gyNDEyMF9zeW1yYXRlX2RlbGF5IHsKKwl1MzIgc3ltcmF0ZTsKKwl1MzIgZGVsYXk7Cit9 IHN5bXJhdGVzX3BhaXJzW10gPSB7CisJeyAgICAzMDAwMDAwLCAxNTAwMCB9LAorCXsgICAg NjAwMDAwMCwgMTAwMDAgfSwKKwl7ICAgIDgwMDAwMDAsICA1MDAwIH0sCisJeyAgIDEwMDAw MDAwLCAgMjAwMCB9LAorCXsweDBGRkZGRkZGRiwgICA0MDAgfSwKK307CisKK3N0YXRpYyBz dHJ1Y3QgY3gyNDEyMF9jbG9ja19yYXRpb3NfdGFibGUgeworCXUzMiByYXRpb19pZDsKKwl1 MzIgbW9kZV94UFNLOworCXUzMiBmZWNfbW9kZTsKKwl1MzIJbV9yYXQ7CisJdTMyIG5fcmF0 OworCXUzMiByYXRlOworfSBjbG9ja19yYXRpb3NfdGFibGVbXSA9IHsKK3sJMjEJLAkwCSwJ MQksCTc3MDA2OAksCTc2MzUxNQksCTI1OAl9LAorewkyMQksCTAJLAkxMDAJLAk5NzQwOQks CTgwMzcwCSwJMzEwCX0sCit7CTIxCSwJMAksCTIJLAkxMzcyOTMJLAkxMDE4MDIJLAkzNDUJ fSwKK3sJMjEJLAkwCSwJMwksCTQ2MzM0NDcJLAkzMDU0MDYwCSwJMzg4CX0sCit7CTIxCSwJ MAksCTQJLAkyNDcyMDQxCSwJMTUyNzAzMAksCTQxNAl9LAorewkyMQksCTAJLAk1CSwJODU5 MDQJLAk1MDkwMQksCTQzMgl9LAorewkyMQksCTAJLAk4CSwJMjc1MTIyOQksCTE1MjcwMzAJ LAk0NjEJfSwKK3sJMjEJLAkwCSwJMTAxCSwJMTM5Mjg3MgksCTc2MzUxNQksCTQ2Nwl9LAor ewkyMQksCTk5CSwJMTAwCSwJMTg1MDc3MQksCTEwMTk0MzAJLAk0NjQJfSwKK3sJMjEJLAk5 OQksCTIJLAkxMzcyOTMJLAk2Nzk2MgksCTUxNwl9LAorewkyMQksCTk5CSwJMwksCTQ2MzM0 NDcJLAkyMDM4ODYwCSwJNTgxCX0sCS8vIHdhcyA0IC0gRVJST1JSISBGRUNfNF81IG5vdCBp biBEVkItUzIKK3sJMjEJLAk5OQksCTUJLAk4NTkwNAksCTMzOTgxCSwJNjQ3CX0sCit7CTIx CSwJOTkJLAk4CSwJMjc1MTIyOQksCTEwMTk0MzAJLAk2OTAJfSwKK3sJMjEJLAk5OQksCTEw MQksCTEzOTI4NzIJLAk1MDk3MTUJLAk2OTkJfSwKK3sJMjkJLAkwCSwJMQksCTc3MDA2OAks CTc4MjEyNwksCTI1Mgl9LAorewkyOQksCTAJLAkxMDAJLAkxODUwNzcxCSwJMTU2NDI1NAks CTMwMgl9LAorewkyOQksCTAJLAkyCSwJNjg2NDY1CSwJNTIxNDE4CSwJMzM3CX0sCit7CTI5 CSwJMAksCTMJLAk0NjMzNDQ3CSwJMzEyODUwOAksCTM3OQl9LAorewkyOQksCTAJLAk0CSwJ MjQ3MjA0MQksCTE1NjQyNTQJLAk0MDQJfSwKK3sJMjkJLAkwCSwJNQksCTQyOTUyMAksCTI2 MDcwOQksCTQyMQl9LAorewkyOQksCTAJLAk4CSwJMjc1MTIyOQksCTE1NjQyNTQJLAk0NTAJ fSwKK3sJMjkJLAkwCSwJMTAxCSwJMTM5Mjg3MgksCTc4MjEyNwksCTQ1NQl9LAorewkyOQks CTk5CSwJMTAwCSwJMTg1MDc3MQksCTEwNDMxMTgJLAk0NTQJfSwKK3sJMjkJLAk5OQksCTIJ LAk2ODY0NjUJLAkzNDc3MDYJLAk1MDUJfSwKK3sJMjkJLAk5OQksCTMJLAk0NjMzNDQ3CSwJ MjA4NjIzNgksCTU2OAl9LAkvLyB3YXMgNCAtIEVSUk9SUiEgRkVDXzRfNSBub3QgaW4gRFZC LVMyCit7CTI5CSwJOTkJLAk1CSwJNDI5NTIwCSwJMTczODUzCSwJNjMyCX0sCit7CTI5CSwJ OTkJLAk4CSwJMjc1MTIyOQksCTEwNDMxMTgJLAk2NzUJfSwKK3sJMjkJLAk5OQksCTEwMQks CTEzOTI4NzIJLAk1MjE1NTkJLAk2ODMJfSwKK3sJMTcJLAkwCSwJMQksCTc2NjA1MgksCTc2 MzUxNQksCTI1Ngl9LAorewkxNwksCTAJLAkxMDAJLAk5NjkwMQksCTgwMzcwCSwJMzA4CX0s Cit7CTE3CSwJMAksCTIJLAkxMzY1NzcJLAkxMDE4MDIJLAkzNDMJfSwKK3sJMTcJLAkwCSwJ MwksCTQ2MDkyODMJLAkzMDU0MDYwCSwJMzg2CX0sCit7CTE3CSwJMAksCTQJLAkyNDU5MTQ5 CSwJMTUyNzAzMAksCTQxMgl9LAorewkxNwksCTAJLAk1CSwJODU0NTYJLAk1MDkwMQksCTQy OQl9LAorewkxNwksCTAJLAk4CSwJMjczNjg4MQksCTE1MjcwMzAJLAk0NTgJfSwKK3sJMTcJ LAkwCSwJMTAxCSwJMTM4NTYwOAksCTc2MzUxNQksCTQ2NAl9LAorewkxNwksCTk5CSwJMTAw CSwJMTg0MTExOQksCTEwMTk0MzAJLAk0NjIJfSwKK3sJMTcJLAk5OQksCTIJLAkxMzY1NzcJ LAk2Nzk2MgksCTUxNAl9LAorewkxNwksCTk5CSwJMwksCTQ2MDkyODMJLAkyMDM4ODYwCSwJ NTc4CX0sCS8vIHdhcyA0IC0gRVJST1JSISBGRUNfNF81IG5vdCBpbiBEVkItUzIKK3sJMTcJ LAk5OQksCTUJLAk4NTQ1NgksCTMzOTgxCSwJNjQzCX0sCit7CTE3CSwJOTkJLAk4CSwJMjcz Njg4MQksCTEwMTk0MzAJLAk2ODcJfSwKK3sJMTcJLAk5OQksCTEwMQksCTEzODU2MDgJLAk1 MDk3MTUJLAk2OTUJfSwKK3sJMjUJLAkwCSwJMQksCTc2NjA1MgksCTc4MjEyNwksCTI1MAl9 LAorewkyNQksCTAJLAkxMDAJLAkxODQxMTE5CSwJMTU2NDI1NAksCTMwMQl9LAorewkyNQks CTAJLAkyCSwJNjgyODg1CSwJNTIxNDE4CSwJMzM1CX0sCit7CTI1CSwJMAksCTMJLAk0NjA5 MjgzCSwJMzEyODUwOAksCTM3Nwl9LAorewkyNQksCTAJLAk0CSwJMjQ1OTE0OQksCTE1NjQy NTQJLAk0MDIJfSwKK3sJMjUJLAkwCSwJNQksCTQyNzI4MAksCTI2MDcwOQksCTQxOQl9LAor ewkyNQksCTAJLAk4CSwJMjczNjg4MQksCTE1NjQyNTQJLAk0NDcJfSwKK3sJMjUJLAkwCSwJ MTAxCSwJMTM4NTYwOAksCTc4MjEyNwksCTQ1Mwl9LAorewkyNQksCTk5CSwJMTAwCSwJMTg0 MTExOQksCTEwNDMxMTgJLAk0NTEJfSwKK3sJMjUJLAk5OQksCTIJLAk2ODI4ODUJLAkzNDc3 MDYJLAk1MDIJfSwKK3sJMjUJLAk5OQksCTMJLAk0NjA5MjgzCSwJMjA4NjIzNgksCTU2NQl9 LAkvLyB3YXMgNCAtIEVSUk9SUiEgRkVDXzRfNSBub3QgaW4gRFZCLVMyCit7CTI1CSwJOTkJ LAk1CSwJNDI3MjgwCSwJMTczODUzCSwJNjI5CX0sCit7CTI1CSwJOTkJLAk4CSwJMjczNjg4 MQksCTEwNDMxMTgJLAk2NzEJfSwKK3sJMjUJLAk5OQksCTEwMQksCTEzODU2MDgJLAk1MjE1 NTkJLAk2ODAJfSwKK3sJNQksCTAJLAkxCSwJMjczMDg4CSwJMjU0NTA1CSwJMjc0CX0sCit7 CTUJLAkwCSwJMTAwCSwJMTcyNzIJLAkxMzM5NQksCTMzMAl9LAorewk1CSwJMAksCTIJLAky NDM0NAksCTE2OTY3CSwJMzY3CX0sCit7CTUJLAkwCSwJMwksCTQxMDc4OAksCTI1NDUwNQks CTQxMwl9LAorewk1CSwJMAksCTQJLAk0MzgzMjgJLAkyNTQ1MDUJLAk0NDAJfSwKK3sJNQks CTAJLAk1CSwJMzA0NjQJLAkxNjk2NwksCTQ1OQl9LAorewk1CSwJMAksCTgJLAk0ODc4MzIJ LAkyNTQ1MDUJLAk0OTAJfSwKK3sJNQksCTAJLAkxMDEJLAk0OTM5NTIJLAkyNTQ1MDUJLAk0 OTYJfSwKK3sJNQksCTk5CSwJMTAwCSwJMzI4MTY4CSwJMTY5OTA1CSwJNDk0CX0sCit7CTUJ LAk5OQksCTIJLAkyNDM0NAksCTExMzI3CSwJNTUwCX0sCS8vIHdvcmsgZm9yIDB4MGQgLSAx MTI3OFYgLSBEVkItUzIgLSA4UFNLIE1QRUctNC9IRAorewk1CSwJOTkJLAkzCSwJNDEwNzg4 CSwJMTY5OTA1CSwJNjE4CX0sCS8vIDB4MGUgUzIgOHBzayAgICAgICAgLy8gd2FzIDQgLSBF UlJPUlIhIEZFQ180XzUgbm90IGluIERWQi1TMgorewk1CSwJOTkJLAk1CSwJMzA0NjQJLAkx MTMyNwksCTY4OAl9LAorewk1CSwJOTkJLAk4CSwJNDg3ODMyCSwJMTY5OTA1CSwJNzM1CX0s Cit7CTUJLAk5OQksCTEwMQksCTQ5Mzk1MgksCTE2OTkwNQksCTc0NAl9LAorewkxMwksCTAJ LAkxCSwJMjczMDg4CSwJMjYwNzA5CSwJMjY4CX0sCit7CTEzCSwJMAksCTEwMAksCTMyODE2 OAksCTI2MDcwOQksCTMyMgl9LAorewkxMwksCTAJLAkyCSwJMTIxNzIwCSwJODY5MDMJLAkz NTgJfSwKK3sJMTMJLAkwCSwJMwksCTQxMDc4OAksCTI2MDcwOQksCTQwMwl9LAorewkxMwks CTAJLAk0CSwJNDM4MzI4CSwJMjYwNzA5CSwJNDMwCX0sCit7CTEzCSwJMAksCTUJLAkxNTIz MjAJLAk4NjkwMwksCTQ0OAl9LAorewkxMwksCTAJLAk4CSwJNDg3ODMyCSwJMjYwNzA5CSwJ NDc5CX0sCit7CTEzCSwJMAksCTEwMQksCTQ5Mzk1MgksCTI2MDcwOQksCTQ4NQl9LAorewkx MwksCTk5CSwJMTAwCSwJMzI4MTY4CSwJMTczODUzCSwJNDgzCX0sCit7CTEzCSwJOTkJLAky CSwJMTIxNzIwCSwJNTc5NTEJLAk1MzcJfSwgLy8gd29yayBmb3IgMHg4ZCAtIGR2Yi1zMiA4 cHNrCit7CTEzCSwJOTkJLAkzCSwJNDEwNzg4CSwJMTczODUzCSwJNjA0CX0sCS8vIHdhcyA0 IC0gRVJST1JSISBGRUNfNF81IG5vdCBpbiBEVkItUzIKK3sJMTMJLAk5OQksCTUJLAkxNTIz MjAJLAk1Nzk1MQksCTY3Mgl9LAorewkxMwksCTk5CSwJOAksCTQ4NzgzMgksCTE3Mzg1Mwks CTcxOAl9LAorewkxMwksCTk5CSwJMTAxCSwJNDkzOTUyCSwJMTczODUzCSwJNzI3CX0sCit7 CTEJLAkwCSwJMQksCTgxNTI0OAksCTc2MzUxNQksCTI3Mwl9LAorewkxCSwJMAksCTEwMAks CTUxNTYyCSwJNDAxODUJLAkzMjgJfSwKK3sJMQksCTAJLAkyCSwJNzI2NzQJLAk1MDkwMQks CTM2NQl9LAorewkxCSwJMAksCTMJLAkxMjI2MzIzCSwJNzYzNTE1CSwJNDExCX0sCit7CTEJ LAkwCSwJNAksCTEzMDg1MzgJLAk3NjM1MTUJLAk0MzgJfSwKK3sJMQksCTAJLAk1CSwJOTA5 NDQJLAk1MDkwMQksCTQ1Nwl9LAorewkxCSwJMAksCTgJLAkxNDU2MzIyCSwJNzYzNTE1CSwJ NDg4CX0sCit7CTEJLAkwCSwJMTAxCSwJMTQ3NDU5MgksCTc2MzUxNQksCTQ5NAl9LAorewkx CSwJOTkJLAkxMDAJLAk5Nzk2NzgJLAk1MDk3MTUJLAk0OTIJfSwKK3sJMQksCTk5CSwJMgks CTcyNjc0CSwJMzM5ODEJLAk1NDcJfSwKK3sJMQksCTk5CSwJMwksCTEyMjYzMjMJLAk1MDk3 MTUJLAk2MTUJfSwJLy8gd2FzIDQgLSBFUlJPUlIhPyBGRUNfNF81IG5vdCBpbiBEVkItUzIK K3sJMQksCTk5CSwJNQksCTkwOTQ0CSwJMzM5ODEJLAk2ODUJfSwKK3sJMQksCTk5CSwJOAks CTE0NTYzMjIJLAk1MDk3MTUJLAk3MzEJfSwKK3sJMQksCTk5CSwJMTAxCSwJMTQ3NDU5Mgks CTUwOTcxNQksCTc0MAl9LAorewk5CSwJMAksCTEJLAk4MTUyNDgJLAk3ODIxMjcJLAkyNjYJ fSwKK3sJOQksCTAJLAkxMDAJLAk5Nzk2NzgJLAk3ODIxMjcJLAkzMjAJfSwKK3sJOQksCTAJ LAkyCSwJMzYzMzcwCSwJMjYwNzA5CSwJMzU2CX0sCit7CTkJLAkwCSwJMwksCTEyMjYzMjMJ LAk3ODIxMjcJLAk0MDEJfSwKK3sJOQksCTAJLAk0CSwJMTMwODUzOAksCTc4MjEyNwksCTQy OAl9LAorewk5CSwJMAksCTUJLAk0NTQ3MjAJLAkyNjA3MDkJLAk0NDYJfSwKK3sJOQksCTAJ LAk4CSwJMTQ1NjMyMgksCTc4MjEyNwksCTQ3Ngl9LAorewk5CSwJMAksCTEwMQksCTE0NzQ1 OTIJLAk3ODIxMjcJLAk0ODIJfSwKK3sJOQksCTk5CSwJMTAwCSwJOTc5Njc4CSwJNTIxNTU5 CSwJNDgwCX0sCit7CTkJLAk5OQksCTIJLAkzNjMzNzAJLAkxNzM4NTMJLAk1MzUJfSwKK3sJ OQksCTk5CSwJMwksCTEyMjYzMjMJLAk1MjE1NTkJLAk2MDEJfSwJLy8gd2FzIDQgLSBFUlJP UlIhIEZFQ180XzUgbm90IGluIERWQi1TMgorewk5CSwJOTkJLAk1CSwJNDU0NzIwCSwJMTcz ODUzCSwJNjY5CX0sCit7CTkJLAk5OQksCTgJLAkxNDU2MzIyCSwJNTIxNTU5CSwJNzE0CX0s Cit7CTkJLAk5OQksCTEwMQksCTE0NzQ1OTIJLAk1MjE1NTkJLAk3MjMJfSwKK3sJMTgJLAkw CSwJMQksCTUzNQksCTU4OAksCTIzMwl9LAorewkxOAksCTAJLAkyCSwJMTA3MAksCTg4Mgks CTMxMQl9LAorewkxOAksCTAJLAk2CSwJMzIxMAksCTIwNTgJLAkzOTkJfSwKK3sJMTYJLAkw CSwJMQksCTc2MwksCTgxNgksCTIzOQl9LAorewkxNgksCTAJLAkyCSwJMTUyNgksCTEyMjQJ LAkzMTkJfSwKK3sJMTYJLAkwCSwJMwksCTIyODkJLAkxNjMyCSwJMzU5CX0sCit7CTE2CSwJ MAksCTUJLAkzODE1CSwJMjQ0OAksCTM5OQl9LAorewkxNgksCTAJLAk3CSwJNTM0MQksCTMy NjQJLAk0MTkJfSwKK3sJMjIJLAkwCSwJMQksCTUzNQksCTU4OAksCTIzMwl9LAorewkyMgks CTAJLAkyCSwJMTA3MAksCTg4MgksCTMxMQl9LAorewkyMgksCTAJLAk2CSwJMzIxMAksCTIw NTgJLAkzOTkJfSwKK3sJMjAJLAkwCSwJMQksCTE0MzQyOQksCTE1MjU5MgksCTI0MQl9LAor ewkyMAksCTAJLAkyCSwJMjg2ODU4CSwJMjI4ODg4CSwJMzIxCX0sCit7CTIwCSwJMAksCTMJ LAk0MzAyODcJLAkzMDUxODQJLAkzNjEJfSwKK3sJMjAJLAkwCSwJNQksCTcxNzE0NQksCTQ1 Nzc3NgksCTQwMQl9LAorewkyMAksCTAJLAk3CSwJMTAwNDAwMwksCTYxMDM2OAksCTQyMQl9 LAorewkyCSwJMAksCTEJLAk1ODQJLAk1ODgJLAkyNTQJfSwKK3sJMgksCTAJLAkyCSwJMTE2 OQksCTg4MgksCTMzOQl9LAorewkyCSwJMAksCTYJLAkzNTA3CSwJMjA1OAksCTQzNgl9LAor ewkwCSwJMAksCTEJLAk4MTIJLAk4MTYJLAkyNTUJfSwKK3sJMAksCTAJLAkyCSwJMTYyNAks CTEyMjQJLAkzNDAJfSwKK3sJMAksCTAJLAkzCSwJMjQzNgksCTE2MzIJLAkzODIJfSwKK3sJ MAksCTAJLAk1CSwJNDA2MAksCTI0NDgJLAk0MjUJfSwKK3sJMAksCTAJLAk3CSwJNTY4NAks CTMyNjQJLAk0NDYJfSwKK3sJNgksCTAJLAkxCSwJNTg0CSwJNTg4CSwJMjU0CX0sCit7CTYJ LAkwCSwJMgksCTExNjgJLAk4ODIJLAkzMzkJfSwKK3sJNgksCTAJLAk2CSwJMzUwNAksCTIw NTgJLAk0MzYJfSwKK3sJNAksCTAJLAkxCSwJMTUyNTkyCSwJMTUyNTkyCSwJMjU2CX0sCit7 CTQJLAkwCSwJMgksCTMwNTE4NAksCTIyODg4OAksCTM0MQl9LAorewk0CSwJMAksCTMJLAk0 NTc3NzYJLAkzMDUxODQJLAkzODQJfSwKK3sJNAksCTAJLAk1CSwJNzYyOTYwCSwJNDU3Nzc2 CSwJNDI3CX0sCit7CTQJLAkwCSwJNwksCTEwNjgxNDQJLAk2MTAzNjgJLAk0NDgJfSwKK307 CmRpZmYgLU51ckViQncgLS1zdHJpcC10cmFpbGluZy1jciBsaW51eC0zLjQtcjEvZHJpdmVy cy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjAuaCBsaW51eC0zLjQtcjEtUzIvZHJpdmVy cy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjAuaAotLS0gbGludXgtMy40LXIxL2RyaXZl cnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIwLmgJMTk3MC0wMS0wMSAwMzowMDowMC4w MDAwMDAwMDAgKzAzMDAKKysrIGxpbnV4LTMuNC1yMS1TMi9kcml2ZXJzL21lZGlhL2R2Yi9m cm9udGVuZHMvY3gyNDEyMC5oCTIwMTItMDQtMDMgMTA6Mjc6NTkuMDAwMDAwMDAwICswNDAw CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb25leGFudCBDWDI0MTIwL0NYMjQxMTggLSBE VkItUy9TMiBkZW1vZC90dW5lciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg UGF0cmljayBCb2V0dGNoZXIgPHBiQGxpbnV4dHYub3JnPgorICogQ29weXJpZ2h0IChDKSAy MDA5IFNlcmdleSBUeXVyaW4gPGZvcnVtLmZyZWUteC5kZT4KKyAqIFVwZGF0ZWQgMjAxMiBi eSBKYW5uaXMgQWNoc3RldHRlciA8amFubmlzX2FjaHN0ZXR0ZXJAd2ViLmRlPgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAq IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq IEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwg VVNBLgorICovCisKKyNpZm5kZWYgQ1gyNDEyMF9ICisjZGVmaW5lIENYMjQxMjBfSAorCisj aW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKK3N0cnVjdCBmaXJtd2FyZTsKK3N0 cnVjdCBkdmJfZnJvbnRlbmQ7CitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CisKK3N0cnVjdCBjeDI0 MTIwX2NvbmZpZworeworCXU4IGkyY19hZGRyOworCWludCAoKnJlcXVlc3RfZmlybXdhcmUp KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdywg Y2hhciAqbmFtZSk7CisJdm9pZCAoKnN0cmVhbV9jb250cm9sKShzdHJ1Y3QgZHZiX2Zyb250 ZW5kICpmZSwgdTggb25vZmYpOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDI0 MTIwKSB8fCBcCisJKGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTIwX01PRFVMRSkgJiYgZGVm aW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMjBfYXR0 YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTIwX2NvbmZpZyAqY29uZmlnLAorCQlzdHJ1Y3QgaTJj X2FkYXB0ZXIgKmkyYyk7CitleHRlcm4gaW50IGN4MjQxMjBfcmVzZXQoc3RydWN0IGR2Yl9m cm9udGVuZCAqZmUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBkdmJfZnJvbnRl bmQgKmN4MjQxMjBfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTIwX2NvbmZpZyAqY29uZmln LAorCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5H ICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1 cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGN4MjQxMjBfcmVzZXQoc3RydWN0IGR2 Yl9mcm9udGVuZCAqZmUpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBk aXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIC1FTk9ERVY7Cit9 CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLU51ckViQncgLS1zdHJpcC10cmFpbGluZy1jciBs aW51eC0zLjQtcjEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcgbGludXgt My40LXIxLVMyL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCi0tLSBsaW51 eC0zLjQtcjEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcJMjAxMi0wNC0w MyAxNToyMzo0NC45NzYxNDM0NDQgKzA0MDAKKysrIGxpbnV4LTMuNC1yMS1TMi9kcml2ZXJz L21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwkyMDEyLTA0LTAzIDE1OjI2OjQwLjc2MDE0 MTUxMyArMDQwMApAQCAtMTgsNiArMTgsMTMgQEAKIGNvbW1lbnQgIk11bHRpc3RhbmRhcmQg KHNhdGVsbGl0ZSkgZnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIAorY29uZmln IERWQl9DWDI0MTIwCisJdHJpc3RhdGUgIkNvbmV4YW50IENYMjQxMjAgYmFzZWQiCisJZGVw ZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlT RQorCWhlbHAKKwkgIEEgRFZCLVMvRFZCLVMyIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5 b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbmZpZyBEVkJfU1RCMDg5 OQogCXRyaXN0YXRlICJTVEIwODk5IGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYg STJDCmRpZmYgLU51ckViQncgLS1zdHJpcC10cmFpbGluZy1jciBsaW51eC0zLjQtcjEvZHJp dmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlIGxpbnV4LTMuNC1yMS1TMi9kcml2 ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKLS0tIGxpbnV4LTMuNC1yMS9kcml2 ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUJMjAxMi0wNC0wMyAxNToyMzo0NC45 NzYxNDM0NDQgKzA0MDAKKysrIGxpbnV4LTMuNC1yMS1TMi9kcml2ZXJzL21lZGlhL2R2Yi9m cm9udGVuZHMvTWFrZWZpbGUJMjAxMi0wNC0wMyAxNToyNjo0MC43NjAxNDE1MTMgKzA0MDAK QEAgLTIwLDYgKzIwLDcgQEAKIG9iai0kKENPTkZJR19EVkJfQ1gyMjcwMCkgKz0gY3gyMjcw MC5vCiBvYmotJChDT05GSUdfRFZCX1M1SDE0MzIpICs9IHM1aDE0MzIubwogb2JqLSQoQ09O RklHX0RWQl9DWDI0MTEwKSArPSBjeDI0MTEwLm8KK29iai0kKENPTkZJR19EVkJfQ1gyNDEy MCkgKz0gY3gyNDEyMC5vCiBvYmotJChDT05GSUdfRFZCX1REQTgwODMpICs9IHRkYTgwODMu bwogb2JqLSQoQ09ORklHX0RWQl9MNjQ3ODEpICs9IGw2NDc4MS5vCiBvYmotJChDT05GSUdf RFZCX0RJQjMwMDBNQikgKz0gZGliMzAwMG1iLm8K --------------080201090607070703070100--