From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (EUR05-AM6-obe.outbound.protection.outlook.com [40.107.22.51]) by mx.groups.io with SMTP id smtpd.web11.12306.1606838757264477623 for ; Tue, 01 Dec 2020 08:05:58 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=eV+aO1zK; spf=pass (domain: arm.com, ip: 40.107.22.51, mailfrom: joey.gouly@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rko+FlVkeCcISqhsegMhYNf4tbQ6pR0rEbavt8u2V8k=; b=eV+aO1zKbjVnNlpj4S4td0RzYCGWp6yhgyh0T8TUejKVcw8DX8kGvPfVQpyXXI7Ql4jYBoQsNLLkp+sHQYUPFuFpEafVzjXAYGVzwfyS/xsmgmDICznQxmIehnY/OGSAZczYA6lxssGhrT+cS2czSt2T1zJnCz18+a+/lYFCmgs= Received: from AM6P194CA0064.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:84::41) by AM0PR08MB2977.eurprd08.prod.outlook.com (2603:10a6:208:63::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.17; Tue, 1 Dec 2020 16:05:53 +0000 Received: from AM5EUR03FT044.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:84:cafe::4c) by AM6P194CA0064.outlook.office365.com (2603:10a6:209:84::41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20 via Frontend Transport; Tue, 1 Dec 2020 16:05:53 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM5EUR03FT044.mail.protection.outlook.com (10.152.17.56) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.26 via Frontend Transport; Tue, 1 Dec 2020 16:05:52 +0000 Received: ("Tessian outbound 6af064f543d4:v71"); Tue, 01 Dec 2020 16:05:51 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 5e94c62e37640f7f X-CR-MTA-TID: 64aa7808 Received: from 2066721b8cb0.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id EB5FFD4B-F236-443D-BA08-69CA6FD56CB2.1; Tue, 01 Dec 2020 16:05:45 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 2066721b8cb0.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 01 Dec 2020 16:05:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iQ6KU02epld47KVLzgFRkGEaHaKX/+cGaY7qkwS/lRi7bS7wIyToKMMDyjkXr+L8kiqWOAYpnvYSM10JsP5qnsPNYPMRewHZRRkQWpKdmMAIqAtbBisDfn4uSEY7ITXr3lWYnDsIf8vLWjiOYzOZRxB7lrhoIz3p7NTbF4OI5Bl7HxI5o08rpTVMBRTQODeLU/YkcrmNdHZU8Wwza6jFkn1TBalKe/Nk6D9Ebf7/fOzVluB8TUcbTtSY9ae18xRyCKb9F11aD4WqxBq9Y4ADgZAxZrtGLPcHuN6MTlqx8TDUQ5Y/tSKVT465hH/0Ex9Ge100Qsmi2y3s0g78wad8qA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rko+FlVkeCcISqhsegMhYNf4tbQ6pR0rEbavt8u2V8k=; b=evbCkkddo/Zs4h74s07B24tvNtbmojwd11ElNispPi2fGjpRaifSefB73vOZshq+WbF2e2Nb6MC5Kxk3hKrryG8HYhzUAneXz9tamgIQ7FrDawmenDRg+cCy+qrH6RgzFiyfKLTxfVKYIpBQw+IS9aDjfvNQkNJtPF2TILnex73cHsGvyn0CR0aiVchMF8jSaYGmghQiTFkT480xxmCHCyQ8Fsql7WY7QHT2Ecp2C+fmW7UHGRSJNV2ywLAmDczcAeokmfXvT6LsLHXimY36vaAhCrUHkmUSycsOhgTT6JFAZ+3bRKieFMvq1aTPIzFlCTkgBqcLN1sM52NNN7yLfA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rko+FlVkeCcISqhsegMhYNf4tbQ6pR0rEbavt8u2V8k=; b=eV+aO1zKbjVnNlpj4S4td0RzYCGWp6yhgyh0T8TUejKVcw8DX8kGvPfVQpyXXI7Ql4jYBoQsNLLkp+sHQYUPFuFpEafVzjXAYGVzwfyS/xsmgmDICznQxmIehnY/OGSAZczYA6lxssGhrT+cS2czSt2T1zJnCz18+a+/lYFCmgs= Received: from MR2P264CA0188.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501::27) by DB8PR08MB4971.eurprd08.prod.outlook.com (2603:10a6:10:ed::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.22; Tue, 1 Dec 2020 16:05:43 +0000 Received: from VE1EUR03FT027.eop-EUR03.prod.protection.outlook.com (2603:10a6:501:0:cafe::5c) by MR2P264CA0188.outlook.office365.com (2603:10a6:501::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20 via Frontend Transport; Tue, 1 Dec 2020 16:05:43 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; Received: from nebula.arm.com (40.67.248.234) by VE1EUR03FT027.mail.protection.outlook.com (10.152.18.154) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.3611.26 via Frontend Transport; Tue, 1 Dec 2020 16:05:42 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2044.4; Tue, 1 Dec 2020 16:05:40 +0000 Received: from e114247.arm.com (10.57.33.139) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2044.4 via Frontend Transport; Tue, 1 Dec 2020 16:05:37 +0000 From: "Joey Gouly" To: CC: , , , , Subject: [PATCH v1 1/1] ShellPkg: Validate that the Boot CPU is present in MADT Date: Tue, 1 Dec 2020 16:05:36 +0000 Message-ID: <20201201160536.16903-1-joey.gouly@arm.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-Office365-Filtering-HT: Tenant X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bbf50f14-78e9-45f0-8baa-08d89612f9fd X-MS-TrafficTypeDiagnostic: DB8PR08MB4971:|AM0PR08MB2977: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:10000;OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: LZ0s4PdQZajGXOXnfhDKtGaj83nS05vJ5T7fYaa4EhOCJnDxKoYgj34Mwdi1A8qM+QUz4yppuGYo+If5OuYkvBDN7B5JvDsZ2pRhmVpWCjKu2/epKHq3RHenJSCEva4Nwb1sSXzYshUMdOj0wSRwsJqFv8Arn1zrsxAi+OIqlFFko+0CtzUiz+KnMZYmG8bI2I6rs7mlBP+Ma50AdFkAI7DZLx3To+04orT2j92RV7q01fX5fTbjg8cFb6c0ij9XCJTJb33y10Smm0iks9Bc+Sfw/T8EGc9AqqbRN3GufAhfsM9M9fQmQHW2JExH9ldS8kQYTf7zp/DJPJviZcF6k0VrBnB8kpP92hIOlqzy8owcYlGvAAEutfAJcT6/8egz587GLscMSTRbL8Ppse99m+fJpGLfrcHuxI4iVgrinjdyT1ENc++F5OamplX/9S8hGGg7CC7X1Kox30syZlPNR3yQZQTGa3NOKX53scebHxs= X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(136003)(39860400002)(376002)(396003)(346002)(46966005)(478600001)(316002)(2906002)(82740400003)(44832011)(966005)(5660300002)(81166007)(356005)(6916009)(336012)(1076003)(186003)(54906003)(36756003)(86362001)(26005)(83380400001)(70206006)(15650500001)(426003)(4326008)(8936002)(47076004)(2616005)(82310400003)(7696005)(70586007)(8676002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB4971 Return-Path: Joey.Gouly@arm.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT044.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: f92331a5-4265-42cf-7d2d-08d89612f49a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tLzOHmcJI46xgZr1Uq+Tr1EitvV+2j1ScEXnx6N3zw69xQcYQ/WTlnWMe2g4HBmN090kbFsbs47edEe563gDA1SCA4BVeJWdEojp+SgE+oCbfvM+E+YfVOEanEf5GFovW7M4sXqDzjuuuxaes1YnZu79cKjmhJ5gr72T0mEDpChXUpwItKEfXbQ4+VB6PVHt/Cqc9SAGoxs94piK8jToWanBpIqlELMNZ7qTEV46+ojfETuTYJmVq/QxpLHExvPD9t/Id8CkfBKriMpABn0xvVx1D5IT4HfVp3nypEKXDXbt0WVL6GzY2OXeGyTxBwsDcZBlKiFDPh55xXRZz3bZhS+4qieM7fzkZl82ubMXTv02byvMWF6L2q2KDGtMHGE6QIkSnpZnTT6lnMVuhqtl6lOt2ouKMvEih6Yw8W9ehArTt/ImmfUMjLcxmTFX2z2Tm1ChfXsqr24qQ93EwyjBlvlqm4UXe7O6roEALVopiOs= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(396003)(376002)(346002)(39860400002)(136003)(46966005)(966005)(8676002)(5660300002)(1076003)(426003)(15650500001)(336012)(2906002)(44832011)(81166007)(70586007)(70206006)(82740400003)(4326008)(2616005)(6916009)(82310400003)(26005)(83380400001)(186003)(8936002)(47076004)(478600001)(316002)(36906005)(36756003)(54906003)(7696005)(86362001);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Dec 2020 16:05:52.0026 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bbf50f14-78e9-45f0-8baa-08d89612f9fd X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM5EUR03FT044.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB2977 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable The ACPI 6.3 Specification, January 2019, section 5.2.12.14 states that the firmware must convey each processor=E2=80=99s GIC information to the OS= using the GICC structure. If a GICC structure for the boot CPU is missing some standards-based operating system may crash with an error code. It may be difficult to diagnose the reason for the crash as the error code may be too generic and mean firmware error. Therefore add validation to the MADT table parser to check that a GICC is present for the boot CPU. Signed-off-by: Joey Gouly --- The changes can be seen at https://github.com/jgouly/edk2/tree/1474_validat= e_boot_cpu_mpidr_v1 ShellPkg/ShellPkg.dsc = | 3 ++ ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.i= nf | 7 ++- ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c = | 54 +++++++++++++++++++- ShellPkg/ShellPkg.ci.yaml = | 3 +- 4 files changed, 63 insertions(+), 4 deletions(-) diff --git a/ShellPkg/ShellPkg.dsc b/ShellPkg/ShellPkg.dsc index c42bc9464a0f7be111ee3086a664506c8288928c..661cc8b02b0971280c3649e0f29= e109305bcc776 100644 --- a/ShellPkg/ShellPkg.dsc +++ b/ShellPkg/ShellPkg.dsc @@ -71,6 +71,9 @@ [LibraryClasses.ARM,LibraryClasses.AARCH64] # Add support for GCC stack protector NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf =20 + # Add support for reading MPIDR + ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf + [PcdsFixedAtBuild] gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|16000 diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiView= CommandLib.inf b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpi= ViewCommandLib.inf index 91459f9ec632635ee453c5ef46f67445cd9eee0c..6f9e77eed8f8c5f12ecf6b44c49= 4da2e6aacda27 100644 --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommand= Lib.inf +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommand= Lib.inf @@ -1,7 +1,7 @@ ## @file # Provides Shell 'acpiview' command functions # -# Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
+# Copyright (c) 2016 - 2020, Arm Limited. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -57,6 +57,9 @@ [Packages] MdePkg/MdePkg.dec ShellPkg/ShellPkg.dec =20 +[Packages.ARM, Packages.AARCH64] + ArmPkg/ArmPkg.dec + [LibraryClasses] BaseLib BaseMemoryLib @@ -72,6 +75,8 @@ [LibraryClasses] UefiLib UefiRuntimeServicesTableLib =20 +[LibraryClasses.ARM, LibraryClasses.AARCH64] + ArmLib =20 [FixedPcd] gEfiShellPkgTokenSpaceGuid.PcdShellProfileMask ## CONSUMES diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/Madt= Parser.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtPa= rser.c index 15aa2392b60cee9e3843c7c560b0ab84e0be4174..be013ce5c06541d12dcd594eb0f= 5c1820708923e 100644 --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.= c +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.= c @@ -1,7 +1,7 @@ /** @file MADT table parser =20 - Copyright (c) 2016 - 2020, ARM Limited. All rights reserved. + Copyright (c) 2016 - 2020, Arm Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent =20 @par Reference(s): @@ -13,6 +13,9 @@ =20 #include #include +#if defined(MDE_CPU_ARM) || defined(MDE_CPU_AARCH64) +#include +#endif #include "AcpiParser.h" #include "AcpiTableParser.h" #include "AcpiViewConfig.h" @@ -23,6 +26,11 @@ STATIC CONST UINT8* MadtInterruptControllerType; STATIC CONST UINT8* MadtInterruptControllerLength; STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo; =20 +#if defined(MDE_CPU_ARM) || defined(MDE_CPU_AARCH64) +STATIC UINT64 BootMpidr; +STATIC BOOLEAN HasBootCpuGicc =3D FALSE; +#endif + /** This function validates the System Vector Base in the GICD. =20 @@ -95,6 +103,33 @@ ValidateSpeOverflowInterrupt ( } } =20 +/** + This function validates that the GICC structure contains an entry for + the Boot CPU. + + @param [in] Ptr Pointer to the start of the field data. + @param [in] Context Pointer to context specific information e.g. this + could be a pointer to the ACPI table header. +**/ +STATIC +VOID +EFIAPI +ValidateBootMpidr ( + IN UINT8* Ptr, + IN VOID* Context + ) +{ +#if defined(MDE_CPU_ARM) || defined(MDE_CPU_AARCH64) + UINT64 CurrentMpidr; + + CurrentMpidr =3D *(UINT64*)Ptr; + + if (CurrentMpidr =3D=3D BootMpidr) { + HasBootCpuGicc =3D TRUE; + } +#endif +} + /** An ACPI_PARSER array describing the GICC Interrupt Controller Structure. **/ @@ -115,7 +150,7 @@ STATIC CONST ACPI_PARSER GicCParser[] =3D { {L"GICH", 8, 48, L"0x%lx", NULL, NULL, NULL, NULL}, {L"VGIC Maintenance interrupt", 4, 56, L"0x%x", NULL, NULL, NULL, NULL}, {L"GICR Base Address", 8, 60, L"0x%lx", NULL, NULL, NULL, NULL}, - {L"MPIDR", 8, 68, L"0x%lx", NULL, NULL, NULL, NULL}, + {L"MPIDR", 8, 68, L"0x%lx", NULL, NULL, ValidateBootMpidr, NULL}, {L"Processor Power Efficiency Class", 1, 76, L"0x%x", NULL, NULL, NULL, NULL}, {L"Reserved", 1, 77, L"0x%x", NULL, NULL, NULL, NULL}, @@ -234,6 +269,11 @@ ParseAcpiMadt ( UINT8* InterruptContollerPtr; UINT32 GICDCount; =20 +#if defined(MDE_CPU_ARM) || defined(MDE_CPU_AARCH64) + BootMpidr =3D ArmReadMpidr () & + (ARM_CORE_AFF0 | ARM_CORE_AFF1 | ARM_CORE_AFF2 | ARM_CORE_AF= F3); +#endif + GICDCount =3D 0; =20 if (!Trace) { @@ -371,4 +411,14 @@ ParseAcpiMadt ( InterruptContollerPtr +=3D *MadtInterruptControllerLength; Offset +=3D *MadtInterruptControllerLength; } // while + +#if defined(MDE_CPU_ARM) || defined(MDE_CPU_AARCH64) + if (!HasBootCpuGicc) { + IncrementErrorCount (); + Print ( + L"ERROR: No GICC present for Boot CPU (MPIDR: 0x%lx)", + BootMpidr + ); + } +#endif } diff --git a/ShellPkg/ShellPkg.ci.yaml b/ShellPkg/ShellPkg.ci.yaml index 30894d44bc3ae9a2a9796146c5bcdc62d4ce9801..2833febb296f3d3b1fa0c482689= 55bb574d1dbee 100644 --- a/ShellPkg/ShellPkg.ci.yaml +++ b/ShellPkg/ShellPkg.ci.yaml @@ -31,7 +31,8 @@ "MdePkg/MdePkg.dec", "MdeModulePkg/MdeModulePkg.dec", "ShellPkg/ShellPkg.dec", - "NetworkPkg/NetworkPkg.dec" + "NetworkPkg/NetworkPkg.dec", + "ArmPkg/ArmPkg.dec" ], # For host based unit tests "AcceptableDependencies-HOST_APPLICATION":[], --=20 Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")