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 591AACA0FE4 for ; Fri, 30 Aug 2024 11:43:23 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sk02A-0000TY-Je; Fri, 30 Aug 2024 07:43:18 -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 1sk026-0000Hf-Gi for grub-devel@gnu.org; Fri, 30 Aug 2024 07:43:15 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sk024-0001Kx-0Z for grub-devel@gnu.org; Fri, 30 Aug 2024 07:43:14 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 47UBBIJq021339; Fri, 30 Aug 2024 11:43:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=pp1; bh=9jj0/FPc/kDWO Wyo3D0Yi98cYiclrN3jcqXCCo4F72g=; b=Mph6fty7K994Ss3/Ip3FyI+zHhT4n k4dWc7Vx1E1DukdWHei44S2aI75ma64+jKZ7MpbRmVWogDXad49Ky0vYmYoS9hn8 soLX4FM2Go7ENr/0tft89Qzsr/bNyA1xXXCFpU+ZkT8e3g3Fo1Y8y9My+pahaF4k dioCAn+cXfgdTKMHLA3rCE4XV86epRRdc8cWH1svNNyqCeuya78TayGiY968ux/C ybwsRsyXQI81YUz9do9aw42pOICkQLqtrqq6Q5c3pMs4iByYi4+YtoDjL8uyRKkL d3oLaEB5OmaZAVO+Nb7S+KiAswutsZxU2x+nHFoXNJDH7LHiYvonZPMdQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 419q8p72k4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 30 Aug 2024 11:43:10 +0000 (GMT) Received: from m0356517.ppops.net (m0356517.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 47UBXB3j017953; Fri, 30 Aug 2024 11:43:10 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 419q8p72k2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 30 Aug 2024 11:43:09 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 47U9554I008239; Fri, 30 Aug 2024 11:43:09 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 417v2n37tb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 30 Aug 2024 11:43:08 +0000 Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 47UBgxax26936028 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 30 Aug 2024 11:42:59 GMT Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9DC8E20043; Fri, 30 Aug 2024 11:42:59 +0000 (GMT) Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 94E3E20040; Fri, 30 Aug 2024 11:42:57 +0000 (GMT) Received: from localhost.localdomain (unknown [9.43.112.141]) by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 30 Aug 2024 11:42:57 +0000 (GMT) From: Avnish Chouhan To: grub-devel@gnu.org Cc: daniel.kiper@oracle.com, brking@linux.ibm.com, meghanaprakash@in.ibm.com, mchang@suse.com, phcoder@gmail.com, Avnish Chouhan , Diego Domingos Subject: [PATCH v4 4/5] ieee1275: add support for NVMeoFC Date: Fri, 30 Aug 2024 17:11:03 +0530 Message-ID: <20240830114104.32234-5-avnish@linux.ibm.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830114104.32234-1-avnish@linux.ibm.com> References: <20240830114104.32234-1-avnish@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: m-dM4wUiszooRxE4ZGP5OqTf3EtpDjW3 X-Proofpoint-ORIG-GUID: SyF8F0CaxSQInWWTXBC4gRpQv-UXn9SA 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-08-30_06,2024-08-30_01,2024-05-17_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 bulkscore=0 priorityscore=1501 adultscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 impostorscore=0 phishscore=0 suspectscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2407110000 definitions=main-2408300087 Received-SPF: pass client-ip=148.163.156.1; envelope-from=avnish@linux.ibm.com; helo=mx0a-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_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=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 ICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9nZXRfdW5hbGlnbmVkNjQgKCpwdHJfdGFyZ2V0 cysrKSk7CisgICAgICAgICAgLyogR2V0IHRoZSBsdW5zIGZvciBnaXZlbiB3d3BuIHRhcmdldCAq LworICAgICAgICAgIGlmIChJRUVFMTI3NV9DQUxMX0VOVFJZX0ZOICgmYXJnc19sdW5zKSA9PSAt MSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ3J1Yl9kcHJpbnRmICgiZGlzayIsICJm YWlsZWQgdG8gZ2V0IHRoZSBMVU5TIHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlzayBwYXRoPSVzXG4i LCBidWYpOworICAgICAgICAgICAgICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAg ICAgICAgICAgICAgZ3J1Yl9mcmVlIChidWYpOworICAgICAgICAgICAgICByZXR1cm47CisgICAg ICAgICAgICB9CisgICAgICAgICAgbHVuc190YWJsZSA9IChzdHJ1Y3QgYXJnc19yZXQgKikgKGFy Z3NfbHVucy50YWJsZSk7CisKKyAgICAgICAgICAvKiBJdGVyYXRlIG92ZXIgYWxsIExVTnMgKi8K KyAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXJnc19sdW5zLm5lbnRyaWVzOyBqKyspCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgIHB0cl9sdW5zID0gKGdydWJfdWludDY0X3QqKSBsdW5z X3RhYmxlW2pdLmFkZHI7CisgICAgICAgICAgICAgIGZvciAobCA9IDA7IGwgPCBsdW5zX3RhYmxl W2pdLmxlbjsgbCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGdydWJf c25wcmludGYgKCZidWZwdHJbcG9zXSwgMzAsICIsJSIgUFJJeEdSVUJfVUlOVDY0X1QsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfZ2V0X3VuYWxpZ25lZDY0ICgqcHRyX2x1 bnMrKykpOworICAgICAgICAgICAgICAgICAgZGV2X2l0ZXJhdGVfcmVhbCAoYnVmLCBidWYpOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KKyAgZ3J1 Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgIGdydWJfZnJlZSAoYnVmKTsKKyAgcmV0dXJu OworfQorCitzdGF0aWMgdm9pZAorZGV2X2l0ZXJhdGVfZmNwX252bWVvZiAoY29uc3Qgc3RydWN0 IGdydWJfaWVlZTEyNzVfZGV2YWxpYXMgKmFsaWFzKQoreworICBjaGFyICpidWZwdHI7CisgIGdy dWJfaWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGU7CisKKyAgLyogQ3JlYXRlIHRoZSBzdHJ1Y3Rz IGZvciB0aGUgcGFyYW1ldGVycyBwYXNzaW5nIHRvIFBGVyAqLworICBzdHJ1Y3QgbnZtZV9hcmdz CisgIHsKKyAgICBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9jb21tb25faGRyIGNvbW1vbjsKKyAgICBn cnViX2llZWUxMjc1X2NlbGxfdCBtZXRob2Q7CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgaWhh bmRsZTsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBjYXRjaF9yZXN1bHQ7CisgICAgZ3J1Yl9p ZWVlMTI3NV9jZWxsX3QgbmVudHJpZXM7CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgdGFibGU7 CisgIH0gbnZtZV9kaXNjb3ZlcnlfY29udHJvbGxlcnNfYXJncywgbnZtZV9jb250cm9sbGVyc19h cmdzLCBudm1lX25hbWVzcGFjZXNfYXJnczsKKworICAvKiBDcmVhdGUgdGhlIHN0cnVjdHMgZm9y IHRoZSByZXN1bHRzIGZyb20gUEZXICovCisgIHN0cnVjdCBkaXNjb3ZlcnlfY29udHJvbGxlcnNf dGFibGVfc3RydWN0CisgIHsKKyAgICBncnViX3VpbnQ2NF90IHRhYmxlWzI1Nl07CisgICAgZ3J1 Yl91aW50MzJfdCBsZW47CisgIH0gZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3RhYmxlOworCisgIC8q CisgICAqIHN0cnVjdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5CisgICAqIHRoaXMgdGhl IHJldHVybiBvZiBudm1lLWNvbnRyb2xsZXJzIG1ldGhvZCB0YWJsZXMsIGNvbnRhaW5pbmc6Cisg ICAqIC0gMi1ieXRlIGNvbnRyb2xsZXIgSUQKKyAgICogLSAyNTYtYnl0ZSB0cmFuc3BvcnQgYWRk cmVzcyBzdHJpbmcKKyAgICogLSAyNTYtYnl0ZSBmaWVsZCBjb250YWluaW5nIG51bGwtdGVybWlu YXRlZCBOVk0gc3Vic3lzdGVtIE5RTiBzdHJpbmcgdXAgdG8gMjIzIGNoYXJhY3RlcnMKKyAgICov CisgIHN0cnVjdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5CisgIHsKKyAgICBncnViX3Vp bnQxNl90IGlkOworICAgIGNoYXIgd3dwblsyNTZdOworICAgIGNoYXIgbnFuWzI1Nl07CisgIH07 CisKKyAgc3RydWN0IG52bWVfY29udHJvbGxlcnNfdGFibGVfZW50cnlfcmVhbAorICB7CisgICAg Z3J1Yl91aW50MTZfdCBpZDsKKyAgICBjaGFyIHd3cG5bMjU2XTsKKyAgICBjaGFyIG5xblsyNTZd OworICB9OworCisgIHN0cnVjdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5KiBudm1lX2Nv bnRyb2xsZXJzX3RhYmxlOworICBncnViX3VpbnQzMl90IG52bWVfY29udHJvbGxlcnNfdGFibGVf ZW50cmllczsKKyAgY2hhciAqYnVmOworICB1bnNpZ25lZCBpbnQgaSA9IDA7CisgIGludCBjdXJy ZW50X2J1ZmZlcl9pbmRleDsKKyAgaW50IG52bWVfY29udHJvbGxlcl9pbmRleDsKKyAgaW50IGJ1 ZnB0cl9wb3MyOworICBncnViX3VpbnQzMl90IG5hbWVzcGFjZV9pbmRleCA9IDA7CisgIHN0cnVj dCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5KiBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2J1 ZjsKKworICBudm1lX2NvbnRyb2xsZXJzX3RhYmxlID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoc3Ry dWN0IG52bWVfY29udHJvbGxlcnNfdGFibGVfZW50cnkpICogMjU2KTsKKyAgLyogQWxsb2NhdGUg bWVtb3J5IGZvciBidWlsZGluZyB0aGUgTlZNZW9GIHBhdGggKi8KKyAgYnVmID0gZ3J1Yl9tYWxs b2MgKGdydWJfc3RybGVuIChhbGlhcy0+cGF0aCkgKyBFWFRFTkRfUEFUSF81MTIpOworCisgIGlm ICghYnVmIHx8ICFudm1lX2NvbnRyb2xsZXJzX3RhYmxlKQorICAgIHsKKyAgICAgIGdydWJfZnJl ZSAobnZtZV9jb250cm9sbGVyc190YWJsZSk7CisgICAgICBncnViX2ZyZWUgKGJ1Zik7CisgICAg ICByZXR1cm47CisgICAgfQorCisgIC8qIENvcHkgdGhlIGFsaWFzLT5wYXRoIHRvIGJ1ZiBzbyB3 ZSBjYW4gd29yayB3aXRoICovCisgIGJ1ZnB0ciA9IGdydWJfc3RwY3B5IChidWYsIGFsaWFzLT5w YXRoKTsKKyAgZ3J1Yl9zbnByaW50ZiAoYnVmcHRyLCAzMiwgIi9udm1lLW9mIik7CisKKyAgLyoK KyAgICogIE9wZW4gdGhlIG52bWUtb2YgbGF5ZXIKKyAgICogIEV4LiAgL3BjaUBidXMvZmlicmUt Y2hhbm5lbEBAZGV2LGZ1bmMvbnZtZS1vZgorICAgKi8KKyAgaWYgKGdydWJfaWVlZTEyNzVfb3Bl biAoYnVmLCAmaWhhbmRsZSkpCisgICAgeworICAgICAgZ3J1Yl9kcHJpbnRmICgiZGlzayIsICJm YWlsZWQgdG8gb3BlbiB0aGUgZGlzayB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xu IiwgYnVmKTsKKyAgICAgIGdydWJfZnJlZSAobnZtZV9jb250cm9sbGVyc190YWJsZSk7CisgICAg ICBncnViX2ZyZWUgKGJ1Zik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qCisgICAqIENh bGwgdG8gbnZtZS1kaXNjb3ZlcnktY29udHJvbGxlcnMgbWV0aG9kIGZyb20gdGhlIG52bWUtb2Yg bGF5ZXIKKyAgICogdG8gZ2V0IGEgbGlzdCBvZiB0aGUgTlZNZSBkaXNjb3ZlcnkgY29udHJvbGxl cnMgcGVyIHRoZSBiaW5kaW5nCisgICAqLworICBJTklUX0lFRUUxMjc1X0NPTU1PTiAoJm52bWVf ZGlzY292ZXJ5X2NvbnRyb2xsZXJzX2FyZ3MuY29tbW9uLCAiY2FsbC1tZXRob2QiLCAyLCAyKTsK KyAgbnZtZV9kaXNjb3ZlcnlfY29udHJvbGxlcnNfYXJncy5tZXRob2QgPSAoZ3J1Yl9pZWVlMTI3 NV9jZWxsX3QpICJudm1lLWRpc2NvdmVyeS1jb250cm9sbGVycyI7CisgIG52bWVfZGlzY292ZXJ5 X2NvbnRyb2xsZXJzX2FyZ3MuaWhhbmRsZSA9IGloYW5kbGU7CisgIGlmIChJRUVFMTI3NV9DQUxM X0VOVFJZX0ZOICgmbnZtZV9kaXNjb3ZlcnlfY29udHJvbGxlcnNfYXJncykgPT0gLTEpCisgICAg eworICAgICAgZ3J1Yl9kcHJpbnRmICgiZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRoZSB0YXJnZXRz IHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlzayBwYXRoPSVzXG4iLCBidWYpOworICAgICAgZ3J1Yl9m cmVlIChudm1lX2NvbnRyb2xsZXJzX3RhYmxlKTsKKyAgICAgIGdydWJfZnJlZSAoYnVmKTsKKyAg ICAgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOworICAgICAgcmV0dXJuOworICAgIH0K KworICAvKiBBZnRlciBjbG9zaW5nIHRoZSBkZXZpY2UsIHRoZSBpbmZvIGlzIGxvc3QuIFNvIGxl dHMgY29weSBlYWNoIGJ1ZmZlciBpbiB0aGUgYnVmZmVycyB0YWJsZSAqLworICBkaXNjb3Zlcnlf Y29udHJvbGxlcnNfdGFibGUubGVuID0gKGdydWJfdWludDMyX3QpIG52bWVfZGlzY292ZXJ5X2Nv bnRyb2xsZXJzX2FyZ3MubmVudHJpZXM7CisKKyAgZm9yIChpID0gMDsgaSA8IGRpc2NvdmVyeV9j b250cm9sbGVyc190YWJsZS5sZW47IGkrKykKKyAgICB7CisgICAgICBkaXNjb3ZlcnlfY29udHJv bGxlcnNfdGFibGUudGFibGVbaV0gPSAoKGdydWJfdWludDY0X3QqKSBudm1lX2Rpc2NvdmVyeV9j b250cm9sbGVyc19hcmdzLnRhYmxlKVtpXTsKKyAgICB9CiAKLSAgICAgIC8qIFNldHVwIHRoZSBm Y3AtdGFyZ2V0cyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3Ki8KLSAgICAgIElOSVRfSUVFRTEyNzVf Q09NTU9OICgmYXJnc190YXJnZXRzLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgMiwgMyk7Ci0gICAg ICBhcmdzX3RhcmdldHMubWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90KSAiZmNwLXRhcmdl dHMiOwotICAgICAgYXJnc190YXJnZXRzLmloYW5kbGUgPSBpaGFuZGxlOworICBncnViX2llZWUx Mjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwiTlZNZW9GOiBG b3VuZCAlZCBkaXNjb3ZlcnkgY29udHJvbGxlcnNcbiIsIGRpc2NvdmVyeV9jb250cm9sbGVyc190 YWJsZS5sZW4pOwogCi0gICAgICAvKiBTZXR1cCB0aGUgZmNwLWx1bnMgbWV0aG9kIHRvIGNhbGwg dmlhIHBmdyAqLwotICAgICAgSU5JVF9JRUVFMTI3NV9DT01NT04gKCZhcmdzX2x1bnMuY29tbW9u LCAiY2FsbC1tZXRob2QiLCA0LCAzKTsKLSAgICAgIGFyZ3NfbHVucy5tZXRob2QgPSAoZ3J1Yl9p ZWVlMTI3NV9jZWxsX3QpICJmY3AtbHVucyI7Ci0gICAgICBhcmdzX2x1bnMuaWhhbmRsZSA9IGlo YW5kbGU7Ci0gICAgICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9GTiAoJmFyZ3NfdGFyZ2V0cykg PT0gLTEpCisgIC8qIEZvciBlYWNoIG52bWUgZGlzY292ZXJ5IGNvbnRyb2xsZXIgKi8KKyAgZm9y IChjdXJyZW50X2J1ZmZlcl9pbmRleCA9IDA7IGN1cnJlbnRfYnVmZmVyX2luZGV4IDwgKGludCkg ZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3RhYmxlLmxlbjsgY3VycmVudF9idWZmZXJfaW5kZXgrKykK KyAgICB7CisgICAgICBncnViX3NucHJpbnRmIChidWZwdHIsIDY0LCAiL252bWUtb2YvY29udHJv bGxlckAlIiBQUkl4R1JVQl9VSU5UNjRfVCAiLGZmZmYiLAorICAgICAgICAgICAgICAgICAgICAg ZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3RhYmxlLnRhYmxlW2N1cnJlbnRfYnVmZmVyX2luZGV4XSk7 CisgICAgICBncnViX2RwcmludGYoIm9mZGlzayIsICJudm1lb2YgY29udHJvbGxlcj0lc1xuIiwg YnVmKTsKKyAgICAgIGlmIChncnViX2llZWUxMjc1X29wZW4gKGJ1ZiwgJmloYW5kbGUpKQogICAg ICAgICB7Ci0gICAgICAgICAgZ3J1Yl9kcHJpbnRmICgiZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRo ZSB0YXJnZXRzIHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlzayBwYXRoPSVzXG4iLCBhbGlhcy0+cGF0 aCk7Ci0gICAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7Ci0gICAgICAgICAg cmV0dXJuOworICAgICAgICAgIGdydWJfZHByaW50ZiAoIm9mZGlzayIsICJmYWlsZWQgdG8gb3Bl biB0aGUgZGlzayB3aGlsZSBnZXR0aW5nIG52bWUtY29udHJvbGxlcnMgIHBhdGg9JXNcbiIsIGJ1 Zik7CisgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgIGJ1ZiA9IGdydWJfbWFs bG9jIChncnViX3N0cmxlbiAoYWxpYXMtPnBhdGgpICsgMzIgKyAzMik7Ci0gICAgICBpZiAoIWJ1 ZikKKyAgICAgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmbnZtZV9jb250cm9sbGVyc19hcmdzLmNv bW1vbiwgImNhbGwtbWV0aG9kIiwgMiwgMik7CisgICAgICBudm1lX2NvbnRyb2xsZXJzX2FyZ3Mu bWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90KSAibnZtZS1jb250cm9sbGVycyI7CisgICAg ICBudm1lX2NvbnRyb2xsZXJzX2FyZ3MuaWhhbmRsZSA9IGloYW5kbGU7CisgICAgICBudm1lX2Nv bnRyb2xsZXJzX2FyZ3MuY2F0Y2hfcmVzdWx0ID0gMDsKKworICAgICAgaWYgKElFRUUxMjc1X0NB TExfRU5UUllfRk4gKCZudm1lX2NvbnRyb2xsZXJzX2FyZ3MpID09IC0xKQogICAgICAgICB7Cisg ICAgICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgImZhaWxlZCB0byBnZXQgdGhlIG52bWUt Y29udHJvbGxlcnMgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBhdGhcbiIpOwogICAgICAgICAg IGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOwotICAgICAgICAgIHJldHVybjsKKyAgICAg ICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgYnVmcHRyID0gZ3J1Yl9zdHBjcHkgKGJ1 ZiwgYWxpYXMtPnBhdGgpOwogCi0gICAgICAvKgotICAgICAgICogSXRlcmF0ZSBvdmVyIGVudHJp ZXMgcmV0dXJuZWQgYnkgcGZ3LiBFYWNoIGVudHJ5IGNvbnRhaW5zIGEKLSAgICAgICAqIHBvaW50 ZXIgdG8gd3dwbiB0YWJsZSBhbmQgaGlzIGxlbmd0aC4KLSAgICAgICAqLwotICAgICAgc3RydWN0 IGFyZ3NfcmV0ICp0YXJnZXRzX3RhYmxlID0gKHN0cnVjdCBhcmdzX3JldCAqKSAoYXJnc190YXJn ZXRzLnRhYmxlKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzX3RhcmdldHMubmVudHJpZXM7 IGkrKykKKyAgICAgIC8qIENvcHkgdGhlIGJ1ZmZlciBsaXN0IHRvIG52bWVfY29udHJvbGxlcnNf dGFibGUgKi8KKyAgICAgIG52bWVfY29udHJvbGxlcnNfdGFibGVfZW50cmllcyA9ICgoZ3J1Yl91 aW50MzJfdCkgbnZtZV9jb250cm9sbGVyc19hcmdzLm5lbnRyaWVzKTsKKyAgICAgIG52bWVfY29u dHJvbGxlcnNfdGFibGVfYnVmID0gKHN0cnVjdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJ5 KikgbnZtZV9jb250cm9sbGVyc19hcmdzLnRhYmxlOworICAgICAgZm9yIChpID0gMDsgaSA8IG52 bWVfY29udHJvbGxlcnNfdGFibGVfZW50cmllczsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAg cHRyX3RhcmdldHMgPSAoZ3J1Yl91aW50NjRfdCopIHRhcmdldHNfdGFibGVbaV0uYWRkcjsKLSAg ICAgICAgICAvKiBJdGVyYXRlIG92ZXIgYWxsIHd3cG5zIGluIGdpdmVuIHRhYmxlICovCi0gICAg ICAgICAgZm9yKGsgPSAwOyBrIDwgdGFyZ2V0c190YWJsZVtpXS5sZW47IGsrKykKLSAgICAgICAg ICAgIHsKLSAgICAgICAgICAgICAgYXJnc19sdW5zLnd3cG5fbCA9IChncnViX2llZWUxMjc1X2Nl bGxfdCkgKCpwdHJfdGFyZ2V0cyk7Ci0gICAgICAgICAgICAgIGFyZ3NfbHVucy53d3BuX2ggPSAo Z3J1Yl9pZWVlMTI3NV9jZWxsX3QpICgqcHRyX3RhcmdldHMgPj4gMzIpOwotICAgICAgICAgICAg ICBwb3MgPSBncnViX3NucHJpbnRmIChidWZwdHIsIDMyLCAiL2Rpc2tAJSIgUFJJeEdSVUJfVUlO VDY0X1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9nZXRfdW5hbGln bmVkNjQgKCpwdHJfdGFyZ2V0cysrKSk7Ci0gICAgICAgICAgICAgIC8qIEdldCB0aGUgbHVucyBm b3IgZ2l2ZW4gd3dwbiB0YXJnZXQgKi8KLSAgICAgICAgICAgICAgaWYgKElFRUUxMjc1X0NBTExf RU5UUllfRk4gKCZhcmdzX2x1bnMpID09IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIGdldCB0aGUgTFVOUyB3 aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYnVmKTsKLSAgICAgICAgICAgICAg ICAgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOwotICAgICAgICAgICAgICAgICAgZ3J1 Yl9mcmVlIChidWYpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgc3RydWN0IGFyZ3NfcmV0ICpsdW5zX3RhYmxlID0gKHN0cnVjdCBh cmdzX3JldCAqKSAoYXJnc19sdW5zLnRhYmxlKTsKKwkgIG52bWVfY29udHJvbGxlcnNfdGFibGVb aV0uaWQgPSAoZ3J1Yl91aW50MTZfdCkgbnZtZV9jb250cm9sbGVyc190YWJsZV9idWZbaV0uaWQ7 CisJICBncnViX3N0cmNweSAobnZtZV9jb250cm9sbGVyc190YWJsZVtpXS53d3BuLCBudm1lX2Nv bnRyb2xsZXJzX3RhYmxlX2J1ZltpXS53d3BuKTsKKwkgIGdydWJfc3RyY3B5IChudm1lX2NvbnRy b2xsZXJzX3RhYmxlW2ldLm5xbiwgbnZtZV9jb250cm9sbGVyc190YWJsZV9idWZbaV0ubnFuKTsK Kwl9CisgICAgICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAgICAgIGdydWJfZHBy aW50ZiAoIm9mZGlzayIsICJOVk1lb0Y6IGZvdW5kICVkIG52bWUgY29udHJvbGxlcnNcbiIsIChp bnQpIG52bWVfY29udHJvbGxlcnNfYXJncy5uZW50cmllcyk7CiAKLSAgICAgICAgICAgICAgLyog SXRlcmF0ZSBvdmVyIGFsbCBMVU5zICovCi0gICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IGFy Z3NfbHVucy5uZW50cmllczsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg ICAgIHB0cl9sdW5zID0gKGdydWJfdWludDY0X3QqKSBsdW5zX3RhYmxlW2pdLmFkZHI7Ci0gICAg ICAgICAgICAgICAgICBmb3IobCA9IDA7IGwgPCBsdW5zX3RhYmxlW2pdLmxlbjsgbCsrKQotICAg ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9zbnByaW50ZiAo JmJ1ZnB0cltwb3NdLCAzMCwgIiwlIiBQUkl4R1JVQl9VSU5UNjRfVCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdydWJfZ2V0X3VuYWxpZ25lZDY0ICgqcHRyX2x1bnMrKykp OwotICAgICAgICAgICAgICAgICAgICAgIGRldl9pdGVyYXRlX3JlYWwgKGJ1ZiwgYnVmKTsKLSAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgIC8qIEZvciBlYWNo IG52bWUgY29udHJvbGxlciAqLworICAgICAgZm9yIChudm1lX2NvbnRyb2xsZXJfaW5kZXggPSAw OyBudm1lX2NvbnRyb2xsZXJfaW5kZXggPCAoaW50KSBudm1lX2NvbnRyb2xsZXJzX2FyZ3MubmVu dHJpZXM7IG52bWVfY29udHJvbGxlcl9pbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgLyoK KwkgICAqIE9wZW4gdGhlIG52bWUgY29udHJvbGxlcgorICAgICAgICAgICAqIC9wY2lAYnVzL2Zp YnJlLWNoYW5uZWxAZGV2LGZ1bmMvbnZtZS1vZi9jb250cm9sbGVyQHRyYW5zcG9ydC1hZGRyLGN0 bHItaWQ6bnFuPXRndC1zdWJzeXN0ZW0tbnFuCisgICAgICAgICAgICovCisgICAgICAgICAgYnVm cHRyX3BvczIgPSBncnViX3NucHJpbnRmIChidWZwdHIsIDUxMiwgIi9udm1lLW9mL2NvbnRyb2xs ZXJAJXMsZmZmZjpucW49JXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnZtZV9jb250cm9sbGVyc190YWJsZVtudm1lX2NvbnRyb2xsZXJfaW5kZXhdLnd3cG4sIG52 bWVfY29udHJvbGxlcnNfdGFibGVbbnZtZV9jb250cm9sbGVyX2luZGV4XS5ucW4pOworCSAgZ3J1 Yl9kcHJpbnRmICgib2ZkaXNrIiwgIk5WTWVvRjogbnZtZW9mIGNvbnRyb2xsZXI9JXNcbiIsIGJ1 Zik7CisgICAgICAgICAgaWYgKGdydWJfaWVlZTEyNzVfb3BlbiAoYnVmLCAmaWhhbmRsZSkpCisJ ICAgIHsKKyAgICAgICAgICAgICBncnViX2RwcmludGYgKCJvZmRpc2siLCAiZmFpbGVkIHRvIG9w ZW4gdGhlIHBhdGg9JXNcbiIsIGJ1Zik7CisJICAgICAgY29udGludWU7CisJICAgIH0KKyAgICAg ICAgICBJTklUX0lFRUUxMjc1X0NPTU1PTiAoJm52bWVfbmFtZXNwYWNlc19hcmdzLmNvbW1vbiwg ImNhbGwtbWV0aG9kIiwgMiwgMik7CisgICAgICAgICAgbnZtZV9uYW1lc3BhY2VzX2FyZ3MubWV0 aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90KSAiZ2V0LW5hbWVzcGFjZS1saXN0IjsKKyAgICAg ICAgICBudm1lX25hbWVzcGFjZXNfYXJncy5paGFuZGxlID0gaWhhbmRsZTsKKyAgICAgICAgICBu dm1lX25hbWVzcGFjZXNfYXJncy5jYXRjaF9yZXN1bHQgPSAwOworCisJICBpZiAoSUVFRTEyNzVf Q0FMTF9FTlRSWV9GTiAoJm52bWVfbmFtZXNwYWNlc19hcmdzKSA9PSAtMSkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgImZhaWxlZCB0byBnZXQg dGhlIG52bWUtbmFtZXNwYWNlLWxpc3Qgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBhdGhcbiIp OworICAgICAgICAgICAgICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAgICAgICAg ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIGdydWJfaWVl ZTEyNzVfY2xvc2UgKGloYW5kbGUpOwotICAgICAgZ3J1Yl9mcmVlIChidWYpOwotICAgICAgcmV0 dXJuOworICAgICAgICAgZ3J1Yl91aW50MzJfdCAqbmFtZXNwYWNlcyA9IChncnViX3VpbnQzMl90 KikgbnZtZV9uYW1lc3BhY2VzX2FyZ3MudGFibGU7CisJICBncnViX2RwcmludGYgKCJvZmRpc2si LCAiTlZNZW9GOiBmb3VuZCAlZCBuYW1lc3BhY2VzXG4iLCAoaW50KW52bWVfbmFtZXNwYWNlc19h cmdzLm5lbnRyaWVzKTsKKwkgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOworICAgICAg ICAgbmFtZXNwYWNlX2luZGV4ID0gMDsKKwkgIGZvciAobmFtZXNwYWNlX2luZGV4PTA7IG5hbWVz cGFjZV9pbmRleCA8IG52bWVfbmFtZXNwYWNlc19hcmdzLm5lbnRyaWVzOyBuYW1lc3BhY2VfaW5k ZXgrKykKKwkgICAgeworCSAgICAgIGdydWJfc25wcmludGYgKGJ1ZnB0citidWZwdHJfcG9zMiwg NTEyLCAiL25hbWVzcGFjZUAlIlBSSXhHUlVCX1VJTlQzMl9ULCBuYW1lc3BhY2VzW25hbWVzcGFj ZV9pbmRleF0pOworICAgICAgICAgICAgIGdydWJfZHByaW50ZiAoIm9mZGlzayIsICJOVk1lb0Y6 IG5hbWVzcGFjZT0lc1xuIiwgYnVmKTsKKyAgICAgICAgICAgICBkZXZfaXRlcmF0ZV9yZWFsIChi dWYsIGJ1Zik7CisgICAgICAgICAgIH0KKyAgICAgICAgIGRldl9pdGVyYXRlX3JlYWwgKGJ1Ziwg YnVmKTsKKwl9CisgICAgfQorICBncnViX2ZyZWUgKGJ1Zik7CisgIGdydWJfZnJlZSAobnZtZV9j b250cm9sbGVyc190YWJsZSk7CisgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2Rldl9pdGVy YXRlIChjb25zdCBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9kZXZhbGlhcyAqYWxpYXMpCit7CisgIGlm IChncnViX3N0cmNtcCAoYWxpYXMtPnR5cGUsICJmY3AiKSA9PSAwKQorICAgIHsKKyAgICAgIC8q IEl0ZXJhdGUgZGlza3MgKi8KKyAgICAgIGRldl9pdGVyYXRlX2ZjcF9kaXNrcyAoYWxpYXMpOwor ICAgICAgLyogSXRlcmF0ZSBOVk1lb0YgKi8KKyAgICAgIGRldl9pdGVyYXRlX2ZjcF9udm1lb2Yg KGFsaWFzKTsKICAgICB9CiAgIGVsc2UgaWYgKGdydWJfc3RyY21wIChhbGlhcy0+dHlwZSwgInZz Y3NpIikgPT0gMCkKICAgICB7Ci0tIAoyLjMxLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVsIG1haWxpbmcgbGlzdApHcnViLWRldmVs QGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZl bAo=