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 4C3BACAC592 for ; Mon, 22 Sep 2025 09:33:06 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0crp-0001My-15; Mon, 22 Sep 2025 05:29:54 -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 1v0crl-0001Mm-K7 for grub-devel@gnu.org; Mon, 22 Sep 2025 05:29:49 -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 1v0cre-0007QQ-Tz for grub-devel@gnu.org; Mon, 22 Sep 2025 05:29:49 -0400 Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58LLpSZx017273; Mon, 22 Sep 2025 09:29:38 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=zBXQj0qZDwgCI/VTt HwHGv5v8MRa/VE4cB8UJXZTJws=; b=OtM7XheR9VLAp/x8mG1lQEfgUI7oCsAtP w62s0/DDhs8Co0TKu0+jLGuaru2nKvMRFFgd7n6eb2E/Mt0yer+80tj5DtPJgA/U /iY1rNK2v1kKNtb934JpNTPXnlO5a0xOZxCkAAq9x+fBjr0q3OZpv/DMzYuY5nJr YzUXleSeeQPmk/LbpIx0B+8KwsNhOfBZrtAYr6noVkcU4r8yLyEZONoqM7KiHXBE 3rIM6vcPZwNgwB6+eeBycwTqKsIyrz+jwPZe+qpxwkDlclYeD1+dzwUm9P1e2HRQ ntCgo441StRBeazWUIGJkqenjE1ijha8eZx1vF/6TlDJiOeCVt6fg== 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 499ksbhxwy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 22 Sep 2025 09:29:38 +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 58M5jOX0013592; Mon, 22 Sep 2025 09:29:37 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 49a8tj57cp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 22 Sep 2025 09:29:37 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 58M9TXT251380712 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 22 Sep 2025 09:29:33 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C38862004B; Mon, 22 Sep 2025 09:29:33 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BD02E20040; Mon, 22 Sep 2025 09:29:30 +0000 (GMT) Received: from localhost.localdomain (unknown [9.124.218.27]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 22 Sep 2025 09:29:30 +0000 (GMT) From: Sudhakar Kuppusamy To: grub-devel@gnu.org Cc: dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, msuchanek@suse.com, mlewando@redhat.com, stefanb@linux.ibm.com, avnish@linux.ibm.com, nayna@linux.ibm.com, ssrish@linux.ibm.com, Sudhakar Kuppusamy , sridharm@linux.ibm.com, Daniel Kiper Subject: [PATCH v12 14/22] appended signatures: Using db and dbx lists for signature verification Date: Mon, 22 Sep 2025 14:57:55 +0530 Message-ID: <20250922092814.39630-15-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250922092814.39630-1-sudhakar@linux.ibm.com> References: <20250922092814.39630-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: uP8Wd1bD_KX_YIhVsrBBkbulKWwN7u62 X-Proofpoint-GUID: uP8Wd1bD_KX_YIhVsrBBkbulKWwN7u62 X-Authority-Analysis: v=2.4 cv=SdH3duRu c=1 sm=1 tr=0 ts=68d11702 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=yJojWOMRYYMA:10 a=VnNF1IyMAAAA:8 a=yPCof4ZbAAAA:8 a=BlRlUMKLR4rfvJ7WqM8A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTIwMDAyMCBTYWx0ZWRfX0fNV+vmsiPAK 0/xeIflYSwdF7fCdGo/Bd+rAECqt2zOTn3nt9xC+0szeKK5HtTD9e6CeOUpuhRANSwTix/ydOom QnD4e2p2nxkJhwNsGBQLtmhqYPiRm0bRFS0lvJJOqOVQP5zeNeq8F3KCrcCtI0KDRHPL02jCL4S Av+/FLAAywNINx3EjhhgF9SwJLDSlQI4MRHQGSv38UMLGrT+PbF9aCpJJKae+sf0sOZATCipncm QWt1ADS/EBIEb5IK2agtGawyjuQ9ZwCh0jNA9Q46RsRarEOP5bMHCcKtnRKbMZExPVsc7bSCnbQ Rm48UYEUdUEBecscDf3hDr9Q2P9a8tsnhByQ5MQYFSMA6ggYvrmY1vfdT/8YPOF4lULZgiKfK3w s2HV1TKq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-22_01,2025-09-19_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 phishscore=0 spamscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 adultscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509200020 Received-SPF: pass client-ip=148.163.156.1; envelope-from=sudhakar@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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 U2lnbmF0dXJlIHZlcmlmaWNhdGlvbjogdmVyaWZ5IHRoZSBrZXJuZWwgYWdhaW5zdCBsaXN0cyBv ZiBoYXNoZXMKdGhhdCBhcmUgZWl0aGVyIGluIGRieCBvciBkYiBsaXN0LiBJZiBpdCBpcyBub3Qg aW4gdGhlIGRieCBsaXN0CnRoZW4gdGhlIHRydXN0ZWQga2V5cyBmcm9tIHRoZSBkYiBsaXN0IGFy ZSB1c2VkIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlLgoKU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIg S3VwcHVzYW15IDxzdWRoYWthckBsaW51eC5pYm0uY29tPgpSZXZpZXdlZC1ieTogU3RlZmFuIEJl cmdlciA8c3RlZmFuYkBsaW51eC5pYm0uY29tPgpSZXZpZXdlZC1ieTogQXZuaXNoIENob3VoYW4g PGF2bmlzaEBsaW51eC5pYm0uY29tPgpSZXZpZXdlZC1ieTogRGFuaWVsIEtpcGVyIDxkYW5pZWwu a2lwZXJAb3JhY2xlLmNvbT4KLS0tCiBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBw ZW5kZWRzaWcuYyB8IDk0ICsrKysrKysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgOTMg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2dydWItY29yZS9jb21t YW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVu ZGVkc2lnL2FwcGVuZGVkc2lnLmMKaW5kZXggZGQ4MjBiMzVhLi42Mjc5YWE2ZDUgMTAwNjQ0Ci0t LSBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jCisrKyBiL2dy dWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jCkBAIC01MjIsNiArNTIy LDgzIEBAIGV4dHJhY3RfYXBwZW5kZWRfc2lnbmF0dXJlIChjb25zdCBncnViX3VpbnQ4X3QgKmJ1 ZiwgZ3J1Yl9zaXplX3QgYnVmc2l6ZSwKICAgcmV0dXJuIGdydWJfcGtjczdfZGF0YV9wYXJzZSAo c2lnbmVkX2RhdGEsIGFwcGVuZGVkc2lnX3BrY3M3X3NpemUsICZzaWctPnBrY3M3KTsKIH0KIAor c3RhdGljIGdydWJfZXJyX3QKK2dldF9iaW5hcnlfaGFzaCAoY29uc3QgZ3J1Yl9zaXplX3QgYmlu YXJ5X2hhc2hfc2l6ZSwgY29uc3QgZ3J1Yl91aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAg ICBjb25zdCBncnViX3NpemVfdCBkYXRhX3NpemUsIGdydWJfdWludDhfdCAqaGFzaCwgZ3J1Yl9z aXplX3QgKmhhc2hfc2l6ZSkKK3sKKyAgZ3J1Yl9wYWNrZWRfZ3VpZF90IGd1aWQgPSB7IDAgfTsK KworICAvKiBzdXBwb3J0IFNIQTI1NiwgU0hBMzg0IGFuZCBTSEE1MTIgZm9yIGJpbmFyeSBoYXNo ICovCisgIGlmIChiaW5hcnlfaGFzaF9zaXplID09IFNIQTI1Nl9IQVNIX0xFTikKKyAgICBncnVi X21lbWNweSAoJmd1aWQsICZHUlVCX1BLU19DRVJUX1NIQTI1Nl9HVUlELCBHUlVCX1BBQ0tFRF9H VUlEX1NJWkUpOworICBlbHNlIGlmIChiaW5hcnlfaGFzaF9zaXplID09IFNIQTM4NF9IQVNIX0xF TikKKyAgICBncnViX21lbWNweSAoJmd1aWQsICZHUlVCX1BLU19DRVJUX1NIQTM4NF9HVUlELCBH UlVCX1BBQ0tFRF9HVUlEX1NJWkUpOworICBlbHNlIGlmIChiaW5hcnlfaGFzaF9zaXplID09IFNI QTUxMl9IQVNIX0xFTikKKyAgICBncnViX21lbWNweSAoJmd1aWQsICZHUlVCX1BLU19DRVJUX1NI QTUxMl9HVUlELCBHUlVCX1BBQ0tFRF9HVUlEX1NJWkUpOworICBlbHNlCisgICAgeworICAgICAg Z3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAidW5zdXBwb3J0ZWQgaGFzaCB0eXBlICglIiBQ Ukl1R1JVQl9TSVpFICIpIGFuZCAiCisgICAgICAgICAgICAgICAgICAgICJza2lwcGVkXG4iLCBi aW5hcnlfaGFzaF9zaXplKTsKKyAgICAgIHJldHVybiBHUlVCX0VSUl9VTktOT1dOX0NPTU1BTkQ7 CisgICAgfQorCisgIHJldHVybiBnZXRfaGFzaCAoJmd1aWQsIGRhdGEsIGRhdGFfc2l6ZSwgaGFz aCwgaGFzaF9zaXplKTsKK30KKworLyoKKyAqIFZlcmlmeSBiaW5hcnkgaGFzaCBhZ2FpbnN0IHRo ZSBkYiBhbmQgZGJ4IGxpc3QuCisgKiBUaGUgZm9sbG93aW5nIGVycm9ycyBjYW4gb2NjdXI6Cisg KiAgLSBHUlVCX0VSUl9CQURfU0lHTkFUVVJFOiBpbmRpY2F0ZXMgdGhhdCB0aGUgaGFzaCBpcyBp biBkYnggbGlzdC4KKyAqICAtIEdSVUJfRVJSX0VPRjogdGhlIGhhc2ggY291bGQgbm90IGJlIGZv dW5kIGluIHRoZSBkYiBhbmQgZGJ4IGxpc3QuCisgKiAgLSBHUlVCX0VSUl9OT05FOiB0aGUgaGFz aCBpcyBmb3VuZCBpbiBkYiBsaXN0LgorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAordmVyaWZ5X2Jp bmFyeV9oYXNoIChjb25zdCBncnViX3VpbnQ4X3QgKmRhdGEsIGNvbnN0IGdydWJfc2l6ZV90IGRh dGFfc2l6ZSkKK3sKKyAgZ3J1Yl9lcnJfdCByYyA9IEdSVUJfRVJSX05PTkU7CisgIGdydWJfdWlu dDMyX3QgaTsKKyAgZ3J1Yl9zaXplX3QgaGFzaF9zaXplID0gMDsKKyAgZ3J1Yl91aW50OF90IGhh c2hbR1JVQl9NQVhfSEFTSF9MRU5dID0geyAwIH07CisKKyAgZm9yIChpID0gMDsgaSA8IGRieC5o YXNoX2VudHJpZXM7IGkrKykKKyAgICB7CisgICAgICBpZiAoZGJ4Lmhhc2hlc1tpXSA9PSBOVUxM KQorICAgICAgICBjb250aW51ZTsKKworICAgICAgcmMgPSBnZXRfYmluYXJ5X2hhc2ggKGRieC5o YXNoX3NpemVzW2ldLCBkYXRhLCBkYXRhX3NpemUsIGhhc2gsICZoYXNoX3NpemUpOworICAgICAg aWYgKHJjICE9IEdSVUJfRVJSX05PTkUpCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZiAo aGFzaF9zaXplID09IGRieC5oYXNoX3NpemVzW2ldICYmCisgICAgICAgICAgZ3J1Yl9tZW1jbXAg KGRieC5oYXNoZXNbaV0sIGhhc2gsIGhhc2hfc2l6ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAg ICAgIGdydWJfZHByaW50ZiAoImFwcGVuZGVkc2lnIiwgInRoZSBoYXNoICglMDJ4JTAyeCUwMngl MDJ4KSBpcyBwcmVzZW50IGluIHRoZSBkYnggbGlzdFxuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgIGhhc2hbMF0sIGhhc2hbMV0sIGhhc2hbMl0sIGhhc2hbM10pOworICAgICAgICAgIHJldHVy biBHUlVCX0VSUl9CQURfU0lHTkFUVVJFOworICAgICAgICB9CisgICAgfQorCisgIGZvciAoaSA9 IDA7IGkgPCBkYi5oYXNoX2VudHJpZXM7IGkrKykKKyAgICB7CisgICAgICBpZiAoZGIuaGFzaGVz W2ldID09IE5VTEwpCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICByYyA9IGdldF9iaW5hcnlf aGFzaCAoZGIuaGFzaF9zaXplc1tpXSwgZGF0YSwgZGF0YV9zaXplLCBoYXNoLCAmaGFzaF9zaXpl KTsKKyAgICAgIGlmIChyYyAhPSBHUlVCX0VSUl9OT05FKQorICAgICAgICBjb250aW51ZTsKKwor ICAgICAgaWYgKGhhc2hfc2l6ZSA9PSBkYi5oYXNoX3NpemVzW2ldICYmCisgICAgICAgICAgZ3J1 Yl9tZW1jbXAgKGRiLmhhc2hlc1tpXSwgaGFzaCwgaGFzaF9zaXplKSA9PSAwKQorICAgICAgICB7 CisgICAgICAgICAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAidmVyaWZpZWQgd2l0aCBh IHRydXN0ZWQgaGFzaCAoJTAyeCUwMnglMDJ4JTAyeClcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICBoYXNoWzBdLCBoYXNoWzFdLCBoYXNoWzJdLCBoYXNoWzNdKTsKKyAgICAgICAgICByZXR1 cm4gR1JVQl9FUlJfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKworICByZXR1cm4gR1JVQl9FUlJf RU9GOworfQorCiAvKgogICogR2l2ZW4gYSBoYXNoIHZhbHVlICdodmFsJywgb2YgaGFzaCBzcGVj aWZpY2F0aW9uICdoYXNoJywgcHJlcGFyZQogICogdGhlIFMtZXhwcmVzc2lvbnMgKHNleHApIGFu ZCBwZXJmb3JtIHRoZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLgpAQCAtNTY2LDcgKzY0Myw3IEBA IGdydWJfdmVyaWZ5X2FwcGVuZGVkX3NpZ25hdHVyZSAoY29uc3QgZ3J1Yl91aW50OF90ICpidWYs IGdydWJfc2l6ZV90IGJ1ZnNpemUpCiAgIGdydWJfcGtjczdfc2lnbmVyX3QgKnNpOwogICBncnVi X2ludDMyX3QgaTsKIAotICBpZiAoIWRiLmNlcnRfZW50cmllcykKKyAgaWYgKCFkYi5jZXJ0X2Vu dHJpZXMgJiYgIWRiLmhhc2hfZW50cmllcykKICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfQkFEX1NJR05BVFVSRSwgIm5vIHRydXN0ZWQga2V5cyB0byB2ZXJpZnkgYWdhaW5zdCIpOwog CiAgIGVyciA9IGV4dHJhY3RfYXBwZW5kZWRfc2lnbmF0dXJlIChidWYsIGJ1ZnNpemUsICZzaWcp OwpAQCAtNTc1LDYgKzY1MiwyMSBAQCBncnViX3ZlcmlmeV9hcHBlbmRlZF9zaWduYXR1cmUgKGNv bnN0IGdydWJfdWludDhfdCAqYnVmLCBncnViX3NpemVfdCBidWZzaXplKQogCiAgIGRhdGFzaXpl ID0gYnVmc2l6ZSAtIHNpZy5zaWduYXR1cmVfbGVuOwogCisgIC8qCisgICAqIElmIHNpZ25hdHVy ZSB2ZXJpZmljYXRpb24gaXMgZW5hYmxlZCB3aXRoIGR5bmFtaWMga2V5IG1hbmFnZW1lbnQgbW9k ZSwKKyAgICogVmVyaWZ5IGJpbmFyeSBoYXNoIGFnYWluc3QgdGhlIGRiIGFuZCBkYnggbGlzdC4K KyAgICovCisgIGlmIChhcHBlbmRfa2V5X21nbXQgPT0gdHJ1ZSkKKyAgICB7CisgICAgICBlcnIg PSB2ZXJpZnlfYmluYXJ5X2hhc2ggKGJ1ZiwgZGF0YXNpemUpOworICAgICAgaWYgKGVyciA9PSBH UlVCX0VSUl9CQURfU0lHTkFUVVJFKQorICAgICAgICB7CisgICAgICAgICAgZ3J1Yl9wa2NzN19k YXRhX3JlbGVhc2UgKCZzaWcucGtjczcpOworICAgICAgICAgIHJldHVybiBncnViX2Vycm9yIChl cnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gdmVyaWZ5IHRoZSBi aW5hcnkgaGFzaCBhZ2FpbnN0IGEgdHJ1c3RlZCBiaW5hcnkgaGFzaCIpOworICAgICAgICB9Cisg ICAgfQorCiAgIC8qIFZlcmlmeSBzaWduYXR1cmUgdXNpbmcgdHJ1c3RlZCBrZXlzIGZyb20gZGIg bGlzdC4gKi8KICAgZm9yIChpID0gMDsgaSA8IHNpZy5wa2NzNy5zaWduZXJfY291bnQ7IGkrKykK ICAgICB7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KR3J1Yi1kZXZlbCBtYWlsaW5nIGxpc3QKR3J1Yi1k ZXZlbEBnbnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2dydWIt ZGV2ZWwK