From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 27EBBC25B75 for ; Thu, 6 Jun 2024 12:40:48 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sFCPo-000152-Dx; Thu, 06 Jun 2024 08:40:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sFCPl-00013B-Lg for grub-devel@gnu.org; Thu, 06 Jun 2024 08:40:21 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sFCPj-0002OJ-AK for grub-devel@gnu.org; Thu, 06 Jun 2024 08:40:21 -0400 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 456C1WNA005235; Thu, 6 Jun 2024 12:40:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc : content-transfer-encoding : date : from : in-reply-to : message-id : mime-version : references : subject : to; s=pp1; bh=hdul58qtIEndI+BOF9weP7Y36kRVOGrpBXJMxTmoiOo=; b=DTUZwQgeJ0rDgfupDXTxI/tuIztAwM62rMYOQ6mO0DGHFqYbzPQMh2lHX8De0J54xRxe 1FGWx0slNtpgfMVoGBrbsDPIT+2A+/oBxkfbMLgaL3p4ltApqFdpXyiXU39LM48G79Ds o8UKyvyF1exQrkkB40duPxV18ltyBlQqE6deBwPJ4gUT34xZu+iRimnVIeBc2KZKCGZI BKbkryJP1U9PwLmtlWU3kQf7ulQisI5mllpsOdAsKuAoMPvg1eNEM5fXcO8roIGyuo7Y JC8RP8m1zpAKe1VVpfal7pJs+cZeu8onAaPZLZnO1DcWOEBJ6VT2coEZTRAw7RVKZDz7 7w== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3ykb340e6r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 06 Jun 2024 12:40:18 +0000 Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 456BcMgs000829; Thu, 6 Jun 2024 12:40:17 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 3ygdyuasg5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 06 Jun 2024 12:40:17 +0000 Received: from smtpav04.fra02v.mail.ibm.com (smtpav04.fra02v.mail.ibm.com [10.20.54.103]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 456Ce6v935848554 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 6 Jun 2024 12:40:08 GMT Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7733020040; Thu, 6 Jun 2024 12:40:06 +0000 (GMT) Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5169C2004D; Thu, 6 Jun 2024 12:40:04 +0000 (GMT) Received: from li-5fd77d4c-2a67-11b2-a85c-de894c326bed.ibm.com.com (unknown [9.43.125.5]) by smtpav04.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 6 Jun 2024 12:40:04 +0000 (GMT) From: Avnish Chouhan To: grub-devel@gnu.org Cc: daniel.kiper@oracle.com, brking@linux.ibm.com, meghanaprakash@in.ibm.com, Avnish Chouhan , Diego Domingos Subject: [PATCH v3 5/6] ieee1275: add support for NVMeoFC Date: Thu, 6 Jun 2024 18:07:26 +0530 Message-Id: <20240606123727.38614-6-avnish@linux.ibm.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20240606123727.38614-1-avnish@linux.ibm.com> References: <20240606123727.38614-1-avnish@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: E_CHsxfgN5w0yhS-yG17P5vtLc-MIGRD X-Proofpoint-ORIG-GUID: E_CHsxfgN5w0yhS-yG17P5vtLc-MIGRD X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.28.16 definitions=2024-06-06_01,2024-06-06_02,2024-05-17_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 suspectscore=0 mlxlogscore=999 bulkscore=0 spamscore=0 lowpriorityscore=0 impostorscore=0 mlxscore=0 priorityscore=1501 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2405010000 definitions=main-2406060092 Received-SPF: pass client-ip=148.163.158.5; envelope-from=avnish@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgdG8gc2NhbiBhbmQgZGlzY292ZXJ5 IG9mIE5WTWVvRkMuCgpTaWduZWQtb2ZmLWJ5OiBEaWVnbyBEb21pbmdvcyA8ZGllZ29kb0Bici5p Ym0uY29tPgpTaWduZWQtb2ZmLWJ5OiBBdm5pc2ggQ2hvdWhhbiA8YXZuaXNoQGxpbnV4LmlibS5j b20+Ci0tLQogZ3J1Yi1jb3JlL2Rpc2svaWVlZTEyNzUvb2ZkaXNrLmMgfCAzOTAgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDI5NiBpbnNlcnRpb25zKCspLCA5NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9n cnViLWNvcmUvZGlzay9pZWVlMTI3NS9vZmRpc2suYyBiL2dydWItY29yZS9kaXNrL2llZWUxMjc1 L29mZGlzay5jCmluZGV4IGFmZGMyNzIuLmNlYTEwZTEgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9k aXNrL2llZWUxMjc1L29mZGlzay5jCisrKyBiL2dydWItY29yZS9kaXNrL2llZWUxMjc1L29mZGlz ay5jCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8Z3J1Yi9pZWVlMTI3NS9vZmRpc2suaD4K ICNpbmNsdWRlIDxncnViL2kxOG4uaD4KICNpbmNsdWRlIDxncnViL3RpbWUuaD4KKyNkZWZpbmUg RVhURU5EX1BBVEhfNjQgNjQKKyNkZWZpbmUgRVhURU5EX1BBVEhfNTEyIDUxMgogCiBzdGF0aWMg Y2hhciAqbGFzdF9kZXZwYXRoOwogc3RhdGljIGdydWJfaWVlZTEyNzVfaWhhbmRsZV90IGxhc3Rf aWhhbmRsZTsKQEAgLTIwNywxMTYgKzIwOSwzMTYgQEAgZGV2X2l0ZXJhdGVfcmVhbCAoY29uc3Qg Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCkKIH0KIAogc3RhdGljIHZvaWQKLWRldl9pdGVy YXRlIChjb25zdCBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9kZXZhbGlhcyAqYWxpYXMpCitkZXZfaXRl cmF0ZV9mY3BfZGlza3MgKGNvbnN0IHN0cnVjdCBncnViX2llZWUxMjc1X2RldmFsaWFzICphbGlh cykKIHsKLSAgaWYgKGdydWJfc3RyY21wIChhbGlhcy0+dHlwZSwgImZjcCIpID09IDApCisgIC8q CisgICAqIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggZmNwIGRldmljZXMsIHdlIG5lZWQKKyAgICog dG8gZmluZCB0aGUgV1dQTnMgYW5kIExVTnMgdG8gaXRlcmF0ZSB0aGVtCisgICAqLworICBncnVi X2llZWUxMjc1X2loYW5kbGVfdCBpaGFuZGxlOworICBncnViX3VpbnQ2NF90ICpwdHJfdGFyZ2V0 cywgKnB0cl9sdW5zLCBrLCBsOworICB1bnNpZ25lZCBpbnQgaSwgaiwgcG9zOworICBjaGFyICpi dWYsICpidWZwdHI7CisgIHN0cnVjdCBzZXRfZmNwX3RhcmdldHNfYXJncworICB7CisgICAgc3Ry dWN0IGdydWJfaWVlZTEyNzVfY29tbW9uX2hkciBjb21tb247CisgICAgZ3J1Yl9pZWVlMTI3NV9j ZWxsX3QgbWV0aG9kOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGloYW5kbGU7CisgICAgZ3J1 Yl9pZWVlMTI3NV9jZWxsX3QgY2F0Y2hfcmVzdWx0OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90 IG5lbnRyaWVzOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOworICB9IGFyZ3NfdGFy Z2V0czsKKworICBzdHJ1Y3Qgc2V0X2ZjcF9sdW5zX2FyZ3MKKyAgeworICAgIHN0cnVjdCBncnVi X2llZWUxMjc1X2NvbW1vbl9oZHIgY29tbW9uOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG1l dGhvZDsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBpaGFuZGxlOworICAgIGdydWJfaWVlZTEy NzVfY2VsbF90IHd3cG5faDsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCB3d3BuX2w7CisgICAg Z3J1Yl9pZWVlMTI3NV9jZWxsX3QgY2F0Y2hfcmVzdWx0OworICAgIGdydWJfaWVlZTEyNzVfY2Vs bF90IG5lbnRyaWVzOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOworICB9IGFyZ3Nf bHVuczsKKworICBzdHJ1Y3QgYXJnc19yZXQKKyAgeworICAgIGdydWJfdWludDY0X3QgYWRkcjsK KyAgICBncnViX3VpbnQ2NF90IGxlbjsKKyAgfTsKKyAgc3RydWN0IGFyZ3NfcmV0ICp0YXJnZXRz X3RhYmxlOworICBzdHJ1Y3QgYXJnc19yZXQgKmx1bnNfdGFibGU7CisKKyAgaWYgKGdydWJfaWVl ZTEyNzVfb3BlbiAoYWxpYXMtPnBhdGgsICZpaGFuZGxlKSkKICAgICB7Ci0gICAgICAvKgotICAg ICAgICogSWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBmY3AgZGV2aWNlcywgd2UgbmVlZAotICAgICAg ICogdG8gZmluZCB0aGUgV1dQTnMgYW5kIExVTnMgdG8gaXRlcmF0ZSB0aGVtCi0gICAgICAgKi8K LSAgICAgIGdydWJfaWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGU7Ci0gICAgICBncnViX3VpbnQ2 NF90ICpwdHJfdGFyZ2V0cywgKnB0cl9sdW5zLCBrLCBsOwotICAgICAgdW5zaWduZWQgaW50IGks IGosIHBvczsKLSAgICAgIGNoYXIgKmJ1ZiwgKmJ1ZnB0cjsKLSAgICAgIHN0cnVjdCBzZXRfZmNw X3RhcmdldHNfYXJncwotICAgICAgewotICAgICAgICBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9jb21t b25faGRyIGNvbW1vbjsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbWV0aG9kOwotICAg ICAgICBncnViX2llZWUxMjc1X2NlbGxfdCBpaGFuZGxlOwotICAgICAgICBncnViX2llZWUxMjc1 X2NlbGxfdCBjYXRjaF9yZXN1bHQ7Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG5lbnRy aWVzOwotICAgICAgICBncnViX2llZWUxMjc1X2NlbGxfdCB0YWJsZTsKLSAgICAgIH0gYXJnc190 YXJnZXRzOwotCi0gICAgICBzdHJ1Y3Qgc2V0X2ZjcF9sdW5zX2FyZ3MKLSAgICAgIHsKLSAgICAg ICAgc3RydWN0IGdydWJfaWVlZTEyNzVfY29tbW9uX2hkciBjb21tb247Ci0gICAgICAgIGdydWJf aWVlZTEyNzVfY2VsbF90IG1ldGhvZDsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgaWhh bmRsZTsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qgd3dwbl9oOwotICAgICAgICBncnVi X2llZWUxMjc1X2NlbGxfdCB3d3BuX2w7Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGNh dGNoX3Jlc3VsdDsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbmVudHJpZXM7Ci0gICAg ICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOwotICAgICAgfSBhcmdzX2x1bnM7Ci0KLSAg ICAgIHN0cnVjdCBhcmdzX3JldAotICAgICAgewotICAgICAgICBncnViX3VpbnQ2NF90IGFkZHI7 Ci0gICAgICAgIGdydWJfdWludDY0X3QgbGVuOwotICAgICAgfTsKKyAgICAgIGdydWJfZHByaW50 ZiAoImRpc2siLCAiZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sgd2hpbGUgaXRlcmF0aW5nIEZDUCBk aXNrIHBhdGg9JXNcbiIsIGFsaWFzLT5wYXRoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg LyogU2V0dXAgdGhlIGZjcC10YXJnZXRzIG1ldGhvZCB0byBjYWxsIHZpYSBwZncqLworICBJTklU X0lFRUUxMjc1X0NPTU1PTiAoJmFyZ3NfdGFyZ2V0cy5jb21tb24sICJjYWxsLW1ldGhvZCIsIDIs IDMpOworICBhcmdzX3RhcmdldHMubWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90KSAiZmNw LXRhcmdldHMiOworICBhcmdzX3RhcmdldHMuaWhhbmRsZSA9IGloYW5kbGU7CiAKLSAgICAgIGlm IChncnViX2llZWUxMjc1X29wZW4gKGFsaWFzLT5wYXRoLCAmaWhhbmRsZSkpCisgIC8qIFNldHVw IHRoZSBmY3AtbHVucyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3ICovCisgIElOSVRfSUVFRTEyNzVf Q09NTU9OICgmYXJnc19sdW5zLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgNCwgMyk7CisgIGFyZ3Nf bHVucy5tZXRob2QgPSAoZ3J1Yl9pZWVlMTI3NV9jZWxsX3QpICJmY3AtbHVucyI7CisgIGFyZ3Nf bHVucy5paGFuZGxlID0gaWhhbmRsZTsKKyAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllfRk4gKCZh cmdzX3RhcmdldHMpID09IC0xKQorICAgIHsKKyAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAi ZmFpbGVkIHRvIGdldCB0aGUgdGFyZ2V0cyB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0l c1xuIiwgYWxpYXMtPnBhdGgpOworICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7 CisgICAgICByZXR1cm47CisgICAgfQorICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1aWxkaW5n IHRoZSBwYXRoICovCisgIGJ1ZiA9IGdydWJfbWFsbG9jIChncnViX3N0cmxlbiAoYWxpYXMtPnBh dGgpICsgRVhURU5EX1BBVEhfNjQpOworICBpZiAoIWJ1ZikKKyAgICB7CisgICAgICBncnViX2ll ZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGJ1ZnB0ciA9 IGdydWJfc3RwY3B5IChidWYsIGFsaWFzLT5wYXRoKTsKKworICAvKgorICAgKiBJdGVyYXRlIG92 ZXIgZW50cmllcyByZXR1cm5lZCBieSBwZncuIEVhY2ggZW50cnkgY29udGFpbnMgYQorICAgKiBw b2ludGVyIHRvIHd3cG4gdGFibGUgYW5kIGhpcyBsZW5ndGguCisgICAqLworICB0YXJnZXRzX3Rh YmxlID0gKHN0cnVjdCBhcmdzX3JldCAqKSAoYXJnc190YXJnZXRzLnRhYmxlKTsKKyAgZm9yIChp ID0gMDsgaSA8IGFyZ3NfdGFyZ2V0cy5uZW50cmllczsgaSsrKQorICAgIHsKKyAgICAgIHB0cl90 YXJnZXRzID0gKGdydWJfdWludDY0X3QqKSB0YXJnZXRzX3RhYmxlW2ldLmFkZHI7CisgICAgICAv KiBJdGVyYXRlIG92ZXIgYWxsIHd3cG5zIGluIGdpdmVuIHRhYmxlICovCisgICAgICBmb3IgKGsg PSAwOyBrIDwgdGFyZ2V0c190YWJsZVtpXS5sZW47IGsrKykKICAgICAgICAgewotICAgICAgICAg IGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sgd2hpbGUgaXRl cmF0aW5nIEZDUCBkaXNrIHBhdGg9JXNcbiIsIGFsaWFzLT5wYXRoKTsKLSAgICAgICAgICByZXR1 cm47CisgICAgICAgICAgYXJnc19sdW5zLnd3cG5fbCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkg KCpwdHJfdGFyZ2V0cyk7CisgICAgICAgICAgYXJnc19sdW5zLnd3cG5faCA9IChncnViX2llZWUx Mjc1X2NlbGxfdCkgKCpwdHJfdGFyZ2V0cyA+PiAzMik7CisgICAgICAgICAgcG9zID0gZ3J1Yl9z bnByaW50ZiAoYnVmcHRyLCAzMiwgIi9kaXNrQCUiIFBSSXhHUlVCX1VJTlQ2NF9ULAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKnB0cl90YXJnZXRzKyspOworICAgICAgICAgIC8qIEdl dCB0aGUgbHVucyBmb3IgZ2l2ZW4gd3dwbiB0YXJnZXQgKi8KKyAgICAgICAgICBpZiAoSUVFRTEy NzVfQ0FMTF9FTlRSWV9GTiAoJmFyZ3NfbHVucykgPT0gLTEpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdldCB0aGUgTFVOUyB3 aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYnVmKTsKKyAgICAgICAgICAgICAg Z3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgICAgICAgICAgICAgIGdydWJfZnJlZSAo YnVmKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgIGx1 bnNfdGFibGUgPSAoc3RydWN0IGFyZ3NfcmV0ICopIChhcmdzX2x1bnMudGFibGUpOworCisgICAg ICAgICAgLyogSXRlcmF0ZSBvdmVyIGFsbCBMVU5zICovCisgICAgICAgICAgZm9yIChqID0gMDsg aiA8IGFyZ3NfbHVucy5uZW50cmllczsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBwdHJfbHVucyA9IChncnViX3VpbnQ2NF90KikgKGdydWJfdWludDMyX3QpIGx1bnNfdGFibGVb al0uYWRkcjsKKyAgICAgICAgICAgICAgZm9yIChsID0gMDsgbCA8IGx1bnNfdGFibGVbal0ubGVu OyBsKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZ3J1Yl9zbnByaW50 ZiAoJmJ1ZnB0cltwb3NdLCAzMCwgIiwlIiBQUkl4R1JVQl9VSU5UNjRfVCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpwdHJfbHVucysrKTsKKyAgICAgICAgICAgICAgICAgIGRl dl9pdGVyYXRlX3JlYWwgKGJ1ZiwgYnVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CiAgICAgICAgIH0KKyAgICB9CisgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOwor ICBncnViX2ZyZWUgKGJ1Zik7CisgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2Rldl9pdGVy YXRlX2ZjcF9udm1lb2YgKGNvbnN0IHN0cnVjdCBncnViX2llZWUxMjc1X2RldmFsaWFzICphbGlh cykKK3sKKyAgY2hhciAqYnVmcHRyOworICBncnViX2llZWUxMjc1X2loYW5kbGVfdCBpaGFuZGxl OworCisgIC8qIENyZWF0ZSB0aGUgc3RydWN0cyBmb3IgdGhlIHBhcmFtZXRlcnMgcGFzc2luZyB0 byBQRlcgKi8KKyAgc3RydWN0IG52bWVfYXJncworICB7CisgICAgc3RydWN0IGdydWJfaWVlZTEy NzVfY29tbW9uX2hkciBjb21tb247CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbWV0aG9kOwor ICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGloYW5kbGU7CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxs X3QgY2F0Y2hfcmVzdWx0OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG5lbnRyaWVzOworICAg IGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOworICB9IG52bWVfZGlzY292ZXJ5X2NvbnRyb2xs ZXJzX2FyZ3MsIG52bWVfY29udHJvbGxlcnNfYXJncywgbnZtZV9uYW1lc3BhY2VzX2FyZ3M7CisK KyAgLyogQ3JlYXRlIHRoZSBzdHJ1Y3RzIGZvciB0aGUgcmVzdWx0cyBmcm9tIFBGVyAqLworICBz dHJ1Y3QgZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3RhYmxlX3N0cnVjdAorICB7CisgICAgZ3J1Yl91 aW50NjRfdCB0YWJsZVsyNTZdOworICAgIGdydWJfdWludDMyX3QgbGVuOworICB9IGRpc2NvdmVy eV9jb250cm9sbGVyc190YWJsZTsKKworICAvKgorICAgKiBzdHJ1Y3QgbnZtZV9jb250cm9sbGVy c190YWJsZV9lbnRyeQorICAgKiB0aGlzIHRoZSByZXR1cm4gb2YgbnZtZS1jb250cm9sbGVycyBt ZXRob2QgdGFibGVzLCBjb250YWluaW5nOgorICAgKiAtIDItYnl0ZSBjb250cm9sbGVyIElECisg ICAqIC0gMjU2LWJ5dGUgdHJhbnNwb3J0IGFkZHJlc3Mgc3RyaW5nCisgICAqIC0gMjU2LWJ5dGUg ZmllbGQgY29udGFpbmluZyBudWxsLXRlcm1pbmF0ZWQgTlZNIHN1YnN5c3RlbSBOUU4gc3RyaW5n IHVwIHRvIDIyMyBjaGFyYWN0ZXJzCisgICAqLworICBzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190 YWJsZV9lbnRyeQorICB7CisgICAgZ3J1Yl91aW50MTZfdCBpZDsKKyAgICBjaGFyIHd3cG5bMjU2 XTsKKyAgICBjaGFyIG5xblsyNTZdOworICB9OworCisgIHN0cnVjdCBudm1lX2NvbnRyb2xsZXJz X3RhYmxlX2VudHJ5X3JlYWwKKyAgeworICAgIGdydWJfdWludDE2X3QgaWQ7CisgICAgY2hhciB3 d3BuWzI1Nl07CisgICAgY2hhciBucW5bMjU2XTsKKyAgfTsKKworICBzdHJ1Y3QgbnZtZV9jb250 cm9sbGVyc190YWJsZV9lbnRyeSogbnZtZV9jb250cm9sbGVyc190YWJsZTsKKyAgZ3J1Yl91aW50 MzJfdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJpZXM7CisgIGNoYXIgKmJ1ZjsKKyAgdW5z aWduZWQgaW50IGkgPSAwOworICBpbnQgY3VycmVudF9idWZmZXJfaW5kZXg7CisgIGludCBudm1l X2NvbnRyb2xsZXJfaW5kZXg7CisgIGludCBidWZwdHJfcG9zMjsKKyAgZ3J1Yl91aW50MzJfdCBu YW1lc3BhY2VfaW5kZXggPSAwOworICBzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRy eSogbnZtZV9jb250cm9sbGVyc190YWJsZV9idWY7CisKKyAgbnZtZV9jb250cm9sbGVyc190YWJs ZSA9IGdydWJfbWFsbG9jIChzaXplb2YgKHN0cnVjdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2Vu dHJ5KSAqIDI1Nik7CisgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgYnVpbGRpbmcgdGhlIE5WTWVv RiBwYXRoICovCisgIGJ1ZiA9IGdydWJfbWFsbG9jIChncnViX3N0cmxlbiAoYWxpYXMtPnBhdGgp ICsgRVhURU5EX1BBVEhfNTEyKTsKKworICBpZiAoIWJ1ZiB8fCAhbnZtZV9jb250cm9sbGVyc190 YWJsZSkKKyAgICB7CisgICAgICBncnViX2ZyZWUgKG52bWVfY29udHJvbGxlcnNfdGFibGUpOwor ICAgICAgZ3J1Yl9mcmVlIChidWYpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBDb3B5 IHRoZSBhbGlhcy0+cGF0aCB0byBidWYgc28gd2UgY2FuIHdvcmsgd2l0aCAqLworICBidWZwdHIg PSBncnViX3N0cGNweSAoYnVmLCBhbGlhcy0+cGF0aCk7CisgIGdydWJfc25wcmludGYgKGJ1ZnB0 ciwgMzIsICIvbnZtZS1vZiIpOworCisgIC8qCisgICAqICBPcGVuIHRoZSBudm1lLW9mIGxheWVy CisgICAqICBFeC4gIC9wY2lAYnVzL2ZpYnJlLWNoYW5uZWxAQGRldixmdW5jL252bWUtb2YKKyAg ICovCisgIGlmIChncnViX2llZWUxMjc1X29wZW4gKGJ1ZiwgJmloYW5kbGUpKQorICAgIHsKKyAg ICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sgd2hpbGUg aXRlcmF0aW5nIEZDUCBkaXNrIHBhdGg9JXNcbiIsIGJ1Zik7CisgICAgICBncnViX2ZyZWUgKG52 bWVfY29udHJvbGxlcnNfdGFibGUpOworICAgICAgZ3J1Yl9mcmVlIChidWYpOworICAgICAgcmV0 dXJuOworICAgIH0KKworICAvKgorICAgKiBDYWxsIHRvIG52bWUtZGlzY292ZXJ5LWNvbnRyb2xs ZXJzIG1ldGhvZCBmcm9tIHRoZSBudm1lLW9mIGxheWVyCisgICAqIHRvIGdldCBhIGxpc3Qgb2Yg dGhlIE5WTWUgZGlzY292ZXJ5IGNvbnRyb2xsZXJzIHBlciB0aGUgYmluZGluZworICAgKi8KKyAg SU5JVF9JRUVFMTI3NV9DT01NT04gKCZudm1lX2Rpc2NvdmVyeV9jb250cm9sbGVyc19hcmdzLmNv bW1vbiwgImNhbGwtbWV0aG9kIiwgMiwgMik7CisgIG52bWVfZGlzY292ZXJ5X2NvbnRyb2xsZXJz X2FyZ3MubWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90KSAibnZtZS1kaXNjb3ZlcnktY29u dHJvbGxlcnMiOworICBudm1lX2Rpc2NvdmVyeV9jb250cm9sbGVyc19hcmdzLmloYW5kbGUgPSBp aGFuZGxlOworICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9GTiAoJm52bWVfZGlzY292ZXJ5X2Nv bnRyb2xsZXJzX2FyZ3MpID09IC0xKQorICAgIHsKKyAgICAgIGdydWJfZHByaW50ZiAoImRpc2si LCAiZmFpbGVkIHRvIGdldCB0aGUgdGFyZ2V0cyB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0 aD0lc1xuIiwgYnVmKTsKKyAgICAgIGdydWJfZnJlZSAobnZtZV9jb250cm9sbGVyc190YWJsZSk7 CisgICAgICBncnViX2ZyZWUgKGJ1Zik7CisgICAgICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFu ZGxlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogQWZ0ZXIgY2xvc2luZyB0aGUgZGV2 aWNlLCB0aGUgaW5mbyBpcyBsb3N0LiBTbyBsZXRzIGNvcHkgZWFjaCBidWZmZXIgaW4gdGhlIGJ1 ZmZlcnMgdGFibGUgKi8KKyAgZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3RhYmxlLmxlbiA9IChncnVi X3VpbnQzMl90KSBudm1lX2Rpc2NvdmVyeV9jb250cm9sbGVyc19hcmdzLm5lbnRyaWVzOworCisg IGZvciAoaSA9IDA7IGkgPCBkaXNjb3ZlcnlfY29udHJvbGxlcnNfdGFibGUubGVuOyBpKyspCisg ICAgeworICAgICAgZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3RhYmxlLnRhYmxlW2ldID0gKChncnVi X3VpbnQ2NF90KikgbnZtZV9kaXNjb3ZlcnlfY29udHJvbGxlcnNfYXJncy50YWJsZSlbaV07Cisg ICAgfQogCi0gICAgICAvKiBTZXR1cCB0aGUgZmNwLXRhcmdldHMgbWV0aG9kIHRvIGNhbGwgdmlh IHBmdyovCi0gICAgICBJTklUX0lFRUUxMjc1X0NPTU1PTiAoJmFyZ3NfdGFyZ2V0cy5jb21tb24s ICJjYWxsLW1ldGhvZCIsIDIsIDMpOwotICAgICAgYXJnc190YXJnZXRzLm1ldGhvZCA9IChncnVi X2llZWUxMjc1X2NlbGxfdCkgImZjcC10YXJnZXRzIjsKLSAgICAgIGFyZ3NfdGFyZ2V0cy5paGFu ZGxlID0gaWhhbmRsZTsKKyAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgIGdydWJf ZHByaW50ZiAoIm9mZGlzayIsIk5WTWVvRjogRm91bmQgJWQgZGlzY292ZXJ5IGNvbnRyb2xsZXJz XG4iLCBkaXNjb3ZlcnlfY29udHJvbGxlcnNfdGFibGUubGVuKTsKIAotICAgICAgLyogU2V0dXAg dGhlIGZjcC1sdW5zIG1ldGhvZCB0byBjYWxsIHZpYSBwZncgKi8KLSAgICAgIElOSVRfSUVFRTEy NzVfQ09NTU9OICgmYXJnc19sdW5zLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgNCwgMyk7Ci0gICAg ICBhcmdzX2x1bnMubWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90KSAiZmNwLWx1bnMiOwot ICAgICAgYXJnc19sdW5zLmloYW5kbGUgPSBpaGFuZGxlOwotICAgICAgaWYgKElFRUUxMjc1X0NB TExfRU5UUllfRk4gKCZhcmdzX3RhcmdldHMpID09IC0xKQorICAvKiBGb3IgZWFjaCBudm1lIGRp c2NvdmVyeSBjb250cm9sbGVyICovCisgIGZvciAoY3VycmVudF9idWZmZXJfaW5kZXggPSAwOyBj dXJyZW50X2J1ZmZlcl9pbmRleCA8IChpbnQpIGRpc2NvdmVyeV9jb250cm9sbGVyc190YWJsZS5s ZW47IGN1cnJlbnRfYnVmZmVyX2luZGV4KyspCisgICAgeworICAgICAgZ3J1Yl9zbnByaW50ZiAo YnVmcHRyLCA2NCwgIi9udm1lLW9mL2NvbnRyb2xsZXJAJSIgUFJJeEdSVUJfVUlOVDY0X1QgIixm ZmZmIiwKKyAgICAgICAgICAgICAgICAgICAgIGRpc2NvdmVyeV9jb250cm9sbGVyc190YWJsZS50 YWJsZVtjdXJyZW50X2J1ZmZlcl9pbmRleF0pOworICAgICAgZ3J1Yl9kcHJpbnRmKCJvZmRpc2si LCAibnZtZW9mIGNvbnRyb2xsZXI9JXNcbiIsIGJ1Zik7CisgICAgICBpZiAoZ3J1Yl9pZWVlMTI3 NV9vcGVuIChidWYsICZpaGFuZGxlKSkKICAgICAgICAgewotICAgICAgICAgIGdydWJfZHByaW50 ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdldCB0aGUgdGFyZ2V0cyB3aGlsZSBpdGVyYXRpbmcgRkNQ IGRpc2sgcGF0aD0lc1xuIiwgYWxpYXMtPnBhdGgpOwotICAgICAgICAgIGdydWJfaWVlZTEyNzVf Y2xvc2UgKGloYW5kbGUpOwotICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICBncnViX2Rwcmlu dGYgKCJvZmRpc2siLCAiZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sgd2hpbGUgZ2V0dGluZyBudm1l LWNvbnRyb2xsZXJzICBwYXRoPSVzXG4iLCBidWYpOworICAgICAgICAgIGNvbnRpbnVlOwogICAg ICAgICB9Ci0gICAgICBidWYgPSBncnViX21hbGxvYyAoZ3J1Yl9zdHJsZW4gKGFsaWFzLT5wYXRo KSArIDMyICsgMzIpOwotICAgICAgaWYgKCFidWYpCisgICAgICBJTklUX0lFRUUxMjc1X0NPTU1P TiAoJm52bWVfY29udHJvbGxlcnNfYXJncy5jb21tb24sICJjYWxsLW1ldGhvZCIsIDIsIDIpOwor ICAgICAgbnZtZV9jb250cm9sbGVyc19hcmdzLm1ldGhvZCA9IChncnViX2llZWUxMjc1X2NlbGxf dCkgIm52bWUtY29udHJvbGxlcnMiOworICAgICAgbnZtZV9jb250cm9sbGVyc19hcmdzLmloYW5k bGUgPSBpaGFuZGxlOworICAgICAgbnZtZV9jb250cm9sbGVyc19hcmdzLmNhdGNoX3Jlc3VsdCA9 IDA7CisKKyAgICAgIGlmIChJRUVFMTI3NV9DQUxMX0VOVFJZX0ZOICgmbnZtZV9jb250cm9sbGVy c19hcmdzKSA9PSAtMSkKICAgICAgICAgeworICAgICAgICAgIGdydWJfZHByaW50ZiAoIm9mZGlz ayIsICJmYWlsZWQgdG8gZ2V0IHRoZSBudm1lLWNvbnRyb2xsZXJzIHdoaWxlIGl0ZXJhdGluZyBG Q1AgZGlzayBwYXRoXG4iKTsKICAgICAgICAgICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxl KTsKLSAgICAgICAgICByZXR1cm47CisgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAg ICAgIGJ1ZnB0ciA9IGdydWJfc3RwY3B5IChidWYsIGFsaWFzLT5wYXRoKTsKIAotICAgICAgLyoK LSAgICAgICAqIEl0ZXJhdGUgb3ZlciBlbnRyaWVzIHJldHVybmVkIGJ5IHBmdy4gRWFjaCBlbnRy eSBjb250YWlucyBhCi0gICAgICAgKiBwb2ludGVyIHRvIHd3cG4gdGFibGUgYW5kIGhpcyBsZW5n dGguCi0gICAgICAgKi8KLSAgICAgIHN0cnVjdCBhcmdzX3JldCAqdGFyZ2V0c190YWJsZSA9IChz dHJ1Y3QgYXJnc19yZXQgKikgKGFyZ3NfdGFyZ2V0cy50YWJsZSk7Ci0gICAgICBmb3IgKGkgPSAw OyBpIDwgYXJnc190YXJnZXRzLm5lbnRyaWVzOyBpKyspCisgICAgICAvKiBDb3B5IHRoZSBidWZm ZXIgbGlzdCB0byBudm1lX2NvbnRyb2xsZXJzX3RhYmxlICovCisgICAgICBudm1lX2NvbnRyb2xs ZXJzX3RhYmxlX2VudHJpZXMgPSAoKGdydWJfdWludDMyX3QpIG52bWVfY29udHJvbGxlcnNfYXJn cy5uZW50cmllcyk7CisgICAgICBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2J1ZiA9IChzdHJ1Y3Qg bnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRyeSopIG52bWVfY29udHJvbGxlcnNfYXJncy50YWJs ZTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJpZXM7 IGkrKykKICAgICAgICAgewotICAgICAgICAgIHB0cl90YXJnZXRzID0gKGdydWJfdWludDY0X3Qq KSAoZ3J1Yl91aW50MzJfdCkgdGFyZ2V0c190YWJsZVtpXS5hZGRyOwotICAgICAgICAgIC8qIEl0 ZXJhdGUgb3ZlciBhbGwgd3dwbnMgaW4gZ2l2ZW4gdGFibGUgKi8KLSAgICAgICAgICBmb3IoayA9 IDA7IGsgPCB0YXJnZXRzX3RhYmxlW2ldLmxlbjsgaysrKQotICAgICAgICAgICAgewotICAgICAg ICAgICAgICBhcmdzX2x1bnMud3dwbl9sID0gKGdydWJfaWVlZTEyNzVfY2VsbF90KSAoKnB0cl90 YXJnZXRzKTsKLSAgICAgICAgICAgICAgYXJnc19sdW5zLnd3cG5faCA9IChncnViX2llZWUxMjc1 X2NlbGxfdCkgKCpwdHJfdGFyZ2V0cyA+PiAzMik7Ci0gICAgICAgICAgICAgIHBvcyA9IGdydWJf c25wcmludGYgKGJ1ZnB0ciwgMzIsICIvZGlza0AlIiBQUkl4R1JVQl9VSU5UNjRfVCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcHRyX3RhcmdldHMrKyk7Ci0gICAgICAgICAg ICAgIC8qIEdldCB0aGUgbHVucyBmb3IgZ2l2ZW4gd3dwbiB0YXJnZXQgKi8KLSAgICAgICAgICAg ICAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllfRk4gKCZhcmdzX2x1bnMpID09IC0xKQotICAgICAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFp bGVkIHRvIGdldCB0aGUgTFVOUyB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwg YnVmKTsKLSAgICAgICAgICAgICAgICAgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOwot ICAgICAgICAgICAgICAgICAgZ3J1Yl9mcmVlIChidWYpOwotICAgICAgICAgICAgICAgICAgcmV0 dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgc3RydWN0IGFyZ3NfcmV0ICps dW5zX3RhYmxlID0gKHN0cnVjdCBhcmdzX3JldCAqKSAoYXJnc19sdW5zLnRhYmxlKTsKKwkgIG52 bWVfY29udHJvbGxlcnNfdGFibGVbaV0uaWQgPSAoZ3J1Yl91aW50MTZfdCkgbnZtZV9jb250cm9s bGVyc190YWJsZV9idWZbaV0uaWQ7CisJICBncnViX3N0cmNweSAobnZtZV9jb250cm9sbGVyc190 YWJsZVtpXS53d3BuLCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2J1ZltpXS53d3BuKTsKKwkgIGdy dWJfc3RyY3B5IChudm1lX2NvbnRyb2xsZXJzX3RhYmxlW2ldLm5xbiwgbnZtZV9jb250cm9sbGVy c190YWJsZV9idWZbaV0ubnFuKTsKKwl9CisgICAgICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFu ZGxlKTsKKyAgICAgIGdydWJfZHByaW50ZiAoIm9mZGlzayIsICJOVk1lb0Y6IGZvdW5kICVkIG52 bWUgY29udHJvbGxlcnNcbiIsIChpbnQpIG52bWVfY29udHJvbGxlcnNfYXJncy5uZW50cmllcyk7 CiAKLSAgICAgICAgICAgICAgLyogSXRlcmF0ZSBvdmVyIGFsbCBMVU5zICovCi0gICAgICAgICAg ICAgIGZvcihqID0gMDsgaiA8IGFyZ3NfbHVucy5uZW50cmllczsgaisrKQotICAgICAgICAgICAg ICAgIHsKLSAgICAgICAgICAgICAgICAgIHB0cl9sdW5zID0gKGdydWJfdWludDY0X3QqKSAoZ3J1 Yl91aW50MzJfdCkgbHVuc190YWJsZVtqXS5hZGRyOwotICAgICAgICAgICAgICAgICAgZm9yKGwg PSAwOyBsIDwgbHVuc190YWJsZVtqXS5sZW47IGwrKykKLSAgICAgICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICAgIGdydWJfc25wcmludGYgKCZidWZwdHJbcG9zXSwgMzAsICIs JSIgUFJJeEdSVUJfVUlOVDY0X1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKnB0cl9sdW5zKyspOwotICAgICAgICAgICAgICAgICAgICAgIGRldl9pdGVyYXRlX3JlYWwg KGJ1ZiwgYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAg ICAgIC8qIEZvciBlYWNoIG52bWUgY29udHJvbGxlciAqLworICAgICAgZm9yIChudm1lX2NvbnRy b2xsZXJfaW5kZXggPSAwOyBudm1lX2NvbnRyb2xsZXJfaW5kZXggPCAoaW50KSBudm1lX2NvbnRy b2xsZXJzX2FyZ3MubmVudHJpZXM7IG52bWVfY29udHJvbGxlcl9pbmRleCsrKQorICAgICAgICB7 CisgICAgICAgICAgLyoKKwkgICAqIE9wZW4gdGhlIG52bWUgY29udHJvbGxlcgorICAgICAgICAg ICAqIC9wY2lAYnVzL2ZpYnJlLWNoYW5uZWxAZGV2LGZ1bmMvbnZtZS1vZi9jb250cm9sbGVyQHRy YW5zcG9ydC1hZGRyLGN0bHItaWQ6bnFuPXRndC1zdWJzeXN0ZW0tbnFuCisgICAgICAgICAgICov CisgICAgICAgICAgYnVmcHRyX3BvczIgPSBncnViX3NucHJpbnRmIChidWZwdHIsIDUxMiwgIi9u dm1lLW9mL2NvbnRyb2xsZXJAJXMsZmZmZjpucW49JXMiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnZtZV9jb250cm9sbGVyc190YWJsZVtudm1lX2NvbnRyb2xsZXJf aW5kZXhdLnd3cG4sIG52bWVfY29udHJvbGxlcnNfdGFibGVbbnZtZV9jb250cm9sbGVyX2luZGV4 XS5ucW4pOworCSAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgIk5WTWVvRjogbnZtZW9mIGNvbnRy b2xsZXI9JXNcbiIsIGJ1Zik7CisgICAgICAgICAgaWYgKGdydWJfaWVlZTEyNzVfb3BlbiAoYnVm LCAmaWhhbmRsZSkpCisJICAgIHsKKyAgICAgICAgICAgICBncnViX2RwcmludGYgKCJvZmRpc2si LCAiZmFpbGVkIHRvIG9wZW4gdGhlIHBhdGg9JXNcbiIsIGJ1Zik7CisJICAgICAgY29udGludWU7 CisJICAgIH0KKyAgICAgICAgICBJTklUX0lFRUUxMjc1X0NPTU1PTiAoJm52bWVfbmFtZXNwYWNl c19hcmdzLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgMiwgMik7CisgICAgICAgICAgbnZtZV9uYW1l c3BhY2VzX2FyZ3MubWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90KSAiZ2V0LW5hbWVzcGFj ZS1saXN0IjsKKyAgICAgICAgICBudm1lX25hbWVzcGFjZXNfYXJncy5paGFuZGxlID0gaWhhbmRs ZTsKKyAgICAgICAgICBudm1lX25hbWVzcGFjZXNfYXJncy5jYXRjaF9yZXN1bHQgPSAwOworCisJ ICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9GTiAoJm52bWVfbmFtZXNwYWNlc19hcmdzKSA9PSAt MSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwg ImZhaWxlZCB0byBnZXQgdGhlIG52bWUtbmFtZXNwYWNlLWxpc3Qgd2hpbGUgaXRlcmF0aW5nIEZD UCBkaXNrIHBhdGhcbiIpOworICAgICAgICAgICAgICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFu ZGxlKTsKKyAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICAgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOwotICAgICAgZ3J1Yl9mcmVlIChi dWYpOwotICAgICAgcmV0dXJuOworICAgICAgICAgZ3J1Yl91aW50MzJfdCAqbmFtZXNwYWNlcyA9 IChncnViX3VpbnQzMl90KikgbnZtZV9uYW1lc3BhY2VzX2FyZ3MudGFibGU7CisJICBncnViX2Rw cmludGYgKCJvZmRpc2siLCAiTlZNZW9GOiBmb3VuZCAlZCBuYW1lc3BhY2VzXG4iLCAoaW50KW52 bWVfbmFtZXNwYWNlc19hcmdzLm5lbnRyaWVzKTsKKwkgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGlo YW5kbGUpOworICAgICAgICAgbmFtZXNwYWNlX2luZGV4ID0gMDsKKwkgIGZvciAobmFtZXNwYWNl X2luZGV4PTA7IG5hbWVzcGFjZV9pbmRleCA8IG52bWVfbmFtZXNwYWNlc19hcmdzLm5lbnRyaWVz OyBuYW1lc3BhY2VfaW5kZXgrKykKKwkgICAgeworCSAgICAgIGdydWJfc25wcmludGYgKGJ1ZnB0 citidWZwdHJfcG9zMiwgNTEyLCAiL25hbWVzcGFjZUAlIlBSSXhHUlVCX1VJTlQzMl9ULCBuYW1l c3BhY2VzW25hbWVzcGFjZV9pbmRleF0pOworICAgICAgICAgICAgIGdydWJfZHByaW50ZiAoIm9m ZGlzayIsICJOVk1lb0Y6IG5hbWVzcGFjZT0lc1xuIiwgYnVmKTsKKyAgICAgICAgICAgICBkZXZf aXRlcmF0ZV9yZWFsIChidWYsIGJ1Zik7CisgICAgICAgICAgIH0KKyAgICAgICAgIGRldl9pdGVy YXRlX3JlYWwgKGJ1ZiwgYnVmKTsKKwl9CisgICAgfQorICBncnViX2ZyZWUgKGJ1Zik7CisgIGdy dWJfZnJlZSAobnZtZV9jb250cm9sbGVyc190YWJsZSk7CisgIHJldHVybjsKK30KKworc3RhdGlj IHZvaWQKK2Rldl9pdGVyYXRlIChjb25zdCBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9kZXZhbGlhcyAq YWxpYXMpCit7CisgIGlmIChncnViX3N0cmNtcCAoYWxpYXMtPnR5cGUsICJmY3AiKSA9PSAwKQor ICAgIHsKKyAgICAgIC8qIEl0ZXJhdGUgZGlza3MgKi8KKyAgICAgIGRldl9pdGVyYXRlX2ZjcF9k aXNrcyAoYWxpYXMpOworICAgICAgLyogSXRlcmF0ZSBOVk1lb0YgKi8KKyAgICAgIGRldl9pdGVy YXRlX2ZjcF9udm1lb2YgKGFsaWFzKTsKICAgICB9CiAgIGVsc2UgaWYgKGdydWJfc3RyY21wIChh bGlhcy0+dHlwZSwgInZzY3NpIikgPT0gMCkKICAgICB7Ci0tIAoyLjMxLjEKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVsIG1haWxpbmcg bGlzdApHcnViLWRldmVsQGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlz dGluZm8vZ3J1Yi1kZXZlbAo=