From 2b0915eef3b57895fdd3827ae8654f918313a78f Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 2 Aug 2024 10:16:14 -0700 Subject: [PATCH 01/34] Init URI validation --- src/AppInstallerCLI.sln | 45 +++++ .../Workflows/ConfigurationFlow.cpp | 76 +++++++++ .../AppInstallerCLIPackage.wapproj | 3 + .../AppInstallerCLITests.vcxproj | 4 + src/AppInstallerSharedLib/GroupPolicy.cpp | 84 +++++++++ .../Public/winget/GroupPolicy.h | 27 +++ src/Internal/UriValidation/.gitignore | 4 + src/Internal/UriValidation/UriValidation.cpp | 13 ++ src/Internal/UriValidation/UriValidation.h | 14 ++ .../UriValidation/UriValidation.vcxproj | 161 ++++++++++++++++++ .../UriValidation.vcxproj.filters | 42 +++++ src/Internal/UriValidation/pch.cpp | 3 + src/Internal/UriValidation/pch.h | 38 +++++ .../WindowsPackageManager.vcxproj | 9 +- 14 files changed, 521 insertions(+), 2 deletions(-) create mode 100644 src/Internal/UriValidation/.gitignore create mode 100644 src/Internal/UriValidation/UriValidation.cpp create mode 100644 src/Internal/UriValidation/UriValidation.h create mode 100644 src/Internal/UriValidation/UriValidation.vcxproj create mode 100644 src/Internal/UriValidation/UriValidation.vcxproj.filters create mode 100644 src/Internal/UriValidation/pch.cpp create mode 100644 src/Internal/UriValidation/pch.h diff --git a/src/AppInstallerCLI.sln b/src/AppInstallerCLI.sln index d0fd3783c2..f0c58f3b37 100644 --- a/src/AppInstallerCLI.sln +++ b/src/AppInstallerCLI.sln @@ -207,6 +207,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VcpkgCustomTriplets", "Vcpk VcpkgCustomTriplets\x86.cmake = VcpkgCustomTriplets\x86.cmake EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Internal", "Internal", "{A66FF147-BBB4-4A84-95A0-18413D973941}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UriValidation", "Internal\UriValidation\UriValidation.vcxproj", "{98920AB6-27B0-4C0F-B336-FA49DE57A1BA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1421,6 +1425,46 @@ Global {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x64.Build.0 = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x86.ActiveCfg = Release|Win32 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x86.Build.0 = Release|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|Any CPU.ActiveCfg = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|Any CPU.Build.0 = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|ARM64.ActiveCfg = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|ARM64.Build.0 = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x64.ActiveCfg = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x64.Build.0 = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x86.ActiveCfg = Debug|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x86.Build.0 = Debug|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|Any CPU.ActiveCfg = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|Any CPU.Build.0 = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|ARM64.ActiveCfg = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|ARM64.Build.0 = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x64.ActiveCfg = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x64.Build.0 = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x86.ActiveCfg = Debug|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x86.Build.0 = Debug|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.PowerShell|Any CPU.ActiveCfg = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.PowerShell|Any CPU.Build.0 = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.PowerShell|ARM64.ActiveCfg = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.PowerShell|ARM64.Build.0 = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.PowerShell|x64.ActiveCfg = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.PowerShell|x64.Build.0 = Debug|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.PowerShell|x86.ActiveCfg = Debug|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.PowerShell|x86.Build.0 = Debug|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|Any CPU.ActiveCfg = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|Any CPU.Build.0 = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|ARM64.ActiveCfg = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|ARM64.Build.0 = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x64.ActiveCfg = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x64.Build.0 = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x86.ActiveCfg = Release|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x86.Build.0 = Release|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|Any CPU.ActiveCfg = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|Any CPU.Build.0 = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|ARM64.ActiveCfg = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|ARM64.Build.0 = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x64.ActiveCfg = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x64.Build.0 = Release|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x86.ActiveCfg = Release|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1453,6 +1497,7 @@ Global {5A52D9FC-0059-4A4A-8196-427A7AA0D1C5} = {7C218A3E-9BC8-48FF-B91B-BCACD828C0C9} {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4} = {60618CAC-2995-4DF9-9914-45C6FC02C995} {76B26B2C-602A-4AD0-9736-4162D3FCA92A} = {1A5D7A7D-5CB2-47D5-B40D-4E61CAEDC798} + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA} = {A66FF147-BBB4-4A84-95A0-18413D973941} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B6FDB70C-A751-422C-ACD1-E35419495857} diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index dc9eaddadd..bdf9de61d4 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -15,6 +15,8 @@ #include #include #include +#include +#include "../Internal/UriValidation/UriValidation.h" using namespace AppInstaller::CLI::Execution; using namespace winrt::Microsoft::Management::Configuration; @@ -959,6 +961,62 @@ namespace AppInstaller::CLI::Workflow set.Path(absolutePath.wstring()); } + // Get Uri zone for a given uri or file path. + Settings::ConfigurationAllowedZonesOptions GetUriZone(const std::string& uri) + { + DWORD dwZone; + auto pInternetSecurityManager = winrt::create_instance(CLSID_InternetSecurityManager, CLSCTX_ALL); + pInternetSecurityManager->MapUrlToZone(std::wstring(uri.begin(), uri.end()).c_str(), &dwZone, 0); + + // Treat all zones higher than untrusted as untrusted + if (dwZone > static_cast(Settings::ConfigurationAllowedZonesOptions::Untrusted)) + { + return Settings::ConfigurationAllowedZonesOptions::Untrusted; + } + + return static_cast(dwZone); + } + + HRESULT ValidateGroupPolicy(Execution::Context& context, const Settings::ConfigurationAllowedZonesOptions zone) + { + auto configurationPolicies = Settings::GroupPolicies().GetValue(); + if (!configurationPolicies.has_value()) + { + AICLI_LOG(Config, Warning, << "ConfigurationAllowedZones policy is not set"); + return NO_ERROR; + } + + if (configurationPolicies->find(zone) == configurationPolicies->end()) + { + AICLI_LOG(Config, Error, << "Configuration is not configured in the zone " << zone); + return NO_ERROR; + } + + auto isAllowed = configurationPolicies->at(zone); + AICLI_LOG(Config, Error, << "Configuration is configured in the zone " << zone << " with value " << isAllowed); + if(!isAllowed) + { + context.Reporter.Error() << std::endl << "Configuration is disabled for Zone: " << zone << std::endl; + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; + } + + return NO_ERROR; + } + + HRESULT ValidateSmartScreen(Execution::Context& context, const std::string& url) + { + auto response = AppInstaller::UriValidation::UriValidation(url); + switch (response) + { + case AppInstaller::UriValidation::UriValidationResult::Block: + context.Reporter.Error() << std::endl << "Blocked by smart screen" << std::endl; + return ERROR_NOT_SUPPORTED; + case AppInstaller::UriValidation::UriValidationResult::Allow: + default: + return NO_ERROR; + } + } + void OpenConfigurationSet(Execution::Context& context, const std::string& argPath, bool allowRemote) { auto progressScope = context.Reporter.BeginAsyncProgress(true); @@ -977,6 +1035,24 @@ namespace AppInstaller::CLI::Workflow AICLI_TERMINATE_CONTEXT(ERROR_NOT_SUPPORTED); } + // Get url zone + auto zone = GetUriZone(argPath); + auto groupPolicyValidation = ValidateGroupPolicy(context, zone); + if(groupPolicyValidation != NO_ERROR) + { + AICLI_TERMINATE_CONTEXT(groupPolicyValidation); + } + + // For internet zone, run smart screen check + if(zone == Settings::ConfigurationAllowedZonesOptions::Internet) + { + auto smartScreenValidation = ValidateSmartScreen(context, argPath); + if(smartScreenValidation != NO_ERROR) + { + AICLI_TERMINATE_CONTEXT(smartScreenValidation); + } + } + std::ostringstream stringStream; ProgressCallback emptyCallback; Utility::DownloadToStream(argPath, stringStream, Utility::DownloadType::ConfigurationFile, emptyCallback); diff --git a/src/AppInstallerCLIPackage/AppInstallerCLIPackage.wapproj b/src/AppInstallerCLIPackage/AppInstallerCLIPackage.wapproj index 10c92b6dd5..8fb768c644 100644 --- a/src/AppInstallerCLIPackage/AppInstallerCLIPackage.wapproj +++ b/src/AppInstallerCLIPackage/AppInstallerCLIPackage.wapproj @@ -236,6 +236,9 @@ WindowsPackageManager.dll + + libsmartscreen.dll + Microsoft.Management.Deployment.winmd diff --git a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj index 020a6692ba..a250ab1c63 100644 --- a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj +++ b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj @@ -14,6 +14,7 @@ 10.0.17763.0 AppInstallerCLITests + @@ -1011,6 +1012,9 @@ {866c3f06-636f-4be8-bc24-5f86ecc606a1} + + {98920ab6-27b0-4c0f-b336-fa49de57a1ba} + {82b39fda-e86b-4713-a873-9d56de00247a} diff --git a/src/AppInstallerSharedLib/GroupPolicy.cpp b/src/AppInstallerSharedLib/GroupPolicy.cpp index 862c1ccce4..ca35a28fbc 100644 --- a/src/AppInstallerSharedLib/GroupPolicy.cpp +++ b/src/AppInstallerSharedLib/GroupPolicy.cpp @@ -116,6 +116,43 @@ namespace AppInstaller::Settings (FoldHelper{}, ..., Validate(P)>(policiesKey, policies)); } + + std::optional::value_t> ReadEnums(const Registry::Key& policiesKey) + { + using Mapping = details::ValuePolicyMapping; + + auto enumKey = policiesKey.SubKey(Mapping::KeyName); + if (!enumKey.has_value()) + { + return std::nullopt; + } + + typename Mapping::value_t map; + for (const auto& value : enumKey->Values()) + { + std::optional potentialValue = value.Value(); + + if (potentialValue) + { + auto entry = Mapping::ReadAndValidateItem(value); + if (entry.has_value()) + { + map.insert(*entry); + } + else + { + AICLI_LOG(Core, Warning, << "Failed to read Group Policy enum value. Policy [" << Mapping::KeyName << "], Value [" << value.Name() << ']'); + } + } + else + { + AICLI_LOG(Core, Verbose, << "Group Policy enum value not found. Policy [" << Mapping::KeyName << "], Value [" << value.Name() << ']'); + } + } + + return map; + } + // Reads a list from a Group Policy. // The list is stored in a sub-key of the policies key, and each value in that key is a list item. // Cases not considered by this function because we don't use them: @@ -259,6 +296,11 @@ namespace AppInstaller::Settings POLICY_MAPPING_DEFAULT_LIST_READ(ValuePolicy::AllowedSources); POLICY_MAPPING_DEFAULT_READ(ValuePolicy::DefaultProxy); + std::optional::value_t> ValuePolicyMapping::ReadAndValidate(const Registry::Key& policiesKey) + { + return ReadEnums(policiesKey); + } + std::nullopt_t ValuePolicyMapping::ReadAndValidate(const Registry::Key&) { return std::nullopt; @@ -292,6 +334,48 @@ namespace AppInstaller::Settings { return ReadSourceFromRegistryValue(item); } + + std::optional> ValuePolicyMapping::ReadAndValidateItem(const Registry::ValueList::ValueRef& entry) + { + auto name = entry.Name(); + if (name == "LocalMachine") + { + auto data = entry.Value()->TryGetValue(); + auto value = data.value_or(true); + return std::make_pair(ConfigurationAllowedZonesOptions::LocalMachine, value); + } + + if (name == "Intranet") + { + auto data = entry.Value()->TryGetValue(); + auto value = data.value_or(true); + return std::make_pair(ConfigurationAllowedZonesOptions::Intranet, value); + } + + if (name == "TrustedSites") + { + auto data = entry.Value()->TryGetValue(); + auto value = data.value_or(true); + return std::make_pair(ConfigurationAllowedZonesOptions::Trusted, value); + } + + if (name == "Internet") + { + auto data = entry.Value()->TryGetValue(); + auto value = data.value_or(true); + return std::make_pair(ConfigurationAllowedZonesOptions::Internet, value); + } + + if (name == "UntrustedSites") + { + auto data = entry.Value()->TryGetValue(); + auto value = data.value_or(true); + return std::make_pair(ConfigurationAllowedZonesOptions::Untrusted, value); + } + + AICLI_LOG(Core, Warning, << "Unknown value in ConfigurationAllowedZones: " << name); + return std::nullopt; + } } TogglePolicy TogglePolicy::GetPolicy(TogglePolicy::Policy policy) diff --git a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h index 850526f60c..9088a2ffbc 100644 --- a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h +++ b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h @@ -23,9 +23,21 @@ namespace AppInstaller::Settings AdditionalSources, AllowedSources, DefaultProxy, + ConfigurationAllowedZones, Max, }; + // Enum for the configurable zones for the configuration policy. + enum class ConfigurationAllowedZonesOptions : DWORD + { + LocalMachine = 0, + Intranet = 1, + Trusted = 2, + Internet = 3, + Untrusted = 4, + // 4+ are treated as untrusted + }; + // A policy that acts as a toggle to enable or disable a feature. // They are backed by a DWORD value with values 0 and 1. struct TogglePolicy @@ -113,6 +125,12 @@ namespace AppInstaller::Settings // item_t - Type of each item // KeyName -- Name of the sub-key containing the list // ReadAndValidateItem() - Function that reads a single item from a subkey + + // For enums: + // keyItem_t - Type of the key + // valueItem_t - Type of the value + // KeyName -- Name of the sub-key containing the list + // ReadAndValidateItem() - Function that reads a single item from a subkey }; template<> @@ -149,11 +167,20 @@ namespace AppInstaller::Settings static std::optional ReadAndValidateItem(const Registry::Value& item); \ ) +#define POLICY_MAPPING_ENUM_SPECIALIZATION(_policy_, _mapType_, _keyName_) \ + POLICY_MAPPING_SPECIALIZATION(_policy_, _mapType_, \ + static constexpr std::string_view KeyName = _keyName_; \ + static std::optional ReadAndValidateItem(const Registry::ValueList::ValueRef& item); \ + ) + POLICY_MAPPING_VALUE_SPECIALIZATION(ValuePolicy::SourceAutoUpdateIntervalInMinutes, uint32_t, "SourceAutoUpdateInterval"sv, Registry::Value::Type::DWord); POLICY_MAPPING_VALUE_SPECIALIZATION(ValuePolicy::DefaultProxy, std::string, "DefaultProxy"sv, Registry::Value::Type::String); POLICY_MAPPING_LIST_SPECIALIZATION(ValuePolicy::AdditionalSources, SourceFromPolicy, "AdditionalSources"sv); POLICY_MAPPING_LIST_SPECIALIZATION(ValuePolicy::AllowedSources, SourceFromPolicy, "AllowedSources"sv); + + typedef std::map ConfigurationAllowedZonesMap_t; + POLICY_MAPPING_ENUM_SPECIALIZATION(ValuePolicy::ConfigurationAllowedZones, ConfigurationAllowedZonesMap_t, "DSCAllowedZones"sv); } // Representation of the policies read from the registry. diff --git a/src/Internal/UriValidation/.gitignore b/src/Internal/UriValidation/.gitignore new file mode 100644 index 0000000000..a19a3d9a13 --- /dev/null +++ b/src/Internal/UriValidation/.gitignore @@ -0,0 +1,4 @@ +# The following files are injected in the pipeline build +packages.config +UriValidation.props +UriValidation_internal.cpp \ No newline at end of file diff --git a/src/Internal/UriValidation/UriValidation.cpp b/src/Internal/UriValidation/UriValidation.cpp new file mode 100644 index 0000000000..8d6743ee15 --- /dev/null +++ b/src/Internal/UriValidation/UriValidation.cpp @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#include "pch.h" +#include "UriValidation.h" + +namespace AppInstaller::UriValidation +{ + UriValidationResult UriValidation(const std::string&) + { + return UriValidationResult::Allow; + } +} diff --git a/src/Internal/UriValidation/UriValidation.h b/src/Internal/UriValidation/UriValidation.h new file mode 100644 index 0000000000..30d654aee7 --- /dev/null +++ b/src/Internal/UriValidation/UriValidation.h @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +#pragma once + +namespace AppInstaller::UriValidation +{ + enum class UriValidationResult + { + Allow, + Block, + }; + + UriValidationResult UriValidation(const std::string& uri); +} diff --git a/src/Internal/UriValidation/UriValidation.vcxproj b/src/Internal/UriValidation/UriValidation.vcxproj new file mode 100644 index 0000000000..3cc26c6089 --- /dev/null +++ b/src/Internal/UriValidation/UriValidation.vcxproj @@ -0,0 +1,161 @@ + + + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {98920ab6-27b0-4c0f-b336-fa49de57a1ba} + UriValidation + 10.0 + + + + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + StaticLibrary + true + v143 + Unicode + + + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + StaticLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + + + + + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + + + + + true + true + true + + + + + Level3 + true + _DEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + stdcpp17 + $(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + + + + + true + + + + + Level3 + true + true + true + NDEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + stdcpp17 + $(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + + + + + true + true + true + + + + + + + + + Create + + + + + + + + + + + + {f3f6e699-bc5d-4950-8a05-e49dd9eb0d51} + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/src/Internal/UriValidation/UriValidation.vcxproj.filters b/src/Internal/UriValidation/UriValidation.vcxproj.filters new file mode 100644 index 0000000000..3bd3d721e7 --- /dev/null +++ b/src/Internal/UriValidation/UriValidation.vcxproj.filters @@ -0,0 +1,42 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + + + + + + + \ No newline at end of file diff --git a/src/Internal/UriValidation/pch.cpp b/src/Internal/UriValidation/pch.cpp new file mode 100644 index 0000000000..147dc1b6e0 --- /dev/null +++ b/src/Internal/UriValidation/pch.cpp @@ -0,0 +1,3 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +#include "pch.h" diff --git a/src/Internal/UriValidation/pch.h b/src/Internal/UriValidation/pch.h new file mode 100644 index 0000000000..107fc82d03 --- /dev/null +++ b/src/Internal/UriValidation/pch.h @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +#pragma once + +#define NOMINMAX +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include diff --git a/src/WindowsPackageManager/WindowsPackageManager.vcxproj b/src/WindowsPackageManager/WindowsPackageManager.vcxproj index 510d07aa61..c2f46098e8 100644 --- a/src/WindowsPackageManager/WindowsPackageManager.vcxproj +++ b/src/WindowsPackageManager/WindowsPackageManager.vcxproj @@ -17,6 +17,7 @@ . + @@ -219,7 +220,8 @@ true false $(ProjectDir)..\vcpkg_installed - + + x64-release-static @@ -519,6 +521,9 @@ {866c3f06-636f-4be8-bc24-5f86ecc606a1} + + {98920ab6-27b0-4c0f-b336-fa49de57a1ba} + {82b39fda-e86b-4713-a873-9d56de00247a} @@ -551,4 +556,4 @@ - + \ No newline at end of file From e7ea781d800f75984e16107ff779a3ff835604b5 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 2 Aug 2024 13:35:02 -0700 Subject: [PATCH 02/34] Updated result --- .../AppInstallerCLICore.vcxproj | 6 +++--- .../Workflows/ConfigurationFlow.cpp | 10 ++++----- src/Internal/UriValidation/UriValidation.cpp | 3 ++- src/Internal/UriValidation/UriValidation.h | 21 ++++++++++++++++++- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj index aafca0d9bf..c4c54cdc30 100644 --- a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj +++ b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj @@ -225,7 +225,7 @@ _DEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) true true true @@ -268,7 +268,7 @@ $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) true true true @@ -305,7 +305,7 @@ $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) true true true diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index bdf9de61d4..197f797fd6 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -15,8 +15,8 @@ #include #include #include +#include #include -#include "../Internal/UriValidation/UriValidation.h" using namespace AppInstaller::CLI::Execution; using namespace winrt::Microsoft::Management::Configuration; @@ -1006,12 +1006,12 @@ namespace AppInstaller::CLI::Workflow HRESULT ValidateSmartScreen(Execution::Context& context, const std::string& url) { auto response = AppInstaller::UriValidation::UriValidation(url); - switch (response) + switch (response.Decision()) { - case AppInstaller::UriValidation::UriValidationResult::Block: - context.Reporter.Error() << std::endl << "Blocked by smart screen" << std::endl; + case AppInstaller::UriValidation::UriValidationDecision::Block: + context.Reporter.Error() << std::endl << "Blocked by smart screen" << std::endl << "Feedback: " << response.Feedback() << std::endl; return ERROR_NOT_SUPPORTED; - case AppInstaller::UriValidation::UriValidationResult::Allow: + case AppInstaller::UriValidation::UriValidationDecision::Allow: default: return NO_ERROR; } diff --git a/src/Internal/UriValidation/UriValidation.cpp b/src/Internal/UriValidation/UriValidation.cpp index 8d6743ee15..6db4db3c56 100644 --- a/src/Internal/UriValidation/UriValidation.cpp +++ b/src/Internal/UriValidation/UriValidation.cpp @@ -8,6 +8,7 @@ namespace AppInstaller::UriValidation { UriValidationResult UriValidation(const std::string&) { - return UriValidationResult::Allow; + // In Dev mode, allow all URIs + return UriValidationResult(UriValidationDecision::Allow, std::string()); } } diff --git a/src/Internal/UriValidation/UriValidation.h b/src/Internal/UriValidation/UriValidation.h index 30d654aee7..4a827d982b 100644 --- a/src/Internal/UriValidation/UriValidation.h +++ b/src/Internal/UriValidation/UriValidation.h @@ -4,11 +4,30 @@ namespace AppInstaller::UriValidation { - enum class UriValidationResult + + // The decision made based on the Uri validation. + enum class UriValidationDecision { Allow, Block, }; + // The result of a Uri validation. + class UriValidationResult + { + private: + // The decision made based on the Uri validation. + UriValidationDecision m_decision; + + // Uri to give feedback to smart screen about the decision. + std::string m_feedback; + public: + UriValidationResult(UriValidationDecision decision) : m_decision(decision), m_feedback(std::string()) {} + UriValidationResult(UriValidationDecision decision, std::string feedback) : m_decision(decision), m_feedback(feedback) {} + UriValidationDecision Decision() const { return m_decision; } + std::string Feedback() const { return m_feedback; } + }; + + // Validate the given Uri. UriValidationResult UriValidation(const std::string& uri); } From 80e3d07b86e99bc587eb984323249404ccbc3fcc Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 2 Aug 2024 14:39:54 -0700 Subject: [PATCH 03/34] empty space --- src/Internal/UriValidation/UriValidation.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Internal/UriValidation/UriValidation.h b/src/Internal/UriValidation/UriValidation.h index 4a827d982b..3359c57f04 100644 --- a/src/Internal/UriValidation/UriValidation.h +++ b/src/Internal/UriValidation/UriValidation.h @@ -4,7 +4,6 @@ namespace AppInstaller::UriValidation { - // The decision made based on the Uri validation. enum class UriValidationDecision { From 04be98c11c7c1f47808f032c4a505037a365c0c1 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 2 Aug 2024 16:25:36 -0700 Subject: [PATCH 04/34] Misc enhancements --- .../Workflows/ConfigurationFlow.cpp | 62 ++++++++++-------- src/AppInstallerSharedLib/GroupPolicy.cpp | 64 +++++++------------ .../Public/winget/GroupPolicy.h | 1 - 3 files changed, 58 insertions(+), 69 deletions(-) diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index 197f797fd6..4dc431ea4b 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -966,7 +966,7 @@ namespace AppInstaller::CLI::Workflow { DWORD dwZone; auto pInternetSecurityManager = winrt::create_instance(CLSID_InternetSecurityManager, CLSCTX_ALL); - pInternetSecurityManager->MapUrlToZone(std::wstring(uri.begin(), uri.end()).c_str(), &dwZone, 0); + pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); // Treat all zones higher than untrusted as untrusted if (dwZone > static_cast(Settings::ConfigurationAllowedZonesOptions::Untrusted)) @@ -977,46 +977,65 @@ namespace AppInstaller::CLI::Workflow return static_cast(dwZone); } - HRESULT ValidateGroupPolicy(Execution::Context& context, const Settings::ConfigurationAllowedZonesOptions zone) + // Validate group policy for a given zone. + bool IsBlockedByGroupPolicy(Execution::Context& context, const Settings::ConfigurationAllowedZonesOptions zone) { auto configurationPolicies = Settings::GroupPolicies().GetValue(); if (!configurationPolicies.has_value()) { AICLI_LOG(Config, Warning, << "ConfigurationAllowedZones policy is not set"); - return NO_ERROR; + return false; } if (configurationPolicies->find(zone) == configurationPolicies->end()) { - AICLI_LOG(Config, Error, << "Configuration is not configured in the zone " << zone); - return NO_ERROR; + AICLI_LOG(Config, Warning, << "Configuration is not configured in the zone " << zone); + return false; } auto isAllowed = configurationPolicies->at(zone); - AICLI_LOG(Config, Error, << "Configuration is configured in the zone " << zone << " with value " << isAllowed); if(!isAllowed) { - context.Reporter.Error() << std::endl << "Configuration is disabled for Zone: " << zone << std::endl; - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; + context.Reporter.Error() << "Configuration is disabled for Zone: " << zone << std::endl; + return true; } - return NO_ERROR; + AICLI_LOG(Config, Info, << "Configuration is configured in zone " << zone << " with value " << (isAllowed ? "allowed" : "blocked")); + return false; } - HRESULT ValidateSmartScreen(Execution::Context& context, const std::string& url) + // Validate smart screen for a given url. + bool IsBlockedBySmartScreen(Execution::Context& context, const std::string& url) { auto response = AppInstaller::UriValidation::UriValidation(url); switch (response.Decision()) { case AppInstaller::UriValidation::UriValidationDecision::Block: context.Reporter.Error() << std::endl << "Blocked by smart screen" << std::endl << "Feedback: " << response.Feedback() << std::endl; - return ERROR_NOT_SUPPORTED; + return true; case AppInstaller::UriValidation::UriValidationDecision::Allow: default: - return NO_ERROR; + return false; } } + // Evaluate a given uri for configuration. + HRESULT EvaluateUri(Execution::Context& context, const std::string& uri) + { + auto zone = GetUriZone(uri); + if(IsBlockedByGroupPolicy(context, zone)) + { + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; + } + + if(zone == Settings::ConfigurationAllowedZonesOptions::Internet && IsBlockedBySmartScreen(context, uri)) + { + return APPINSTALLER_CLI_ERROR_SOURCE_NOT_SECURE; + } + + return NO_ERROR; + } + void OpenConfigurationSet(Execution::Context& context, const std::string& argPath, bool allowRemote) { auto progressScope = context.Reporter.BeginAsyncProgress(true); @@ -1035,22 +1054,11 @@ namespace AppInstaller::CLI::Workflow AICLI_TERMINATE_CONTEXT(ERROR_NOT_SUPPORTED); } - // Get url zone - auto zone = GetUriZone(argPath); - auto groupPolicyValidation = ValidateGroupPolicy(context, zone); - if(groupPolicyValidation != NO_ERROR) + auto uriValidation = EvaluateUri(context, argPath); + if (uriValidation != NO_ERROR) { - AICLI_TERMINATE_CONTEXT(groupPolicyValidation); - } - - // For internet zone, run smart screen check - if(zone == Settings::ConfigurationAllowedZonesOptions::Internet) - { - auto smartScreenValidation = ValidateSmartScreen(context, argPath); - if(smartScreenValidation != NO_ERROR) - { - AICLI_TERMINATE_CONTEXT(smartScreenValidation); - } + AICLI_LOG(Config, Error, << "URI validation blocked this uri: " << argPath); + AICLI_TERMINATE_CONTEXT(uriValidation); } std::ostringstream stringStream; diff --git a/src/AppInstallerSharedLib/GroupPolicy.cpp b/src/AppInstallerSharedLib/GroupPolicy.cpp index ca35a28fbc..85dd7e0561 100644 --- a/src/AppInstallerSharedLib/GroupPolicy.cpp +++ b/src/AppInstallerSharedLib/GroupPolicy.cpp @@ -117,9 +117,10 @@ namespace AppInstaller::Settings } - std::optional::value_t> ReadEnums(const Registry::Key& policiesKey) + template + std::optional::value_t> ReadEnums(const Registry::Key& policiesKey) { - using Mapping = details::ValuePolicyMapping; + using Mapping = details::ValuePolicyMapping

; auto enumKey = policiesKey.SubKey(Mapping::KeyName); if (!enumKey.has_value()) @@ -292,14 +293,16 @@ namespace AppInstaller::Settings return ReadList<_policy_>(policiesKey); \ } +#define POLICY_MAPPING_DEFAULT_ENUM_READ(_policy_) \ + std::optional::value_t> ValuePolicyMapping<_policy_>::ReadAndValidate(const Registry::Key& policiesKey) \ + { \ + return ReadEnums<_policy_>(policiesKey); \ + } + POLICY_MAPPING_DEFAULT_LIST_READ(ValuePolicy::AdditionalSources); POLICY_MAPPING_DEFAULT_LIST_READ(ValuePolicy::AllowedSources); POLICY_MAPPING_DEFAULT_READ(ValuePolicy::DefaultProxy); - - std::optional::value_t> ValuePolicyMapping::ReadAndValidate(const Registry::Key& policiesKey) - { - return ReadEnums(policiesKey); - } + POLICY_MAPPING_DEFAULT_ENUM_READ(ValuePolicy::ConfigurationAllowedZones); std::nullopt_t ValuePolicyMapping::ReadAndValidate(const Registry::Key&) { @@ -337,43 +340,22 @@ namespace AppInstaller::Settings std::optional> ValuePolicyMapping::ReadAndValidateItem(const Registry::ValueList::ValueRef& entry) { - auto name = entry.Name(); - if (name == "LocalMachine") - { - auto data = entry.Value()->TryGetValue(); - auto value = data.value_or(true); - return std::make_pair(ConfigurationAllowedZonesOptions::LocalMachine, value); +#define CONFIGURATION_ALLOWED_ZONES_READ(_zone_) \ + if (entry.Name() == #_zone_) \ + { \ + auto data = entry.Value()->TryGetValue(); \ + auto value = data.value_or(true); \ + return std::make_pair(ConfigurationAllowedZonesOptions::_zone_, value); \ } - if (name == "Intranet") - { - auto data = entry.Value()->TryGetValue(); - auto value = data.value_or(true); - return std::make_pair(ConfigurationAllowedZonesOptions::Intranet, value); - } - - if (name == "TrustedSites") - { - auto data = entry.Value()->TryGetValue(); - auto value = data.value_or(true); - return std::make_pair(ConfigurationAllowedZonesOptions::Trusted, value); - } - - if (name == "Internet") - { - auto data = entry.Value()->TryGetValue(); - auto value = data.value_or(true); - return std::make_pair(ConfigurationAllowedZonesOptions::Internet, value); - } - - if (name == "UntrustedSites") - { - auto data = entry.Value()->TryGetValue(); - auto value = data.value_or(true); - return std::make_pair(ConfigurationAllowedZonesOptions::Untrusted, value); - } + CONFIGURATION_ALLOWED_ZONES_READ(LocalMachine); + CONFIGURATION_ALLOWED_ZONES_READ(Intranet); + CONFIGURATION_ALLOWED_ZONES_READ(Trusted); + CONFIGURATION_ALLOWED_ZONES_READ(Internet); + CONFIGURATION_ALLOWED_ZONES_READ(Untrusted); +#undef CONFIGURATION_ALLOWED_ZONES_READ - AICLI_LOG(Core, Warning, << "Unknown value in ConfigurationAllowedZones: " << name); + AICLI_LOG(Core, Warning, << "Unknown value in ConfigurationAllowedZones: " << entry.Name()); return std::nullopt; } } diff --git a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h index 9088a2ffbc..c20c14c0cf 100644 --- a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h +++ b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h @@ -35,7 +35,6 @@ namespace AppInstaller::Settings Trusted = 2, Internet = 3, Untrusted = 4, - // 4+ are treated as untrusted }; // A policy that acts as a toggle to enable or disable a feature. From d1081875337daadce350329a65ca92e247fafbf6 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 2 Aug 2024 16:56:46 -0700 Subject: [PATCH 05/34] Updated admx/adml --- doc/admx/DesktopAppInstaller.admx | 72 +++++++++++++++++++ doc/admx/en-US/DesktopAppInstaller.adml | 11 +++ .../Workflows/ConfigurationFlow.cpp | 4 +- src/AppInstallerSharedLib/GroupPolicy.cpp | 4 +- .../Public/winget/GroupPolicy.h | 4 +- 5 files changed, 89 insertions(+), 6 deletions(-) diff --git a/doc/admx/DesktopAppInstaller.admx b/doc/admx/DesktopAppInstaller.admx index 9cad850345..648ecb00b8 100644 --- a/doc/admx/DesktopAppInstaller.admx +++ b/doc/admx/DesktopAppInstaller.admx @@ -183,5 +183,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/admx/en-US/DesktopAppInstaller.adml b/doc/admx/en-US/DesktopAppInstaller.adml index 5c3142ab6b..db06d37273 100644 --- a/doc/admx/en-US/DesktopAppInstaller.adml +++ b/doc/admx/en-US/DesktopAppInstaller.adml @@ -122,6 +122,10 @@ If you disable this setting, users will not be able to use the Windows Package M If you disable or do not configure this setting, no proxy will be used by default. If you enable this setting, the specified proxy will be used by default. + Enable App Installer Allowed Zones for DSC + + Allow + Block @@ -138,6 +142,13 @@ If you enable this setting, the specified proxy will be used by default.Default Proxy + + Local Machine + Intranet + Trusted Sites + Internet + Untrusted Sites + diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index 4dc431ea4b..4b1d9951ee 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -969,9 +969,9 @@ namespace AppInstaller::CLI::Workflow pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); // Treat all zones higher than untrusted as untrusted - if (dwZone > static_cast(Settings::ConfigurationAllowedZonesOptions::Untrusted)) + if (dwZone > static_cast(Settings::ConfigurationAllowedZonesOptions::UntrustedSites)) { - return Settings::ConfigurationAllowedZonesOptions::Untrusted; + return Settings::ConfigurationAllowedZonesOptions::UntrustedSites; } return static_cast(dwZone); diff --git a/src/AppInstallerSharedLib/GroupPolicy.cpp b/src/AppInstallerSharedLib/GroupPolicy.cpp index 85dd7e0561..2617f5c213 100644 --- a/src/AppInstallerSharedLib/GroupPolicy.cpp +++ b/src/AppInstallerSharedLib/GroupPolicy.cpp @@ -350,9 +350,9 @@ namespace AppInstaller::Settings CONFIGURATION_ALLOWED_ZONES_READ(LocalMachine); CONFIGURATION_ALLOWED_ZONES_READ(Intranet); - CONFIGURATION_ALLOWED_ZONES_READ(Trusted); + CONFIGURATION_ALLOWED_ZONES_READ(TrustedSites); CONFIGURATION_ALLOWED_ZONES_READ(Internet); - CONFIGURATION_ALLOWED_ZONES_READ(Untrusted); + CONFIGURATION_ALLOWED_ZONES_READ(UntrustedSites); #undef CONFIGURATION_ALLOWED_ZONES_READ AICLI_LOG(Core, Warning, << "Unknown value in ConfigurationAllowedZones: " << entry.Name()); diff --git a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h index c20c14c0cf..2c2ac1928f 100644 --- a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h +++ b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h @@ -32,9 +32,9 @@ namespace AppInstaller::Settings { LocalMachine = 0, Intranet = 1, - Trusted = 2, + TrustedSites = 2, Internet = 3, - Untrusted = 4, + UntrustedSites = 4, }; // A policy that acts as a toggle to enable or disable a feature. From eb33c582b05d3a17c46d8152b073ba3bdd7a4622 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:53:05 -0700 Subject: [PATCH 06/34] Validate untrusted zone --- src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index 4b1d9951ee..923168ef85 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -1019,6 +1019,12 @@ namespace AppInstaller::CLI::Workflow } } + bool IsSmartScreenRequired(Settings::ConfigurationAllowedZonesOptions zone) + { + return zone == Settings::ConfigurationAllowedZonesOptions::Internet + || zone == Settings::ConfigurationAllowedZonesOptions::UntrustedSites; + } + // Evaluate a given uri for configuration. HRESULT EvaluateUri(Execution::Context& context, const std::string& uri) { @@ -1028,7 +1034,7 @@ namespace AppInstaller::CLI::Workflow return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; } - if(zone == Settings::ConfigurationAllowedZonesOptions::Internet && IsBlockedBySmartScreen(context, uri)) + if (IsSmartScreenRequired(zone) && IsBlockedBySmartScreen(context, uri)) { return APPINSTALLER_CLI_ERROR_SOURCE_NOT_SECURE; } From 7b48281d5bc4c5f5e6e68c2b1924b91a05f04828 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:40:31 -0700 Subject: [PATCH 07/34] Move URI validation to a new file --- .../AppInstallerCLICore.vcxproj | 2 + .../AppInstallerCLICore.vcxproj.filters | 6 + .../Commands/ConfigureCommand.cpp | 2 + .../Workflows/ConfigurationFlow.cpp | 90 -------------- .../Workflows/SmartScreenFlow.cpp | 112 ++++++++++++++++++ .../Workflows/SmartScreenFlow.h | 10 ++ 6 files changed, 132 insertions(+), 90 deletions(-) create mode 100644 src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp create mode 100644 src/AppInstallerCLICore/Workflows/SmartScreenFlow.h diff --git a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj index fc4428adae..2f6e382fd8 100644 --- a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj +++ b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj @@ -389,6 +389,7 @@ + @@ -451,6 +452,7 @@ + diff --git a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj.filters b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj.filters index 91c66b0a16..9671037cc5 100644 --- a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj.filters +++ b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj.filters @@ -257,6 +257,9 @@ Commands + + Workflows + @@ -484,6 +487,9 @@ Commands + + Workflows + diff --git a/src/AppInstallerCLICore/Commands/ConfigureCommand.cpp b/src/AppInstallerCLICore/Commands/ConfigureCommand.cpp index 8738a382eb..49c7dd05d6 100644 --- a/src/AppInstallerCLICore/Commands/ConfigureCommand.cpp +++ b/src/AppInstallerCLICore/Commands/ConfigureCommand.cpp @@ -8,6 +8,7 @@ #include "ConfigureValidateCommand.h" #include "ConfigureExportCommand.h" #include "Workflows/ConfigurationFlow.h" +#include "Workflows/SmartScreenFlow.h" #include "Workflows/MSStoreInstallerHandler.h" #include "ConfigurationCommon.h" @@ -77,6 +78,7 @@ namespace AppInstaller::CLI context << VerifyIsFullPackage << VerifyFileOrUri(Execution::Args::Type::ConfigurationFile) << + EvaluateUri << CreateConfigurationProcessor << OpenConfigurationSet << ShowConfigurationSet << diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index 5046aceb73..c30cb561cb 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -15,8 +15,6 @@ #include #include #include -#include -#include using namespace AppInstaller::CLI::Execution; using namespace winrt::Microsoft::Management::Configuration; @@ -961,87 +959,6 @@ namespace AppInstaller::CLI::Workflow set.Path(absolutePath.wstring()); } - // Get Uri zone for a given uri or file path. - Settings::ConfigurationAllowedZonesOptions GetUriZone(const std::string& uri) - { - DWORD dwZone; - auto pInternetSecurityManager = winrt::create_instance(CLSID_InternetSecurityManager, CLSCTX_ALL); - pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); - - // Treat all zones higher than untrusted as untrusted - if (dwZone > static_cast(Settings::ConfigurationAllowedZonesOptions::UntrustedSites)) - { - return Settings::ConfigurationAllowedZonesOptions::UntrustedSites; - } - - return static_cast(dwZone); - } - - // Validate group policy for a given zone. - bool IsBlockedByGroupPolicy(Execution::Context& context, const Settings::ConfigurationAllowedZonesOptions zone) - { - auto configurationPolicies = Settings::GroupPolicies().GetValue(); - if (!configurationPolicies.has_value()) - { - AICLI_LOG(Config, Warning, << "ConfigurationAllowedZones policy is not set"); - return false; - } - - if (configurationPolicies->find(zone) == configurationPolicies->end()) - { - AICLI_LOG(Config, Warning, << "Configuration is not configured in the zone " << zone); - return false; - } - - auto isAllowed = configurationPolicies->at(zone); - if(!isAllowed) - { - context.Reporter.Error() << "Configuration is disabled for Zone: " << zone << std::endl; - return true; - } - - AICLI_LOG(Config, Info, << "Configuration is configured in zone " << zone << " with value " << (isAllowed ? "allowed" : "blocked")); - return false; - } - - // Validate smart screen for a given url. - bool IsBlockedBySmartScreen(Execution::Context& context, const std::string& url) - { - auto response = AppInstaller::UriValidation::UriValidation(url); - switch (response.Decision()) - { - case AppInstaller::UriValidation::UriValidationDecision::Block: - context.Reporter.Error() << std::endl << "Blocked by smart screen" << std::endl << "Feedback: " << response.Feedback() << std::endl; - return true; - case AppInstaller::UriValidation::UriValidationDecision::Allow: - default: - return false; - } - } - - bool IsSmartScreenRequired(Settings::ConfigurationAllowedZonesOptions zone) - { - return zone == Settings::ConfigurationAllowedZonesOptions::Internet - || zone == Settings::ConfigurationAllowedZonesOptions::UntrustedSites; - } - - // Evaluate a given uri for configuration. - HRESULT EvaluateUri(Execution::Context& context, const std::string& uri) - { - auto zone = GetUriZone(uri); - if(IsBlockedByGroupPolicy(context, zone)) - { - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; - } - - if (IsSmartScreenRequired(zone) && IsBlockedBySmartScreen(context, uri)) - { - return APPINSTALLER_CLI_ERROR_SOURCE_NOT_SECURE; - } - - return NO_ERROR; - } - void OpenConfigurationSet(Execution::Context& context, const std::string& argPath, bool allowRemote) { auto progressScope = context.Reporter.BeginAsyncProgress(true); @@ -1060,13 +977,6 @@ namespace AppInstaller::CLI::Workflow AICLI_TERMINATE_CONTEXT(ERROR_NOT_SUPPORTED); } - auto uriValidation = EvaluateUri(context, argPath); - if (uriValidation != NO_ERROR) - { - AICLI_LOG(Config, Error, << "URI validation blocked this uri: " << argPath); - AICLI_TERMINATE_CONTEXT(uriValidation); - } - std::ostringstream stringStream; ProgressCallback emptyCallback; Utility::DownloadToStream(argPath, stringStream, Utility::DownloadType::ConfigurationFile, emptyCallback); diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp new file mode 100644 index 0000000000..4093545357 --- /dev/null +++ b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp @@ -0,0 +1,112 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +#include "pch.h" +#include "SmartScreenFlow.h" +#include +#include + +namespace AppInstaller::CLI::Workflow +{ + bool IsSmartScreenRequired(Settings::ConfigurationAllowedZonesOptions zone) + { + return zone == Settings::ConfigurationAllowedZonesOptions::Internet + || zone == Settings::ConfigurationAllowedZonesOptions::UntrustedSites; + } + + // Validate smart screen for a given url. + bool IsBlockedBySmartScreen(Execution::Context& context, const std::string& url) + { + auto response = AppInstaller::UriValidation::UriValidation(url); + switch (response.Decision()) + { + case AppInstaller::UriValidation::UriValidationDecision::Block: + context.Reporter.Error() << std::endl << "Blocked by smart screen" << std::endl << "Feedback: " << response.Feedback() << std::endl; + return true; + case AppInstaller::UriValidation::UriValidationDecision::Allow: + default: + return false; + } + } + + // Get Uri zone for a given uri or file path. + Settings::ConfigurationAllowedZonesOptions GetUriZone(const std::string& uri) + { + DWORD dwZone; + auto pInternetSecurityManager = winrt::create_instance(CLSID_InternetSecurityManager, CLSCTX_ALL); + pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); + + // Treat all zones higher than untrusted as untrusted + if (dwZone > static_cast(Settings::ConfigurationAllowedZonesOptions::UntrustedSites)) + { + return Settings::ConfigurationAllowedZonesOptions::UntrustedSites; + } + + return static_cast(dwZone); + } + + // Validate group policy for a given zone. + bool IsBlockedByGroupPolicy(Execution::Context& context, const Settings::ConfigurationAllowedZonesOptions zone) + { + auto configurationPolicies = Settings::GroupPolicies().GetValue(); + if (!configurationPolicies.has_value()) + { + AICLI_LOG(Config, Warning, << "ConfigurationAllowedZones policy is not set"); + return false; + } + + if (configurationPolicies->find(zone) == configurationPolicies->end()) + { + AICLI_LOG(Config, Warning, << "Configuration is not configured in the zone " << zone); + return false; + } + + auto isAllowed = configurationPolicies->at(zone); + if(!isAllowed) + { + context.Reporter.Error() << "Configuration is disabled for Zone: " << zone << std::endl; + return true; + } + + AICLI_LOG(Config, Info, << "Configuration is configured in zone " << zone << " with value " << (isAllowed ? "allowed" : "blocked")); + return false; + } + + HRESULT EvaluateUri(Execution::Context& context, const std::string& uri) + { + auto zone = GetUriZone(uri); + if(IsBlockedByGroupPolicy(context, zone)) + { + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; + } + + if (IsSmartScreenRequired(zone) && IsBlockedBySmartScreen(context, uri)) + { + return APPINSTALLER_CLI_ERROR_SOURCE_NOT_SECURE; + } + + return NO_ERROR; + } + + void EvaluateUri(Execution::Context& context) + { + if (context.Args.Contains(Execution::Args::Type::ConfigurationFile)) + { + std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; + + if (Utility::IsUrlRemote(argPath)) + { + context.Reporter.Info() << "Validating Uri: " << argPath; + auto uriValidation = EvaluateUri(context, argPath); + if (uriValidation != NO_ERROR) + { + AICLI_LOG(Config, Error, << "URI validation blocked this uri: " << argPath); + AICLI_TERMINATE_CONTEXT(uriValidation); + } + } + else + { + AICLI_LOG(Config, Info, << "Skipping Uri validation for local file: " << argPath); + } + } + } +} diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.h b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.h new file mode 100644 index 0000000000..26a6d42f42 --- /dev/null +++ b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.h @@ -0,0 +1,10 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +#pragma once +#include "ExecutionContext.h" + +namespace AppInstaller::CLI::Workflow +{ + void EvaluateUri(Execution::Context& context); +} + From d393bf1be9b0c51bd1e92b15c6141c8fd429eee4 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Wed, 2 Oct 2024 09:44:49 -0700 Subject: [PATCH 08/34] Addressing comments --- src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp | 6 +++--- src/AppInstallerSharedLib/Public/AppInstallerErrors.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp index 4093545357..718bd6fbe6 100644 --- a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp @@ -81,10 +81,10 @@ namespace AppInstaller::CLI::Workflow if (IsSmartScreenRequired(zone) && IsBlockedBySmartScreen(context, uri)) { - return APPINSTALLER_CLI_ERROR_SOURCE_NOT_SECURE; + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; } - return NO_ERROR; + return S_OK; } void EvaluateUri(Execution::Context& context) @@ -97,7 +97,7 @@ namespace AppInstaller::CLI::Workflow { context.Reporter.Info() << "Validating Uri: " << argPath; auto uriValidation = EvaluateUri(context, argPath); - if (uriValidation != NO_ERROR) + if (FAILED(uriValidation)) { AICLI_LOG(Config, Error, << "URI validation blocked this uri: " << argPath); AICLI_TERMINATE_CONTEXT(uriValidation); diff --git a/src/AppInstallerSharedLib/Public/AppInstallerErrors.h b/src/AppInstallerSharedLib/Public/AppInstallerErrors.h index 33c03906cf..5f2ecbd320 100644 --- a/src/AppInstallerSharedLib/Public/AppInstallerErrors.h +++ b/src/AppInstallerSharedLib/Public/AppInstallerErrors.h @@ -149,6 +149,7 @@ #define APPINSTALLER_CLI_ERROR_SFSCLIENT_API_FAILED ((HRESULT)0x8A150081) #define APPINSTALLER_CLI_ERROR_NO_APPLICABLE_SFSCLIENT_PACKAGE ((HRESULT)0x8A150082) #define APPINSTALLER_CLI_ERROR_LICENSING_API_FAILED ((HRESULT)0x8A150083) +#define APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE ((HRESULT)0x8A150084) // Install errors. #define APPINSTALLER_CLI_ERROR_INSTALL_PACKAGE_IN_USE ((HRESULT)0x8A150101) From 92b9076a35b03364d521e4f2797fef0e91f41d20 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 4 Oct 2024 14:30:39 -0700 Subject: [PATCH 09/34] remove pch --- .../UriValidation/UriValidation.vcxproj | 16 ++------ .../UriValidation.vcxproj.filters | 6 --- src/Internal/UriValidation/pch.cpp | 3 -- src/Internal/UriValidation/pch.h | 38 ------------------- 4 files changed, 4 insertions(+), 59 deletions(-) delete mode 100644 src/Internal/UriValidation/pch.cpp delete mode 100644 src/Internal/UriValidation/pch.h diff --git a/src/Internal/UriValidation/UriValidation.vcxproj b/src/Internal/UriValidation/UriValidation.vcxproj index 3cc26c6089..9b2099274e 100644 --- a/src/Internal/UriValidation/UriValidation.vcxproj +++ b/src/Internal/UriValidation/UriValidation.vcxproj @@ -58,8 +58,7 @@ true WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true - Use - pch.h + NotUsing @@ -75,8 +74,7 @@ true WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) true - Use - pch.h + NotUsing @@ -92,8 +90,7 @@ true _DEBUG;_LIB;%(PreprocessorDefinitions) true - Use - pch.h + NotUsing stdcpp17 $(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) @@ -111,8 +108,7 @@ true NDEBUG;_LIB;%(PreprocessorDefinitions) true - Use - pch.h + NotUsing stdcpp17 $(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) @@ -125,13 +121,9 @@ - - - Create - diff --git a/src/Internal/UriValidation/UriValidation.vcxproj.filters b/src/Internal/UriValidation/UriValidation.vcxproj.filters index 3bd3d721e7..01ce4a95da 100644 --- a/src/Internal/UriValidation/UriValidation.vcxproj.filters +++ b/src/Internal/UriValidation/UriValidation.vcxproj.filters @@ -15,17 +15,11 @@ - - Header Files - Header Files - - Source Files - Source Files diff --git a/src/Internal/UriValidation/pch.cpp b/src/Internal/UriValidation/pch.cpp deleted file mode 100644 index 147dc1b6e0..0000000000 --- a/src/Internal/UriValidation/pch.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -#include "pch.h" diff --git a/src/Internal/UriValidation/pch.h b/src/Internal/UriValidation/pch.h deleted file mode 100644 index 107fc82d03..0000000000 --- a/src/Internal/UriValidation/pch.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -#pragma once - -#define NOMINMAX -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include From d2c9af38af757ef3384fffc83866fd9ed8a1a947 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:46:19 -0700 Subject: [PATCH 10/34] Add URI validation to download --- .../Commands/DownloadCommand.cpp | 2 + .../Workflows/SmartScreenFlow.cpp | 50 ++++++++++++++----- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/AppInstallerCLICore/Commands/DownloadCommand.cpp b/src/AppInstallerCLICore/Commands/DownloadCommand.cpp index bf42b837be..2b59d5a664 100644 --- a/src/AppInstallerCLICore/Commands/DownloadCommand.cpp +++ b/src/AppInstallerCLICore/Commands/DownloadCommand.cpp @@ -5,6 +5,7 @@ #include "Workflows/DownloadFlow.h" #include "Workflows/InstallFlow.h" #include "Workflows/PromptFlow.h" +#include "Workflows/SmartScreenFlow.h" #include "Resources.h" #include #include @@ -104,6 +105,7 @@ namespace AppInstaller::CLI Workflow::ReportIdentityAndInstallationDisclaimer << Workflow::ShowPromptsForSinglePackage(/* ensureAcceptance */ true) << Workflow::DownloadPackageDependencies << + Workflow::EvaluateUri << Workflow::DownloadInstaller; } } diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp index 718bd6fbe6..4319b706f5 100644 --- a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp @@ -87,25 +87,51 @@ namespace AppInstaller::CLI::Workflow return S_OK; } + HRESULT EvaluateConfigurationUri(Execution::Context& context) + { + std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; + if (Utility::IsUrlRemote(argPath)) + { + context.Reporter.Info() << "Validating Uri: " << argPath; + AICLI_LOG(Config, Error, << "URI validation blocked this uri: " << argPath); + return EvaluateUri(context, argPath); + } + + AICLI_LOG(Config, Info, << "Skipping Uri validation for local file: " << argPath); + return S_OK; + } + + HRESULT EvaluateDownloadUri(Execution::Context& context) + { + const auto packageVersion = context.Get(); + const auto source = packageVersion->GetSource(); + const auto isTrusted = WI_IsFlagSet(source.GetDetails().TrustLevel, Repository::SourceTrustLevel::Trusted); + if (!isTrusted) + { + const auto installer = context.Get(); + return EvaluateUri(context, installer->Url); + } + + return S_OK; + } + void EvaluateUri(Execution::Context& context) { + // DSC if (context.Args.Contains(Execution::Args::Type::ConfigurationFile)) { - std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; - - if (Utility::IsUrlRemote(argPath)) + auto uriValidation = EvaluateConfigurationUri(context); + if(FAILED(uriValidation)) { - context.Reporter.Info() << "Validating Uri: " << argPath; - auto uriValidation = EvaluateUri(context, argPath); - if (FAILED(uriValidation)) - { - AICLI_LOG(Config, Error, << "URI validation blocked this uri: " << argPath); - AICLI_TERMINATE_CONTEXT(uriValidation); - } + AICLI_TERMINATE_CONTEXT(uriValidation); } - else + } + else + { + auto uriValidation = EvaluateDownloadUri(context); + if (FAILED(uriValidation)) { - AICLI_LOG(Config, Info, << "Skipping Uri validation for local file: " << argPath); + AICLI_TERMINATE_CONTEXT(uriValidation); } } } From c07480ec38d5c00377185bc7c52f88b7b8c13ad1 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Wed, 9 Oct 2024 14:37:27 -0700 Subject: [PATCH 11/34] Updated TPV --- src/Internal/UriValidation/UriValidation.vcxproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Internal/UriValidation/UriValidation.vcxproj b/src/Internal/UriValidation/UriValidation.vcxproj index 9b2099274e..917dc7895a 100644 --- a/src/Internal/UriValidation/UriValidation.vcxproj +++ b/src/Internal/UriValidation/UriValidation.vcxproj @@ -25,7 +25,8 @@ Win32Proj {98920ab6-27b0-4c0f-b336-fa49de57a1ba} UriValidation - 10.0 + 10.0.22000.0 + 10.0.17763.0 From 1b90b32c2351fd47b28e2a7602d60cd635843b47 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Thu, 10 Oct 2024 16:06:47 -0700 Subject: [PATCH 12/34] Renaming --- .../Workflows/SmartScreenFlow.cpp | 18 +++++++-------- src/AppInstallerSharedLib/GroupPolicy.cpp | 4 ++-- .../Public/winget/GroupPolicy.h | 6 ++--- src/Internal/UriValidation/UriValidation.cpp | 23 +++++++++++++++++-- src/Internal/UriValidation/UriValidation.h | 14 ++++++----- 5 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp index 4319b706f5..5732281ec4 100644 --- a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp @@ -7,16 +7,16 @@ namespace AppInstaller::CLI::Workflow { - bool IsSmartScreenRequired(Settings::ConfigurationAllowedZonesOptions zone) + bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone) { - return zone == Settings::ConfigurationAllowedZonesOptions::Internet - || zone == Settings::ConfigurationAllowedZonesOptions::UntrustedSites; + return zone == Settings::SecurityZoneOptions::Internet + || zone == Settings::SecurityZoneOptions::UntrustedSites; } // Validate smart screen for a given url. bool IsBlockedBySmartScreen(Execution::Context& context, const std::string& url) { - auto response = AppInstaller::UriValidation::UriValidation(url); + auto response = AppInstaller::UriValidation::ValidateUri(url); switch (response.Decision()) { case AppInstaller::UriValidation::UriValidationDecision::Block: @@ -29,23 +29,23 @@ namespace AppInstaller::CLI::Workflow } // Get Uri zone for a given uri or file path. - Settings::ConfigurationAllowedZonesOptions GetUriZone(const std::string& uri) + Settings::SecurityZoneOptions GetUriZone(const std::string& uri) { DWORD dwZone; auto pInternetSecurityManager = winrt::create_instance(CLSID_InternetSecurityManager, CLSCTX_ALL); pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); // Treat all zones higher than untrusted as untrusted - if (dwZone > static_cast(Settings::ConfigurationAllowedZonesOptions::UntrustedSites)) + if (dwZone > static_cast(Settings::SecurityZoneOptions::UntrustedSites)) { - return Settings::ConfigurationAllowedZonesOptions::UntrustedSites; + return Settings::SecurityZoneOptions::UntrustedSites; } - return static_cast(dwZone); + return static_cast(dwZone); } // Validate group policy for a given zone. - bool IsBlockedByGroupPolicy(Execution::Context& context, const Settings::ConfigurationAllowedZonesOptions zone) + bool IsBlockedByGroupPolicy(Execution::Context& context, const Settings::SecurityZoneOptions zone) { auto configurationPolicies = Settings::GroupPolicies().GetValue(); if (!configurationPolicies.has_value()) diff --git a/src/AppInstallerSharedLib/GroupPolicy.cpp b/src/AppInstallerSharedLib/GroupPolicy.cpp index 2617f5c213..4148bf8ad3 100644 --- a/src/AppInstallerSharedLib/GroupPolicy.cpp +++ b/src/AppInstallerSharedLib/GroupPolicy.cpp @@ -338,14 +338,14 @@ namespace AppInstaller::Settings return ReadSourceFromRegistryValue(item); } - std::optional> ValuePolicyMapping::ReadAndValidateItem(const Registry::ValueList::ValueRef& entry) + std::optional> ValuePolicyMapping::ReadAndValidateItem(const Registry::ValueList::ValueRef& entry) { #define CONFIGURATION_ALLOWED_ZONES_READ(_zone_) \ if (entry.Name() == #_zone_) \ { \ auto data = entry.Value()->TryGetValue(); \ auto value = data.value_or(true); \ - return std::make_pair(ConfigurationAllowedZonesOptions::_zone_, value); \ + return std::make_pair(SecurityZoneOptions::_zone_, value); \ } CONFIGURATION_ALLOWED_ZONES_READ(LocalMachine); diff --git a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h index 2c2ac1928f..a197f8c91e 100644 --- a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h +++ b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h @@ -27,8 +27,8 @@ namespace AppInstaller::Settings Max, }; - // Enum for the configurable zones for the configuration policy. - enum class ConfigurationAllowedZonesOptions : DWORD + // Enum for the configurable security zones + enum class SecurityZoneOptions : DWORD { LocalMachine = 0, Intranet = 1, @@ -178,7 +178,7 @@ namespace AppInstaller::Settings POLICY_MAPPING_LIST_SPECIALIZATION(ValuePolicy::AdditionalSources, SourceFromPolicy, "AdditionalSources"sv); POLICY_MAPPING_LIST_SPECIALIZATION(ValuePolicy::AllowedSources, SourceFromPolicy, "AllowedSources"sv); - typedef std::map ConfigurationAllowedZonesMap_t; + typedef std::map ConfigurationAllowedZonesMap_t; POLICY_MAPPING_ENUM_SPECIALIZATION(ValuePolicy::ConfigurationAllowedZones, ConfigurationAllowedZonesMap_t, "DSCAllowedZones"sv); } diff --git a/src/Internal/UriValidation/UriValidation.cpp b/src/Internal/UriValidation/UriValidation.cpp index 6db4db3c56..f261d419e6 100644 --- a/src/Internal/UriValidation/UriValidation.cpp +++ b/src/Internal/UriValidation/UriValidation.cpp @@ -1,13 +1,32 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -#include "pch.h" #include "UriValidation.h" namespace AppInstaller::UriValidation { - UriValidationResult UriValidation(const std::string&) + namespace { + bool EndsWith(const std::string& value, const std::string& ending) + { + if (ending.size() > value.size()) + { + return false; + } + + return std::equal(ending.rbegin(), ending.rend(), value.rbegin()); + } + } + + UriValidationResult ValidateUri(const std::string& uri) + { +#ifndef AICLI_DISABLE_TEST_HOOKS + if (EndsWith(uri, "/block")) + { + return UriValidationResult(UriValidationDecision::Block, std::string()); + } +#endif + // In Dev mode, allow all URIs return UriValidationResult(UriValidationDecision::Allow, std::string()); } diff --git a/src/Internal/UriValidation/UriValidation.h b/src/Internal/UriValidation/UriValidation.h index 3359c57f04..b8676c4450 100644 --- a/src/Internal/UriValidation/UriValidation.h +++ b/src/Internal/UriValidation/UriValidation.h @@ -2,6 +2,8 @@ // Licensed under the MIT License. #pragma once +#include + namespace AppInstaller::UriValidation { // The decision made based on the Uri validation. @@ -14,19 +16,19 @@ namespace AppInstaller::UriValidation // The result of a Uri validation. class UriValidationResult { + public: + UriValidationResult(UriValidationDecision decision) : m_decision(decision), m_feedback(std::string()) {} + UriValidationResult(UriValidationDecision decision, std::string feedback) : m_decision(decision), m_feedback(feedback) {} + UriValidationDecision Decision() const { return m_decision; } + std::string Feedback() const { return m_feedback; } private: // The decision made based on the Uri validation. UriValidationDecision m_decision; // Uri to give feedback to smart screen about the decision. std::string m_feedback; - public: - UriValidationResult(UriValidationDecision decision) : m_decision(decision), m_feedback(std::string()) {} - UriValidationResult(UriValidationDecision decision, std::string feedback) : m_decision(decision), m_feedback(feedback) {} - UriValidationDecision Decision() const { return m_decision; } - std::string Feedback() const { return m_feedback; } }; // Validate the given Uri. - UriValidationResult UriValidation(const std::string& uri); + UriValidationResult ValidateUri(const std::string& uri); } From 7f256603443e1eda78789b71540251c970a8ff06 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:57:13 -0700 Subject: [PATCH 13/34] Include dir for diff plat --- .../AppInstallerCLICore.vcxproj | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj index 6cba0b8810..82e4a30623 100644 --- a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj +++ b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj @@ -223,8 +223,8 @@ Disabled _DEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) true true @@ -265,9 +265,9 @@ true true NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) true true @@ -302,9 +302,9 @@ true true NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) $(ProjectDir);$(ProjectDir)..\AppInstallerRepositoryCore\Public;$(ProjectDir)..\AppInstallerCommonCore\Public;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\JsonCppLib\json;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\Internal;%(AdditionalIncludeDirectories) true true From 29b0dc89e19d774c75739cba7bed3ce89fb5b976 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:26:29 -0700 Subject: [PATCH 14/34] Update vcxproj --- .../UriValidation/UriValidation.vcxproj | 377 +++++++++++++++--- 1 file changed, 322 insertions(+), 55 deletions(-) diff --git a/src/Internal/UriValidation/UriValidation.vcxproj b/src/Internal/UriValidation/UriValidation.vcxproj index 917dc7895a..d758b30225 100644 --- a/src/Internal/UriValidation/UriValidation.vcxproj +++ b/src/Internal/UriValidation/UriValidation.vcxproj @@ -1,12 +1,66 @@ - + + + true + true + true + 15.0 + {98920ab6-27b0-4c0f-b336-fa49de57a1ba} + Win32Proj + UriValidation + 10.0.22621.0 + 10.0.17763.0 + true + true + + + + Debug + ARM + + + Debug + ARM64 + Debug Win32 + + Fuzzing + x64 + + + Fuzzing + Win32 + + + ReleaseStatic + ARM + + + ReleaseStatic + ARM64 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + ARM + + + Release + ARM64 + Release Win32 @@ -20,29 +74,57 @@ x64 - - 17.0 - Win32Proj - {98920ab6-27b0-4c0f-b336-fa49de57a1ba} - UriValidation - 10.0.22000.0 - 10.0.17763.0 + + StaticLibrary + v140 + v141 + v142 + v143 + Unicode - - $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ - StaticLibrary true - v143 - Unicode + true - $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ - StaticLibrary false - v143 true - Unicode + false + + + false + true + false + + + false + false + false + true + + + Spectre + + + Spectre + + + Spectre + + + Spectre + + + Spectre + + + Spectre + + + Spectre + + + Spectre @@ -53,74 +135,259 @@ - + + true + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + true + true + ..\..\CodeAnalysis.ruleset + + + true + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + true + true + ..\..\CodeAnalysis.ruleset + + + true + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + true + true + ..\..\CodeAnalysis.ruleset + + + true + $(SolutionDir)x86\$(Configuration)\$(ProjectName)\ + true + true + ..\..\CodeAnalysis.ruleset + + + false + $(SolutionDir)x86\$(Configuration)\$(ProjectName)\ + true + false + ..\..\CodeAnalysis.ruleset + + + false + $(SolutionDir)x86\$(Configuration)\$(ProjectName)\ + true + false + ..\..\CodeAnalysis.ruleset + + + false + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + true + false + ..\..\CodeAnalysis.ruleset + + + false + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + true + false + ..\..\CodeAnalysis.ruleset + + + false + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + + + false + $(SolutionDir)x86\$(Configuration)\$(ProjectName)\ + + + false + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + true + false + ..\..\CodeAnalysis.ruleset + + + false + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + true + false + ..\..\CodeAnalysis.ruleset + + + false + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + true + false + ..\..\CodeAnalysis.ruleset + + + false + $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ + true + false + ..\..\CodeAnalysis.ruleset + + - Level3 - true - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - true NotUsing + _CONSOLE;%(PreprocessorDefinitions) + Level4 + %(AdditionalOptions) /permissive- /D _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING + + + + + Disabled + _NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;_DEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + true + true + true + true + true + true + true + true + true + false + false + false - - - true + false + Windows + Windows + Windows - + - Level3 + _NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;WIN32;%(PreprocessorDefinitions);CLICOREDLLBUILD + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + true + true + true + false + + + Windows + + + + + MaxSpeed true true - true - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - NotUsing + _NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + true + true + true + true + true + true + true + true + false + false + false + false + false + false + false + false - - true true - true + false + Windows + Windows + Windows + Windows - + - Level3 - true - _DEBUG;_LIB;%(PreprocessorDefinitions) - true - NotUsing - stdcpp17 - $(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + MaxSpeed + true + true + _NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + true + true + true + true + true + true + true + true + false + false + false + false + MultiThreaded + MultiThreaded + MultiThreaded + MultiThreaded + false + false + false + false - - - true + true + true + false + Windows + Windows + Windows + Windows - + - Level3 + MaxSpeed true true - true - NDEBUG;_LIB;%(PreprocessorDefinitions) - true - NotUsing + _NO_ASYNCRTIMP;NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD;WINGET_DISABLE_FOR_FUZZING;_DISABLE_VECTOR_ANNOTATION;_DISABLE_STRING_ANNOTATION + $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) + true stdcpp17 - $(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + MultiThreaded + %(AdditionalOptions) /fsanitize=address /fsanitize-coverage=inline-8bit-counters /fsanitize-coverage=edge /fsanitize-coverage=trace-cmp /fsanitize-coverage=trace-div + false - - true true - true + false + Windows + + + AICLI_DISABLE_TEST_HOOKS;%(PreprocessorDefinitions) + + + + + WINGET_DISABLE_EXPERIMENTAL_FEATURES;%(PreprocessorDefinitions) + + + + + WINGET_ENABLE_RELEASE_BUILD;%(PreprocessorDefinitions) + + From 8f0468363c93261ce310b95c397bbe1885973680 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:55:49 -0700 Subject: [PATCH 15/34] rm package reference --- src/Internal/UriValidation/UriValidation.vcxproj | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/Internal/UriValidation/UriValidation.vcxproj b/src/Internal/UriValidation/UriValidation.vcxproj index d758b30225..5dfbd1efae 100644 --- a/src/Internal/UriValidation/UriValidation.vcxproj +++ b/src/Internal/UriValidation/UriValidation.vcxproj @@ -398,13 +398,6 @@ - - - - - {f3f6e699-bc5d-4950-8a05-e49dd9eb0d51} - - From caa13c25c975e4f3bbf95df9c5fa9697beb8f3be Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 11 Oct 2024 17:43:41 -0700 Subject: [PATCH 16/34] Fix includes --- .../UriValidation/UriValidation.vcxproj | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Internal/UriValidation/UriValidation.vcxproj b/src/Internal/UriValidation/UriValidation.vcxproj index 5dfbd1efae..48cfe3d68c 100644 --- a/src/Internal/UriValidation/UriValidation.vcxproj +++ b/src/Internal/UriValidation/UriValidation.vcxproj @@ -239,9 +239,9 @@ Disabled _NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;_DEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) true true true @@ -265,7 +265,7 @@ _NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;WIN32;%(PreprocessorDefinitions);CLICOREDLLBUILD - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) true true true @@ -281,10 +281,10 @@ true true _NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) true true true @@ -318,10 +318,10 @@ true true _NO_ASYNCRTIMP;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;$(ProjectDir)..\SfsClient\sfs-client\client\include;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) true true true @@ -359,7 +359,7 @@ true true _NO_ASYNCRTIMP;NDEBUG;%(PreprocessorDefinitions);CLICOREDLLBUILD;WINGET_DISABLE_FOR_FUZZING;_DISABLE_VECTOR_ANNOTATION;_DISABLE_STRING_ANNOTATION - $(ProjectDir);$(ProjectDir)Public;$(ProjectDir)Telemetry;$(ProjectDir)..\AppInstallerSharedLib;$(ProjectDir)..\AppInstallerSharedLib\Public;$(ProjectDir)..\binver;$(ProjectDir)..\YamlCppLib\libyaml\include;$(ProjectDir)..\cpprestsdk\cpprestsdk\Release\include;$(ProjectDir)..\PureLib\pure;$(ProjectDir)..\JsonCppLib;%(AdditionalIncludeDirectories) + $(ProjectDir);$(ProjectDir)..\..\AppInstallerSharedLib;$(ProjectDir)..\..\AppInstallerSharedLib\Public;%(AdditionalIncludeDirectories) true stdcpp17 MultiThreaded From 0ac0ab47d98790eccf585a31c5e29239dd75eab8 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Sun, 13 Oct 2024 17:22:41 -0700 Subject: [PATCH 17/34] Create a task --- .../Commands/ConfigureCommand.cpp | 2 -- .../Commands/DownloadCommand.cpp | 2 -- .../Workflows/ConfigurationFlow.cpp | 2 ++ .../Workflows/DownloadFlow.cpp | 2 ++ .../Workflows/SmartScreenFlow.cpp | 5 ++--- .../Workflows/SmartScreenFlow.h | 15 ++++++++++++++- src/Internal/UriValidation/UriValidation.cpp | 1 + 7 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/AppInstallerCLICore/Commands/ConfigureCommand.cpp b/src/AppInstallerCLICore/Commands/ConfigureCommand.cpp index 49c7dd05d6..8738a382eb 100644 --- a/src/AppInstallerCLICore/Commands/ConfigureCommand.cpp +++ b/src/AppInstallerCLICore/Commands/ConfigureCommand.cpp @@ -8,7 +8,6 @@ #include "ConfigureValidateCommand.h" #include "ConfigureExportCommand.h" #include "Workflows/ConfigurationFlow.h" -#include "Workflows/SmartScreenFlow.h" #include "Workflows/MSStoreInstallerHandler.h" #include "ConfigurationCommon.h" @@ -78,7 +77,6 @@ namespace AppInstaller::CLI context << VerifyIsFullPackage << VerifyFileOrUri(Execution::Args::Type::ConfigurationFile) << - EvaluateUri << CreateConfigurationProcessor << OpenConfigurationSet << ShowConfigurationSet << diff --git a/src/AppInstallerCLICore/Commands/DownloadCommand.cpp b/src/AppInstallerCLICore/Commands/DownloadCommand.cpp index 2b59d5a664..bf42b837be 100644 --- a/src/AppInstallerCLICore/Commands/DownloadCommand.cpp +++ b/src/AppInstallerCLICore/Commands/DownloadCommand.cpp @@ -5,7 +5,6 @@ #include "Workflows/DownloadFlow.h" #include "Workflows/InstallFlow.h" #include "Workflows/PromptFlow.h" -#include "Workflows/SmartScreenFlow.h" #include "Resources.h" #include #include @@ -105,7 +104,6 @@ namespace AppInstaller::CLI Workflow::ReportIdentityAndInstallationDisclaimer << Workflow::ShowPromptsForSinglePackage(/* ensureAcceptance */ true) << Workflow::DownloadPackageDependencies << - Workflow::EvaluateUri << Workflow::DownloadInstaller; } } diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index 819f1cf9bc..c7423fb564 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -2,6 +2,7 @@ // Licensed under the MIT License. #include "pch.h" #include "ConfigurationFlow.h" +#include "SmartScreenFlow.h" #include "PromptFlow.h" #include "TableOutput.h" #include "Public/ConfigurationSetProcessorFactoryRemoting.h" @@ -1300,6 +1301,7 @@ namespace AppInstaller::CLI::Workflow void CreateConfigurationProcessor(Context& context) { + context << ExecuteSmartScreen(true); auto progressScope = context.Reporter.BeginAsyncProgress(true); progressScope->Callback().SetProgressMessage(Resource::String::ConfigurationInitializing()); diff --git a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp index 084cbb4d3f..4833c000fe 100644 --- a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp @@ -2,6 +2,7 @@ // Licensed under the MIT License. #include "pch.h" #include "DownloadFlow.h" +#include "SmartScreenFlow.h" #include "MSStoreInstallerHandler.h" #include #include @@ -208,6 +209,7 @@ namespace AppInstaller::CLI::Workflow } bool installerDownloadOnly = WI_IsFlagSet(context.GetFlags(), Execution::ContextFlag::InstallerDownloadOnly); + context << ExecuteSmartScreen(false); // CheckForExistingInstaller will set the InstallerPath if found if (!context.Contains(Execution::Data::InstallerPath)) diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp index 5732281ec4..70c2c34a64 100644 --- a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp @@ -115,10 +115,9 @@ namespace AppInstaller::CLI::Workflow return S_OK; } - void EvaluateUri(Execution::Context& context) + void ExecuteSmartScreen::operator()(Execution::Context& context) const { - // DSC - if (context.Args.Contains(Execution::Args::Type::ConfigurationFile)) + if (m_isConfigurationFlow) { auto uriValidation = EvaluateConfigurationUri(context); if(FAILED(uriValidation)) diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.h b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.h index 26a6d42f42..956c741bdc 100644 --- a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.h +++ b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.h @@ -5,6 +5,19 @@ namespace AppInstaller::CLI::Workflow { - void EvaluateUri(Execution::Context& context); + // Composite flow that chooses what to do based on whether or not the + // configuration flow is being run. + // Required Args: None + // Inputs: IsConfigurationFlow + // Outputs: None + struct ExecuteSmartScreen : public WorkflowTask + { + ExecuteSmartScreen(bool isConfigurationFlow) : WorkflowTask("ExecuteSmartScreen"), m_isConfigurationFlow(isConfigurationFlow) {} + + void operator()(Execution::Context& context) const override; + + private: + bool m_isConfigurationFlow; + }; } diff --git a/src/Internal/UriValidation/UriValidation.cpp b/src/Internal/UriValidation/UriValidation.cpp index f261d419e6..8599606f88 100644 --- a/src/Internal/UriValidation/UriValidation.cpp +++ b/src/Internal/UriValidation/UriValidation.cpp @@ -21,6 +21,7 @@ namespace AppInstaller::UriValidation UriValidationResult ValidateUri(const std::string& uri) { #ifndef AICLI_DISABLE_TEST_HOOKS + // For testing purposes, block all URIs that end with "/block" if (EndsWith(uri, "/block")) { return UriValidationResult(UriValidationDecision::Block, std::string()); From 5ed92b6197d84002b4eeb1177b5616cc33d156e2 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Sun, 13 Oct 2024 19:37:55 -0700 Subject: [PATCH 18/34] String resource --- src/AppInstallerCLICore/Resources.h | 2 ++ .../Workflows/SmartScreenFlow.cpp | 26 ++++++++++++++----- .../Shared/Strings/en-us/winget.resw | 10 ++++++- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/AppInstallerCLICore/Resources.h b/src/AppInstallerCLICore/Resources.h index 0e8407ab2e..551ddd64c5 100644 --- a/src/AppInstallerCLICore/Resources.h +++ b/src/AppInstallerCLICore/Resources.h @@ -683,6 +683,8 @@ namespace AppInstaller::CLI::Resource WINGET_DEFINE_RESOURCE_STRINGID(UpgradeRequireExplicitCount); WINGET_DEFINE_RESOURCE_STRINGID(UpgradeUnknownVersionCount); WINGET_DEFINE_RESOURCE_STRINGID(UpgradeUnknownVersionExplanation); + WINGET_DEFINE_RESOURCE_STRINGID(UriBlockedBySmartScreen); + WINGET_DEFINE_RESOURCE_STRINGID(UriZoneBlockedByPolicy); WINGET_DEFINE_RESOURCE_STRINGID(UriNotWellFormed); WINGET_DEFINE_RESOURCE_STRINGID(UriSchemeNotSupported); WINGET_DEFINE_RESOURCE_STRINGID(Usage); diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp index 70c2c34a64..db18a58592 100644 --- a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp @@ -7,20 +7,22 @@ namespace AppInstaller::CLI::Workflow { + // Check if smart screen is required for a given zone. bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone) { return zone == Settings::SecurityZoneOptions::Internet || zone == Settings::SecurityZoneOptions::UntrustedSites; } - // Validate smart screen for a given url. - bool IsBlockedBySmartScreen(Execution::Context& context, const std::string& url) + // Check if the given uri is blocked by smart screen. + bool IsBlockedBySmartScreen(Execution::Context& context, const std::string& uri) { - auto response = AppInstaller::UriValidation::ValidateUri(url); + auto response = AppInstaller::UriValidation::ValidateUri(uri); switch (response.Decision()) { case AppInstaller::UriValidation::UriValidationDecision::Block: - context.Reporter.Error() << std::endl << "Blocked by smart screen" << std::endl << "Feedback: " << response.Feedback() << std::endl; + AICLI_LOG(Config, Error, << "URI '" << uri << "' was blocked by smart screen. Feedback URL: " << response.Feedback()); + context.Reporter.Error() << Resource::String::UriBlockedBySmartScreen << std::endl; return true; case AppInstaller::UriValidation::UriValidationDecision::Allow: default: @@ -33,7 +35,13 @@ namespace AppInstaller::CLI::Workflow { DWORD dwZone; auto pInternetSecurityManager = winrt::create_instance(CLSID_InternetSecurityManager, CLSCTX_ALL); - pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); + auto mapResult = pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); + + // Treat invalid uri argument as local machine + if (mapResult == E_INVALIDARG) + { + return Settings::SecurityZoneOptions::LocalMachine; + } // Treat all zones higher than untrusted as untrusted if (dwZone > static_cast(Settings::SecurityZoneOptions::UntrustedSites)) @@ -63,7 +71,7 @@ namespace AppInstaller::CLI::Workflow auto isAllowed = configurationPolicies->at(zone); if(!isAllowed) { - context.Reporter.Error() << "Configuration is disabled for Zone: " << zone << std::endl; + context.Reporter.Error() << Resource::String::UriZoneBlockedByPolicy << std::endl; return true; } @@ -71,6 +79,7 @@ namespace AppInstaller::CLI::Workflow return false; } + // Evaluate the given uri for group policy and smart screen. HRESULT EvaluateUri(Execution::Context& context, const std::string& uri) { auto zone = GetUriZone(uri); @@ -87,6 +96,7 @@ namespace AppInstaller::CLI::Workflow return S_OK; } + // Evaluate the configuration uri for group policy and smart screen. HRESULT EvaluateConfigurationUri(Execution::Context& context) { std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; @@ -101,6 +111,7 @@ namespace AppInstaller::CLI::Workflow return S_OK; } + // Evaluate the download uri for group policy and smart screen. HRESULT EvaluateDownloadUri(Execution::Context& context) { const auto packageVersion = context.Get(); @@ -108,13 +119,14 @@ namespace AppInstaller::CLI::Workflow const auto isTrusted = WI_IsFlagSet(source.GetDetails().TrustLevel, Repository::SourceTrustLevel::Trusted); if (!isTrusted) { - const auto installer = context.Get(); + auto installer = context.Get(); return EvaluateUri(context, installer->Url); } return S_OK; } + // Execute the smart screen flow. void ExecuteSmartScreen::operator()(Execution::Context& context) const { if (m_isConfigurationFlow) diff --git a/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw b/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw index 9f0f88b8df..a5283d6045 100644 --- a/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw +++ b/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw @@ -2685,6 +2685,14 @@ Please specify one of them using the --source option to proceed. Uri not well formed: {0} {Locked="{0}"} Error message displayed when the provided uri is not well formed. {0} is a placeholder replaced by the provided uri. + + This operation was blocked as unsafe by Microsoft Defender SmartScreen. + Error message displayed when an operation is using a URI that was blocked by Microsoft Defender SmartScreen. + + + The operation you are attempting to apply has been blocked by your administrator.> + Error message displayed when an operation is using a URI zone that was blocked by group policy. + Failed to parse {0} configuration unit settings content or settings content is empty. {Locked="{0}"} {0} is a placeholder replaced by the input winget configure resource unit type. @@ -3139,4 +3147,4 @@ Please specify one of them using the --source option to proceed. Downloaded zero byte installer; ensure that your network connection is working properly. - \ No newline at end of file + From 4b656d659359c9ad9d1f9285586cc92e9756dc27 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:06:51 -0700 Subject: [PATCH 19/34] CE --- .../Workflows/SmartScreenFlow.cpp | 14 +++++++------- .../Shared/Strings/en-us/winget.resw | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp index db18a58592..b08280522d 100644 --- a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp @@ -21,7 +21,7 @@ namespace AppInstaller::CLI::Workflow switch (response.Decision()) { case AppInstaller::UriValidation::UriValidationDecision::Block: - AICLI_LOG(Config, Error, << "URI '" << uri << "' was blocked by smart screen. Feedback URL: " << response.Feedback()); + AICLI_LOG(Core, Error, << "URI '" << uri << "' was blocked by smart screen. Feedback URL: " << response.Feedback()); context.Reporter.Error() << Resource::String::UriBlockedBySmartScreen << std::endl; return true; case AppInstaller::UriValidation::UriValidationDecision::Allow: @@ -58,30 +58,32 @@ namespace AppInstaller::CLI::Workflow auto configurationPolicies = Settings::GroupPolicies().GetValue(); if (!configurationPolicies.has_value()) { - AICLI_LOG(Config, Warning, << "ConfigurationAllowedZones policy is not set"); + AICLI_LOG(Core, Warning, << "ConfigurationAllowedZones policy is not set"); return false; } if (configurationPolicies->find(zone) == configurationPolicies->end()) { - AICLI_LOG(Config, Warning, << "Configuration is not configured in the zone " << zone); + AICLI_LOG(Core, Warning, << "Configuration is not configured in the zone " << zone); return false; } auto isAllowed = configurationPolicies->at(zone); if(!isAllowed) { + AICLI_LOG(Core, Error, << "Security zone " << zone << " is blocked by group policy"); context.Reporter.Error() << Resource::String::UriZoneBlockedByPolicy << std::endl; return true; } - AICLI_LOG(Config, Info, << "Configuration is configured in zone " << zone << " with value " << (isAllowed ? "allowed" : "blocked")); + AICLI_LOG(Core, Info, << "Configuration is configured in zone " << zone << " with value " << (isAllowed ? "allowed" : "blocked")); return false; } // Evaluate the given uri for group policy and smart screen. HRESULT EvaluateUri(Execution::Context& context, const std::string& uri) { + AICLI_LOG(Core, Info, << "Validating URI: " << uri); auto zone = GetUriZone(uri); if(IsBlockedByGroupPolicy(context, zone)) { @@ -102,12 +104,10 @@ namespace AppInstaller::CLI::Workflow std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; if (Utility::IsUrlRemote(argPath)) { - context.Reporter.Info() << "Validating Uri: " << argPath; - AICLI_LOG(Config, Error, << "URI validation blocked this uri: " << argPath); return EvaluateUri(context, argPath); } - AICLI_LOG(Config, Info, << "Skipping Uri validation for local file: " << argPath); + AICLI_LOG(Core, Info, << "Skipping Uri validation for local file: " << argPath); return S_OK; } diff --git a/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw b/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw index a5283d6045..b05b38d96e 100644 --- a/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw +++ b/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw @@ -2690,7 +2690,7 @@ Please specify one of them using the --source option to proceed. Error message displayed when an operation is using a URI that was blocked by Microsoft Defender SmartScreen. - The operation you are attempting to apply has been blocked by your administrator.> + The operation you are attempting to apply has been blocked by your administrator. Error message displayed when an operation is using a URI zone that was blocked by group policy. From 54b4e6b3156ccfbf86b7e94a76929d3a41354d6b Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:32:13 -0700 Subject: [PATCH 20/34] Added GP --- doc/admx/DesktopAppInstaller.admx | 42 +++++++---- doc/admx/en-US/DesktopAppInstaller.adml | 14 ++-- .../AppInstallerCLICore.vcxproj | 4 +- .../AppInstallerCLICore.vcxproj.filters | 4 +- src/AppInstallerCLICore/Resources.h | 2 +- .../Workflows/ConfigurationFlow.cpp | 4 +- .../Workflows/DownloadFlow.cpp | 4 +- ...rtScreenFlow.cpp => UriValidationFlow.cpp} | 74 +++++++++++-------- ...{SmartScreenFlow.h => UriValidationFlow.h} | 4 +- .../Shared/Strings/en-us/winget.resw | 6 +- src/AppInstallerSharedLib/GroupPolicy.cpp | 8 +- .../Public/winget/GroupPolicy.h | 13 ++-- .../Public/winget/Resources.h | 1 + 13 files changed, 107 insertions(+), 73 deletions(-) rename src/AppInstallerCLICore/Workflows/{SmartScreenFlow.cpp => UriValidationFlow.cpp} (62%) rename src/AppInstallerCLICore/Workflows/{SmartScreenFlow.h => UriValidationFlow.h} (69%) diff --git a/doc/admx/DesktopAppInstaller.admx b/doc/admx/DesktopAppInstaller.admx index 648ecb00b8..0eec083c71 100644 --- a/doc/admx/DesktopAppInstaller.admx +++ b/doc/admx/DesktopAppInstaller.admx @@ -183,7 +183,17 @@ - + + + + + + + + + + + @@ -193,61 +203,61 @@ - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + diff --git a/doc/admx/en-US/DesktopAppInstaller.adml b/doc/admx/en-US/DesktopAppInstaller.adml index db06d37273..fc6e8cbb98 100644 --- a/doc/admx/en-US/DesktopAppInstaller.adml +++ b/doc/admx/en-US/DesktopAppInstaller.adml @@ -122,10 +122,12 @@ If you disable this setting, users will not be able to use the Windows Package M If you disable or do not configure this setting, no proxy will be used by default. If you enable this setting, the specified proxy will be used by default. - Enable App Installer Allowed Zones for DSC - - Allow - Block + Enable App Installer Allowed Security Zones + + Enable App Installer Smart Screen Validation + + Allow + Block @@ -142,12 +144,12 @@ If you enable this setting, the specified proxy will be used by default.Default Proxy - + Local Machine Intranet Trusted Sites Internet - Untrusted Sites + Untrusted Sites diff --git a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj index 82e4a30623..f8b36a6d2e 100644 --- a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj +++ b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj @@ -389,7 +389,7 @@ - + @@ -453,7 +453,7 @@ - + diff --git a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj.filters b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj.filters index f3def278c7..e7a2b174b3 100644 --- a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj.filters +++ b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj.filters @@ -257,7 +257,7 @@ Commands - + Workflows @@ -490,7 +490,7 @@ Commands - + Workflows diff --git a/src/AppInstallerCLICore/Resources.h b/src/AppInstallerCLICore/Resources.h index 551ddd64c5..54a64a324d 100644 --- a/src/AppInstallerCLICore/Resources.h +++ b/src/AppInstallerCLICore/Resources.h @@ -684,7 +684,7 @@ namespace AppInstaller::CLI::Resource WINGET_DEFINE_RESOURCE_STRINGID(UpgradeUnknownVersionCount); WINGET_DEFINE_RESOURCE_STRINGID(UpgradeUnknownVersionExplanation); WINGET_DEFINE_RESOURCE_STRINGID(UriBlockedBySmartScreen); - WINGET_DEFINE_RESOURCE_STRINGID(UriZoneBlockedByPolicy); + WINGET_DEFINE_RESOURCE_STRINGID(UriSecurityZoneBlockedByPolicy); WINGET_DEFINE_RESOURCE_STRINGID(UriNotWellFormed); WINGET_DEFINE_RESOURCE_STRINGID(UriSchemeNotSupported); WINGET_DEFINE_RESOURCE_STRINGID(Usage); diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index c7423fb564..153e4b86ca 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -2,7 +2,7 @@ // Licensed under the MIT License. #include "pch.h" #include "ConfigurationFlow.h" -#include "SmartScreenFlow.h" +#include "UriValidationFLow.h" #include "PromptFlow.h" #include "TableOutput.h" #include "Public/ConfigurationSetProcessorFactoryRemoting.h" @@ -1301,7 +1301,7 @@ namespace AppInstaller::CLI::Workflow void CreateConfigurationProcessor(Context& context) { - context << ExecuteSmartScreen(true); + context << ExecuteUriValidation(true /*isConfigurationFlow*/); auto progressScope = context.Reporter.BeginAsyncProgress(true); progressScope->Callback().SetProgressMessage(Resource::String::ConfigurationInitializing()); diff --git a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp index 4833c000fe..97fbf63d0d 100644 --- a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp @@ -2,7 +2,7 @@ // Licensed under the MIT License. #include "pch.h" #include "DownloadFlow.h" -#include "SmartScreenFlow.h" +#include "UriValidationFlow.h" #include "MSStoreInstallerHandler.h" #include #include @@ -209,7 +209,7 @@ namespace AppInstaller::CLI::Workflow } bool installerDownloadOnly = WI_IsFlagSet(context.GetFlags(), Execution::ContextFlag::InstallerDownloadOnly); - context << ExecuteSmartScreen(false); + context << ExecuteUriValidation(false /*isConfigurationFlow*/); // CheckForExistingInstaller will set the InstallerPath if found if (!context.Contains(Execution::Data::InstallerPath)) diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp similarity index 62% rename from src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp rename to src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp index b08280522d..4804087efd 100644 --- a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. #include "pch.h" -#include "SmartScreenFlow.h" +#include "UriValidationFlow.h" #include #include @@ -10,8 +10,9 @@ namespace AppInstaller::CLI::Workflow // Check if smart screen is required for a given zone. bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone) { - return zone == Settings::SecurityZoneOptions::Internet - || zone == Settings::SecurityZoneOptions::UntrustedSites; + auto isSmartScreenEnabled = Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::SmartScreenValidation); + auto isSecurityZoneCheckRequired = zone == Settings::SecurityZoneOptions::Internet || zone == Settings::SecurityZoneOptions::UntrustedSites; + return isSmartScreenEnabled && isSecurityZoneCheckRequired; } // Check if the given uri is blocked by smart screen. @@ -31,48 +32,57 @@ namespace AppInstaller::CLI::Workflow } // Get Uri zone for a given uri or file path. - Settings::SecurityZoneOptions GetUriZone(const std::string& uri) + HRESULT GetUriZone(const std::string& uri, Settings::SecurityZoneOptions* zone) { + if (!zone) + { + return E_INVALIDARG; + } + DWORD dwZone; auto pInternetSecurityManager = winrt::create_instance(CLSID_InternetSecurityManager, CLSCTX_ALL); auto mapResult = pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); - // Treat invalid uri argument as local machine - if (mapResult == E_INVALIDARG) + // Ensure MapUrlToZone was successful and the zone value is valid + if (FAILED(mapResult)) { - return Settings::SecurityZoneOptions::LocalMachine; + return mapResult; } // Treat all zones higher than untrusted as untrusted if (dwZone > static_cast(Settings::SecurityZoneOptions::UntrustedSites)) { - return Settings::SecurityZoneOptions::UntrustedSites; + *zone = Settings::SecurityZoneOptions::UntrustedSites; + } + else + { + *zone = static_cast(dwZone); } - return static_cast(dwZone); + return S_OK; } // Validate group policy for a given zone. bool IsBlockedByGroupPolicy(Execution::Context& context, const Settings::SecurityZoneOptions zone) { - auto configurationPolicies = Settings::GroupPolicies().GetValue(); - if (!configurationPolicies.has_value()) + auto allowedSecurityZones = Settings::GroupPolicies().GetValue(); + if (!allowedSecurityZones.has_value()) { - AICLI_LOG(Core, Warning, << "ConfigurationAllowedZones policy is not set"); + AICLI_LOG(Core, Warning, << "AllowedSecurityZones policy is not set"); return false; } - if (configurationPolicies->find(zone) == configurationPolicies->end()) + if (allowedSecurityZones->find(zone) == allowedSecurityZones->end()) { - AICLI_LOG(Core, Warning, << "Configuration is not configured in the zone " << zone); + AICLI_LOG(Core, Warning, << "Security zone " << zone << " was not found in the group policy AllowedSecurityZones"); return false; } - auto isAllowed = configurationPolicies->at(zone); + auto isAllowed = allowedSecurityZones->at(zone); if(!isAllowed) { AICLI_LOG(Core, Error, << "Security zone " << zone << " is blocked by group policy"); - context.Reporter.Error() << Resource::String::UriZoneBlockedByPolicy << std::endl; + context.Reporter.Error() << Resource::String::UriSecurityZoneBlockedByPolicy << std::endl; return true; } @@ -84,15 +94,25 @@ namespace AppInstaller::CLI::Workflow HRESULT EvaluateUri(Execution::Context& context, const std::string& uri) { AICLI_LOG(Core, Info, << "Validating URI: " << uri); - auto zone = GetUriZone(uri); - if(IsBlockedByGroupPolicy(context, zone)) + + Settings::SecurityZoneOptions zone; + auto zoneResult = GetUriZone(uri, &zone); + + if (SUCCEEDED(zoneResult)) { - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; - } + if(IsBlockedByGroupPolicy(context, zone)) + { + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; + } - if (IsSmartScreenRequired(zone) && IsBlockedBySmartScreen(context, uri)) + if (IsSmartScreenRequired(zone) && IsBlockedBySmartScreen(context, uri)) + { + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; + } + } + else { - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; + AICLI_LOG(Core, Warning, << "Failed to get zone for URI: " << uri << " with error: " << zoneResult << ". Skipping validation."); } return S_OK; @@ -102,13 +122,7 @@ namespace AppInstaller::CLI::Workflow HRESULT EvaluateConfigurationUri(Execution::Context& context) { std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; - if (Utility::IsUrlRemote(argPath)) - { - return EvaluateUri(context, argPath); - } - - AICLI_LOG(Core, Info, << "Skipping Uri validation for local file: " << argPath); - return S_OK; + return EvaluateUri(context, argPath); } // Evaluate the download uri for group policy and smart screen. @@ -127,7 +141,7 @@ namespace AppInstaller::CLI::Workflow } // Execute the smart screen flow. - void ExecuteSmartScreen::operator()(Execution::Context& context) const + void ExecuteUriValidation::operator()(Execution::Context& context) const { if (m_isConfigurationFlow) { diff --git a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.h b/src/AppInstallerCLICore/Workflows/UriValidationFlow.h similarity index 69% rename from src/AppInstallerCLICore/Workflows/SmartScreenFlow.h rename to src/AppInstallerCLICore/Workflows/UriValidationFlow.h index 956c741bdc..ab65286115 100644 --- a/src/AppInstallerCLICore/Workflows/SmartScreenFlow.h +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.h @@ -10,9 +10,9 @@ namespace AppInstaller::CLI::Workflow // Required Args: None // Inputs: IsConfigurationFlow // Outputs: None - struct ExecuteSmartScreen : public WorkflowTask + struct ExecuteUriValidation: public WorkflowTask { - ExecuteSmartScreen(bool isConfigurationFlow) : WorkflowTask("ExecuteSmartScreen"), m_isConfigurationFlow(isConfigurationFlow) {} + ExecuteUriValidation(bool isConfigurationFlow) : WorkflowTask("ExecuteUriValidation"), m_isConfigurationFlow(isConfigurationFlow) {} void operator()(Execution::Context& context) const override; diff --git a/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw b/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw index b05b38d96e..35475b8031 100644 --- a/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw +++ b/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw @@ -2689,7 +2689,7 @@ Please specify one of them using the --source option to proceed. This operation was blocked as unsafe by Microsoft Defender SmartScreen. Error message displayed when an operation is using a URI that was blocked by Microsoft Defender SmartScreen. - + The operation you are attempting to apply has been blocked by your administrator. Error message displayed when an operation is using a URI zone that was blocked by group policy. @@ -2842,6 +2842,10 @@ Please specify one of them using the --source option to proceed. Enable Windows Package Manager proxy command line options Describes a Group Policy that can enable the use of the --proxy option to set a proxy + + Enable Windows Package Manager smart screen validation + + Set a proxy to use for this execution diff --git a/src/AppInstallerSharedLib/GroupPolicy.cpp b/src/AppInstallerSharedLib/GroupPolicy.cpp index 4148bf8ad3..5359472a9c 100644 --- a/src/AppInstallerSharedLib/GroupPolicy.cpp +++ b/src/AppInstallerSharedLib/GroupPolicy.cpp @@ -302,7 +302,7 @@ namespace AppInstaller::Settings POLICY_MAPPING_DEFAULT_LIST_READ(ValuePolicy::AdditionalSources); POLICY_MAPPING_DEFAULT_LIST_READ(ValuePolicy::AllowedSources); POLICY_MAPPING_DEFAULT_READ(ValuePolicy::DefaultProxy); - POLICY_MAPPING_DEFAULT_ENUM_READ(ValuePolicy::ConfigurationAllowedZones); + POLICY_MAPPING_DEFAULT_ENUM_READ(ValuePolicy::AllowedSecurityZones); std::nullopt_t ValuePolicyMapping::ReadAndValidate(const Registry::Key&) { @@ -338,7 +338,7 @@ namespace AppInstaller::Settings return ReadSourceFromRegistryValue(item); } - std::optional> ValuePolicyMapping::ReadAndValidateItem(const Registry::ValueList::ValueRef& entry) + std::optional> ValuePolicyMapping::ReadAndValidateItem(const Registry::ValueList::ValueRef& entry) { #define CONFIGURATION_ALLOWED_ZONES_READ(_zone_) \ if (entry.Name() == #_zone_) \ @@ -355,7 +355,7 @@ namespace AppInstaller::Settings CONFIGURATION_ALLOWED_ZONES_READ(UntrustedSites); #undef CONFIGURATION_ALLOWED_ZONES_READ - AICLI_LOG(Core, Warning, << "Unknown value in ConfigurationAllowedZones: " << entry.Name()); + AICLI_LOG(Core, Warning, << "Unknown value in AllowedSecurityZones: " << entry.Name()); return std::nullopt; } } @@ -392,6 +392,8 @@ namespace AppInstaller::Settings return TogglePolicy(policy, "EnableWindowsPackageManagerConfiguration"sv, String::PolicyEnableWinGetConfiguration); case TogglePolicy::Policy::ProxyCommandLineOptions: return TogglePolicy(policy, "EnableWindowsPackageManagerProxyCommandLineOptions"sv, String::PolicyEnableProxyCommandLineOptions); + case TogglePolicy::Policy::SmartScreenValidation: + return TogglePolicy(policy, "EnableSmartScreenValidation"sv, String::PolicyEnableSmartScreenValidation); default: THROW_HR(E_UNEXPECTED); } diff --git a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h index a197f8c91e..23e82c7d6f 100644 --- a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h +++ b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h @@ -23,7 +23,7 @@ namespace AppInstaller::Settings AdditionalSources, AllowedSources, DefaultProxy, - ConfigurationAllowedZones, + AllowedSecurityZones, Max, }; @@ -58,6 +58,7 @@ namespace AppInstaller::Settings WinGetCommandLineInterfaces, Configuration, ProxyCommandLineOptions, + SmartScreenValidation, Max, }; @@ -166,10 +167,11 @@ namespace AppInstaller::Settings static std::optional ReadAndValidateItem(const Registry::Value& item); \ ) -#define POLICY_MAPPING_ENUM_SPECIALIZATION(_policy_, _mapType_, _keyName_) \ - POLICY_MAPPING_SPECIALIZATION(_policy_, _mapType_, \ +#define POLICY_MAPPING_ENUM_SPECIALIZATION(_policy_, _mapTypeName_, _mapTypeKey_, _mapTypeValue_, _keyName_) \ + typedef std::map<_mapTypeKey_, _mapTypeValue_> _mapTypeName_; \ + POLICY_MAPPING_SPECIALIZATION(_policy_, _mapTypeName_, \ static constexpr std::string_view KeyName = _keyName_; \ - static std::optional ReadAndValidateItem(const Registry::ValueList::ValueRef& item); \ + static std::optional ReadAndValidateItem(const Registry::ValueList::ValueRef& item); \ ) POLICY_MAPPING_VALUE_SPECIALIZATION(ValuePolicy::SourceAutoUpdateIntervalInMinutes, uint32_t, "SourceAutoUpdateInterval"sv, Registry::Value::Type::DWord); @@ -178,8 +180,7 @@ namespace AppInstaller::Settings POLICY_MAPPING_LIST_SPECIALIZATION(ValuePolicy::AdditionalSources, SourceFromPolicy, "AdditionalSources"sv); POLICY_MAPPING_LIST_SPECIALIZATION(ValuePolicy::AllowedSources, SourceFromPolicy, "AllowedSources"sv); - typedef std::map ConfigurationAllowedZonesMap_t; - POLICY_MAPPING_ENUM_SPECIALIZATION(ValuePolicy::ConfigurationAllowedZones, ConfigurationAllowedZonesMap_t, "DSCAllowedZones"sv); + POLICY_MAPPING_ENUM_SPECIALIZATION(ValuePolicy::AllowedSecurityZones, SecurityZoneMap_t, SecurityZoneOptions, bool, "AllowedSecurityZones"sv); } // Representation of the policies read from the registry. diff --git a/src/AppInstallerSharedLib/Public/winget/Resources.h b/src/AppInstallerSharedLib/Public/winget/Resources.h index dc6591abd0..ad41289780 100644 --- a/src/AppInstallerSharedLib/Public/winget/Resources.h +++ b/src/AppInstallerSharedLib/Public/winget/Resources.h @@ -60,6 +60,7 @@ namespace AppInstaller WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableWindowsPackageManagerCommandLineInterfaces); WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableWinGetConfiguration); WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableProxyCommandLineOptions); + WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableSmartScreenValidation); WINGET_DEFINE_RESOURCE_STRINGID(SettingsWarningInvalidFieldFormat); WINGET_DEFINE_RESOURCE_STRINGID(SettingsWarningInvalidFieldValue); From 1fb3c766bbe5c2bd13c2981cd8f1c1e706cbbf12 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:49:24 -0700 Subject: [PATCH 21/34] Added enum --- .../Workflows/ConfigurationFlow.cpp | 2 +- src/AppInstallerCLICore/Workflows/DownloadFlow.cpp | 2 +- .../Workflows/UriValidationFlow.cpp | 9 +++++++-- src/AppInstallerCLICore/Workflows/UriValidationFlow.h | 10 ++++++++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index 153e4b86ca..3acd009877 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -1301,7 +1301,7 @@ namespace AppInstaller::CLI::Workflow void CreateConfigurationProcessor(Context& context) { - context << ExecuteUriValidation(true /*isConfigurationFlow*/); + context << ExecuteUriValidation(UriValidationSource::ConfigurationSource); auto progressScope = context.Reporter.BeginAsyncProgress(true); progressScope->Callback().SetProgressMessage(Resource::String::ConfigurationInitializing()); diff --git a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp index 97fbf63d0d..6ed9f626f5 100644 --- a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp @@ -209,7 +209,7 @@ namespace AppInstaller::CLI::Workflow } bool installerDownloadOnly = WI_IsFlagSet(context.GetFlags(), Execution::ContextFlag::InstallerDownloadOnly); - context << ExecuteUriValidation(false /*isConfigurationFlow*/); + context << ExecuteUriValidation(UriValidationSource::PackageCatalogSource); // CheckForExistingInstaller will set the InstallerPath if found if (!context.Contains(Execution::Data::InstallerPath)) diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp index 4804087efd..cc2f891044 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp @@ -11,7 +11,11 @@ namespace AppInstaller::CLI::Workflow bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone) { auto isSmartScreenEnabled = Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::SmartScreenValidation); + AICLI_LOG(Core, Info, << "SmartScreen validation is " << (isSmartScreenEnabled ? "enabled" : "disabled")); + auto isSecurityZoneCheckRequired = zone == Settings::SecurityZoneOptions::Internet || zone == Settings::SecurityZoneOptions::UntrustedSites; + AICLI_LOG(Core, Info, << "Security zone check is " << (isSecurityZoneCheckRequired ? "required" : "not required")); + return isSmartScreenEnabled && isSecurityZoneCheckRequired; } @@ -143,13 +147,14 @@ namespace AppInstaller::CLI::Workflow // Execute the smart screen flow. void ExecuteUriValidation::operator()(Execution::Context& context) const { - if (m_isConfigurationFlow) + if (m_uriValidationSource == UriValidationSource::ConfigurationSource) { auto uriValidation = EvaluateConfigurationUri(context); - if(FAILED(uriValidation)) + if (FAILED(uriValidation)) { AICLI_TERMINATE_CONTEXT(uriValidation); } + } else { diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.h b/src/AppInstallerCLICore/Workflows/UriValidationFlow.h index ab65286115..55439ba4cb 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.h +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.h @@ -5,6 +5,12 @@ namespace AppInstaller::CLI::Workflow { + enum UriValidationSource + { + ConfigurationSource, + PackageCatalogSource, + }; + // Composite flow that chooses what to do based on whether or not the // configuration flow is being run. // Required Args: None @@ -12,12 +18,12 @@ namespace AppInstaller::CLI::Workflow // Outputs: None struct ExecuteUriValidation: public WorkflowTask { - ExecuteUriValidation(bool isConfigurationFlow) : WorkflowTask("ExecuteUriValidation"), m_isConfigurationFlow(isConfigurationFlow) {} + ExecuteUriValidation(UriValidationSource uriValidationSource) : WorkflowTask("ExecuteUriValidation"), m_uriValidationSource(uriValidationSource) {} void operator()(Execution::Context& context) const override; private: - bool m_isConfigurationFlow; + UriValidationSource m_uriValidationSource; }; } From b5bdb1eaa911916fc0bedd41b0fef4d59da7be29 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:28:25 -0700 Subject: [PATCH 22/34] Added condition --- .../Workflows/UriValidationFlow.cpp | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp index cc2f891044..9ab5271176 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp @@ -125,20 +125,28 @@ namespace AppInstaller::CLI::Workflow // Evaluate the configuration uri for group policy and smart screen. HRESULT EvaluateConfigurationUri(Execution::Context& context) { - std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; - return EvaluateUri(context, argPath); + if (context.Args.Contains(Execution::Args::Type::ConfigurationFile)) + { + std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; + return EvaluateUri(context, argPath); + } + + return S_OK; } // Evaluate the download uri for group policy and smart screen. HRESULT EvaluateDownloadUri(Execution::Context& context) { - const auto packageVersion = context.Get(); - const auto source = packageVersion->GetSource(); - const auto isTrusted = WI_IsFlagSet(source.GetDetails().TrustLevel, Repository::SourceTrustLevel::Trusted); - if (!isTrusted) + if (context.Contains(Execution::Data::PackageVersion)) { - auto installer = context.Get(); - return EvaluateUri(context, installer->Url); + const auto packageVersion = context.Get(); + const auto source = packageVersion->GetSource(); + const auto isTrusted = WI_IsFlagSet(source.GetDetails().TrustLevel, Repository::SourceTrustLevel::Trusted); + if (!isTrusted) + { + auto installer = context.Get(); + return EvaluateUri(context, installer->Url); + } } return S_OK; From 5f209d1c7dbda963f75d8fc8ad5feb0b25460e92 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:12:36 -0700 Subject: [PATCH 23/34] Added tests --- .../Workflows/UriValidationFlow.cpp | 20 +- .../Shared/Strings/en-us/winget.resw | 4 + .../AppInstallerCLITests.vcxproj | 1 + .../AppInstallerCLITests.vcxproj.filters | 3 + src/AppInstallerCLITests/TestSettings.h | 2 +- .../UriValidationFlow.cpp | 204 ++++++++++++++++++ src/AppInstallerCLITests/WorkflowCommon.h | 3 + src/AppInstallerSharedLib/GroupPolicy.cpp | 2 + .../Public/winget/GroupPolicy.h | 1 + .../Public/winget/Resources.h | 1 + 10 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 src/AppInstallerCLITests/UriValidationFlow.cpp diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp index 9ab5271176..6b06a730bd 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp @@ -4,6 +4,7 @@ #include "UriValidationFlow.h" #include #include +#include namespace AppInstaller::CLI::Workflow { @@ -43,6 +44,17 @@ namespace AppInstaller::CLI::Workflow return E_INVALIDARG; } + #ifndef AICLI_DISABLE_TEST_HOOKS + // For testing purposes, allow the zone to be set via the uri + std::smatch match; + if (std::regex_search(uri, match, std::regex("/zone(\\d+)/"))) + { + std::string number = match[1].str(); + *zone = static_cast(std::stoul(number)); + return S_OK; + } + #endif + DWORD dwZone; auto pInternetSecurityManager = winrt::create_instance(CLSID_InternetSecurityManager, CLSCTX_ALL); auto mapResult = pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); @@ -69,6 +81,12 @@ namespace AppInstaller::CLI::Workflow // Validate group policy for a given zone. bool IsBlockedByGroupPolicy(Execution::Context& context, const Settings::SecurityZoneOptions zone) { + if (!Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::AllowedSecurityZones)) + { + AICLI_LOG(Core, Info, << "AllowedSecurityZones policy is disabled"); + return false; + } + auto allowedSecurityZones = Settings::GroupPolicies().GetValue(); if (!allowedSecurityZones.has_value()) { @@ -142,7 +160,7 @@ namespace AppInstaller::CLI::Workflow const auto packageVersion = context.Get(); const auto source = packageVersion->GetSource(); const auto isTrusted = WI_IsFlagSet(source.GetDetails().TrustLevel, Repository::SourceTrustLevel::Trusted); - if (!isTrusted) + if (!isTrusted && context.Contains(Execution::Data::Installer)) { auto installer = context.Get(); return EvaluateUri(context, installer->Url); diff --git a/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw b/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw index 35475b8031..9cd515463f 100644 --- a/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw +++ b/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw @@ -2846,6 +2846,10 @@ Please specify one of them using the --source option to proceed. Enable Windows Package Manager smart screen validation + + Enable Windows App Installer Allowed Security Zones + + Set a proxy to use for this execution diff --git a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj index 48c482ef01..6d471ea6f0 100644 --- a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj +++ b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj @@ -338,6 +338,7 @@ + diff --git a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters index 2bbcd74516..466d0c5ce2 100644 --- a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters +++ b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters @@ -365,6 +365,9 @@ Source Files\CLI + + Source Files\CLI + diff --git a/src/AppInstallerCLITests/TestSettings.h b/src/AppInstallerCLITests/TestSettings.h index 7da1a728ef..1430e64371 100644 --- a/src/AppInstallerCLITests/TestSettings.h +++ b/src/AppInstallerCLITests/TestSettings.h @@ -90,4 +90,4 @@ namespace TestCommon }; #define REQUIRE_POLICY_EXCEPTION(_expr_, _policy_) REQUIRE_THROWS_MATCHES(_expr_, AppInstaller::Settings::GroupPolicyException, TestCommon::GroupPolicyExceptionMatcher(_policy_)) -} \ No newline at end of file +} diff --git a/src/AppInstallerCLITests/UriValidationFlow.cpp b/src/AppInstallerCLITests/UriValidationFlow.cpp new file mode 100644 index 0000000000..efa37b7596 --- /dev/null +++ b/src/AppInstallerCLITests/UriValidationFlow.cpp @@ -0,0 +1,204 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +#include "pch.h" +#include "WorkflowCommon.h" +#include "TestSettings.h" +#include "TestCommon.h" +#include + +using namespace TestCommon; +using namespace AppInstaller::CLI; +using namespace AppInstaller::CLI::Execution; +using namespace AppInstaller::CLI::Workflow; +using namespace AppInstaller::Manifest; +using namespace AppInstaller::Settings; + +// Test uri with the following format: https://URI_VALIDATION// +constexpr std::string_view InternetAllow = "https://URI_VALIDATION/zone3/allow"sv; +constexpr std::string_view LocalBlock = "https://URI_VALIDATION/zone0/block"sv; +constexpr std::string_view IntranetBlock = "https://URI_VALIDATION/zone1/block"sv; +constexpr std::string_view TrustedBlock = "https://URI_VALIDATION/zone2/block"sv; +constexpr std::string_view InternetBlock = "https://URI_VALIDATION/zone3/block"sv; +constexpr std::string_view UntrustedBlock = "https://URI_VALIDATION/zone4/block"sv; + +#define SET_POLICY_STATE(_policy_, _state_) \ + GroupPolicyTestOverride policies; \ + policies.SetState(_policy_, _state_); + +#define SET_ZONE_POLICY_STATE_AND_BLOCK_ZONE(_state_, _zone_) \ + SET_POLICY_STATE(TogglePolicy::Policy::AllowedSecurityZones, _state_); \ + std::map securityZones; \ + securityZones[_zone_] = false; \ + policies.SetValue(securityZones); \ + +#define EXECUTE_CONTEXT_FOR_CONFIGURATION(_uri_) \ + std::ostringstream uriValidationOutput; \ + TestContext context{ uriValidationOutput, std::cin }; \ + context.Args.AddArg(Execution::Args::Type::ConfigurationFile, _uri_); \ + context << ExecuteUriValidation(UriValidationSource::ConfigurationSource); \ + INFO(uriValidationOutput.str()); + +#define EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(_uri_) \ + std::ostringstream uriValidationOutput; \ + TestContext context{ uriValidationOutput, std::cin }; \ + context.Add(Manifest()); \ + auto source = std::make_shared(); \ + context.Add(TestPackageVersion::Make(context.Get(), source)); \ + ManifestInstaller installer; \ + installer.Url = _uri_; \ + context.Add(std::move(installer)); \ + context << ExecuteUriValidation(UriValidationSource::PackageCatalogSource); \ + INFO(uriValidationOutput.str()); + +TEST_CASE("UriValidationFlow_Configuration_SecurityZonePolicy", "[UriValidationFlow][workflow]") +{ + SECTION("Not configured") + { + SET_ZONE_POLICY_STATE_AND_BLOCK_ZONE(PolicyState::NotConfigured, SecurityZoneOptions::Internet); + EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetAllow); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriSecurityZoneBlockedByPolicy); + } + + SECTION("Enabled") + { + SET_ZONE_POLICY_STATE_AND_BLOCK_ZONE(PolicyState::Enabled, SecurityZoneOptions::Internet); + EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetAllow); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriSecurityZoneBlockedByPolicy); + } + + SECTION("Disabled") + { + SET_ZONE_POLICY_STATE_AND_BLOCK_ZONE(PolicyState::Disabled, SecurityZoneOptions::Internet); + EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetAllow); + REQUIRE(S_OK == context.GetTerminationHR()); + } +} + +TEST_CASE("UriValidationFlow_Configuration_SmartScreen", "[UriValidationFlow][workflow]") +{ + SECTION("Not configured") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::NotConfigured); + EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetBlock); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); + } + + SECTION("Enabled") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::Enabled); + EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetBlock); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); + } + + SECTION("Disabled") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::Disabled); + EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetBlock); + REQUIRE(S_OK == context.GetTerminationHR()); + } +} + +TEST_CASE("UriValidationFlow_PackageCatalogSource_SecurityZonePolicy", "[UriValidationFlow][workflow]") +{ + SECTION("Not configured") + { + SET_ZONE_POLICY_STATE_AND_BLOCK_ZONE(PolicyState::NotConfigured, SecurityZoneOptions::Internet); + EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(InternetAllow); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriSecurityZoneBlockedByPolicy); + } + + SECTION("Enabled") + { + SET_ZONE_POLICY_STATE_AND_BLOCK_ZONE(PolicyState::Enabled, SecurityZoneOptions::Internet); + EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(InternetAllow); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriSecurityZoneBlockedByPolicy); + } + + SECTION("Disabled") + { + SET_ZONE_POLICY_STATE_AND_BLOCK_ZONE(PolicyState::Disabled, SecurityZoneOptions::Internet); + EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(InternetAllow); + REQUIRE(S_OK == context.GetTerminationHR()); + } +} + +TEST_CASE("UriValidationFlow_PackageCatalogSource_SmartScreen", "[UriValidationFlow][workflow]") +{ + SECTION("Not configured") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::NotConfigured); + EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(InternetBlock); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); + } + + SECTION("Enabled") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::Enabled); + EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(InternetBlock); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); + } + + SECTION("Disabled") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::Disabled); + EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(InternetBlock); + REQUIRE(S_OK == context.GetTerminationHR()); + } +} + +TEST_CASE("UriValidationFlow_SmartScreenZoneRequirement", "[UriValidationFlow][workflow]") +{ + // Smart screen should only be evaluated for Internet and Untrusted zones. + SECTION("Local") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::Enabled); + EXECUTE_CONTEXT_FOR_CONFIGURATION(LocalBlock); + REQUIRE(S_OK == context.GetTerminationHR()); + } + + SECTION("Intranet") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::Enabled); + EXECUTE_CONTEXT_FOR_CONFIGURATION(IntranetBlock); + REQUIRE(S_OK == context.GetTerminationHR()); + } + + SECTION("Trusted") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::Enabled); + EXECUTE_CONTEXT_FOR_CONFIGURATION(TrustedBlock); + REQUIRE(S_OK == context.GetTerminationHR()); + } + + SECTION("Internet") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::Enabled); + EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetBlock); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); + } + + SECTION("Untrusted") + { + SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenValidation, PolicyState::Enabled); + EXECUTE_CONTEXT_FOR_CONFIGURATION(UntrustedBlock); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); + } +} + +TEST_CASE("UriValidationFlow_BlockedSecurityZoneDoesNotImpactOtherSecurityZones", "[UriValidationFlow][workflow]") +{ + SET_ZONE_POLICY_STATE_AND_BLOCK_ZONE(PolicyState::Enabled, SecurityZoneOptions::Internet); + EXECUTE_CONTEXT_FOR_CONFIGURATION(UntrustedBlock); + REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); + REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); +} diff --git a/src/AppInstallerCLITests/WorkflowCommon.h b/src/AppInstallerCLITests/WorkflowCommon.h index 8bd5348d2d..ad75213e97 100644 --- a/src/AppInstallerCLITests/WorkflowCommon.h +++ b/src/AppInstallerCLITests/WorkflowCommon.h @@ -13,6 +13,9 @@ REQUIRE(_context_.IsTerminated()); \ REQUIRE(_hr_ == _context_.GetTerminationHR()) +#define REQUIRE_OUTPUT_HAS_LOC(_output_, _resource_) \ + REQUIRE(_output_.str().find(Resource::LocString(_resource_).get()) != std::string::npos); + namespace TestCommon { using namespace std::string_view_literals; diff --git a/src/AppInstallerSharedLib/GroupPolicy.cpp b/src/AppInstallerSharedLib/GroupPolicy.cpp index 5359472a9c..580fe3971a 100644 --- a/src/AppInstallerSharedLib/GroupPolicy.cpp +++ b/src/AppInstallerSharedLib/GroupPolicy.cpp @@ -392,6 +392,8 @@ namespace AppInstaller::Settings return TogglePolicy(policy, "EnableWindowsPackageManagerConfiguration"sv, String::PolicyEnableWinGetConfiguration); case TogglePolicy::Policy::ProxyCommandLineOptions: return TogglePolicy(policy, "EnableWindowsPackageManagerProxyCommandLineOptions"sv, String::PolicyEnableProxyCommandLineOptions); + case TogglePolicy::Policy::AllowedSecurityZones: + return TogglePolicy(policy, "EnableAllowedSecurityZones"sv, String::PolicyEnableAllowedSecurityZones); case TogglePolicy::Policy::SmartScreenValidation: return TogglePolicy(policy, "EnableSmartScreenValidation"sv, String::PolicyEnableSmartScreenValidation); default: diff --git a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h index 23e82c7d6f..4e9361c419 100644 --- a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h +++ b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h @@ -58,6 +58,7 @@ namespace AppInstaller::Settings WinGetCommandLineInterfaces, Configuration, ProxyCommandLineOptions, + AllowedSecurityZones, SmartScreenValidation, Max, }; diff --git a/src/AppInstallerSharedLib/Public/winget/Resources.h b/src/AppInstallerSharedLib/Public/winget/Resources.h index ad41289780..081e30f33f 100644 --- a/src/AppInstallerSharedLib/Public/winget/Resources.h +++ b/src/AppInstallerSharedLib/Public/winget/Resources.h @@ -60,6 +60,7 @@ namespace AppInstaller WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableWindowsPackageManagerCommandLineInterfaces); WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableWinGetConfiguration); WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableProxyCommandLineOptions); + WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableAllowedSecurityZones); WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableSmartScreenValidation); WINGET_DEFINE_RESOURCE_STRINGID(SettingsWarningInvalidFieldFormat); From 3aa97f41cd655cabec6503668e1ab803cef0fa68 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Thu, 17 Oct 2024 16:17:14 -0700 Subject: [PATCH 24/34] Fix UT --- src/AppInstallerCLITests/UriValidationFlow.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/AppInstallerCLITests/UriValidationFlow.cpp b/src/AppInstallerCLITests/UriValidationFlow.cpp index efa37b7596..70ad89b3e9 100644 --- a/src/AppInstallerCLITests/UriValidationFlow.cpp +++ b/src/AppInstallerCLITests/UriValidationFlow.cpp @@ -54,10 +54,9 @@ TEST_CASE("UriValidationFlow_Configuration_SecurityZonePolicy", "[UriValidationF { SECTION("Not configured") { - SET_ZONE_POLICY_STATE_AND_BLOCK_ZONE(PolicyState::NotConfigured, SecurityZoneOptions::Internet); + SET_POLICY_STATE(TogglePolicy::Policy::AllowedSecurityZones, PolicyState::NotConfigured); EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetAllow); - REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY); - REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriSecurityZoneBlockedByPolicy); + REQUIRE(S_OK == context.GetTerminationHR()); } SECTION("Enabled") @@ -106,10 +105,9 @@ TEST_CASE("UriValidationFlow_PackageCatalogSource_SecurityZonePolicy", "[UriVali { SECTION("Not configured") { - SET_ZONE_POLICY_STATE_AND_BLOCK_ZONE(PolicyState::NotConfigured, SecurityZoneOptions::Internet); + SET_POLICY_STATE(TogglePolicy::Policy::AllowedSecurityZones, PolicyState::NotConfigured); EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(InternetAllow); - REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY); - REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriSecurityZoneBlockedByPolicy); + REQUIRE(S_OK == context.GetTerminationHR()); } SECTION("Enabled") From 227511a3c625f20e1e91a7ea9dafc34d2de54c20 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 18 Oct 2024 10:04:11 -0700 Subject: [PATCH 25/34] Fix UT --- src/AppInstallerCLITests/GroupPolicy.cpp | 2 ++ src/AppInstallerCLITests/TestSettings.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/AppInstallerCLITests/GroupPolicy.cpp b/src/AppInstallerCLITests/GroupPolicy.cpp index 907c55969e..d359a0a1ac 100644 --- a/src/AppInstallerCLITests/GroupPolicy.cpp +++ b/src/AppInstallerCLITests/GroupPolicy.cpp @@ -402,6 +402,8 @@ TEST_CASE("GroupPolicy_AllEnabled", "[groupPolicy]") SetRegistryValue(policiesKey.get(), EnableWindowsPackageManagerCommandLineInterfaces, 1); SetRegistryValue(policiesKey.get(), ConfigurationPolicyValueName, 1); SetRegistryValue(policiesKey.get(), ProxyCommandLineOptionsPolicyValueName, 1); + SetRegistryValue(policiesKey.get(), AllowedSecurityZonesPolicyValueName, 1); + SetRegistryValue(policiesKey.get(), SmartScreenValidationPolicyValueName, 1); GroupPolicy groupPolicy{ policiesKey.get() }; for (const auto& policy : TogglePolicy::GetAllPolicies()) diff --git a/src/AppInstallerCLITests/TestSettings.h b/src/AppInstallerCLITests/TestSettings.h index 1430e64371..ff1a46e3a5 100644 --- a/src/AppInstallerCLITests/TestSettings.h +++ b/src/AppInstallerCLITests/TestSettings.h @@ -23,6 +23,8 @@ namespace TestCommon const std::wstring EnableWindowsPackageManagerCommandLineInterfaces = L"EnableWindowsPackageManagerCommandLineInterfaces"; const std::wstring ConfigurationPolicyValueName = L"EnableWindowsPackageManagerConfiguration"; const std::wstring ProxyCommandLineOptionsPolicyValueName = L"EnableWindowsPackageManagerProxyCommandLineOptions"; + const std::wstring AllowedSecurityZonesPolicyValueName = L"EnableAllowedSecurityZones"; + const std::wstring SmartScreenValidationPolicyValueName = L"EnableSmartScreenValidation"; const std::wstring SourceUpdateIntervalPolicyValueName = L"SourceAutoUpdateInterval"; const std::wstring SourceUpdateIntervalPolicyOldValueName = L"SourceAutoUpdateIntervalInMinutes"; From d84cf217b247f1d800c11d63dcecbdebe835a268 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Mon, 21 Oct 2024 15:25:02 -0700 Subject: [PATCH 26/34] Terminate after validation --- src/AppInstallerCLI.sln | 440 ++++++++++++++++++ .../Workflows/ConfigurationFlow.cpp | 10 +- .../Workflows/DownloadFlow.cpp | 34 +- 3 files changed, 468 insertions(+), 16 deletions(-) diff --git a/src/AppInstallerCLI.sln b/src/AppInstallerCLI.sln index 401dcd98b3..bc914493d2 100644 --- a/src/AppInstallerCLI.sln +++ b/src/AppInstallerCLI.sln @@ -218,23 +218,31 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Management.Deploy EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 + Fuzzing|ARM = Fuzzing|ARM Fuzzing|ARM64 = Fuzzing|ARM64 Fuzzing|x64 = Fuzzing|x64 Fuzzing|x86 = Fuzzing|x86 + Release|ARM = Release|ARM Release|ARM64 = Release|ARM64 Release|x64 = Release|x64 Release|x86 = Release|x86 + ReleaseStatic|ARM = ReleaseStatic|ARM ReleaseStatic|ARM64 = ReleaseStatic|ARM64 ReleaseStatic|x64 = ReleaseStatic|x64 ReleaseStatic|x86 = ReleaseStatic|x86 + TestRelease|ARM = TestRelease|ARM TestRelease|ARM64 = TestRelease|ARM64 TestRelease|x64 = TestRelease|x64 TestRelease|x86 = TestRelease|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM.ActiveCfg = Debug|ARM + {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM.Build.0 = Debug|ARM + {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM.Deploy.0 = Debug|ARM {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM64.Build.0 = Debug|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM64.Deploy.0 = Debug|ARM64 @@ -244,9 +252,15 @@ Global {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|x86.ActiveCfg = Debug|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|x86.Build.0 = Debug|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|x86.Deploy.0 = Debug|x86 + {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|ARM.Build.0 = Debug|ARM + {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|ARM.Deploy.0 = Debug|ARM {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|x64.ActiveCfg = Release|x64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|x86.ActiveCfg = Release|x86 + {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM.ActiveCfg = Release|ARM + {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM.Build.0 = Release|ARM + {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM.Deploy.0 = Release|ARM {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM64.Build.0 = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM64.Deploy.0 = Release|ARM64 @@ -256,227 +270,326 @@ Global {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|x86.ActiveCfg = Release|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|x86.Build.0 = Release|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|x86.Deploy.0 = Release|x86 + {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|ARM.ActiveCfg = Release|ARM + {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|ARM.Build.0 = Release|ARM + {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|ARM.Deploy.0 = Release|ARM {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|x64.ActiveCfg = Release|x64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|x86.ActiveCfg = Release|x86 + {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|ARM.ActiveCfg = Release|ARM + {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|ARM.Build.0 = Release|ARM + {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|ARM.Deploy.0 = Release|ARM {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|x64.ActiveCfg = Release|x64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|x86.ActiveCfg = Release|x86 + {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|ARM.ActiveCfg = Debug|ARM + {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|ARM.Build.0 = Debug|ARM {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|ARM64.Build.0 = Debug|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x64.ActiveCfg = Debug|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x64.Build.0 = Debug|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x86.ActiveCfg = Debug|Win32 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x86.Build.0 = Debug|Win32 + {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|ARM.Build.0 = Debug|ARM {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|x86.ActiveCfg = Release|Win32 + {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|ARM.ActiveCfg = Release|ARM + {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|ARM.Build.0 = Release|ARM {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|ARM64.Build.0 = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x64.Build.0 = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x86.ActiveCfg = Release|Win32 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x86.Build.0 = Release|Win32 + {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.ReleaseStatic|ARM.ActiveCfg = Release|ARM + {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.ReleaseStatic|ARM.Build.0 = Release|ARM {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.ReleaseStatic|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.ReleaseStatic|x86.ActiveCfg = Release|Win32 + {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|ARM.ActiveCfg = Release|ARM + {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|ARM.Build.0 = Release|ARM {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|x86.ActiveCfg = Release|Win32 + {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|ARM.ActiveCfg = Debug|ARM + {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|ARM.Build.0 = Debug|ARM {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|ARM64.Build.0 = Debug|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x64.ActiveCfg = Debug|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x64.Build.0 = Debug|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x86.ActiveCfg = Debug|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x86.Build.0 = Debug|Win32 + {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM + {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|x64.ActiveCfg = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|x86.ActiveCfg = Release|Win32 + {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|ARM.ActiveCfg = Release|ARM + {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|ARM.Build.0 = Release|ARM {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|ARM64.ActiveCfg = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|ARM64.Build.0 = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x64.ActiveCfg = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x64.Build.0 = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x86.ActiveCfg = Release|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x86.Build.0 = Release|Win32 + {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|ARM.ActiveCfg = Release|ARM + {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|ARM.Build.0 = Release|ARM {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|ARM64.Build.0 = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x64.ActiveCfg = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x64.Build.0 = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x86.ActiveCfg = Release|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x86.Build.0 = Release|Win32 + {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|ARM.ActiveCfg = Debug|x64 + {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|ARM.Build.0 = Debug|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|ARM64.ActiveCfg = Debug|ARM64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|ARM64.Build.0 = Debug|ARM64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x64.ActiveCfg = Debug|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x64.Build.0 = Debug|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x86.ActiveCfg = Debug|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x86.Build.0 = Debug|Win32 + {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|ARM.ActiveCfg = Release|x64 + {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|ARM.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|ARM64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|x86.ActiveCfg = Release|Win32 + {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|ARM.ActiveCfg = Release|x64 + {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|ARM.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|ARM64.ActiveCfg = Release|ARM64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|ARM64.Build.0 = Release|ARM64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x64.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x86.ActiveCfg = Release|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x86.Build.0 = Release|Win32 + {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.ReleaseStatic|ARM.ActiveCfg = Release|x64 + {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.ReleaseStatic|ARM.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.ReleaseStatic|ARM64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.ReleaseStatic|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.ReleaseStatic|x86.ActiveCfg = Release|Win32 + {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|ARM.ActiveCfg = Release|x64 + {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|ARM.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|ARM64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|x86.ActiveCfg = Release|Win32 + {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|ARM.ActiveCfg = Debug|ARM + {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|ARM.Build.0 = Debug|ARM {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|ARM64.Build.0 = Debug|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x64.ActiveCfg = Debug|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x64.Build.0 = Debug|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x86.ActiveCfg = Debug|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x86.Build.0 = Debug|Win32 + {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM + {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|x64.ActiveCfg = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|x86.ActiveCfg = Release|Win32 + {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|ARM.ActiveCfg = Release|ARM + {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|ARM.Build.0 = Release|ARM {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|ARM64.ActiveCfg = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|ARM64.Build.0 = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x64.ActiveCfg = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x64.Build.0 = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x86.ActiveCfg = Release|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x86.Build.0 = Release|Win32 + {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|ARM.ActiveCfg = Release|ARM + {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|ARM.Build.0 = Release|ARM {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|ARM64.Build.0 = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x64.ActiveCfg = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x64.Build.0 = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x86.ActiveCfg = Release|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x86.Build.0 = Release|Win32 + {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|ARM.ActiveCfg = Debug|ARM + {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|ARM.Build.0 = Debug|ARM {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|ARM64.ActiveCfg = Debug|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|ARM64.Build.0 = Debug|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x64.ActiveCfg = Debug|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x64.Build.0 = Debug|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x86.ActiveCfg = Debug|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x86.Build.0 = Debug|Win32 + {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|ARM.ActiveCfg = Fuzzing|ARM + {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|ARM.Build.0 = Fuzzing|ARM {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x64.Build.0 = Fuzzing|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x86.Build.0 = Fuzzing|Win32 + {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|ARM.ActiveCfg = Release|ARM + {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|ARM.Build.0 = Release|ARM {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|ARM64.ActiveCfg = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|ARM64.Build.0 = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x64.ActiveCfg = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x64.Build.0 = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x86.ActiveCfg = Release|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x86.Build.0 = Release|Win32 + {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|ARM.ActiveCfg = Release|ARM + {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|ARM.Build.0 = Release|ARM {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|ARM64.Build.0 = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x64.ActiveCfg = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x64.Build.0 = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x86.ActiveCfg = Release|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x86.Build.0 = Release|Win32 + {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|ARM.ActiveCfg = Debug|ARM + {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|ARM.Build.0 = Debug|ARM {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|ARM64.Build.0 = Debug|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x64.ActiveCfg = Debug|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x64.Build.0 = Debug|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x86.ActiveCfg = Debug|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x86.Build.0 = Debug|Win32 + {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 + {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|ARM.Build.0 = Fuzzing|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x64.Build.0 = Fuzzing|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x86.Build.0 = Fuzzing|Win32 + {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|ARM.ActiveCfg = Release|ARM + {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|ARM.Build.0 = Release|ARM {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|ARM64.ActiveCfg = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|ARM64.Build.0 = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x64.ActiveCfg = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x64.Build.0 = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x86.ActiveCfg = Release|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x86.Build.0 = Release|Win32 + {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|ARM.ActiveCfg = Release|ARM + {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|ARM.Build.0 = Release|ARM {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|ARM64.Build.0 = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x64.ActiveCfg = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x64.Build.0 = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x86.ActiveCfg = Release|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x86.Build.0 = Release|Win32 + {FB313532-38B0-4676-9303-AB200AA13576}.Debug|ARM.ActiveCfg = Debug|ARM + {FB313532-38B0-4676-9303-AB200AA13576}.Debug|ARM.Build.0 = Debug|ARM {FB313532-38B0-4676-9303-AB200AA13576}.Debug|ARM64.ActiveCfg = Debug|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|ARM64.Build.0 = Debug|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x64.ActiveCfg = Debug|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x64.Build.0 = Debug|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x86.ActiveCfg = Debug|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x86.Build.0 = Debug|Win32 + {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|ARM.Build.0 = Debug|ARM {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|x86.ActiveCfg = Release|Win32 + {FB313532-38B0-4676-9303-AB200AA13576}.Release|ARM.ActiveCfg = Release|ARM + {FB313532-38B0-4676-9303-AB200AA13576}.Release|ARM.Build.0 = Release|ARM {FB313532-38B0-4676-9303-AB200AA13576}.Release|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|ARM64.Build.0 = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|x64.Build.0 = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|x86.ActiveCfg = Release|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.Release|x86.Build.0 = Release|Win32 + {FB313532-38B0-4676-9303-AB200AA13576}.ReleaseStatic|ARM.ActiveCfg = Release|ARM + {FB313532-38B0-4676-9303-AB200AA13576}.ReleaseStatic|ARM.Build.0 = Release|ARM {FB313532-38B0-4676-9303-AB200AA13576}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.ReleaseStatic|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.ReleaseStatic|x86.ActiveCfg = Release|Win32 + {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|ARM.ActiveCfg = Release|ARM + {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|ARM.Build.0 = Release|ARM {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|x86.ActiveCfg = Release|Win32 + {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|ARM.ActiveCfg = Debug|ARM + {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|ARM.Build.0 = Debug|ARM {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|ARM64.Build.0 = Debug|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x64.ActiveCfg = Debug|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x64.Build.0 = Debug|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x86.ActiveCfg = Debug|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x86.Build.0 = Debug|Win32 + {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|ARM.Build.0 = Debug|ARM {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|x86.ActiveCfg = Release|Win32 + {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|ARM.ActiveCfg = Release|ARM + {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|ARM.Build.0 = Release|ARM {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|ARM64.Build.0 = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x64.Build.0 = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x86.ActiveCfg = Release|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x86.Build.0 = Release|Win32 + {6CB84692-5994-407D-B9BD-9216AF77FE83}.ReleaseStatic|ARM.ActiveCfg = Release|ARM + {6CB84692-5994-407D-B9BD-9216AF77FE83}.ReleaseStatic|ARM.Build.0 = Release|ARM {6CB84692-5994-407D-B9BD-9216AF77FE83}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.ReleaseStatic|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.ReleaseStatic|x86.ActiveCfg = Release|Win32 + {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|ARM.ActiveCfg = Release|ARM + {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|ARM.Build.0 = Release|ARM {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|x86.ActiveCfg = Release|Win32 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|ARM.ActiveCfg = Debug|x64 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|ARM.Build.0 = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|ARM64.ActiveCfg = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x64.ActiveCfg = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x64.Build.0 = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x86.ActiveCfg = Debug|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x86.Build.0 = Debug|x86 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|ARM.ActiveCfg = Release|x64 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|ARM.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|ARM64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|x86.ActiveCfg = Release|x86 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|ARM.ActiveCfg = Release|x64 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|ARM.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|ARM64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x64.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x86.ActiveCfg = Release|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x86.Build.0 = Release|x86 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.ReleaseStatic|ARM.ActiveCfg = Release|x64 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.ReleaseStatic|ARM.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.ReleaseStatic|ARM64.ActiveCfg = Release|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.ReleaseStatic|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.ReleaseStatic|x86.ActiveCfg = Release|x86 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|ARM.ActiveCfg = Release|x64 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|ARM.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|ARM64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|x86.ActiveCfg = Release|x86 + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM.ActiveCfg = Debug|ARM + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM.Build.0 = Debug|ARM + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM.Deploy.0 = Debug|ARM {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM64.ActiveCfg = Debug|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM64.Build.0 = Debug|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM64.Deploy.0 = Debug|ARM64 @@ -486,9 +599,15 @@ Global {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|x86.ActiveCfg = Debug|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|x86.Build.0 = Debug|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|x86.Deploy.0 = Debug|x86 + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|ARM.Build.0 = Debug|ARM + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|ARM.Deploy.0 = Debug|ARM {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|x64.ActiveCfg = Release|x64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|x86.ActiveCfg = Release|x86 + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM.ActiveCfg = Release|ARM + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM.Build.0 = Release|ARM + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM.Deploy.0 = Release|ARM {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM64.Build.0 = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM64.Deploy.0 = Release|ARM64 @@ -498,779 +617,1100 @@ Global {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|x86.ActiveCfg = Release|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|x86.Build.0 = Release|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|x86.Deploy.0 = Release|x86 + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|ARM.ActiveCfg = Release|ARM + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|ARM.Build.0 = Release|ARM + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|ARM.Deploy.0 = Release|ARM {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|x64.ActiveCfg = Release|x64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|x86.ActiveCfg = Release|x86 + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|ARM.ActiveCfg = Release|ARM + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|ARM.Build.0 = Release|ARM + {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|ARM.Deploy.0 = Release|ARM {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|x64.ActiveCfg = Release|x64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|x86.ActiveCfg = Release|x86 + {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Debug|ARM.ActiveCfg = Debug {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Debug|ARM64.ActiveCfg = Debug {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Debug|x64.ActiveCfg = Debug {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Debug|x86.ActiveCfg = Debug + {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Fuzzing|ARM.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Fuzzing|ARM64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Fuzzing|x64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Fuzzing|x86.ActiveCfg = Release + {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Release|ARM.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Release|ARM64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Release|x64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Release|x86.ActiveCfg = Release + {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.ReleaseStatic|ARM.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.ReleaseStatic|ARM64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.ReleaseStatic|x64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.ReleaseStatic|x86.ActiveCfg = Release + {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.TestRelease|ARM.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.TestRelease|ARM64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.TestRelease|x64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.TestRelease|x86.ActiveCfg = Release + {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|ARM.ActiveCfg = Debug|x64 + {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|ARM.Build.0 = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|ARM64.ActiveCfg = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x64.ActiveCfg = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x64.Build.0 = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x86.ActiveCfg = Debug|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x86.Build.0 = Debug|x86 + {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|ARM.ActiveCfg = Release|x64 + {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|ARM.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|ARM64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|x86.ActiveCfg = Release|x86 + {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|ARM.ActiveCfg = Release|x64 + {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|ARM.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|ARM64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x64.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x86.ActiveCfg = Release|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x86.Build.0 = Release|x86 + {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.ReleaseStatic|ARM.ActiveCfg = Release|x64 + {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.ReleaseStatic|ARM.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.ReleaseStatic|ARM64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.ReleaseStatic|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.ReleaseStatic|x86.ActiveCfg = Release|x86 + {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|ARM.ActiveCfg = Release|x64 + {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|ARM.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|ARM64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|x86.ActiveCfg = Release|x86 + {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|ARM.ActiveCfg = Debug|ARM + {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|ARM.Build.0 = Debug|ARM {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|ARM64.ActiveCfg = Debug|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|ARM64.Build.0 = Debug|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x64.ActiveCfg = Debug|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x64.Build.0 = Debug|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x86.ActiveCfg = Debug|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x86.Build.0 = Debug|Win32 + {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 + {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|ARM.Build.0 = Fuzzing|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x64.Build.0 = Fuzzing|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x86.Build.0 = Fuzzing|Win32 + {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|ARM.ActiveCfg = Release|ARM + {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|ARM.Build.0 = Release|ARM {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|ARM64.ActiveCfg = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|ARM64.Build.0 = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x64.ActiveCfg = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x64.Build.0 = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x86.ActiveCfg = Release|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x86.Build.0 = Release|Win32 + {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|ARM.ActiveCfg = Release|ARM + {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|ARM.Build.0 = Release|ARM {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|ARM64.Build.0 = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x64.ActiveCfg = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x64.Build.0 = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x86.ActiveCfg = Release|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x86.Build.0 = Release|Win32 + {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|ARM.ActiveCfg = Debug|x64 + {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|ARM.Build.0 = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|ARM64.ActiveCfg = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|x64.ActiveCfg = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|x86.ActiveCfg = Fuzzing|Win32 + {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 + {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|ARM.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x64.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x86.Build.0 = Fuzzing|Win32 + {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|ARM.ActiveCfg = Fuzzing|x64 + {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|ARM.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|x86.ActiveCfg = Fuzzing|Win32 + {1622DA16-914F-4F57-A259-D5169003CC8C}.ReleaseStatic|ARM.ActiveCfg = Fuzzing|x64 + {1622DA16-914F-4F57-A259-D5169003CC8C}.ReleaseStatic|ARM.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.ReleaseStatic|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.ReleaseStatic|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.ReleaseStatic|x86.ActiveCfg = Fuzzing|Win32 + {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|ARM.ActiveCfg = Fuzzing|x64 + {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|ARM.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|x86.ActiveCfg = Fuzzing|Win32 + {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|ARM.ActiveCfg = Debug|x64 + {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|ARM.Build.0 = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|ARM64.ActiveCfg = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x64.ActiveCfg = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x64.Build.0 = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x86.ActiveCfg = Debug|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x86.Build.0 = Debug|x86 + {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|ARM.ActiveCfg = Release|x64 + {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|ARM.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|ARM64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|x86.ActiveCfg = Release|x86 + {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|ARM.ActiveCfg = Release|x64 + {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|ARM.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|ARM64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x64.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x86.ActiveCfg = Release|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x86.Build.0 = Release|x86 + {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.ReleaseStatic|ARM.ActiveCfg = Release|x64 + {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.ReleaseStatic|ARM.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.ReleaseStatic|ARM64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.ReleaseStatic|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.ReleaseStatic|x86.ActiveCfg = Release|x86 + {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|ARM.ActiveCfg = Release|x64 + {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|ARM.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|ARM64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|x86.ActiveCfg = Release|x86 + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|ARM.ActiveCfg = Debug|ARM + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|ARM.Build.0 = Debug|ARM {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|ARM64.Build.0 = Debug|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x64.ActiveCfg = Debug|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x64.Build.0 = Debug|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x86.ActiveCfg = Debug|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x86.Build.0 = Debug|Win32 + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|ARM.Build.0 = Debug|ARM {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|x64.ActiveCfg = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|x86.ActiveCfg = Release|Win32 + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|ARM.ActiveCfg = Release|ARM + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|ARM.Build.0 = Release|ARM {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|ARM64.ActiveCfg = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|ARM64.Build.0 = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x64.ActiveCfg = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x64.Build.0 = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x86.ActiveCfg = Release|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x86.Build.0 = Release|Win32 + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|ARM.ActiveCfg = Release|ARM + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|ARM.Build.0 = Release|ARM {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|ARM64.Build.0 = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x64.ActiveCfg = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x64.Build.0 = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x86.ActiveCfg = Release|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x86.Build.0 = Release|Win32 + {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|ARM.ActiveCfg = Debug|ARM + {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|ARM.Build.0 = Debug|ARM {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|ARM64.Build.0 = Debug|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x64.ActiveCfg = Debug|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x64.Build.0 = Debug|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x86.ActiveCfg = Debug|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x86.Build.0 = Debug|Win32 + {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM + {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|x64.ActiveCfg = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|x86.ActiveCfg = Release|Win32 + {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|ARM.ActiveCfg = Release|ARM + {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|ARM.Build.0 = Release|ARM {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|ARM64.ActiveCfg = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|ARM64.Build.0 = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x64.ActiveCfg = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x64.Build.0 = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x86.ActiveCfg = Release|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x86.Build.0 = Release|Win32 + {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|ARM.ActiveCfg = Release|ARM + {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|ARM.Build.0 = Release|ARM {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|ARM64.Build.0 = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x64.ActiveCfg = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x64.Build.0 = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x86.ActiveCfg = Release|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x86.Build.0 = Release|Win32 + {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|ARM.ActiveCfg = Debug|ARM + {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|ARM.Build.0 = Debug|ARM {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|ARM64.Build.0 = Debug|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x64.ActiveCfg = Debug|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x64.Build.0 = Debug|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x86.ActiveCfg = Debug|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x86.Build.0 = Debug|Win32 + {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|ARM.Build.0 = Debug|ARM {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|x64.ActiveCfg = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|x86.ActiveCfg = Release|Win32 + {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|ARM.ActiveCfg = Release|ARM + {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|ARM.Build.0 = Release|ARM {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|ARM64.Build.0 = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x64.ActiveCfg = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x64.Build.0 = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x86.ActiveCfg = Release|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x86.Build.0 = Release|Win32 + {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|ARM.ActiveCfg = Release|ARM + {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|ARM.Build.0 = Release|ARM {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|ARM64.Build.0 = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|x64.ActiveCfg = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|x64.Build.0 = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|x86.ActiveCfg = Release|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|x86.Build.0 = Release|Win32 + {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|ARM.ActiveCfg = Release|ARM + {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|ARM.Build.0 = Release|ARM {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|x64.ActiveCfg = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|x86.ActiveCfg = Release|Win32 + {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|ARM.ActiveCfg = Debug|Any CPU + {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|ARM.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|ARM64.ActiveCfg = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|ARM64.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x64.ActiveCfg = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x64.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x86.ActiveCfg = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x86.Build.0 = Debug|Any CPU + {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|ARM.ActiveCfg = Release|Any CPU + {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|ARM.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|x64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|x86.ActiveCfg = Release|Any CPU + {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|ARM.ActiveCfg = Release|Any CPU + {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|ARM.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|ARM64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|ARM64.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x64.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x86.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x86.Build.0 = Release|Any CPU + {846FB88B-BF1B-4F33-9883-E589CEC99739}.ReleaseStatic|ARM.ActiveCfg = Release|Any CPU + {846FB88B-BF1B-4F33-9883-E589CEC99739}.ReleaseStatic|ARM.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.ReleaseStatic|ARM64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.ReleaseStatic|x64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.ReleaseStatic|x86.ActiveCfg = Release|Any CPU + {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|ARM.ActiveCfg = Release|Any CPU + {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|ARM.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|x64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|x86.ActiveCfg = Release|Any CPU + {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|ARM.ActiveCfg = Debug|x64 + {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|ARM.Build.0 = Debug|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|ARM64.ActiveCfg = Debug|ARM64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x64.ActiveCfg = Debug|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x64.Build.0 = Debug|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x86.ActiveCfg = Debug|x86 {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x86.Build.0 = Debug|x86 + {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|ARM.ActiveCfg = Release|Any CPU + {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|ARM.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|x64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|x86.ActiveCfg = Release|x86 + {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|ARM.ActiveCfg = Release|Any CPU + {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|ARM.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|ARM64.ActiveCfg = Release|ARM64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x64.ActiveCfg = Release|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x64.Build.0 = Release|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x86.ActiveCfg = Release|x86 {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x86.Build.0 = Release|x86 + {68808357-902B-406C-8C19-E8E26A69DE8A}.ReleaseStatic|ARM.ActiveCfg = Release|Any CPU + {68808357-902B-406C-8C19-E8E26A69DE8A}.ReleaseStatic|ARM.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.ReleaseStatic|ARM64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.ReleaseStatic|x64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.ReleaseStatic|x86.ActiveCfg = Release|x86 + {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|ARM.ActiveCfg = Release|Any CPU + {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|ARM.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|x64.ActiveCfg = Release|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|x86.ActiveCfg = Release|x86 + {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM.ActiveCfg = Debug|ARM + {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM.Build.0 = Debug|ARM {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM64.Build.0 = Debug|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x64.ActiveCfg = Debug|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x64.Build.0 = Debug|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x86.ActiveCfg = Debug|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x86.Build.0 = Debug|Win32 + {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM + {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|x64.ActiveCfg = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|x86.ActiveCfg = Release|Win32 + {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|ARM.ActiveCfg = Release|ARM + {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|ARM.Build.0 = Release|ARM {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|ARM64.ActiveCfg = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|ARM64.Build.0 = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x64.ActiveCfg = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x64.Build.0 = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x86.ActiveCfg = Release|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x86.Build.0 = Release|Win32 + {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|ARM.ActiveCfg = Release|ARM + {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|ARM.Build.0 = Release|ARM {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|ARM64.Build.0 = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x64.ActiveCfg = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x64.Build.0 = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x86.ActiveCfg = Release|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x86.Build.0 = Release|Win32 + {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|ARM.ActiveCfg = Debug|ARM + {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|ARM.Build.0 = Debug|ARM {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|ARM64.ActiveCfg = Debug|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|ARM64.Build.0 = Debug|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x64.ActiveCfg = Debug|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x64.Build.0 = Debug|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x86.ActiveCfg = Debug|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x86.Build.0 = Debug|Win32 + {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|ARM.Build.0 = Debug|ARM {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|x64.ActiveCfg = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|x86.ActiveCfg = Release|Win32 + {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|ARM.ActiveCfg = Release|ARM + {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|ARM.Build.0 = Release|ARM {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|ARM64.ActiveCfg = Release|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x64.ActiveCfg = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x64.Build.0 = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x86.ActiveCfg = Release|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x86.Build.0 = Release|Win32 + {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|ARM.ActiveCfg = Release|ARM + {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|ARM.Build.0 = Release|ARM {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|ARM64.ActiveCfg = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|x64.ActiveCfg = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|x86.ActiveCfg = Release|Win32 + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM.Build.0 = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM64.ActiveCfg = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM64.Build.0 = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x64.ActiveCfg = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x64.Build.0 = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x86.ActiveCfg = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x86.Build.0 = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|x64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|x86.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM.Build.0 = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM64.Build.0 = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x64.Build.0 = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x86.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x86.Build.0 = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|ARM64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|ARM.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|ARM.Build.0 = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x86.ActiveCfg = Release|Any CPU + {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|ARM.ActiveCfg = Debug|x64 + {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|ARM.Build.0 = Debug|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|ARM64.ActiveCfg = Debug|arm64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x64.ActiveCfg = Debug|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x64.Build.0 = Debug|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x86.ActiveCfg = Debug|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x86.Build.0 = Debug|x86 + {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|x64 + {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|ARM.Build.0 = ReleaseStatic|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|ARM64.ActiveCfg = Release|arm64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|x64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|x86.ActiveCfg = Release|x86 + {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|ARM.ActiveCfg = Release|x64 + {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|ARM.Build.0 = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|ARM64.ActiveCfg = Release|arm64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x64.Build.0 = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x86.ActiveCfg = Release|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x86.Build.0 = Release|x86 + {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|x64 + {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|arm64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|arm64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|x86.Build.0 = ReleaseStatic|x86 + {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|ARM.ActiveCfg = Release|x64 + {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|ARM.Build.0 = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|ARM64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|x64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|x86.ActiveCfg = Release|x86 + {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|ARM.ActiveCfg = Debug|ARM + {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|ARM.Build.0 = Debug|ARM {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|ARM64.Build.0 = Debug|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x64.ActiveCfg = Debug|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x64.Build.0 = Debug|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x86.ActiveCfg = Debug|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x86.Build.0 = Debug|Win32 + {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM + {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|x64.ActiveCfg = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|x86.ActiveCfg = Release|Win32 + {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM.ActiveCfg = Release|ARM + {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM.Build.0 = Release|ARM {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM64.ActiveCfg = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM64.Build.0 = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x64.ActiveCfg = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x64.Build.0 = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x86.ActiveCfg = Release|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x86.Build.0 = Release|Win32 + {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|ARM.ActiveCfg = Release|ARM + {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|ARM.Build.0 = Release|ARM {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|ARM64.Build.0 = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x64.ActiveCfg = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x64.Build.0 = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x86.ActiveCfg = Release|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x86.Build.0 = Release|Win32 + {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|ARM.ActiveCfg = Debug|ARM + {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|ARM.Build.0 = Debug|ARM {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|ARM64.ActiveCfg = Debug|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|ARM64.Build.0 = Debug|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x64.ActiveCfg = Debug|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x64.Build.0 = Debug|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x86.ActiveCfg = Debug|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x86.Build.0 = Debug|Win32 + {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM + {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|x64.ActiveCfg = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|x86.ActiveCfg = Release|Win32 + {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|ARM.ActiveCfg = Release|ARM + {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|ARM.Build.0 = Release|ARM {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|ARM64.ActiveCfg = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|ARM64.Build.0 = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x64.ActiveCfg = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x64.Build.0 = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x86.ActiveCfg = Release|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x86.Build.0 = Release|Win32 + {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|ARM.ActiveCfg = Release|ARM + {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|ARM.Build.0 = Release|ARM {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|ARM64.Build.0 = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x64.ActiveCfg = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x64.Build.0 = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x86.ActiveCfg = Release|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x86.Build.0 = Release|Win32 + {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|ARM.ActiveCfg = Debug|ARM + {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|ARM.Build.0 = Debug|ARM {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|ARM64.ActiveCfg = Debug|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|ARM64.Build.0 = Debug|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x64.ActiveCfg = Debug|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x64.Build.0 = Debug|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x86.ActiveCfg = Debug|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x86.Build.0 = Debug|Win32 + {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|ARM.Build.0 = Debug|ARM {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|x64.ActiveCfg = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|x86.ActiveCfg = Release|Win32 + {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|ARM.ActiveCfg = Release|ARM + {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|ARM.Build.0 = Release|ARM {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|ARM64.ActiveCfg = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|ARM64.Build.0 = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x64.ActiveCfg = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x64.Build.0 = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x86.ActiveCfg = Release|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x86.Build.0 = Release|Win32 + {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|ARM.ActiveCfg = Release|ARM + {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|ARM.Build.0 = Release|ARM {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|ARM64.Build.0 = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x64.ActiveCfg = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x64.Build.0 = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x86.ActiveCfg = Release|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x86.Build.0 = Release|Win32 + {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|ARM.ActiveCfg = Debug|ARM + {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|ARM.Build.0 = Debug|ARM {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|ARM64.ActiveCfg = Debug|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|ARM64.Build.0 = Debug|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x64.ActiveCfg = Debug|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x64.Build.0 = Debug|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x86.ActiveCfg = Debug|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x86.Build.0 = Debug|Win32 + {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 + {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|ARM.Build.0 = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|ARM64.ActiveCfg = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x64.Build.0 = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x86.Build.0 = Fuzzing|Win32 + {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|ARM.ActiveCfg = Release|ARM + {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|ARM.Build.0 = Release|ARM {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|ARM64.ActiveCfg = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|ARM64.Build.0 = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x64.ActiveCfg = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x64.Build.0 = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x86.ActiveCfg = Release|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x86.Build.0 = Release|Win32 + {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|ARM.ActiveCfg = Release|ARM + {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|ARM.Build.0 = Release|ARM {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|ARM64.Build.0 = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x64.ActiveCfg = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x64.Build.0 = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x86.ActiveCfg = Release|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x86.Build.0 = Release|Win32 + {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|ARM.ActiveCfg = Debug|ARM + {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|ARM.Build.0 = Debug|ARM {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|ARM64.Build.0 = Debug|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x64.ActiveCfg = Debug|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x64.Build.0 = Debug|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x86.ActiveCfg = Debug|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x86.Build.0 = Debug|Win32 + {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|ARM.Build.0 = Debug|ARM {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|x64.ActiveCfg = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|x86.ActiveCfg = Release|Win32 + {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|ARM.ActiveCfg = Release|ARM + {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|ARM.Build.0 = Release|ARM {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|ARM64.ActiveCfg = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|ARM64.Build.0 = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x64.ActiveCfg = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x64.Build.0 = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x86.ActiveCfg = Release|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x86.Build.0 = Release|Win32 + {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|ARM.ActiveCfg = Release|ARM + {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|ARM.Build.0 = Release|ARM {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|ARM64.Build.0 = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x64.ActiveCfg = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x64.Build.0 = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x86.ActiveCfg = Release|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x86.Build.0 = Release|Win32 + {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|ARM.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|ARM64.ActiveCfg = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|ARM64.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x64.ActiveCfg = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x64.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x86.ActiveCfg = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x86.Build.0 = Debug|Any CPU + {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU + {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|x64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|x86.ActiveCfg = Release|Any CPU + {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|ARM.ActiveCfg = Release|Any CPU + {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|ARM.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|ARM64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|ARM64.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x64.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x86.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x86.Build.0 = Release|Any CPU + {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU + {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU + {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|ARM.ActiveCfg = Release|Any CPU + {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|ARM.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|ARM64.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x64.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x86.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x86.Build.0 = Release|Any CPU + {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|ARM.ActiveCfg = Debug|x64 + {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|ARM.Build.0 = Debug|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|ARM64.ActiveCfg = Debug|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|ARM64.Build.0 = Debug|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x64.ActiveCfg = Debug|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x64.Build.0 = Debug|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x86.ActiveCfg = Debug|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x86.Build.0 = Debug|x86 + {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|ARM.ActiveCfg = Release|x64 + {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|ARM.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|ARM64.ActiveCfg = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|x64.ActiveCfg = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|x86.ActiveCfg = Release|x86 + {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|ARM.ActiveCfg = Release|x64 + {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|ARM.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|ARM64.ActiveCfg = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|ARM64.Build.0 = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x64.ActiveCfg = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x64.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x86.ActiveCfg = Release|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x86.Build.0 = Release|x86 + {EE43C990-7789-4A60-B077-BF0ED3D093A1}.ReleaseStatic|ARM.ActiveCfg = Release|x64 + {EE43C990-7789-4A60-B077-BF0ED3D093A1}.ReleaseStatic|ARM.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.ReleaseStatic|ARM64.ActiveCfg = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.ReleaseStatic|x64.ActiveCfg = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.ReleaseStatic|x86.ActiveCfg = Release|x86 + {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|ARM.ActiveCfg = Release|x64 + {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|ARM.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|ARM64.ActiveCfg = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|x64.ActiveCfg = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|x86.ActiveCfg = Release|x86 + {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM.ActiveCfg = Debug|Any CPU + {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM64.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM64.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x64.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x64.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x86.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x86.Build.0 = Debug|Any CPU + {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU + {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|x64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|x86.ActiveCfg = Release|Any CPU + {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|ARM.ActiveCfg = Release|Any CPU + {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|ARM.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|ARM64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|ARM64.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x64.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x86.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x86.Build.0 = Release|Any CPU + {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU + {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU + {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|ARM.ActiveCfg = Release|Any CPU + {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|ARM.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|ARM64.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x64.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x86.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x86.Build.0 = Release|Any CPU + {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|ARM.ActiveCfg = Debug|arm + {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|ARM.Build.0 = Debug|arm {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|ARM64.ActiveCfg = Debug|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|ARM64.Build.0 = Debug|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x64.ActiveCfg = Debug|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x64.Build.0 = Debug|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x86.ActiveCfg = Debug|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x86.Build.0 = Debug|x86 + {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|ARM.ActiveCfg = Debug|arm + {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|ARM.Build.0 = Debug|arm {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|x64.ActiveCfg = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|x86.ActiveCfg = Release|x86 + {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|ARM.ActiveCfg = Release|arm + {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|ARM.Build.0 = Release|arm {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|ARM64.Build.0 = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x64.ActiveCfg = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x64.Build.0 = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x86.ActiveCfg = Release|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x86.Build.0 = Release|x86 + {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.ReleaseStatic|ARM.ActiveCfg = Release|arm + {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.ReleaseStatic|ARM.Build.0 = Release|arm {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.ReleaseStatic|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.ReleaseStatic|x64.ActiveCfg = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.ReleaseStatic|x86.ActiveCfg = Release|x86 + {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|ARM.ActiveCfg = Release|arm + {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|ARM.Build.0 = Release|arm {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|ARM64.Build.0 = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x64.ActiveCfg = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x64.Build.0 = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x86.ActiveCfg = Release|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x86.Build.0 = Release|x86 + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM.ActiveCfg = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM.Build.0 = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM64.ActiveCfg = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM64.Build.0 = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x64.ActiveCfg = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x64.Build.0 = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x86.ActiveCfg = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x86.Build.0 = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x86.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM.Build.0 = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM64.Build.0 = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x64.Build.0 = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x86.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x86.Build.0 = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|ARM64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|ARM.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|ARM.Build.0 = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x86.ActiveCfg = Release|Any CPU + {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|ARM.ActiveCfg = Debug|Any CPU + {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|ARM.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|ARM64.ActiveCfg = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|ARM64.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x64.ActiveCfg = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x64.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x86.ActiveCfg = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x86.Build.0 = Debug|Any CPU + {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU + {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|x64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|x86.ActiveCfg = Release|Any CPU + {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|ARM.ActiveCfg = Release|Any CPU + {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|ARM.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|ARM64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|ARM64.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x64.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x86.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x86.Build.0 = Release|Any CPU + {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU + {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|ARM64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU + {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|ARM.ActiveCfg = Release|Any CPU + {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|ARM.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|x64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|x86.ActiveCfg = Release|Any CPU + {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM.ActiveCfg = Debug|Any CPU + {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM64.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM64.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x64.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x64.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x86.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x86.Build.0 = Debug|Any CPU + {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU + {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|x64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|x86.ActiveCfg = Release|Any CPU + {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|ARM.ActiveCfg = Release|Any CPU + {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|ARM.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|ARM64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|ARM64.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x64.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x86.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x86.Build.0 = Release|Any CPU + {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU + {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|ARM64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU + {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|ARM.ActiveCfg = Release|Any CPU + {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|ARM.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|x64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|x86.ActiveCfg = Release|Any CPU + {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM.ActiveCfg = Debug|ARM + {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM.Build.0 = Debug|ARM {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM64.Build.0 = Debug|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x64.ActiveCfg = Debug|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x64.Build.0 = Debug|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x86.ActiveCfg = Debug|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x86.Build.0 = Debug|Win32 + {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|ARM.Build.0 = Debug|ARM {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|x64.ActiveCfg = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|x86.ActiveCfg = Release|Win32 + {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|ARM.ActiveCfg = Release|ARM + {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|ARM.Build.0 = Release|ARM {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|ARM64.ActiveCfg = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|ARM64.Build.0 = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x64.ActiveCfg = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x64.Build.0 = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x86.ActiveCfg = Release|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x86.Build.0 = Release|Win32 + {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|ARM.ActiveCfg = Release|ARM + {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|ARM.Build.0 = Release|ARM {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|ARM64.Build.0 = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x64.ActiveCfg = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x64.Build.0 = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x86.ActiveCfg = Release|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x86.Build.0 = Release|Win32 + {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|ARM.ActiveCfg = Debug|Any CPU + {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|ARM.Build.0 = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|ARM64.ActiveCfg = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|ARM64.Build.0 = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x64.ActiveCfg = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x64.Build.0 = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x86.ActiveCfg = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x86.Build.0 = Debug|Any CPU + {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|ARM.ActiveCfg = Release|Any CPU + {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|ARM.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|x64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|x86.ActiveCfg = Release|Any CPU + {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|ARM.ActiveCfg = Release|Any CPU + {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|ARM.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|ARM64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|ARM64.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x64.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x86.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x86.Build.0 = Release|Any CPU + {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.ReleaseStatic|ARM.ActiveCfg = Release|Any CPU + {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.ReleaseStatic|ARM.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.ReleaseStatic|ARM64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.ReleaseStatic|x64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.ReleaseStatic|x86.ActiveCfg = Release|Any CPU + {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|ARM.ActiveCfg = Release|Any CPU + {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|ARM.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|x64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|x86.ActiveCfg = Release|Any CPU + {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|ARM.ActiveCfg = Debug|Any CPU + {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|ARM.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|ARM64.ActiveCfg = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|ARM64.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x64.ActiveCfg = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x64.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x86.ActiveCfg = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x86.Build.0 = Debug|Any CPU + {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU + {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|x64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|x86.ActiveCfg = Release|Any CPU + {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|ARM.ActiveCfg = Release|Any CPU + {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|ARM.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|ARM64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|ARM64.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x64.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x86.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x86.Build.0 = Release|Any CPU + {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU + {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU + {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|ARM.ActiveCfg = Release|Any CPU + {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|ARM.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|x64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|x86.ActiveCfg = Release|Any CPU + {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|ARM.ActiveCfg = Debug|ARM + {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|ARM.Build.0 = Debug|ARM {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|ARM64.Build.0 = Debug|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x64.ActiveCfg = Debug|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x64.Build.0 = Debug|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x86.ActiveCfg = Debug|Win32 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x86.Build.0 = Debug|Win32 + {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|ARM.ActiveCfg = Debug|ARM + {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|ARM.Build.0 = Debug|ARM {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|x64.ActiveCfg = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|x86.ActiveCfg = Release|Win32 + {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|ARM.ActiveCfg = Release|ARM + {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|ARM.Build.0 = Release|ARM {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|ARM64.ActiveCfg = Release|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|ARM64.Build.0 = Release|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x64.ActiveCfg = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x64.Build.0 = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x86.ActiveCfg = Release|Win32 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x86.Build.0 = Release|Win32 + {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|ARM.ActiveCfg = Release|ARM + {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|ARM.Build.0 = Release|ARM {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|ARM64.Build.0 = Release|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x64.ActiveCfg = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x64.Build.0 = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x86.ActiveCfg = Release|Win32 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x86.Build.0 = Release|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|ARM.ActiveCfg = Debug|ARM + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|ARM.Build.0 = Debug|ARM {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|ARM64.ActiveCfg = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|ARM64.Build.0 = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x64.ActiveCfg = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x64.Build.0 = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x86.ActiveCfg = Debug|Win32 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x86.Build.0 = Debug|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|ARM.Build.0 = Fuzzing|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|ARM64.ActiveCfg = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|ARM64.Build.0 = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x64.ActiveCfg = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x64.Build.0 = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x86.ActiveCfg = Debug|Win32 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x86.Build.0 = Debug|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|ARM.ActiveCfg = Release|ARM + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|ARM.Build.0 = Release|ARM {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|ARM64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|ARM64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x86.ActiveCfg = Release|Win32 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x86.Build.0 = Release|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|ARM64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|ARM64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|x64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|x64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|x86.ActiveCfg = Release|Win32 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|x86.Build.0 = Release|Win32 + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|ARM.ActiveCfg = Release|ARM + {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|ARM.Build.0 = Release|ARM {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|ARM64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|ARM64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x86.ActiveCfg = Release|Win32 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x86.Build.0 = Release|Win32 + {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|ARM.ActiveCfg = Debug|x64 + {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|ARM.Build.0 = Debug|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|ARM64.Build.0 = Debug|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|x64.ActiveCfg = Debug|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|x64.Build.0 = Debug|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|x86.ActiveCfg = Debug|Win32 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|x86.Build.0 = Debug|Win32 + {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|x64 + {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Fuzzing|ARM.Build.0 = ReleaseStatic|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Fuzzing|x64.ActiveCfg = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Fuzzing|x86.ActiveCfg = Release|Win32 + {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|ARM.ActiveCfg = Release|x64 + {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|ARM.Build.0 = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|ARM64.ActiveCfg = Release|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|ARM64.Build.0 = Release|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|x64.ActiveCfg = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|x64.Build.0 = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|x86.ActiveCfg = Release|Win32 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|x86.Build.0 = Release|Win32 + {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|x64 + {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|ARM.ActiveCfg = Release|x64 + {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|ARM.Build.0 = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|ARM64.Build.0 = Release|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|x64.ActiveCfg = Release|x64 diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index 3acd009877..705baf0eda 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -1299,15 +1299,21 @@ namespace AppInstaller::CLI::Workflow } } - void CreateConfigurationProcessor(Context& context) + void CreateConfigurationProcessorInternal(Context& context) { - context << ExecuteUriValidation(UriValidationSource::ConfigurationSource); auto progressScope = context.Reporter.BeginAsyncProgress(true); progressScope->Callback().SetProgressMessage(Resource::String::ConfigurationInitializing()); anon::ConfigureProcessorForUse(context, ConfigurationProcessor{ anon::CreateConfigurationSetProcessorFactory(context) }); } + void CreateConfigurationProcessor(Context& context) + { + context << + ExecuteUriValidation(UriValidationSource::ConfigurationSource) << + CreateConfigurationProcessorInternal; + } + void CreateConfigurationProcessorWithoutFactory(Execution::Context& context) { anon::ConfigureProcessorForUse(context, ConfigurationProcessor{ IConfigurationSetProcessorFactory{ nullptr } }); diff --git a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp index 6ed9f626f5..5b2ddb16bb 100644 --- a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp @@ -194,22 +194,9 @@ namespace AppInstaller::CLI::Workflow } } - void DownloadInstaller(Execution::Context& context) + void DownloadInstallerInternal(Execution::Context& context) { - // Check if file was already downloaded. - // This may happen after a failed installation or if the download was done - // separately before, e.g. on COM scenarios. - context << - ReportExecutionStage(ExecutionStage::Download) << - CheckForExistingInstaller; - - if (context.IsTerminated()) - { - return; - } - bool installerDownloadOnly = WI_IsFlagSet(context.GetFlags(), Execution::ContextFlag::InstallerDownloadOnly); - context << ExecuteUriValidation(UriValidationSource::PackageCatalogSource); // CheckForExistingInstaller will set the InstallerPath if found if (!context.Contains(Execution::Data::InstallerPath)) @@ -270,6 +257,25 @@ namespace AppInstaller::CLI::Workflow } } + void DownloadInstaller(Execution::Context& context) + { + // Check if file was already downloaded. + // This may happen after a failed installation or if the download was done + // separately before, e.g. on COM scenarios. + context << + ReportExecutionStage(ExecutionStage::Download) << + CheckForExistingInstaller; + + if (context.IsTerminated()) + { + return; + } + + context << + ExecuteUriValidation(UriValidationSource::PackageCatalogSource) << + DownloadInstallerInternal; + } + void CheckForExistingInstaller(Execution::Context& context) { const auto& installer = context.Get().value(); From ca649fe4be7d1129749a7b2004641ef87fb7515b Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Thu, 31 Oct 2024 16:52:43 -0700 Subject: [PATCH 27/34] Renaming --- doc/admx/DesktopAppInstaller.admx | 14 +++++++------- doc/admx/en-US/DesktopAppInstaller.adml | 14 +++++++------- .../Workflows/UriValidationFlow.cpp | 8 ++++---- src/AppInstallerCLITests/TestSettings.h | 4 ++-- src/AppInstallerSharedLib/GroupPolicy.cpp | 8 ++++---- .../Public/winget/GroupPolicy.h | 4 ++-- 6 files changed, 26 insertions(+), 26 deletions(-) diff --git a/doc/admx/DesktopAppInstaller.admx b/doc/admx/DesktopAppInstaller.admx index bd7bd2bd4d..fce3451700 100644 --- a/doc/admx/DesktopAppInstaller.admx +++ b/doc/admx/DesktopAppInstaller.admx @@ -183,7 +183,7 @@ - + @@ -193,7 +193,7 @@ - + @@ -203,7 +203,7 @@ - + @@ -215,7 +215,7 @@ - + @@ -227,7 +227,7 @@ - + @@ -239,7 +239,7 @@ - + @@ -251,7 +251,7 @@ - + diff --git a/doc/admx/en-US/DesktopAppInstaller.adml b/doc/admx/en-US/DesktopAppInstaller.adml index 5d1d7e391c..ea2913d65a 100644 --- a/doc/admx/en-US/DesktopAppInstaller.adml +++ b/doc/admx/en-US/DesktopAppInstaller.adml @@ -122,12 +122,10 @@ If you disable this setting, users will not be able to use the Windows Package M If you disable or do not configure this setting, no proxy will be used by default. If you enable this setting, the specified proxy will be used by default. - Enable App Installer Allowed Security Zones - - Enable App Installer Smart Screen Validation - - Allow - Block + Enable App Installer Allowed Zones for the Windows Package Manager + + Enable Microsoft SmartScreen checks for the Windows Package Manager + Enable App Installer Allowed Zones for MSIX Packages This policy controls whether App Installer allows installing packages originating from specific URL Zones. A package's origin is determined by its URI and whether a Mart-of-the-Web (MotW) is present. If multiple URIs are involved, all of them are considered; for example, when using a .appinstaller file that involves redirection. @@ -140,6 +138,8 @@ If you disable or do not configure this policy, users will be able to install MS If you enable or do not configure this policy, the package URI will be evaluated with Microsoft SmartScreen before installation. This check is only done for packages that come from the internet. If you disable, Microsoft SmartScreen will not be consulted before installing a package. + Allow + Block @@ -156,7 +156,7 @@ If you disable, Microsoft SmartScreen will not be consulted before installing a - + Local Machine Intranet Trusted Sites diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp index 6b06a730bd..8310357bc5 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp @@ -11,7 +11,7 @@ namespace AppInstaller::CLI::Workflow // Check if smart screen is required for a given zone. bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone) { - auto isSmartScreenEnabled = Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::SmartScreenValidation); + auto isSmartScreenEnabled = Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::SmartScreenCheck); AICLI_LOG(Core, Info, << "SmartScreen validation is " << (isSmartScreenEnabled ? "enabled" : "disabled")); auto isSecurityZoneCheckRequired = zone == Settings::SecurityZoneOptions::Internet || zone == Settings::SecurityZoneOptions::UntrustedSites; @@ -83,20 +83,20 @@ namespace AppInstaller::CLI::Workflow { if (!Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::AllowedSecurityZones)) { - AICLI_LOG(Core, Info, << "AllowedSecurityZones policy is disabled"); + AICLI_LOG(Core, Info, << "WindowsPackageManagerAllowedSecurityZones policy is disabled"); return false; } auto allowedSecurityZones = Settings::GroupPolicies().GetValue(); if (!allowedSecurityZones.has_value()) { - AICLI_LOG(Core, Warning, << "AllowedSecurityZones policy is not set"); + AICLI_LOG(Core, Warning, << "WindowsPackageManagerAllowedSecurityZones policy is not set"); return false; } if (allowedSecurityZones->find(zone) == allowedSecurityZones->end()) { - AICLI_LOG(Core, Warning, << "Security zone " << zone << " was not found in the group policy AllowedSecurityZones"); + AICLI_LOG(Core, Warning, << "Security zone " << zone << " was not found in the group policy WindowsPackageManagerAllowedSecurityZones"); return false; } diff --git a/src/AppInstallerCLITests/TestSettings.h b/src/AppInstallerCLITests/TestSettings.h index ff1a46e3a5..09b40181b0 100644 --- a/src/AppInstallerCLITests/TestSettings.h +++ b/src/AppInstallerCLITests/TestSettings.h @@ -23,8 +23,8 @@ namespace TestCommon const std::wstring EnableWindowsPackageManagerCommandLineInterfaces = L"EnableWindowsPackageManagerCommandLineInterfaces"; const std::wstring ConfigurationPolicyValueName = L"EnableWindowsPackageManagerConfiguration"; const std::wstring ProxyCommandLineOptionsPolicyValueName = L"EnableWindowsPackageManagerProxyCommandLineOptions"; - const std::wstring AllowedSecurityZonesPolicyValueName = L"EnableAllowedSecurityZones"; - const std::wstring SmartScreenValidationPolicyValueName = L"EnableSmartScreenValidation"; + const std::wstring AllowedSecurityZonesPolicyValueName = L"EnableWindowsPackageManagerAllowedSecurityZones"; + const std::wstring SmartScreenValidationPolicyValueName = L"EnableWindowsPackageManagerSmartScreenCheck"; const std::wstring SourceUpdateIntervalPolicyValueName = L"SourceAutoUpdateInterval"; const std::wstring SourceUpdateIntervalPolicyOldValueName = L"SourceAutoUpdateIntervalInMinutes"; diff --git a/src/AppInstallerSharedLib/GroupPolicy.cpp b/src/AppInstallerSharedLib/GroupPolicy.cpp index 580fe3971a..3921329804 100644 --- a/src/AppInstallerSharedLib/GroupPolicy.cpp +++ b/src/AppInstallerSharedLib/GroupPolicy.cpp @@ -355,7 +355,7 @@ namespace AppInstaller::Settings CONFIGURATION_ALLOWED_ZONES_READ(UntrustedSites); #undef CONFIGURATION_ALLOWED_ZONES_READ - AICLI_LOG(Core, Warning, << "Unknown value in AllowedSecurityZones: " << entry.Name()); + AICLI_LOG(Core, Warning, << "Unknown value in WindowsPackageManagerAllowedSecurityZones: " << entry.Name()); return std::nullopt; } } @@ -393,9 +393,9 @@ namespace AppInstaller::Settings case TogglePolicy::Policy::ProxyCommandLineOptions: return TogglePolicy(policy, "EnableWindowsPackageManagerProxyCommandLineOptions"sv, String::PolicyEnableProxyCommandLineOptions); case TogglePolicy::Policy::AllowedSecurityZones: - return TogglePolicy(policy, "EnableAllowedSecurityZones"sv, String::PolicyEnableAllowedSecurityZones); - case TogglePolicy::Policy::SmartScreenValidation: - return TogglePolicy(policy, "EnableSmartScreenValidation"sv, String::PolicyEnableSmartScreenValidation); + return TogglePolicy(policy, "EnableWindowsPackageManagerAllowedSecurityZones"sv, String::PolicyEnableAllowedSecurityZones); + case TogglePolicy::Policy::SmartScreenCheck: + return TogglePolicy(policy, "EnableWindowsPackageManagerSmartScreenCheck"sv, String::PolicyEnableSmartScreenValidation); default: THROW_HR(E_UNEXPECTED); } diff --git a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h index 4e9361c419..59c4a449c2 100644 --- a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h +++ b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h @@ -59,7 +59,7 @@ namespace AppInstaller::Settings Configuration, ProxyCommandLineOptions, AllowedSecurityZones, - SmartScreenValidation, + SmartScreenCheck, Max, }; @@ -181,7 +181,7 @@ namespace AppInstaller::Settings POLICY_MAPPING_LIST_SPECIALIZATION(ValuePolicy::AdditionalSources, SourceFromPolicy, "AdditionalSources"sv); POLICY_MAPPING_LIST_SPECIALIZATION(ValuePolicy::AllowedSources, SourceFromPolicy, "AllowedSources"sv); - POLICY_MAPPING_ENUM_SPECIALIZATION(ValuePolicy::AllowedSecurityZones, SecurityZoneMap_t, SecurityZoneOptions, bool, "AllowedSecurityZones"sv); + POLICY_MAPPING_ENUM_SPECIALIZATION(ValuePolicy::AllowedSecurityZones, SecurityZoneMap_t, SecurityZoneOptions, bool, "WindowsPackageManagerAllowedSecurityZones"sv); } // Representation of the policies read from the registry. From 1d6408c51105b5ea939b13bd203ef4c27d4dc467 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 1 Nov 2024 10:52:23 -0700 Subject: [PATCH 28/34] Update comment --- src/AppInstallerSharedLib/Public/winget/GroupPolicy.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h index 59c4a449c2..d91bab156a 100644 --- a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h +++ b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h @@ -128,10 +128,10 @@ namespace AppInstaller::Settings // ReadAndValidateItem() - Function that reads a single item from a subkey // For enums: - // keyItem_t - Type of the key - // valueItem_t - Type of the value - // KeyName -- Name of the sub-key containing the list - // ReadAndValidateItem() - Function that reads a single item from a subkey + // KeyName - Name of the sub-key containing the enums + // _mapTypeKey_ - Type of the key in the map + // _mapTypeValue_ - Type of the value in the map + // _mapTypeName_ - Name of the map type }; template<> From b8614e17152814757363c38db03068d619166ed3 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Thu, 30 Jan 2025 15:18:52 -0800 Subject: [PATCH 29/34] Revert ARM in sln --- src/AppInstallerCLI.sln | 450 ------------------- src/Internal/UriValidation/UriValidation.cpp | 2 + 2 files changed, 2 insertions(+), 450 deletions(-) diff --git a/src/AppInstallerCLI.sln b/src/AppInstallerCLI.sln index 07e5fe6313..b0881bb932 100644 --- a/src/AppInstallerCLI.sln +++ b/src/AppInstallerCLI.sln @@ -220,31 +220,23 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Management.Deploy EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|ARM = Debug|ARM Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 - Fuzzing|ARM = Fuzzing|ARM Fuzzing|ARM64 = Fuzzing|ARM64 Fuzzing|x64 = Fuzzing|x64 Fuzzing|x86 = Fuzzing|x86 - Release|ARM = Release|ARM Release|ARM64 = Release|ARM64 Release|x64 = Release|x64 Release|x86 = Release|x86 - ReleaseStatic|ARM = ReleaseStatic|ARM ReleaseStatic|ARM64 = ReleaseStatic|ARM64 ReleaseStatic|x64 = ReleaseStatic|x64 ReleaseStatic|x86 = ReleaseStatic|x86 - TestRelease|ARM = TestRelease|ARM TestRelease|ARM64 = TestRelease|ARM64 TestRelease|x64 = TestRelease|x64 TestRelease|x86 = TestRelease|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM.ActiveCfg = Debug|ARM - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM.Build.0 = Debug|ARM - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM.Deploy.0 = Debug|ARM {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM64.Build.0 = Debug|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM64.Deploy.0 = Debug|ARM64 @@ -254,15 +246,9 @@ Global {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|x86.ActiveCfg = Debug|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|x86.Build.0 = Debug|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|x86.Deploy.0 = Debug|x86 - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|ARM.Build.0 = Debug|ARM - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|ARM.Deploy.0 = Debug|ARM {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|x64.ActiveCfg = Release|x64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|x86.ActiveCfg = Release|x86 - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM.ActiveCfg = Release|ARM - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM.Build.0 = Release|ARM - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM.Deploy.0 = Release|ARM {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM64.Build.0 = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM64.Deploy.0 = Release|ARM64 @@ -272,326 +258,227 @@ Global {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|x86.ActiveCfg = Release|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|x86.Build.0 = Release|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|x86.Deploy.0 = Release|x86 - {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|ARM.ActiveCfg = Release|ARM - {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|ARM.Build.0 = Release|ARM - {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|ARM.Deploy.0 = Release|ARM {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|x64.ActiveCfg = Release|x64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.ReleaseStatic|x86.ActiveCfg = Release|x86 - {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|ARM.ActiveCfg = Release|ARM - {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|ARM.Build.0 = Release|ARM - {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|ARM.Deploy.0 = Release|ARM {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|x64.ActiveCfg = Release|x64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|x86.ActiveCfg = Release|x86 - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|ARM.ActiveCfg = Debug|ARM - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|ARM.Build.0 = Debug|ARM {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|ARM64.Build.0 = Debug|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x64.ActiveCfg = Debug|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x64.Build.0 = Debug|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x86.ActiveCfg = Debug|Win32 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x86.Build.0 = Debug|Win32 - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|ARM.Build.0 = Debug|ARM {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|x86.ActiveCfg = Release|Win32 - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|ARM.ActiveCfg = Release|ARM - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|ARM.Build.0 = Release|ARM {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|ARM64.Build.0 = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x64.Build.0 = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x86.ActiveCfg = Release|Win32 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x86.Build.0 = Release|Win32 - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.ReleaseStatic|ARM.ActiveCfg = Release|ARM - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.ReleaseStatic|ARM.Build.0 = Release|ARM {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.ReleaseStatic|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.ReleaseStatic|x86.ActiveCfg = Release|Win32 - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|ARM.ActiveCfg = Release|ARM - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|ARM.Build.0 = Release|ARM {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|x86.ActiveCfg = Release|Win32 - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|ARM.ActiveCfg = Debug|ARM - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|ARM.Build.0 = Debug|ARM {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|ARM64.Build.0 = Debug|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x64.ActiveCfg = Debug|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x64.Build.0 = Debug|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x86.ActiveCfg = Debug|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x86.Build.0 = Debug|Win32 - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|x64.ActiveCfg = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|x86.ActiveCfg = Release|Win32 - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|ARM.ActiveCfg = Release|ARM - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|ARM.Build.0 = Release|ARM {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|ARM64.ActiveCfg = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|ARM64.Build.0 = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x64.ActiveCfg = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x64.Build.0 = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x86.ActiveCfg = Release|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x86.Build.0 = Release|Win32 - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|ARM.ActiveCfg = Release|ARM - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|ARM.Build.0 = Release|ARM {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|ARM64.Build.0 = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x64.ActiveCfg = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x64.Build.0 = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x86.ActiveCfg = Release|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x86.Build.0 = Release|Win32 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|ARM.ActiveCfg = Debug|x64 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|ARM.Build.0 = Debug|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|ARM64.ActiveCfg = Debug|ARM64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|ARM64.Build.0 = Debug|ARM64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x64.ActiveCfg = Debug|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x64.Build.0 = Debug|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x86.ActiveCfg = Debug|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x86.Build.0 = Debug|Win32 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|ARM.ActiveCfg = Release|x64 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|ARM.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|ARM64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|x86.ActiveCfg = Release|Win32 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|ARM.ActiveCfg = Release|x64 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|ARM.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|ARM64.ActiveCfg = Release|ARM64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|ARM64.Build.0 = Release|ARM64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x64.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x86.ActiveCfg = Release|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x86.Build.0 = Release|Win32 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.ReleaseStatic|ARM.ActiveCfg = Release|x64 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.ReleaseStatic|ARM.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.ReleaseStatic|ARM64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.ReleaseStatic|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.ReleaseStatic|x86.ActiveCfg = Release|Win32 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|ARM.ActiveCfg = Release|x64 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|ARM.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|ARM64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|x86.ActiveCfg = Release|Win32 - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|ARM.ActiveCfg = Debug|ARM - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|ARM.Build.0 = Debug|ARM {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|ARM64.Build.0 = Debug|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x64.ActiveCfg = Debug|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x64.Build.0 = Debug|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x86.ActiveCfg = Debug|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x86.Build.0 = Debug|Win32 - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|x64.ActiveCfg = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|x86.ActiveCfg = Release|Win32 - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|ARM.ActiveCfg = Release|ARM - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|ARM.Build.0 = Release|ARM {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|ARM64.ActiveCfg = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|ARM64.Build.0 = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x64.ActiveCfg = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x64.Build.0 = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x86.ActiveCfg = Release|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x86.Build.0 = Release|Win32 - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|ARM.ActiveCfg = Release|ARM - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|ARM.Build.0 = Release|ARM {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|ARM64.Build.0 = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x64.ActiveCfg = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x64.Build.0 = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x86.ActiveCfg = Release|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x86.Build.0 = Release|Win32 - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|ARM.ActiveCfg = Debug|ARM - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|ARM.Build.0 = Debug|ARM {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|ARM64.ActiveCfg = Debug|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|ARM64.Build.0 = Debug|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x64.ActiveCfg = Debug|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x64.Build.0 = Debug|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x86.ActiveCfg = Debug|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x86.Build.0 = Debug|Win32 - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|ARM.ActiveCfg = Fuzzing|ARM - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|ARM.Build.0 = Fuzzing|ARM {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x64.Build.0 = Fuzzing|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x86.Build.0 = Fuzzing|Win32 - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|ARM.ActiveCfg = Release|ARM - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|ARM.Build.0 = Release|ARM {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|ARM64.ActiveCfg = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|ARM64.Build.0 = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x64.ActiveCfg = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x64.Build.0 = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x86.ActiveCfg = Release|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x86.Build.0 = Release|Win32 - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|ARM.ActiveCfg = Release|ARM - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|ARM.Build.0 = Release|ARM {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|ARM64.Build.0 = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x64.ActiveCfg = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x64.Build.0 = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x86.ActiveCfg = Release|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x86.Build.0 = Release|Win32 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|ARM.ActiveCfg = Debug|ARM - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|ARM.Build.0 = Debug|ARM {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|ARM64.Build.0 = Debug|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x64.ActiveCfg = Debug|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x64.Build.0 = Debug|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x86.ActiveCfg = Debug|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x86.Build.0 = Debug|Win32 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|ARM.Build.0 = Fuzzing|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x64.Build.0 = Fuzzing|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x86.Build.0 = Fuzzing|Win32 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|ARM.ActiveCfg = Release|ARM - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|ARM.Build.0 = Release|ARM {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|ARM64.ActiveCfg = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|ARM64.Build.0 = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x64.ActiveCfg = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x64.Build.0 = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x86.ActiveCfg = Release|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x86.Build.0 = Release|Win32 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|ARM.ActiveCfg = Release|ARM - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|ARM.Build.0 = Release|ARM {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|ARM64.Build.0 = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x64.ActiveCfg = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x64.Build.0 = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x86.ActiveCfg = Release|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x86.Build.0 = Release|Win32 - {FB313532-38B0-4676-9303-AB200AA13576}.Debug|ARM.ActiveCfg = Debug|ARM - {FB313532-38B0-4676-9303-AB200AA13576}.Debug|ARM.Build.0 = Debug|ARM {FB313532-38B0-4676-9303-AB200AA13576}.Debug|ARM64.ActiveCfg = Debug|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|ARM64.Build.0 = Debug|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x64.ActiveCfg = Debug|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x64.Build.0 = Debug|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x86.ActiveCfg = Debug|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x86.Build.0 = Debug|Win32 - {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|ARM.Build.0 = Debug|ARM {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|x86.ActiveCfg = Release|Win32 - {FB313532-38B0-4676-9303-AB200AA13576}.Release|ARM.ActiveCfg = Release|ARM - {FB313532-38B0-4676-9303-AB200AA13576}.Release|ARM.Build.0 = Release|ARM {FB313532-38B0-4676-9303-AB200AA13576}.Release|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|ARM64.Build.0 = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|x64.Build.0 = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|x86.ActiveCfg = Release|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.Release|x86.Build.0 = Release|Win32 - {FB313532-38B0-4676-9303-AB200AA13576}.ReleaseStatic|ARM.ActiveCfg = Release|ARM - {FB313532-38B0-4676-9303-AB200AA13576}.ReleaseStatic|ARM.Build.0 = Release|ARM {FB313532-38B0-4676-9303-AB200AA13576}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.ReleaseStatic|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.ReleaseStatic|x86.ActiveCfg = Release|Win32 - {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|ARM.ActiveCfg = Release|ARM - {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|ARM.Build.0 = Release|ARM {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|x86.ActiveCfg = Release|Win32 - {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|ARM.ActiveCfg = Debug|ARM - {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|ARM.Build.0 = Debug|ARM {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|ARM64.Build.0 = Debug|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x64.ActiveCfg = Debug|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x64.Build.0 = Debug|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x86.ActiveCfg = Debug|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x86.Build.0 = Debug|Win32 - {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|ARM.Build.0 = Debug|ARM {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|x86.ActiveCfg = Release|Win32 - {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|ARM.ActiveCfg = Release|ARM - {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|ARM.Build.0 = Release|ARM {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|ARM64.Build.0 = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x64.Build.0 = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x86.ActiveCfg = Release|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x86.Build.0 = Release|Win32 - {6CB84692-5994-407D-B9BD-9216AF77FE83}.ReleaseStatic|ARM.ActiveCfg = Release|ARM - {6CB84692-5994-407D-B9BD-9216AF77FE83}.ReleaseStatic|ARM.Build.0 = Release|ARM {6CB84692-5994-407D-B9BD-9216AF77FE83}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.ReleaseStatic|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.ReleaseStatic|x86.ActiveCfg = Release|Win32 - {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|ARM.ActiveCfg = Release|ARM - {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|ARM.Build.0 = Release|ARM {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|x86.ActiveCfg = Release|Win32 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|ARM.ActiveCfg = Debug|x64 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|ARM.Build.0 = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|ARM64.ActiveCfg = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x64.ActiveCfg = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x64.Build.0 = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x86.ActiveCfg = Debug|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x86.Build.0 = Debug|x86 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|ARM.ActiveCfg = Release|x64 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|ARM.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|ARM64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|x86.ActiveCfg = Release|x86 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|ARM.ActiveCfg = Release|x64 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|ARM.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|ARM64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x64.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x86.ActiveCfg = Release|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x86.Build.0 = Release|x86 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.ReleaseStatic|ARM.ActiveCfg = Release|x64 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.ReleaseStatic|ARM.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.ReleaseStatic|ARM64.ActiveCfg = Release|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.ReleaseStatic|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.ReleaseStatic|x86.ActiveCfg = Release|x86 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|ARM.ActiveCfg = Release|x64 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|ARM.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|ARM64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|x86.ActiveCfg = Release|x86 - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM.ActiveCfg = Debug|ARM - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM.Build.0 = Debug|ARM - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM.Deploy.0 = Debug|ARM {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM64.ActiveCfg = Debug|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM64.Build.0 = Debug|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM64.Deploy.0 = Debug|ARM64 @@ -601,15 +488,9 @@ Global {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|x86.ActiveCfg = Debug|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|x86.Build.0 = Debug|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|x86.Deploy.0 = Debug|x86 - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|ARM.Build.0 = Debug|ARM - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|ARM.Deploy.0 = Debug|ARM {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|x64.ActiveCfg = Release|x64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|x86.ActiveCfg = Release|x86 - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM.ActiveCfg = Release|ARM - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM.Build.0 = Release|ARM - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM.Deploy.0 = Release|ARM {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM64.Build.0 = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM64.Deploy.0 = Release|ARM64 @@ -619,1137 +500,806 @@ Global {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|x86.ActiveCfg = Release|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|x86.Build.0 = Release|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|x86.Deploy.0 = Release|x86 - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|ARM.ActiveCfg = Release|ARM - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|ARM.Build.0 = Release|ARM - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|ARM.Deploy.0 = Release|ARM {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|x64.ActiveCfg = Release|x64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.ReleaseStatic|x86.ActiveCfg = Release|x86 - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|ARM.ActiveCfg = Release|ARM - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|ARM.Build.0 = Release|ARM - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|ARM.Deploy.0 = Release|ARM {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|x64.ActiveCfg = Release|x64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|x86.ActiveCfg = Release|x86 - {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Debug|ARM.ActiveCfg = Debug {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Debug|ARM64.ActiveCfg = Debug {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Debug|x64.ActiveCfg = Debug {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Debug|x86.ActiveCfg = Debug - {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Fuzzing|ARM.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Fuzzing|ARM64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Fuzzing|x64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Fuzzing|x86.ActiveCfg = Release - {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Release|ARM.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Release|ARM64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Release|x64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.Release|x86.ActiveCfg = Release - {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.ReleaseStatic|ARM.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.ReleaseStatic|ARM64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.ReleaseStatic|x64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.ReleaseStatic|x86.ActiveCfg = Release - {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.TestRelease|ARM.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.TestRelease|ARM64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.TestRelease|x64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.TestRelease|x86.ActiveCfg = Release - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|ARM.ActiveCfg = Debug|x64 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|ARM.Build.0 = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|ARM64.ActiveCfg = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x64.ActiveCfg = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x64.Build.0 = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x86.ActiveCfg = Debug|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x86.Build.0 = Debug|x86 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|ARM.ActiveCfg = Release|x64 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|ARM.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|ARM64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|x86.ActiveCfg = Release|x86 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|ARM.ActiveCfg = Release|x64 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|ARM.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|ARM64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x64.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x86.ActiveCfg = Release|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x86.Build.0 = Release|x86 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.ReleaseStatic|ARM.ActiveCfg = Release|x64 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.ReleaseStatic|ARM.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.ReleaseStatic|ARM64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.ReleaseStatic|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.ReleaseStatic|x86.ActiveCfg = Release|x86 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|ARM.ActiveCfg = Release|x64 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|ARM.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|ARM64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|x86.ActiveCfg = Release|x86 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|ARM.ActiveCfg = Debug|ARM - {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|ARM.Build.0 = Debug|ARM {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|ARM64.ActiveCfg = Debug|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|ARM64.Build.0 = Debug|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x64.ActiveCfg = Debug|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x64.Build.0 = Debug|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x86.ActiveCfg = Debug|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x86.Build.0 = Debug|Win32 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|ARM.Build.0 = Fuzzing|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x64.Build.0 = Fuzzing|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x86.Build.0 = Fuzzing|Win32 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|ARM.ActiveCfg = Release|ARM - {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|ARM.Build.0 = Release|ARM {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|ARM64.ActiveCfg = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|ARM64.Build.0 = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x64.ActiveCfg = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x64.Build.0 = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x86.ActiveCfg = Release|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x86.Build.0 = Release|Win32 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|ARM.ActiveCfg = Release|ARM - {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|ARM.Build.0 = Release|ARM {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|ARM64.Build.0 = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x64.ActiveCfg = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x64.Build.0 = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x86.ActiveCfg = Release|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x86.Build.0 = Release|Win32 - {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|ARM.ActiveCfg = Debug|x64 - {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|ARM.Build.0 = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|ARM64.ActiveCfg = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|x64.ActiveCfg = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|x86.ActiveCfg = Fuzzing|Win32 - {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 - {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|ARM.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x64.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x86.Build.0 = Fuzzing|Win32 - {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|ARM.ActiveCfg = Fuzzing|x64 - {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|ARM.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|x86.ActiveCfg = Fuzzing|Win32 - {1622DA16-914F-4F57-A259-D5169003CC8C}.ReleaseStatic|ARM.ActiveCfg = Fuzzing|x64 - {1622DA16-914F-4F57-A259-D5169003CC8C}.ReleaseStatic|ARM.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.ReleaseStatic|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.ReleaseStatic|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.ReleaseStatic|x86.ActiveCfg = Fuzzing|Win32 - {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|ARM.ActiveCfg = Fuzzing|x64 - {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|ARM.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|x86.ActiveCfg = Fuzzing|Win32 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|ARM.ActiveCfg = Debug|x64 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|ARM.Build.0 = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|ARM64.ActiveCfg = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x64.ActiveCfg = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x64.Build.0 = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x86.ActiveCfg = Debug|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x86.Build.0 = Debug|x86 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|ARM.ActiveCfg = Release|x64 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|ARM.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|ARM64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|x86.ActiveCfg = Release|x86 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|ARM.ActiveCfg = Release|x64 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|ARM.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|ARM64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x64.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x86.ActiveCfg = Release|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x86.Build.0 = Release|x86 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.ReleaseStatic|ARM.ActiveCfg = Release|x64 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.ReleaseStatic|ARM.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.ReleaseStatic|ARM64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.ReleaseStatic|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.ReleaseStatic|x86.ActiveCfg = Release|x86 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|ARM.ActiveCfg = Release|x64 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|ARM.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|ARM64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|x86.ActiveCfg = Release|x86 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|ARM.ActiveCfg = Debug|ARM - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|ARM.Build.0 = Debug|ARM {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|ARM64.Build.0 = Debug|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x64.ActiveCfg = Debug|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x64.Build.0 = Debug|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x86.ActiveCfg = Debug|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x86.Build.0 = Debug|Win32 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|ARM.Build.0 = Debug|ARM {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|x64.ActiveCfg = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|x86.ActiveCfg = Release|Win32 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|ARM.ActiveCfg = Release|ARM - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|ARM.Build.0 = Release|ARM {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|ARM64.ActiveCfg = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|ARM64.Build.0 = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x64.ActiveCfg = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x64.Build.0 = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x86.ActiveCfg = Release|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x86.Build.0 = Release|Win32 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|ARM.ActiveCfg = Release|ARM - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|ARM.Build.0 = Release|ARM {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|ARM64.Build.0 = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x64.ActiveCfg = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x64.Build.0 = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x86.ActiveCfg = Release|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x86.Build.0 = Release|Win32 - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|ARM.ActiveCfg = Debug|ARM - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|ARM.Build.0 = Debug|ARM {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|ARM64.Build.0 = Debug|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x64.ActiveCfg = Debug|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x64.Build.0 = Debug|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x86.ActiveCfg = Debug|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x86.Build.0 = Debug|Win32 - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|x64.ActiveCfg = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|x86.ActiveCfg = Release|Win32 - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|ARM.ActiveCfg = Release|ARM - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|ARM.Build.0 = Release|ARM {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|ARM64.ActiveCfg = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|ARM64.Build.0 = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x64.ActiveCfg = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x64.Build.0 = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x86.ActiveCfg = Release|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x86.Build.0 = Release|Win32 - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|ARM.ActiveCfg = Release|ARM - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|ARM.Build.0 = Release|ARM {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|ARM64.Build.0 = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x64.ActiveCfg = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x64.Build.0 = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x86.ActiveCfg = Release|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x86.Build.0 = Release|Win32 - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|ARM.ActiveCfg = Debug|ARM - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|ARM.Build.0 = Debug|ARM {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|ARM64.Build.0 = Debug|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x64.ActiveCfg = Debug|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x64.Build.0 = Debug|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x86.ActiveCfg = Debug|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x86.Build.0 = Debug|Win32 - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|ARM.Build.0 = Debug|ARM {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|x64.ActiveCfg = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|x86.ActiveCfg = Release|Win32 - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|ARM.ActiveCfg = Release|ARM - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|ARM.Build.0 = Release|ARM {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|ARM64.Build.0 = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x64.ActiveCfg = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x64.Build.0 = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x86.ActiveCfg = Release|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x86.Build.0 = Release|Win32 - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|ARM.ActiveCfg = Release|ARM - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|ARM.Build.0 = Release|ARM {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|ARM64.Build.0 = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|x64.ActiveCfg = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|x64.Build.0 = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|x86.ActiveCfg = Release|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.ReleaseStatic|x86.Build.0 = Release|Win32 - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|ARM.ActiveCfg = Release|ARM - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|ARM.Build.0 = Release|ARM {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|x64.ActiveCfg = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|x86.ActiveCfg = Release|Win32 - {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|ARM.ActiveCfg = Debug|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|ARM.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|ARM64.ActiveCfg = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|ARM64.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x64.ActiveCfg = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x64.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x86.ActiveCfg = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x86.Build.0 = Debug|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|ARM.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|ARM.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|x64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|x86.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|ARM.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|ARM.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|ARM64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|ARM64.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x64.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x86.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x86.Build.0 = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.ReleaseStatic|ARM.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.ReleaseStatic|ARM.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.ReleaseStatic|ARM64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.ReleaseStatic|x64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.ReleaseStatic|x86.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|ARM.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|x64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|x86.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|ARM.ActiveCfg = Debug|x64 - {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|ARM.Build.0 = Debug|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|ARM64.ActiveCfg = Debug|ARM64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x64.ActiveCfg = Debug|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x64.Build.0 = Debug|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x86.ActiveCfg = Debug|x86 {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x86.Build.0 = Debug|x86 - {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|ARM.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|ARM.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|x64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|x86.ActiveCfg = Release|x86 - {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|ARM.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|ARM.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|ARM64.ActiveCfg = Release|ARM64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x64.ActiveCfg = Release|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x64.Build.0 = Release|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x86.ActiveCfg = Release|x86 {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x86.Build.0 = Release|x86 - {68808357-902B-406C-8C19-E8E26A69DE8A}.ReleaseStatic|ARM.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.ReleaseStatic|ARM.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.ReleaseStatic|ARM64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.ReleaseStatic|x64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.ReleaseStatic|x86.ActiveCfg = Release|x86 - {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|ARM.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|x64.ActiveCfg = Release|x64 {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|x86.ActiveCfg = Release|x86 - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM.ActiveCfg = Debug|ARM - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM.Build.0 = Debug|ARM {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM64.Build.0 = Debug|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x64.ActiveCfg = Debug|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x64.Build.0 = Debug|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x86.ActiveCfg = Debug|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x86.Build.0 = Debug|Win32 - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|x64.ActiveCfg = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|x86.ActiveCfg = Release|Win32 - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|ARM.ActiveCfg = Release|ARM - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|ARM.Build.0 = Release|ARM {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|ARM64.ActiveCfg = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|ARM64.Build.0 = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x64.ActiveCfg = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x64.Build.0 = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x86.ActiveCfg = Release|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x86.Build.0 = Release|Win32 - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|ARM.ActiveCfg = Release|ARM - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|ARM.Build.0 = Release|ARM {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|ARM64.Build.0 = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x64.ActiveCfg = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x64.Build.0 = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x86.ActiveCfg = Release|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x86.Build.0 = Release|Win32 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|ARM.ActiveCfg = Debug|ARM - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|ARM.Build.0 = Debug|ARM {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|ARM64.ActiveCfg = Debug|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|ARM64.Build.0 = Debug|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x64.ActiveCfg = Debug|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x64.Build.0 = Debug|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x86.ActiveCfg = Debug|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x86.Build.0 = Debug|Win32 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|ARM.Build.0 = Debug|ARM {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|x64.ActiveCfg = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|x86.ActiveCfg = Release|Win32 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|ARM.ActiveCfg = Release|ARM - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|ARM.Build.0 = Release|ARM {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|ARM64.ActiveCfg = Release|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x64.ActiveCfg = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x64.Build.0 = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x86.ActiveCfg = Release|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x86.Build.0 = Release|Win32 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|ARM.ActiveCfg = Release|ARM - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|ARM.Build.0 = Release|ARM {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|ARM64.ActiveCfg = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|x64.ActiveCfg = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|x86.ActiveCfg = Release|Win32 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM.ActiveCfg = Debug|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM.Build.0 = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM64.ActiveCfg = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM64.Build.0 = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x64.ActiveCfg = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x64.Build.0 = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x86.ActiveCfg = Debug|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x86.Build.0 = Debug|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|x64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|x86.ActiveCfg = Release|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM.ActiveCfg = Release|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM.Build.0 = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM64.Build.0 = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x64.Build.0 = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x86.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x86.Build.0 = Release|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|ARM.Build.0 = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x64.ActiveCfg = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x86.ActiveCfg = Release|Any CPU - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|ARM.ActiveCfg = Debug|x64 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|ARM.Build.0 = Debug|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|ARM64.ActiveCfg = Debug|arm64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x64.ActiveCfg = Debug|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x64.Build.0 = Debug|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x86.ActiveCfg = Debug|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x86.Build.0 = Debug|x86 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|x64 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|ARM.Build.0 = ReleaseStatic|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|ARM64.ActiveCfg = Release|arm64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|x64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|x86.ActiveCfg = Release|x86 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|ARM.ActiveCfg = Release|x64 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|ARM.Build.0 = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|ARM64.ActiveCfg = Release|arm64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x64.Build.0 = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x86.ActiveCfg = Release|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x86.Build.0 = Release|x86 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|x64 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|arm64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|arm64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.ReleaseStatic|x86.Build.0 = ReleaseStatic|x86 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|ARM.ActiveCfg = Release|x64 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|ARM.Build.0 = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|ARM64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|x64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|x86.ActiveCfg = Release|x86 - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|ARM.ActiveCfg = Debug|ARM - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|ARM.Build.0 = Debug|ARM {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|ARM64.Build.0 = Debug|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x64.ActiveCfg = Debug|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x64.Build.0 = Debug|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x86.ActiveCfg = Debug|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x86.Build.0 = Debug|Win32 - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|x64.ActiveCfg = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|x86.ActiveCfg = Release|Win32 - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM.ActiveCfg = Release|ARM - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM.Build.0 = Release|ARM {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM64.ActiveCfg = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM64.Build.0 = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x64.ActiveCfg = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x64.Build.0 = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x86.ActiveCfg = Release|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x86.Build.0 = Release|Win32 - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|ARM.ActiveCfg = Release|ARM - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|ARM.Build.0 = Release|ARM {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|ARM64.Build.0 = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x64.ActiveCfg = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x64.Build.0 = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x86.ActiveCfg = Release|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x86.Build.0 = Release|Win32 - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|ARM.ActiveCfg = Debug|ARM - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|ARM.Build.0 = Debug|ARM {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|ARM64.ActiveCfg = Debug|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|ARM64.Build.0 = Debug|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x64.ActiveCfg = Debug|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x64.Build.0 = Debug|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x86.ActiveCfg = Debug|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x86.Build.0 = Debug|Win32 - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|ARM - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|ARM.Build.0 = ReleaseStatic|ARM {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|x64.ActiveCfg = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|x86.ActiveCfg = Release|Win32 - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|ARM.ActiveCfg = Release|ARM - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|ARM.Build.0 = Release|ARM {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|ARM64.ActiveCfg = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|ARM64.Build.0 = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x64.ActiveCfg = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x64.Build.0 = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x86.ActiveCfg = Release|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x86.Build.0 = Release|Win32 - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|ARM.ActiveCfg = Release|ARM - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|ARM.Build.0 = Release|ARM {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|ARM64.Build.0 = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x64.ActiveCfg = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x64.Build.0 = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x86.ActiveCfg = Release|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x86.Build.0 = Release|Win32 - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|ARM.ActiveCfg = Debug|ARM - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|ARM.Build.0 = Debug|ARM {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|ARM64.ActiveCfg = Debug|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|ARM64.Build.0 = Debug|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x64.ActiveCfg = Debug|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x64.Build.0 = Debug|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x86.ActiveCfg = Debug|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x86.Build.0 = Debug|Win32 - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|ARM.Build.0 = Debug|ARM {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|x64.ActiveCfg = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|x86.ActiveCfg = Release|Win32 - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|ARM.ActiveCfg = Release|ARM - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|ARM.Build.0 = Release|ARM {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|ARM64.ActiveCfg = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|ARM64.Build.0 = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x64.ActiveCfg = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x64.Build.0 = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x86.ActiveCfg = Release|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x86.Build.0 = Release|Win32 - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|ARM.ActiveCfg = Release|ARM - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|ARM.Build.0 = Release|ARM {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|ARM64.Build.0 = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x64.ActiveCfg = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x64.Build.0 = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x86.ActiveCfg = Release|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x86.Build.0 = Release|Win32 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|ARM.ActiveCfg = Debug|ARM - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|ARM.Build.0 = Debug|ARM {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|ARM64.ActiveCfg = Debug|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|ARM64.Build.0 = Debug|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x64.ActiveCfg = Debug|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x64.Build.0 = Debug|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x86.ActiveCfg = Debug|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x86.Build.0 = Debug|Win32 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|ARM.Build.0 = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|ARM64.ActiveCfg = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x64.Build.0 = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x86.Build.0 = Fuzzing|Win32 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|ARM.ActiveCfg = Release|ARM - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|ARM.Build.0 = Release|ARM {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|ARM64.ActiveCfg = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|ARM64.Build.0 = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x64.ActiveCfg = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x64.Build.0 = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x86.ActiveCfg = Release|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x86.Build.0 = Release|Win32 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|ARM.ActiveCfg = Release|ARM - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|ARM.Build.0 = Release|ARM {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|ARM64.Build.0 = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x64.ActiveCfg = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x64.Build.0 = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x86.ActiveCfg = Release|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x86.Build.0 = Release|Win32 - {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|ARM.ActiveCfg = Debug|ARM - {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|ARM.Build.0 = Debug|ARM {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|ARM64.Build.0 = Debug|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x64.ActiveCfg = Debug|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x64.Build.0 = Debug|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x86.ActiveCfg = Debug|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x86.Build.0 = Debug|Win32 - {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|ARM.Build.0 = Debug|ARM {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|x64.ActiveCfg = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|x86.ActiveCfg = Release|Win32 - {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|ARM.ActiveCfg = Release|ARM - {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|ARM.Build.0 = Release|ARM {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|ARM64.ActiveCfg = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|ARM64.Build.0 = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x64.ActiveCfg = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x64.Build.0 = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x86.ActiveCfg = Release|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x86.Build.0 = Release|Win32 - {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|ARM.ActiveCfg = Release|ARM - {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|ARM.Build.0 = Release|ARM {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|ARM64.Build.0 = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x64.ActiveCfg = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x64.Build.0 = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x86.ActiveCfg = Release|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x86.Build.0 = Release|Win32 - {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|ARM.ActiveCfg = Debug|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|ARM.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|ARM64.ActiveCfg = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|ARM64.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x64.ActiveCfg = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x64.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x86.ActiveCfg = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x86.Build.0 = Debug|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|x64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|x86.ActiveCfg = Release|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|ARM.ActiveCfg = Release|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|ARM.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|ARM64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|ARM64.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x64.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x86.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x86.Build.0 = Release|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|ARM.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|ARM64.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x64.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x86.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x86.Build.0 = Release|Any CPU - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|ARM.ActiveCfg = Debug|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|ARM.Build.0 = Debug|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|ARM64.ActiveCfg = Debug|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|ARM64.Build.0 = Debug|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x64.ActiveCfg = Debug|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x64.Build.0 = Debug|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x86.ActiveCfg = Debug|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x86.Build.0 = Debug|x86 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|ARM.ActiveCfg = Release|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|ARM.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|ARM64.ActiveCfg = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|x64.ActiveCfg = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|x86.ActiveCfg = Release|x86 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|ARM.ActiveCfg = Release|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|ARM.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|ARM64.ActiveCfg = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|ARM64.Build.0 = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x64.ActiveCfg = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x64.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x86.ActiveCfg = Release|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x86.Build.0 = Release|x86 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.ReleaseStatic|ARM.ActiveCfg = Release|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.ReleaseStatic|ARM.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.ReleaseStatic|ARM64.ActiveCfg = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.ReleaseStatic|x64.ActiveCfg = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.ReleaseStatic|x86.ActiveCfg = Release|x86 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|ARM.ActiveCfg = Release|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|ARM.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|ARM64.ActiveCfg = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|x64.ActiveCfg = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|x86.ActiveCfg = Release|x86 - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM.ActiveCfg = Debug|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM64.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM64.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x64.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x64.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x86.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x86.Build.0 = Debug|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|x64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|x86.ActiveCfg = Release|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|ARM.ActiveCfg = Release|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|ARM.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|ARM64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|ARM64.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x64.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x86.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x86.Build.0 = Release|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|ARM.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|ARM64.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x64.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x86.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x86.Build.0 = Release|Any CPU - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|ARM.ActiveCfg = Debug|arm - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|ARM.Build.0 = Debug|arm {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|ARM64.ActiveCfg = Debug|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|ARM64.Build.0 = Debug|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x64.ActiveCfg = Debug|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x64.Build.0 = Debug|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x86.ActiveCfg = Debug|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x86.Build.0 = Debug|x86 - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|ARM.ActiveCfg = Debug|arm - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|ARM.Build.0 = Debug|arm {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|x64.ActiveCfg = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|x86.ActiveCfg = Release|x86 - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|ARM.ActiveCfg = Release|x64 - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|ARM.Build.0 = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|ARM64.Build.0 = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x64.ActiveCfg = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x64.Build.0 = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x86.ActiveCfg = Release|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x86.Build.0 = Release|x86 - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.ReleaseStatic|ARM.ActiveCfg = Debug|arm - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.ReleaseStatic|ARM.Build.0 = Debug|arm {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.ReleaseStatic|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.ReleaseStatic|x64.ActiveCfg = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.ReleaseStatic|x86.ActiveCfg = Release|x86 - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|ARM.ActiveCfg = Debug|arm - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|ARM.Build.0 = Debug|arm {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|ARM64.Build.0 = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x64.ActiveCfg = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x64.Build.0 = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x86.ActiveCfg = Release|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x86.Build.0 = Release|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM.Build.0 = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM64.ActiveCfg = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM64.Build.0 = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x64.ActiveCfg = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x64.Build.0 = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x86.ActiveCfg = Debug|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x86.Build.0 = Debug|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x86.ActiveCfg = Release|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM.ActiveCfg = Release|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM.Build.0 = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM64.Build.0 = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x64.Build.0 = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x86.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x86.Build.0 = Release|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|ARM.Build.0 = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x64.ActiveCfg = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x86.ActiveCfg = Release|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|ARM.ActiveCfg = Debug|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|ARM.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|ARM64.ActiveCfg = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|ARM64.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x64.ActiveCfg = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x64.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x86.ActiveCfg = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x86.Build.0 = Debug|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|x64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|x86.ActiveCfg = Release|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|ARM.ActiveCfg = Release|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|ARM.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|ARM64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|ARM64.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x64.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x86.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x86.Build.0 = Release|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|ARM.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|x64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|x86.ActiveCfg = Release|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM.ActiveCfg = Debug|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM64.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM64.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x64.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x64.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x86.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x86.Build.0 = Debug|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|x64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|x86.ActiveCfg = Release|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|ARM.ActiveCfg = Release|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|ARM.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|ARM64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|ARM64.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x64.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x86.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x86.Build.0 = Release|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|ARM.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|x64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|x86.ActiveCfg = Release|Any CPU - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM.ActiveCfg = Debug|ARM - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM.Build.0 = Debug|ARM {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM64.Build.0 = Debug|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x64.ActiveCfg = Debug|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x64.Build.0 = Debug|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x86.ActiveCfg = Debug|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x86.Build.0 = Debug|Win32 - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|ARM.Build.0 = Debug|ARM {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|x64.ActiveCfg = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|x86.ActiveCfg = Release|Win32 - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|ARM.ActiveCfg = Release|ARM - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|ARM.Build.0 = Release|ARM {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|ARM64.ActiveCfg = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|ARM64.Build.0 = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x64.ActiveCfg = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x64.Build.0 = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x86.ActiveCfg = Release|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x86.Build.0 = Release|Win32 - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|ARM.ActiveCfg = Release|ARM - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|ARM.Build.0 = Release|ARM {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|ARM64.Build.0 = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x64.ActiveCfg = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x64.Build.0 = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x86.ActiveCfg = Release|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x86.Build.0 = Release|Win32 - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|ARM.ActiveCfg = Debug|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|ARM.Build.0 = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|ARM64.ActiveCfg = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|ARM64.Build.0 = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x64.ActiveCfg = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x64.Build.0 = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x86.ActiveCfg = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x86.Build.0 = Debug|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|ARM.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|ARM.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|x64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|x86.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|ARM.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|ARM.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|ARM64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|ARM64.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x64.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x86.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x86.Build.0 = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.ReleaseStatic|ARM.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.ReleaseStatic|ARM.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.ReleaseStatic|ARM64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.ReleaseStatic|x64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.ReleaseStatic|x86.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|ARM.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|x64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|x86.ActiveCfg = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|ARM.ActiveCfg = Debug|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|ARM.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|ARM64.ActiveCfg = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|ARM64.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x64.ActiveCfg = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x64.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x86.ActiveCfg = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x86.Build.0 = Debug|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|x64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|x86.ActiveCfg = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|ARM.ActiveCfg = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|ARM.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|ARM64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|ARM64.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x64.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x86.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x86.Build.0 = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|ARM.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|x64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|x86.ActiveCfg = Release|Any CPU - {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|ARM.ActiveCfg = Debug|ARM - {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|ARM.Build.0 = Debug|ARM {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|ARM64.Build.0 = Debug|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x64.ActiveCfg = Debug|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x64.Build.0 = Debug|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x86.ActiveCfg = Debug|Win32 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Debug|x86.Build.0 = Debug|Win32 - {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|ARM.ActiveCfg = Debug|ARM - {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|ARM.Build.0 = Debug|ARM {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|x64.ActiveCfg = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Fuzzing|x86.ActiveCfg = Release|Win32 - {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|ARM.ActiveCfg = Release|ARM - {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|ARM.Build.0 = Release|ARM {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|ARM64.ActiveCfg = Release|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|ARM64.Build.0 = Release|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x64.ActiveCfg = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x64.Build.0 = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x86.ActiveCfg = Release|Win32 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.Release|x86.Build.0 = Release|Win32 - {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|ARM.ActiveCfg = Release|ARM - {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|ARM.Build.0 = Release|ARM {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|ARM64.Build.0 = Release|ARM64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x64.ActiveCfg = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x64.Build.0 = Release|x64 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x86.ActiveCfg = Release|Win32 {1B9077B3-8923-4ECD-8FC9-B3190FCBE4D4}.TestRelease|x86.Build.0 = Release|Win32 - {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|ARM.ActiveCfg = Debug|ARM - {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|ARM.Build.0 = Debug|ARM {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|ARM64.ActiveCfg = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|ARM64.Build.0 = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x64.ActiveCfg = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x64.Build.0 = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x86.ActiveCfg = Debug|Win32 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Debug|x86.Build.0 = Debug|Win32 - {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 - {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|ARM.Build.0 = Fuzzing|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|ARM64.ActiveCfg = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|ARM64.Build.0 = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x64.ActiveCfg = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x64.Build.0 = Debug|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x86.ActiveCfg = Debug|Win32 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Fuzzing|x86.Build.0 = Debug|Win32 - {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|ARM.ActiveCfg = Release|ARM - {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|ARM.Build.0 = Release|ARM {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|ARM64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|ARM64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x86.ActiveCfg = Release|Win32 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.Release|x86.Build.0 = Release|Win32 - {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|ARM - {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|ARM {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|ARM64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|ARM64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|x64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|x64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|x86.ActiveCfg = Release|Win32 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.ReleaseStatic|x86.Build.0 = Release|Win32 - {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|ARM.ActiveCfg = Release|ARM - {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|ARM.Build.0 = Release|ARM {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|ARM64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|ARM64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x64.ActiveCfg = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x64.Build.0 = Release|x64 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x86.ActiveCfg = Release|Win32 {98920AB6-27B0-4C0F-B336-FA49DE57A1BA}.TestRelease|x86.Build.0 = Release|Win32 - {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|ARM.ActiveCfg = Debug|x64 - {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|ARM.Build.0 = Debug|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|ARM64.Build.0 = Debug|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|x64.ActiveCfg = Debug|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|x64.Build.0 = Debug|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|x86.ActiveCfg = Debug|Win32 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Debug|x86.Build.0 = Debug|Win32 - {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|x64 - {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Fuzzing|ARM.Build.0 = ReleaseStatic|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Fuzzing|x64.ActiveCfg = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Fuzzing|x86.ActiveCfg = Release|Win32 - {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|ARM.ActiveCfg = Release|x64 - {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|ARM.Build.0 = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|ARM64.ActiveCfg = Release|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|ARM64.Build.0 = Release|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|x64.ActiveCfg = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|x64.Build.0 = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|x86.ActiveCfg = Release|Win32 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.Release|x86.Build.0 = Release|Win32 - {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|x64 - {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|ARM.ActiveCfg = Release|x64 - {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|ARM.Build.0 = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|ARM64.Build.0 = Release|ARM64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|x64.ActiveCfg = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|x64.Build.0 = Release|x64 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|x86.ActiveCfg = Release|Win32 {0BA531C8-CF0C-405B-8221-0FE51BA529D1}.TestRelease|x86.Build.0 = Release|Win32 - {9406322E-6272-487E-902A-9953889719EA}.Debug|ARM.ActiveCfg = Debug|Any CPU - {9406322E-6272-487E-902A-9953889719EA}.Debug|ARM.Build.0 = Debug|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Debug|ARM64.ActiveCfg = Debug|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Debug|ARM64.Build.0 = Debug|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Debug|x64.ActiveCfg = Debug|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Debug|x64.Build.0 = Debug|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Debug|x86.ActiveCfg = Debug|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Debug|x86.Build.0 = Debug|Any CPU - {9406322E-6272-487E-902A-9953889719EA}.Fuzzing|ARM.ActiveCfg = ReleaseStatic|Any CPU - {9406322E-6272-487E-902A-9953889719EA}.Fuzzing|ARM.Build.0 = ReleaseStatic|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Fuzzing|x64.ActiveCfg = Debug|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Fuzzing|x86.ActiveCfg = Debug|Any CPU - {9406322E-6272-487E-902A-9953889719EA}.Release|ARM.ActiveCfg = Release|Any CPU - {9406322E-6272-487E-902A-9953889719EA}.Release|ARM.Build.0 = Release|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Release|ARM64.ActiveCfg = Release|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Release|ARM64.Build.0 = Release|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Release|x64.ActiveCfg = Release|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Release|x64.Build.0 = Release|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Release|x86.ActiveCfg = Release|Any CPU {9406322E-6272-487E-902A-9953889719EA}.Release|x86.Build.0 = Release|Any CPU - {9406322E-6272-487E-902A-9953889719EA}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Any CPU - {9406322E-6272-487E-902A-9953889719EA}.ReleaseStatic|ARM.Build.0 = ReleaseStatic|Any CPU {9406322E-6272-487E-902A-9953889719EA}.ReleaseStatic|ARM64.ActiveCfg = ReleaseStatic|Any CPU {9406322E-6272-487E-902A-9953889719EA}.ReleaseStatic|ARM64.Build.0 = ReleaseStatic|Any CPU {9406322E-6272-487E-902A-9953889719EA}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|Any CPU {9406322E-6272-487E-902A-9953889719EA}.ReleaseStatic|x64.Build.0 = ReleaseStatic|Any CPU {9406322E-6272-487E-902A-9953889719EA}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Any CPU {9406322E-6272-487E-902A-9953889719EA}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Any CPU - {9406322E-6272-487E-902A-9953889719EA}.TestRelease|ARM.ActiveCfg = Release|Any CPU - {9406322E-6272-487E-902A-9953889719EA}.TestRelease|ARM.Build.0 = Release|Any CPU {9406322E-6272-487E-902A-9953889719EA}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {9406322E-6272-487E-902A-9953889719EA}.TestRelease|x64.ActiveCfg = Release|Any CPU {9406322E-6272-487E-902A-9953889719EA}.TestRelease|x86.ActiveCfg = Release|Any CPU diff --git a/src/Internal/UriValidation/UriValidation.cpp b/src/Internal/UriValidation/UriValidation.cpp index 8599606f88..bc68af9656 100644 --- a/src/Internal/UriValidation/UriValidation.cpp +++ b/src/Internal/UriValidation/UriValidation.cpp @@ -7,6 +7,7 @@ namespace AppInstaller::UriValidation { namespace { +#ifndef AICLI_DISABLE_TEST_HOOKS bool EndsWith(const std::string& value, const std::string& ending) { if (ending.size() > value.size()) @@ -16,6 +17,7 @@ namespace AppInstaller::UriValidation return std::equal(ending.rbegin(), ending.rend(), value.rbegin()); } +#endif } UriValidationResult ValidateUri(const std::string& uri) From cd83bfed115b44711c7cad1836c6173c241f1c73 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Thu, 30 Jan 2025 15:45:12 -0800 Subject: [PATCH 30/34] Addressing comments --- .../AppInstallerCLICore.vcxproj | 4 +- .../Workflows/DownloadFlow.cpp | 9 +- .../Workflows/UriValidationFlow.cpp | 245 +++++++++--------- 3 files changed, 125 insertions(+), 133 deletions(-) diff --git a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj index ac69aa2e24..81e8a823da 100644 --- a/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj +++ b/src/AppInstallerCLICore/AppInstallerCLICore.vcxproj @@ -390,7 +390,6 @@ - @@ -430,6 +429,7 @@ + @@ -456,7 +456,6 @@ - @@ -513,6 +512,7 @@ + diff --git a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp index 0d0886907f..f84179983d 100644 --- a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp @@ -330,14 +330,7 @@ namespace AppInstaller::CLI::Workflow // separately before, e.g. on COM scenarios. context << ReportExecutionStage(ExecutionStage::Download) << - CheckForExistingInstaller; - - if (context.IsTerminated()) - { - return; - } - - context << + CheckForExistingInstaller << ExecuteUriValidation(UriValidationSource::PackageCatalogSource) << DownloadInstallerInternal; } diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp index 8310357bc5..90eda380e0 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp @@ -8,166 +8,165 @@ namespace AppInstaller::CLI::Workflow { - // Check if smart screen is required for a given zone. - bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone) + namespace { - auto isSmartScreenEnabled = Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::SmartScreenCheck); - AICLI_LOG(Core, Info, << "SmartScreen validation is " << (isSmartScreenEnabled ? "enabled" : "disabled")); - - auto isSecurityZoneCheckRequired = zone == Settings::SecurityZoneOptions::Internet || zone == Settings::SecurityZoneOptions::UntrustedSites; - AICLI_LOG(Core, Info, << "Security zone check is " << (isSecurityZoneCheckRequired ? "required" : "not required")); + // Check if smart screen is required for a given zone. + bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone) + { + auto isSmartScreenEnabled = Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::SmartScreenCheck); + AICLI_LOG(Core, Info, << "SmartScreen validation is " << (isSmartScreenEnabled ? "enabled" : "disabled")); - return isSmartScreenEnabled && isSecurityZoneCheckRequired; - } + auto isSecurityZoneCheckRequired = zone == Settings::SecurityZoneOptions::Internet || zone == Settings::SecurityZoneOptions::UntrustedSites; + AICLI_LOG(Core, Info, << "Security zone check is " << (isSecurityZoneCheckRequired ? "required" : "not required")); - // Check if the given uri is blocked by smart screen. - bool IsBlockedBySmartScreen(Execution::Context& context, const std::string& uri) - { - auto response = AppInstaller::UriValidation::ValidateUri(uri); - switch (response.Decision()) - { - case AppInstaller::UriValidation::UriValidationDecision::Block: - AICLI_LOG(Core, Error, << "URI '" << uri << "' was blocked by smart screen. Feedback URL: " << response.Feedback()); - context.Reporter.Error() << Resource::String::UriBlockedBySmartScreen << std::endl; - return true; - case AppInstaller::UriValidation::UriValidationDecision::Allow: - default: - return false; + return isSmartScreenEnabled && isSecurityZoneCheckRequired; } - } - // Get Uri zone for a given uri or file path. - HRESULT GetUriZone(const std::string& uri, Settings::SecurityZoneOptions* zone) - { - if (!zone) + // Check if the given uri is blocked by smart screen. + bool IsBlockedBySmartScreen(Execution::Context& context, const std::string& uri) { - return E_INVALIDARG; + auto response = AppInstaller::UriValidation::ValidateUri(uri); + switch (response.Decision()) + { + case AppInstaller::UriValidation::UriValidationDecision::Block: + AICLI_LOG(Core, Error, << "URI '" << uri << "' was blocked by smart screen. Feedback URL: " << response.Feedback()); + context.Reporter.Error() << Resource::String::UriBlockedBySmartScreen << std::endl; + return true; + case AppInstaller::UriValidation::UriValidationDecision::Allow: + default: + return false; + } } - #ifndef AICLI_DISABLE_TEST_HOOKS - // For testing purposes, allow the zone to be set via the uri - std::smatch match; - if (std::regex_search(uri, match, std::regex("/zone(\\d+)/"))) + // Get Uri zone for a given uri or file path. + HRESULT GetUriZone(const std::string& uri, Settings::SecurityZoneOptions& zone) { - std::string number = match[1].str(); - *zone = static_cast(std::stoul(number)); - return S_OK; - } - #endif +#ifndef AICLI_DISABLE_TEST_HOOKS + // For testing purposes, allow the zone to be set via the uri + std::smatch match; + if (std::regex_search(uri, match, std::regex("/zone(\\d+)/"))) + { + std::string number = match[1].str(); + zone = static_cast(std::stoul(number)); + return S_OK; + } +#endif - DWORD dwZone; - auto pInternetSecurityManager = winrt::create_instance(CLSID_InternetSecurityManager, CLSCTX_ALL); - auto mapResult = pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); + DWORD dwZone; + auto pInternetSecurityManager = winrt::create_instance(CLSID_InternetSecurityManager, CLSCTX_ALL); + auto mapResult = pInternetSecurityManager->MapUrlToZone(AppInstaller::Utility::ConvertToUTF16(uri).c_str(), &dwZone, 0); - // Ensure MapUrlToZone was successful and the zone value is valid - if (FAILED(mapResult)) - { - return mapResult; - } + // Ensure MapUrlToZone was successful and the zone value is valid + if (FAILED(mapResult)) + { + return mapResult; + } - // Treat all zones higher than untrusted as untrusted - if (dwZone > static_cast(Settings::SecurityZoneOptions::UntrustedSites)) - { - *zone = Settings::SecurityZoneOptions::UntrustedSites; + // Treat all zones higher than untrusted as untrusted + if (dwZone > static_cast(Settings::SecurityZoneOptions::UntrustedSites)) + { + zone = Settings::SecurityZoneOptions::UntrustedSites; + } + else + { + zone = static_cast(dwZone); + } + + return S_OK; } - else + + // Validate group policy for a given zone. + bool IsBlockedByGroupPolicy(Execution::Context& context, const Settings::SecurityZoneOptions zone) { - *zone = static_cast(dwZone); - } + if (!Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::AllowedSecurityZones)) + { + AICLI_LOG(Core, Info, << "WindowsPackageManagerAllowedSecurityZones policy is disabled"); + return false; + } - return S_OK; - } + auto allowedSecurityZones = Settings::GroupPolicies().GetValue(); + if (!allowedSecurityZones.has_value()) + { + AICLI_LOG(Core, Warning, << "WindowsPackageManagerAllowedSecurityZones policy is not set"); + return false; + } - // Validate group policy for a given zone. - bool IsBlockedByGroupPolicy(Execution::Context& context, const Settings::SecurityZoneOptions zone) - { - if (!Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::AllowedSecurityZones)) - { - AICLI_LOG(Core, Info, << "WindowsPackageManagerAllowedSecurityZones policy is disabled"); - return false; - } + auto zoneIterator = allowedSecurityZones->find(zone); + if (zoneIterator == allowedSecurityZones->end()) + { + AICLI_LOG(Core, Warning, << "Security zone " << zone << " was not found in the group policy WindowsPackageManagerAllowedSecurityZones"); + return false; + } - auto allowedSecurityZones = Settings::GroupPolicies().GetValue(); - if (!allowedSecurityZones.has_value()) - { - AICLI_LOG(Core, Warning, << "WindowsPackageManagerAllowedSecurityZones policy is not set"); - return false; - } + auto isAllowed = zoneIterator->second; + if (!isAllowed) + { + AICLI_LOG(Core, Error, << "Security zone " << zone << " is blocked by group policy"); + context.Reporter.Error() << Resource::String::UriSecurityZoneBlockedByPolicy << std::endl; + return true; + } - if (allowedSecurityZones->find(zone) == allowedSecurityZones->end()) - { - AICLI_LOG(Core, Warning, << "Security zone " << zone << " was not found in the group policy WindowsPackageManagerAllowedSecurityZones"); + AICLI_LOG(Core, Info, << "Configuration is configured in zone " << zone << " with value " << (isAllowed ? "allowed" : "blocked")); return false; } - auto isAllowed = allowedSecurityZones->at(zone); - if(!isAllowed) + // Evaluate the given uri for group policy and smart screen. + HRESULT EvaluateUri(Execution::Context& context, const std::string& uri) { - AICLI_LOG(Core, Error, << "Security zone " << zone << " is blocked by group policy"); - context.Reporter.Error() << Resource::String::UriSecurityZoneBlockedByPolicy << std::endl; - return true; - } + AICLI_LOG(Core, Info, << "Validating URI: " << uri); - AICLI_LOG(Core, Info, << "Configuration is configured in zone " << zone << " with value " << (isAllowed ? "allowed" : "blocked")); - return false; - } - - // Evaluate the given uri for group policy and smart screen. - HRESULT EvaluateUri(Execution::Context& context, const std::string& uri) - { - AICLI_LOG(Core, Info, << "Validating URI: " << uri); + Settings::SecurityZoneOptions zone; + auto zoneResult = GetUriZone(uri, zone); - Settings::SecurityZoneOptions zone; - auto zoneResult = GetUriZone(uri, &zone); - - if (SUCCEEDED(zoneResult)) - { - if(IsBlockedByGroupPolicy(context, zone)) + if (SUCCEEDED(zoneResult)) { - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; + if (IsBlockedByGroupPolicy(context, zone)) + { + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; + } + + if (IsSmartScreenRequired(zone) && IsBlockedBySmartScreen(context, uri)) + { + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; + } } - - if (IsSmartScreenRequired(zone) && IsBlockedBySmartScreen(context, uri)) + else { - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; + AICLI_LOG(Core, Warning, << "Failed to get zone for URI: " << uri << " with error: " << zoneResult << ". Skipping validation."); } - } - else - { - AICLI_LOG(Core, Warning, << "Failed to get zone for URI: " << uri << " with error: " << zoneResult << ". Skipping validation."); - } - return S_OK; - } + return S_OK; + } - // Evaluate the configuration uri for group policy and smart screen. - HRESULT EvaluateConfigurationUri(Execution::Context& context) - { - if (context.Args.Contains(Execution::Args::Type::ConfigurationFile)) + // Evaluate the configuration uri for group policy and smart screen. + HRESULT EvaluateConfigurationUri(Execution::Context& context) { - std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; - return EvaluateUri(context, argPath); - } + if (context.Args.Contains(Execution::Args::Type::ConfigurationFile)) + { + std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; + return EvaluateUri(context, argPath); + } - return S_OK; - } + return S_OK; + } - // Evaluate the download uri for group policy and smart screen. - HRESULT EvaluateDownloadUri(Execution::Context& context) - { - if (context.Contains(Execution::Data::PackageVersion)) + // Evaluate the download uri for group policy and smart screen. + HRESULT EvaluateDownloadUri(Execution::Context& context) { - const auto packageVersion = context.Get(); - const auto source = packageVersion->GetSource(); - const auto isTrusted = WI_IsFlagSet(source.GetDetails().TrustLevel, Repository::SourceTrustLevel::Trusted); - if (!isTrusted && context.Contains(Execution::Data::Installer)) + if (context.Contains(Execution::Data::PackageVersion)) { - auto installer = context.Get(); - return EvaluateUri(context, installer->Url); + const auto packageVersion = context.Get(); + const auto source = packageVersion->GetSource(); + const auto isTrusted = WI_IsFlagSet(source.GetDetails().TrustLevel, Repository::SourceTrustLevel::Trusted); + if (!isTrusted && context.Contains(Execution::Data::Installer)) + { + auto installer = context.Get(); + return EvaluateUri(context, installer->Url); + } } - } - return S_OK; + return S_OK; + } } // Execute the smart screen flow. From c49b9d2801a7ba9d4c149b143892ebf027b5252f Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:05:49 -0800 Subject: [PATCH 31/34] Update group policy behavior --- .../Workflows/UriValidationFlow.cpp | 184 +++++++++++++----- .../Public/winget/GroupPolicy.h | 2 +- 2 files changed, 138 insertions(+), 48 deletions(-) diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp index 90eda380e0..24a7be7367 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp @@ -10,26 +10,68 @@ namespace AppInstaller::CLI::Workflow { namespace { + // Convert the security zone to string. + std::string ToString(Settings::SecurityZoneOptions zone) + { + switch (zone) + { + case Settings::SecurityZoneOptions::LocalMachine: + return "LocalMachine"; + case Settings::SecurityZoneOptions::Intranet: + return "Intranet"; + case Settings::SecurityZoneOptions::TrustedSites: + return "TrustedSites"; + case Settings::SecurityZoneOptions::Internet: + return "Internet"; + case Settings::SecurityZoneOptions::UntrustedSites: + return "UntrustedSites"; + default: + return "Unknown"; + } + } + // Check if smart screen is required for a given zone. - bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone) + bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone, bool isSourceTrusted) { - auto isSmartScreenEnabled = Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::SmartScreenCheck); - AICLI_LOG(Core, Info, << "SmartScreen validation is " << (isSmartScreenEnabled ? "enabled" : "disabled")); + if (zone != Settings::SecurityZoneOptions::Internet && zone != Settings::SecurityZoneOptions::UntrustedSites) + { + AICLI_LOG(Core, Info, << "Skipping smart screen validation for zone " << ToString(zone)); + return false; + } + + auto ssPolicyState = Settings::GroupPolicies().GetState(Settings::TogglePolicy::Policy::SmartScreenCheck); + if (ssPolicyState == Settings::PolicyState::Disabled) + { + AICLI_LOG(Core, Info, << "Smart screen validation is disabled by group policy"); + return false; + } + + if (ssPolicyState == Settings::PolicyState::Enabled) + { + AICLI_LOG(Core, Info, << "Smart screen validation is enabled by group policy"); + return true; + } + + AICLI_LOG(Core, Info, << "Smart screen validation is not configured by group policy"); - auto isSecurityZoneCheckRequired = zone == Settings::SecurityZoneOptions::Internet || zone == Settings::SecurityZoneOptions::UntrustedSites; - AICLI_LOG(Core, Info, << "Security zone check is " << (isSecurityZoneCheckRequired ? "required" : "not required")); + if (isSourceTrusted) + { + AICLI_LOG(Core, Info, << "Skipping smart screen validation for trusted source"); + return false; + } - return isSmartScreenEnabled && isSecurityZoneCheckRequired; + AICLI_LOG(Core, Info, << "Smart screen validation is required for untrusted source"); + return true; } // Check if the given uri is blocked by smart screen. - bool IsBlockedBySmartScreen(Execution::Context& context, const std::string& uri) + bool IsUriBlockedBySmartScreen(Execution::Context& context, const std::string& uri) { auto response = AppInstaller::UriValidation::ValidateUri(uri); switch (response.Decision()) { case AppInstaller::UriValidation::UriValidationDecision::Block: - AICLI_LOG(Core, Error, << "URI '" << uri << "' was blocked by smart screen. Feedback URL: " << response.Feedback()); + AICLI_LOG(Core, Verbose, << "URI '" << uri << "' was blocked by smart screen. Feedback URL: " << response.Feedback()); context.Reporter.Error() << Resource::String::UriBlockedBySmartScreen << std::endl; return true; case AppInstaller::UriValidation::UriValidationDecision::Allow: @@ -75,8 +117,43 @@ namespace AppInstaller::CLI::Workflow return S_OK; } + HRESULT GetIsSourceTrusted(const Execution::Context& context, bool& isTrusted) + { + if (context.Contains(Execution::Data::PackageVersion)) + { + const auto packageVersion = context.Get(); + const auto source = packageVersion->GetSource(); + isTrusted = WI_IsFlagSet(source.GetDetails().TrustLevel, Repository::SourceTrustLevel::Trusted); + return S_OK; + } + + return E_FAIL; + } + + HRESULT GetInstallerUrl(const Execution::Context& context, std::string& installerUrl) + { + if (context.Contains(Execution::Data::Installer)) + { + installerUrl = context.Get()->Url; + return S_OK; + } + + return E_FAIL; + } + + HRESULT GetConfigurationUri(const Execution::Context& context, std::string& configurationUri) + { + if (context.Args.Contains(Execution::Args::Type::ConfigurationFile)) + { + configurationUri = context.Args.GetArg(Execution::Args::Type::ConfigurationFile); + return S_OK; + } + + return E_FAIL; + } + // Validate group policy for a given zone. - bool IsBlockedByGroupPolicy(Execution::Context& context, const Settings::SecurityZoneOptions zone) + bool IsZoneBlockedByGroupPolicy(Execution::Context& context, const Settings::SecurityZoneOptions& zone) { if (!Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::AllowedSecurityZones)) { @@ -106,65 +183,79 @@ namespace AppInstaller::CLI::Workflow return true; } - AICLI_LOG(Core, Info, << "Configuration is configured in zone " << zone << " with value " << (isAllowed ? "allowed" : "blocked")); + AICLI_LOG(Core, Info, << "Configuration is disabled in zone " << zone); return false; } - // Evaluate the given uri for group policy and smart screen. - HRESULT EvaluateUri(Execution::Context& context, const std::string& uri) + // Evaluate the configuration uri for group policy and smart screen. + HRESULT EvaluateConfigurationUri(Execution::Context& context) { - AICLI_LOG(Core, Info, << "Validating URI: " << uri); - - Settings::SecurityZoneOptions zone; - auto zoneResult = GetUriZone(uri, zone); + std::string configurationUri; + if (FAILED(GetConfigurationUri(context, configurationUri))) + { + AICLI_LOG(Core, Warning, << "Configuration URI is not available. Skipping validation."); + return S_OK; + } - if (SUCCEEDED(zoneResult)) + Settings::SecurityZoneOptions configurationUriZone; + if (FAILED(GetUriZone(configurationUri, configurationUriZone))) { - if (IsBlockedByGroupPolicy(context, zone)) - { - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; - } + AICLI_LOG(Core, Warning, << "Failed to get zone for configuration URI: " << configurationUri << ". Skipping validation."); + return S_OK; + } - if (IsSmartScreenRequired(zone) && IsBlockedBySmartScreen(context, uri)) - { - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; - } + if (IsZoneBlockedByGroupPolicy(context, configurationUriZone)) + { + AICLI_LOG(Core, Error, << "Configuration URI's zone is blocked by group policy: " << configurationUri << " (" << ToString(configurationUriZone) << ")"); + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; } - else + + if (IsSmartScreenRequired(configurationUriZone, false) && IsUriBlockedBySmartScreen(context, configurationUri)) { - AICLI_LOG(Core, Warning, << "Failed to get zone for URI: " << uri << " with error: " << zoneResult << ". Skipping validation."); + AICLI_LOG(Core, Error, << "Configuration URI was blocked by smart screen: " << configurationUri); + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; } + AICLI_LOG(Core, Info, << "Configuration URI is validated: " << configurationUri); return S_OK; } - // Evaluate the configuration uri for group policy and smart screen. - HRESULT EvaluateConfigurationUri(Execution::Context& context) + HRESULT EvaluateDownloadUri(Execution::Context& context) { - if (context.Args.Contains(Execution::Args::Type::ConfigurationFile)) + std::string installerUrl; + if (FAILED(GetInstallerUrl(context, installerUrl))) { - std::string argPath{ context.Args.GetArg(Execution::Args::Type::ConfigurationFile) }; - return EvaluateUri(context, argPath); + AICLI_LOG(Core, Warning, << "Installer URL is not available. Skipping validation."); + return S_OK; } - return S_OK; - } + Settings::SecurityZoneOptions installerUrlZone; + if (FAILED(GetUriZone(installerUrl, installerUrlZone))) + { + AICLI_LOG(Core, Warning, << "Failed to get zone for installer URL: " << installerUrl << ". Skipping validation."); + return S_OK; + } - // Evaluate the download uri for group policy and smart screen. - HRESULT EvaluateDownloadUri(Execution::Context& context) - { - if (context.Contains(Execution::Data::PackageVersion)) + if (IsZoneBlockedByGroupPolicy(context, installerUrlZone)) { - const auto packageVersion = context.Get(); - const auto source = packageVersion->GetSource(); - const auto isTrusted = WI_IsFlagSet(source.GetDetails().TrustLevel, Repository::SourceTrustLevel::Trusted); - if (!isTrusted && context.Contains(Execution::Data::Installer)) - { - auto installer = context.Get(); - return EvaluateUri(context, installer->Url); - } + AICLI_LOG(Core, Error, << "Installer URL's zone is blocked by group policy: " << installerUrl << " (" << ToString(installerUrlZone) << ")"); + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; + } + + bool isSourceTrusted; + if (FAILED(GetIsSourceTrusted(context, isSourceTrusted))) + { + AICLI_LOG(Core, Warning, << "Source trust level is not available. Skipping smart screen validation."); + return S_OK; } + if (IsSmartScreenRequired(installerUrlZone, isSourceTrusted) && IsUriBlockedBySmartScreen(context, installerUrl)) + { + AICLI_LOG(Core, Error, << "Installer URL was blocked by smart screen: " << installerUrl); + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; + } + + AICLI_LOG(Core, Info, << "Installer URL is validated: " << installerUrl); return S_OK; } } @@ -179,7 +270,6 @@ namespace AppInstaller::CLI::Workflow { AICLI_TERMINATE_CONTEXT(uriValidation); } - } else { diff --git a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h index d91bab156a..506d688519 100644 --- a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h +++ b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h @@ -27,7 +27,7 @@ namespace AppInstaller::Settings Max, }; - // Enum for the configurable security zones + // Enum for the security zones enum class SecurityZoneOptions : DWORD { LocalMachine = 0, From 205c582fbb6a857deaa76ae8b6f08e84f77628ae Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Thu, 6 Feb 2025 13:22:37 -0800 Subject: [PATCH 32/34] Added admin setting --- .../settings/settings.export.schema.0.1.json | 5 +++ .../Workflows/UriValidationFlow.cpp | 40 +++++++++++++------ src/AppInstallerCommonCore/AdminSettings.cpp | 17 ++++++++ .../Public/winget/AdminSettings.h | 1 + 4 files changed, 51 insertions(+), 12 deletions(-) diff --git a/schemas/JSON/settings/settings.export.schema.0.1.json b/schemas/JSON/settings/settings.export.schema.0.1.json index f8809255f5..5c3ffc7f9c 100644 --- a/schemas/JSON/settings/settings.export.schema.0.1.json +++ b/schemas/JSON/settings/settings.export.schema.0.1.json @@ -32,6 +32,11 @@ "type": "boolean", "default": false }, + "SmartScreenCheck": { + "description": "Enable smart screen check.", + "type": "boolean", + "default": true + }, "DefaultProxy": { "description": "Default proxy.", "type": "string" diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp index 24a7be7367..33b6bd1eb7 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp @@ -4,6 +4,7 @@ #include "UriValidationFlow.h" #include #include +#include #include namespace AppInstaller::CLI::Workflow @@ -33,34 +34,49 @@ namespace AppInstaller::CLI::Workflow // Check if smart screen is required for a given zone. bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone, bool isSourceTrusted) { + // Smart screen is required for Internet and UntrustedSites zones. if (zone != Settings::SecurityZoneOptions::Internet && zone != Settings::SecurityZoneOptions::UntrustedSites) { AICLI_LOG(Core, Info, << "Skipping smart screen validation for zone " << ToString(zone)); return false; } + // Smart screen validation logic: + // 1. If the policy is not configured, check the admin setting. + // 1.1 If the admin setting for smart screen is enabled, only validate untrusted sources. + // 1.2 If the admin setting for smart screen is disabled, skip the smart screen validation. + // 2. If the policy is enabled, always run smart screen validation. + // 3. If the policy is disabled, skip the smart screen validation. + auto ssAdminSettingEnabled = Settings::IsAdminSettingEnabled(Settings::BoolAdminSetting::SmartScreenCheck); auto ssPolicyState = Settings::GroupPolicies().GetState(Settings::TogglePolicy::Policy::SmartScreenCheck); - if (ssPolicyState == Settings::PolicyState::Disabled) + if (ssPolicyState == Settings::PolicyState::NotConfigured) { - AICLI_LOG(Core, Info, << "Smart screen validation is disabled by group policy"); - return false; - } + AICLI_LOG(Core, Info, << "Smart screen validation is not configured by group policy"); - if (ssPolicyState == Settings::PolicyState::Enabled) - { - AICLI_LOG(Core, Info, << "Smart screen validation is enabled by group policy"); + if (!ssAdminSettingEnabled) + { + AICLI_LOG(Core, Info, << "Skipping smart screen validation as the admin setting is disabled"); + return false; + } + + if (isSourceTrusted) + { + AICLI_LOG(Core, Info, << "Skipping smart screen validation for trusted source"); + return false; + } + + AICLI_LOG(Core, Info, << "Smart screen validation is required for untrusted source"); return true; } - AICLI_LOG(Core, Info, << "Smart screen validation is not configured by group policy"); - - if (isSourceTrusted) + if (ssPolicyState == Settings::PolicyState::Disabled) { - AICLI_LOG(Core, Info, << "Skipping smart screen validation for trusted source"); + AICLI_LOG(Core, Info, << "Smart screen validation is disabled by group policy"); return false; } - AICLI_LOG(Core, Info, << "Smart screen validation is required for untrusted source"); + assert(ssPolicyState == Settings::PolicyState::Enabled); + AICLI_LOG(Core, Info, << "Smart screen validation is enabled by group policy"); return true; } diff --git a/src/AppInstallerCommonCore/AdminSettings.cpp b/src/AppInstallerCommonCore/AdminSettings.cpp index 89a23d64ea..5144342268 100644 --- a/src/AppInstallerCommonCore/AdminSettings.cpp +++ b/src/AppInstallerCommonCore/AdminSettings.cpp @@ -20,6 +20,7 @@ namespace AppInstaller::Settings constexpr Utility::LocIndView s_AdminSettingsYaml_InstallerHashOverride = "InstallerHashOverride"_liv; constexpr Utility::LocIndView s_AdminSettingsYaml_LocalArchiveMalwareScanOverride = "LocalArchiveMalwareScanOverride"_liv; constexpr Utility::LocIndView s_AdminSettingsYaml_ProxyCommandLineOptions = "ProxyCommandLineOptions"_liv; + constexpr Utility::LocIndView s_AdminSettingsYaml_SmartScreenCheck = "SmartScreenCheck"_liv; constexpr Utility::LocIndView s_AdminSettingsYaml_DefaultProxy = "DefaultProxy"_liv; @@ -46,6 +47,7 @@ namespace AppInstaller::Settings bool InstallerHashOverride = false; bool LocalArchiveMalwareScanOverride = false; bool ProxyCommandLineOptions = false; + bool SmartScreenCheck = true; std::optional DefaultProxy; }; @@ -120,6 +122,9 @@ namespace AppInstaller::Settings case BoolAdminSetting::ProxyCommandLineOptions: m_settingValues.ProxyCommandLineOptions = enabled; return true; + case BoolAdminSetting::SmartScreenCheck: + m_settingValues.SmartScreenCheck = enabled; + return true; default: return false; } @@ -155,6 +160,8 @@ namespace AppInstaller::Settings return m_settingValues.LocalArchiveMalwareScanOverride; case BoolAdminSetting::ProxyCommandLineOptions: return m_settingValues.ProxyCommandLineOptions; + case BoolAdminSetting::SmartScreenCheck: + return m_settingValues.SmartScreenCheck; default: return false; } @@ -210,6 +217,7 @@ namespace AppInstaller::Settings TryReadScalar(document, s_AdminSettingsYaml_InstallerHashOverride, m_settingValues.InstallerHashOverride); TryReadScalar(document, s_AdminSettingsYaml_LocalArchiveMalwareScanOverride, m_settingValues.LocalArchiveMalwareScanOverride); TryReadScalar(document, s_AdminSettingsYaml_ProxyCommandLineOptions, m_settingValues.ProxyCommandLineOptions); + TryReadScalar(document, s_AdminSettingsYaml_SmartScreenCheck, m_settingValues.SmartScreenCheck); std::string defaultProxy; if (TryReadScalar(document, s_AdminSettingsYaml_DefaultProxy, defaultProxy)) @@ -227,6 +235,7 @@ namespace AppInstaller::Settings out << YAML::Key << s_AdminSettingsYaml_InstallerHashOverride << YAML::Value << m_settingValues.InstallerHashOverride; out << YAML::Key << s_AdminSettingsYaml_LocalArchiveMalwareScanOverride << YAML::Value << m_settingValues.LocalArchiveMalwareScanOverride; out << YAML::Key << s_AdminSettingsYaml_ProxyCommandLineOptions << YAML::Value << m_settingValues.ProxyCommandLineOptions; + out << YAML::Key << s_AdminSettingsYaml_SmartScreenCheck << YAML::Value << m_settingValues.SmartScreenCheck; if (m_settingValues.DefaultProxy) { @@ -280,6 +289,10 @@ namespace AppInstaller::Settings { result = BoolAdminSetting::ProxyCommandLineOptions; } + else if (Utility::CaseInsensitiveEquals(s_AdminSettingsYaml_SmartScreenCheck, in)) + { + result = BoolAdminSetting::SmartScreenCheck; + } return result; } @@ -310,6 +323,8 @@ namespace AppInstaller::Settings return s_AdminSettingsYaml_LocalArchiveMalwareScanOverride; case BoolAdminSetting::ProxyCommandLineOptions: return s_AdminSettingsYaml_ProxyCommandLineOptions; + case BoolAdminSetting::SmartScreenCheck: + return s_AdminSettingsYaml_SmartScreenCheck; default: return "Unknown"_liv; } @@ -340,6 +355,8 @@ namespace AppInstaller::Settings return TogglePolicy::Policy::LocalArchiveMalwareScanOverride; case BoolAdminSetting::ProxyCommandLineOptions: return TogglePolicy::Policy::ProxyCommandLineOptions; + case BoolAdminSetting::SmartScreenCheck: + return TogglePolicy::Policy::SmartScreenCheck; default: return TogglePolicy::Policy::None; } diff --git a/src/AppInstallerCommonCore/Public/winget/AdminSettings.h b/src/AppInstallerCommonCore/Public/winget/AdminSettings.h index d46fafdf01..dac4412f8d 100644 --- a/src/AppInstallerCommonCore/Public/winget/AdminSettings.h +++ b/src/AppInstallerCommonCore/Public/winget/AdminSettings.h @@ -16,6 +16,7 @@ namespace AppInstaller::Settings InstallerHashOverride, LocalArchiveMalwareScanOverride, ProxyCommandLineOptions, + SmartScreenCheck, Max, }; From 18a77f5b98f6f7725b947e71b144f034e5117557 Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Thu, 27 Feb 2025 12:45:33 -0800 Subject: [PATCH 33/34] uri validation in source add flow --- .../Workflows/ConfigurationFlow.cpp | 16 ++-- .../Workflows/DownloadFlow.cpp | 2 +- .../Workflows/SourceFlow.cpp | 43 +++++++---- .../Workflows/UriValidationFlow.cpp | 73 ++++++++++++++++--- .../Workflows/UriValidationFlow.h | 5 +- .../UriValidationFlow.cpp | 4 +- 6 files changed, 102 insertions(+), 41 deletions(-) diff --git a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp index 53a3a8876b..1190f52ca5 100644 --- a/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/ConfigurationFlow.cpp @@ -1329,21 +1329,21 @@ namespace AppInstaller::CLI::Workflow return "None"; } } - } - void CreateConfigurationProcessorInternal(Context& context) - { - auto progressScope = context.Reporter.BeginAsyncProgress(true); - progressScope->Callback().SetProgressMessage(Resource::String::ConfigurationInitializing()); + void CreateConfigurationProcessorInternal(Context& context) + { + auto progressScope = context.Reporter.BeginAsyncProgress(true); + progressScope->Callback().SetProgressMessage(Resource::String::ConfigurationInitializing()); - anon::ConfigureProcessorForUse(context, ConfigurationProcessor{ anon::CreateConfigurationSetProcessorFactory(context) }); + anon::ConfigureProcessorForUse(context, ConfigurationProcessor{ anon::CreateConfigurationSetProcessorFactory(context) }); + } } void CreateConfigurationProcessor(Context& context) { context << - ExecuteUriValidation(UriValidationSource::ConfigurationSource) << - CreateConfigurationProcessorInternal; + ExecuteUriValidation(UriValidationSource::Configuration) << + anon::CreateConfigurationProcessorInternal; } void CreateConfigurationProcessorWithoutFactory(Execution::Context& context) diff --git a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp index f84179983d..944623af57 100644 --- a/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/DownloadFlow.cpp @@ -331,7 +331,7 @@ namespace AppInstaller::CLI::Workflow context << ReportExecutionStage(ExecutionStage::Download) << CheckForExistingInstaller << - ExecuteUriValidation(UriValidationSource::PackageCatalogSource) << + ExecuteUriValidation(UriValidationSource::Package) << DownloadInstallerInternal; } diff --git a/src/AppInstallerCLICore/Workflows/SourceFlow.cpp b/src/AppInstallerCLICore/Workflows/SourceFlow.cpp index 7d8df61ffd..acb634a2d3 100644 --- a/src/AppInstallerCLICore/Workflows/SourceFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/SourceFlow.cpp @@ -6,6 +6,7 @@ #include "PromptFlow.h" #include "TableOutput.h" #include "WorkflowBase.h" +#include "UriValidationFlow.h" namespace AppInstaller::CLI::Workflow { @@ -13,6 +14,29 @@ namespace AppInstaller::CLI::Workflow using namespace AppInstaller::Settings; using namespace AppInstaller::Utility::literals; + namespace + { + void AddSourceInternal(Execution::Context& context) + { + auto& sourceToAdd = context.Get(); + auto details = sourceToAdd.GetDetails(); + + context.Reporter.Info() << + Resource::String::SourceAddBegin << std::endl << + " "_liv << details.Name << " -> "_liv << details.Arg << std::endl; + + auto addFunction = [&](IProgressCallback& progress)->bool { return sourceToAdd.Add(progress); }; + if (!context.Reporter.ExecuteWithProgress(addFunction)) + { + context.Reporter.Info() << Resource::String::Cancelled << std::endl; + } + else + { + context.Reporter.Info() << Resource::String::Done << std::endl; + } + } + } + void GetSourceList(Execution::Context& context) { context.Add(Repository::Source::GetCurrentSources()); @@ -94,22 +118,9 @@ namespace AppInstaller::CLI::Workflow void AddSource(Execution::Context& context) { - auto& sourceToAdd = context.Get(); - auto details = sourceToAdd.GetDetails(); - - context.Reporter.Info() << - Resource::String::SourceAddBegin << std::endl << - " "_liv << details.Name << " -> "_liv << details.Arg << std::endl; - - auto addFunction = [&](IProgressCallback& progress)->bool { return sourceToAdd.Add(progress); }; - if (!context.Reporter.ExecuteWithProgress(addFunction)) - { - context.Reporter.Info() << Resource::String::Cancelled << std::endl; - } - else - { - context.Reporter.Info() << Resource::String::Done << std::endl; - } + context << + ExecuteUriValidation(UriValidationSource::SourceAdd) << + AddSourceInternal; } void CreateSourceForSourceAdd(Execution::Context& context) diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp index 33b6bd1eb7..c89b9f6dd6 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp @@ -168,6 +168,19 @@ namespace AppInstaller::CLI::Workflow return E_FAIL; } + HRESULT GetSourceAddUrl(const Execution::Context& context, std::string& sourceAddUrl) + { + if (context.Contains(Execution::Data::Source)) + { + auto& sourceToAdd = context.Get(); + auto details = sourceToAdd.GetDetails(); + sourceAddUrl = details.Arg; + return S_OK; + } + + return E_FAIL; + } + // Validate group policy for a given zone. bool IsZoneBlockedByGroupPolicy(Execution::Context& context, const Settings::SecurityZoneOptions& zone) { @@ -274,26 +287,62 @@ namespace AppInstaller::CLI::Workflow AICLI_LOG(Core, Info, << "Installer URL is validated: " << installerUrl); return S_OK; } - } - // Execute the smart screen flow. - void ExecuteUriValidation::operator()(Execution::Context& context) const - { - if (m_uriValidationSource == UriValidationSource::ConfigurationSource) + HRESULT EvaluateSourceAddUri(Execution::Context& context) { - auto uriValidation = EvaluateConfigurationUri(context); - if (FAILED(uriValidation)) + std::string sourceAddUrl; + if (FAILED(GetSourceAddUrl(context, sourceAddUrl))) + { + AICLI_LOG(Core, Warning, << "Source URL is not available. Skipping validation."); + return S_OK; + } + + Settings::SecurityZoneOptions sourceAddUrlZone; + if (FAILED(GetUriZone(sourceAddUrl, sourceAddUrlZone))) + { + AICLI_LOG(Core, Warning, << "Failed to get zone for source URL: " << sourceAddUrl << ". Skipping validation."); + return S_OK; + } + + if (IsZoneBlockedByGroupPolicy(context, sourceAddUrlZone)) { - AICLI_TERMINATE_CONTEXT(uriValidation); + AICLI_LOG(Core, Error, << "Source URL's zone is blocked by group policy: " << sourceAddUrl << " (" << ToString(sourceAddUrlZone) << ")"); + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; } + + if (IsSmartScreenRequired(sourceAddUrlZone, false) && IsUriBlockedBySmartScreen(context, sourceAddUrl)) + { + AICLI_LOG(Core, Error, << "Source URL was blocked by smart screen: " << sourceAddUrl); + return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; + } + + AICLI_LOG(Core, Info, << "Source URL is validated: " << sourceAddUrl); + return S_OK; } - else + + HRESULT EvaluateUri(Execution::Context& context, UriValidationSource uriValidationSource) { - auto uriValidation = EvaluateDownloadUri(context); - if (FAILED(uriValidation)) + switch (uriValidationSource) { - AICLI_TERMINATE_CONTEXT(uriValidation); + case UriValidationSource::Configuration: + return EvaluateConfigurationUri(context); + case UriValidationSource::Package: + return EvaluateDownloadUri(context); + case UriValidationSource::SourceAdd: + return EvaluateSourceAddUri(context); + default: + THROW_HR(E_UNEXPECTED); } } } + + // Execute the smart screen flow. + void ExecuteUriValidation::operator()(Execution::Context& context) const + { + auto uriValidation = EvaluateUri(context, m_uriValidationSource); + if (FAILED(uriValidation)) + { + AICLI_TERMINATE_CONTEXT(uriValidation); + } + } } diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.h b/src/AppInstallerCLICore/Workflows/UriValidationFlow.h index 55439ba4cb..b239dbca6c 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.h +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.h @@ -7,8 +7,9 @@ namespace AppInstaller::CLI::Workflow { enum UriValidationSource { - ConfigurationSource, - PackageCatalogSource, + Configuration, + Package, + SourceAdd, }; // Composite flow that chooses what to do based on whether or not the diff --git a/src/AppInstallerCLITests/UriValidationFlow.cpp b/src/AppInstallerCLITests/UriValidationFlow.cpp index 4be423ddaa..1ad10736ba 100644 --- a/src/AppInstallerCLITests/UriValidationFlow.cpp +++ b/src/AppInstallerCLITests/UriValidationFlow.cpp @@ -35,7 +35,7 @@ constexpr std::string_view UntrustedBlock = "https://URI_VALIDATION/zone4/block" std::ostringstream uriValidationOutput; \ TestContext context{ uriValidationOutput, std::cin }; \ context.Args.AddArg(Execution::Args::Type::ConfigurationFile, _uri_); \ - context << ExecuteUriValidation(UriValidationSource::ConfigurationSource); \ + context << ExecuteUriValidation(UriValidationSource::Configuration); \ INFO(uriValidationOutput.str()); #define EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(_uri_) \ @@ -47,7 +47,7 @@ constexpr std::string_view UntrustedBlock = "https://URI_VALIDATION/zone4/block" ManifestInstaller installer; \ installer.Url = _uri_; \ context.Add(std::move(installer)); \ - context << ExecuteUriValidation(UriValidationSource::PackageCatalogSource); \ + context << ExecuteUriValidation(UriValidationSource::Package); \ INFO(uriValidationOutput.str()); TEST_CASE("UriValidationFlow_Configuration_SecurityZonePolicy", "[UriValidationFlow][workflow]") From e70a8d9c1d5176bfdf4be4447a42e8fef81d967d Mon Sep 17 00:00:00 2001 From: AmirMS <104940545+AmelBawa-msft@users.noreply.github.com> Date: Fri, 28 Feb 2025 17:22:25 -0800 Subject: [PATCH 34/34] Updated group policy --- doc/admx/DesktopAppInstaller.admx | 2 +- doc/admx/en-US/DesktopAppInstaller.adml | 4 +- .../settings/settings.export.schema.0.1.json | 6 +- src/AppInstallerCLICore/Argument.cpp | 4 + .../Commands/DownloadCommand.cpp | 1 + .../Commands/InstallCommand.cpp | 1 + .../Commands/RepairCommand.cpp | 1 + .../Commands/SourceCommand.cpp | 1 + .../Commands/UpgradeCommand.cpp | 1 + src/AppInstallerCLICore/ExecutionArgs.h | 1 + src/AppInstallerCLICore/Resources.h | 1 + .../Workflows/UriValidationFlow.cpp | 159 +++++++----------- .../Shared/Strings/en-us/winget.resw | 3 + src/AppInstallerCLITests/GroupPolicy.cpp | 2 +- src/AppInstallerCLITests/TestSettings.h | 2 +- .../UriValidationFlow.cpp | 22 +-- src/AppInstallerCommonCore/AdminSettings.cpp | 28 +-- .../Public/winget/AdminSettings.h | 2 +- src/AppInstallerSharedLib/GroupPolicy.cpp | 4 +- .../Public/winget/GroupPolicy.h | 2 +- .../Public/winget/Resources.h | 2 +- 21 files changed, 115 insertions(+), 134 deletions(-) diff --git a/doc/admx/DesktopAppInstaller.admx b/doc/admx/DesktopAppInstaller.admx index fce3451700..79ebb2598a 100644 --- a/doc/admx/DesktopAppInstaller.admx +++ b/doc/admx/DesktopAppInstaller.admx @@ -183,7 +183,7 @@ - + diff --git a/doc/admx/en-US/DesktopAppInstaller.adml b/doc/admx/en-US/DesktopAppInstaller.adml index ea2913d65a..29f755a71a 100644 --- a/doc/admx/en-US/DesktopAppInstaller.adml +++ b/doc/admx/en-US/DesktopAppInstaller.adml @@ -124,8 +124,8 @@ If you disable or do not configure this setting, no proxy will be used by defaul If you enable this setting, the specified proxy will be used by default. Enable App Installer Allowed Zones for the Windows Package Manager - Enable Microsoft SmartScreen checks for the Windows Package Manager - + Enable Windows Package Manager SmartScreen Checks Bypass + Enable App Installer Allowed Zones for MSIX Packages This policy controls whether App Installer allows installing packages originating from specific URL Zones. A package's origin is determined by its URI and whether a Mart-of-the-Web (MotW) is present. If multiple URIs are involved, all of them are considered; for example, when using a .appinstaller file that involves redirection. diff --git a/schemas/JSON/settings/settings.export.schema.0.1.json b/schemas/JSON/settings/settings.export.schema.0.1.json index 5c3ffc7f9c..2ac562b6d4 100644 --- a/schemas/JSON/settings/settings.export.schema.0.1.json +++ b/schemas/JSON/settings/settings.export.schema.0.1.json @@ -32,10 +32,10 @@ "type": "boolean", "default": false }, - "SmartScreenCheck": { - "description": "Enable smart screen check.", + "BypassSmartScreenCheck": { + "description": "Enable smart screen check bypass.", "type": "boolean", - "default": true + "default": false }, "DefaultProxy": { "description": "Default proxy.", diff --git a/src/AppInstallerCLICore/Argument.cpp b/src/AppInstallerCLICore/Argument.cpp index 62455f0981..398b472e97 100644 --- a/src/AppInstallerCLICore/Argument.cpp +++ b/src/AppInstallerCLICore/Argument.cpp @@ -95,6 +95,8 @@ namespace AppInstaller::CLI return { type, "skip-dependencies"_liv, ArgTypeCategory::InstallerBehavior | ArgTypeCategory::CopyFlagToSubContext }; case Execution::Args::Type::AllowReboot: return { type, "allow-reboot"_liv, ArgTypeCategory::InstallerBehavior | ArgTypeCategory::CopyFlagToSubContext }; + case Execution::Args::Type::IgnoreSmartScreen: + return { type, "ignore-smartscreen"_liv, ArgTypeCategory::InstallerBehavior | ArgTypeCategory::CopyFlagToSubContext }; // Uninstall behavior case Execution::Args::Type::Purge: @@ -442,6 +444,8 @@ namespace AppInstaller::CLI return Argument{ type, Resource::String::NoProxyArgumentDescription, ArgumentType::Flag, TogglePolicy::Policy::ProxyCommandLineOptions, BoolAdminSetting::ProxyCommandLineOptions }; case Args::Type::Family: return Argument{ type, Resource::String::FontFamilyNameArgumentDescription, ArgumentType::Positional, false }; + case Args::Type::IgnoreSmartScreen: + return Argument{ type, Resource::String::IgnoreSmartScreenArgumentDescription, ArgumentType::Flag, Settings::TogglePolicy::Policy::BypassSmartScreenCheck, Settings::BoolAdminSetting::BypassSmartScreenCheck }; default: THROW_HR(E_UNEXPECTED); } diff --git a/src/AppInstallerCLICore/Commands/DownloadCommand.cpp b/src/AppInstallerCLICore/Commands/DownloadCommand.cpp index 0848ecda55..e05f17353f 100644 --- a/src/AppInstallerCLICore/Commands/DownloadCommand.cpp +++ b/src/AppInstallerCLICore/Commands/DownloadCommand.cpp @@ -42,6 +42,7 @@ namespace AppInstaller::CLI Argument::ForType(Args::Type::AcceptSourceAgreements), Argument::ForType(Args::Type::SkipMicrosoftStorePackageLicense), Argument::ForType(Args::Type::Platform), + Argument::ForType(Args::Type::IgnoreSmartScreen), }; } diff --git a/src/AppInstallerCLICore/Commands/InstallCommand.cpp b/src/AppInstallerCLICore/Commands/InstallCommand.cpp index c93bf59a80..a8d187784e 100644 --- a/src/AppInstallerCLICore/Commands/InstallCommand.cpp +++ b/src/AppInstallerCLICore/Commands/InstallCommand.cpp @@ -56,6 +56,7 @@ namespace AppInstaller::CLI Argument::ForType(Args::Type::Rename), Argument::ForType(Args::Type::UninstallPrevious), Argument::ForType(Args::Type::Force), + Argument::ForType(Args::Type::IgnoreSmartScreen), Argument{ Args::Type::IncludeUnknown, Resource::String::IncludeUnknownArgumentDescription, ArgumentType::Flag, Argument::Visibility::Hidden}, }; } diff --git a/src/AppInstallerCLICore/Commands/RepairCommand.cpp b/src/AppInstallerCLICore/Commands/RepairCommand.cpp index 3df1a6a0e6..89385f1363 100644 --- a/src/AppInstallerCLICore/Commands/RepairCommand.cpp +++ b/src/AppInstallerCLICore/Commands/RepairCommand.cpp @@ -39,6 +39,7 @@ namespace AppInstaller::CLI Argument::ForType(Args::Type::Force), Argument::ForType(Args::Type::HashOverride), Argument::ForType(Args::Type::Exact), + Argument::ForType(Args::Type::IgnoreSmartScreen), }; } diff --git a/src/AppInstallerCLICore/Commands/SourceCommand.cpp b/src/AppInstallerCLICore/Commands/SourceCommand.cpp index 4b0b557ffb..3c3201c350 100644 --- a/src/AppInstallerCLICore/Commands/SourceCommand.cpp +++ b/src/AppInstallerCLICore/Commands/SourceCommand.cpp @@ -56,6 +56,7 @@ namespace AppInstaller::CLI Argument::ForType(Args::Type::CustomHeader), Argument::ForType(Args::Type::AcceptSourceAgreements), Argument::ForType(Args::Type::SourceExplicit), + Argument::ForType(Args::Type::IgnoreSmartScreen), }; } diff --git a/src/AppInstallerCLICore/Commands/UpgradeCommand.cpp b/src/AppInstallerCLICore/Commands/UpgradeCommand.cpp index e3dedc94e4..af9376a60e 100644 --- a/src/AppInstallerCLICore/Commands/UpgradeCommand.cpp +++ b/src/AppInstallerCLICore/Commands/UpgradeCommand.cpp @@ -74,6 +74,7 @@ namespace AppInstaller::CLI Argument{ Args::Type::IncludePinned, Resource::String::IncludePinnedArgumentDescription, ArgumentType::Flag}, Argument::ForType(Args::Type::UninstallPrevious), Argument::ForType(Args::Type::Force), + Argument::ForType(Args::Type::IgnoreSmartScreen), }; } diff --git a/src/AppInstallerCLICore/ExecutionArgs.h b/src/AppInstallerCLICore/ExecutionArgs.h index 9c0329aa21..acec3f9814 100644 --- a/src/AppInstallerCLICore/ExecutionArgs.h +++ b/src/AppInstallerCLICore/ExecutionArgs.h @@ -50,6 +50,7 @@ namespace AppInstaller::CLI::Execution Rename, // Renames the file of the executable. Only applies to the portable installerType NoUpgrade, // Install flow should not try to convert to upgrade flow upon finding existing installed version AllowReboot, // Allows the reboot flow to proceed if applicable + IgnoreSmartScreen, // Ignore smart screen check // Uninstall behavior Purge, // Removes all files and directories related to a package during an uninstall. Only applies to the portable installerType. diff --git a/src/AppInstallerCLICore/Resources.h b/src/AppInstallerCLICore/Resources.h index e64993fcc6..583f36046d 100644 --- a/src/AppInstallerCLICore/Resources.h +++ b/src/AppInstallerCLICore/Resources.h @@ -277,6 +277,7 @@ namespace AppInstaller::CLI::Resource WINGET_DEFINE_RESOURCE_STRINGID(IdArgumentDescription); WINGET_DEFINE_RESOURCE_STRINGID(IgnoreLocalArchiveMalwareScanArgumentDescription); WINGET_DEFINE_RESOURCE_STRINGID(IgnoreResumeLimitArgumentDescription); + WINGET_DEFINE_RESOURCE_STRINGID(IgnoreSmartScreenArgumentDescription); WINGET_DEFINE_RESOURCE_STRINGID(IgnoreWarningsArgumentDescription); WINGET_DEFINE_RESOURCE_STRINGID(ImportCommandLongDescription); WINGET_DEFINE_RESOURCE_STRINGID(ImportCommandReportDependencies); diff --git a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp index c89b9f6dd6..814daf33c6 100644 --- a/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp +++ b/src/AppInstallerCLICore/Workflows/UriValidationFlow.cpp @@ -32,51 +32,40 @@ namespace AppInstaller::CLI::Workflow } // Check if smart screen is required for a given zone. - bool IsSmartScreenRequired(Settings::SecurityZoneOptions zone, bool isSourceTrusted) + bool IsSmartScreenRequired(Execution::Context& context, Settings::SecurityZoneOptions zone, bool isTrusted) { - // Smart screen is required for Internet and UntrustedSites zones. + // Smart screen is required only for Internet and UntrustedSites zones. if (zone != Settings::SecurityZoneOptions::Internet && zone != Settings::SecurityZoneOptions::UntrustedSites) { AICLI_LOG(Core, Info, << "Skipping smart screen validation for zone " << ToString(zone)); return false; } - // Smart screen validation logic: - // 1. If the policy is not configured, check the admin setting. - // 1.1 If the admin setting for smart screen is enabled, only validate untrusted sources. - // 1.2 If the admin setting for smart screen is disabled, skip the smart screen validation. - // 2. If the policy is enabled, always run smart screen validation. - // 3. If the policy is disabled, skip the smart screen validation. - auto ssAdminSettingEnabled = Settings::IsAdminSettingEnabled(Settings::BoolAdminSetting::SmartScreenCheck); - auto ssPolicyState = Settings::GroupPolicies().GetState(Settings::TogglePolicy::Policy::SmartScreenCheck); - if (ssPolicyState == Settings::PolicyState::NotConfigured) - { - AICLI_LOG(Core, Info, << "Smart screen validation is not configured by group policy"); - - if (!ssAdminSettingEnabled) - { - AICLI_LOG(Core, Info, << "Skipping smart screen validation as the admin setting is disabled"); - return false; - } + auto policyState = Settings::GroupPolicies().GetState(Settings::TogglePolicy::Policy::BypassSmartScreenCheck); - if (isSourceTrusted) - { - AICLI_LOG(Core, Info, << "Skipping smart screen validation for trusted source"); - return false; - } - - AICLI_LOG(Core, Info, << "Smart screen validation is required for untrusted source"); + // If group policy is disabled, smart screen validation cannot be bypassed even for trusted URIs. + if (policyState == Settings::PolicyState::Disabled) + { + AICLI_LOG(Core, Info, << "Smart screen validation is required by group policy"); return true; } - if (ssPolicyState == Settings::PolicyState::Disabled) + // Skip smart screen validation if the --ignore-smartscreen argument is provided. + if (context.Args.Contains(Execution::Args::Type::IgnoreSmartScreen)) + { + AICLI_LOG(Core, Info, << "Skipping smart screen validation as the user has opted out"); + return false; + } + + // Skip smart screen validation for trusted URIs. + if (isTrusted) { - AICLI_LOG(Core, Info, << "Smart screen validation is disabled by group policy"); + AICLI_LOG(Core, Info, << "Skipping smart screen validation for trusted URI"); return false; } - assert(ssPolicyState == Settings::PolicyState::Enabled); - AICLI_LOG(Core, Info, << "Smart screen validation is enabled by group policy"); + // Smart screen validation is required for untrusted URIs. + AICLI_LOG(Core, Info, << "Smart screen validation is required for untrusted URI"); return true; } @@ -133,6 +122,7 @@ namespace AppInstaller::CLI::Workflow return S_OK; } + // Get whether or not the source is trusted. HRESULT GetIsSourceTrusted(const Execution::Context& context, bool& isTrusted) { if (context.Contains(Execution::Data::PackageVersion)) @@ -146,6 +136,7 @@ namespace AppInstaller::CLI::Workflow return E_FAIL; } + // Get the installer url from the context. HRESULT GetInstallerUrl(const Execution::Context& context, std::string& installerUrl) { if (context.Contains(Execution::Data::Installer)) @@ -157,6 +148,7 @@ namespace AppInstaller::CLI::Workflow return E_FAIL; } + // Get the configuration uri from the context. HRESULT GetConfigurationUri(const Execution::Context& context, std::string& configurationUri) { if (context.Args.Contains(Execution::Args::Type::ConfigurationFile)) @@ -168,6 +160,7 @@ namespace AppInstaller::CLI::Workflow return E_FAIL; } + // Get the source add url from the context. HRESULT GetSourceAddUrl(const Execution::Context& context, std::string& sourceAddUrl) { if (context.Contains(Execution::Data::Source)) @@ -184,91 +177,90 @@ namespace AppInstaller::CLI::Workflow // Validate group policy for a given zone. bool IsZoneBlockedByGroupPolicy(Execution::Context& context, const Settings::SecurityZoneOptions& zone) { + // If the group policy for allowed security zones is not enabled then skip validation. if (!Settings::GroupPolicies().IsEnabled(Settings::TogglePolicy::Policy::AllowedSecurityZones)) { - AICLI_LOG(Core, Info, << "WindowsPackageManagerAllowedSecurityZones policy is disabled"); + AICLI_LOG(Core, Info, << "Group policy for allowed security zones is disabled."); return false; } + // If the group policy is enabled but no zones are configured then skip validation. auto allowedSecurityZones = Settings::GroupPolicies().GetValue(); if (!allowedSecurityZones.has_value()) { - AICLI_LOG(Core, Warning, << "WindowsPackageManagerAllowedSecurityZones policy is not set"); + AICLI_LOG(Core, Warning, << "Group policy for allowed security zones is enabled but no zones are configured."); return false; } + // If the zone is not found in the allowed security zones then skip validation. auto zoneIterator = allowedSecurityZones->find(zone); if (zoneIterator == allowedSecurityZones->end()) { - AICLI_LOG(Core, Warning, << "Security zone " << zone << " was not found in the group policy WindowsPackageManagerAllowedSecurityZones"); + AICLI_LOG(Core, Warning, << "Security zone " << ToString(zone) << " was not found in the group policy for allowed security zones."); return false; } + // If the zone is found in the allowed security zones but is not allowed then block the configuration. auto isAllowed = zoneIterator->second; if (!isAllowed) { - AICLI_LOG(Core, Error, << "Security zone " << zone << " is blocked by group policy"); + AICLI_LOG(Core, Error, << "Security zone " << ToString(zone) << " is blocked by group policy"); context.Reporter.Error() << Resource::String::UriSecurityZoneBlockedByPolicy << std::endl; return true; } - AICLI_LOG(Core, Info, << "Configuration is disabled in zone " << zone); + AICLI_LOG(Core, Info, << "Security zone " << ToString(zone) << " is allowed by group policy"); return false; } - // Evaluate the configuration uri for group policy and smart screen. - HRESULT EvaluateConfigurationUri(Execution::Context& context) + // Core logic to evaluate the uri. + HRESULT EvaluateUri(Execution::Context& context, std::string uri, bool isUriTrusted) { - std::string configurationUri; - if (FAILED(GetConfigurationUri(context, configurationUri))) + Settings::SecurityZoneOptions uriZone; + if (FAILED(GetUriZone(uri, uriZone))) { - AICLI_LOG(Core, Warning, << "Configuration URI is not available. Skipping validation."); + AICLI_LOG(Core, Warning, << "Failed to get security zone for URI: " << uri << ". Skipping validation."); return S_OK; } - Settings::SecurityZoneOptions configurationUriZone; - if (FAILED(GetUriZone(configurationUri, configurationUriZone))) + if (IsZoneBlockedByGroupPolicy(context, uriZone)) { - AICLI_LOG(Core, Warning, << "Failed to get zone for configuration URI: " << configurationUri << ". Skipping validation."); - return S_OK; - } - - if (IsZoneBlockedByGroupPolicy(context, configurationUriZone)) - { - AICLI_LOG(Core, Error, << "Configuration URI's zone is blocked by group policy: " << configurationUri << " (" << ToString(configurationUriZone) << ")"); + AICLI_LOG(Core, Error, << "URI security zone is blocked by group policy: " << uri << " (" << ToString(uriZone) << ")"); return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; } - if (IsSmartScreenRequired(configurationUriZone, false) && IsUriBlockedBySmartScreen(context, configurationUri)) + if (IsSmartScreenRequired(context, uriZone, isUriTrusted) && IsUriBlockedBySmartScreen(context, uri)) { - AICLI_LOG(Core, Error, << "Configuration URI was blocked by smart screen: " << configurationUri); + AICLI_LOG(Core, Error, << "URI was blocked by smart screen: " << uri); return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; } - AICLI_LOG(Core, Info, << "Configuration URI is validated: " << configurationUri); + AICLI_LOG(Core, Info, << "URI was validated successfully: " << uri); return S_OK; + } - HRESULT EvaluateDownloadUri(Execution::Context& context) + // Evaluate the configuration uri + HRESULT EvaluateConfigurationUri(Execution::Context& context) { - std::string installerUrl; - if (FAILED(GetInstallerUrl(context, installerUrl))) + std::string configurationUri; + if (FAILED(GetConfigurationUri(context, configurationUri))) { - AICLI_LOG(Core, Warning, << "Installer URL is not available. Skipping validation."); + AICLI_LOG(Core, Warning, << "Configuration URI is not available. Skipping validation."); return S_OK; } - Settings::SecurityZoneOptions installerUrlZone; - if (FAILED(GetUriZone(installerUrl, installerUrlZone))) - { - AICLI_LOG(Core, Warning, << "Failed to get zone for installer URL: " << installerUrl << ". Skipping validation."); - return S_OK; - } + return EvaluateUri(context, configurationUri, false); + } - if (IsZoneBlockedByGroupPolicy(context, installerUrlZone)) + // Evaluate the download uri + HRESULT EvaluateDownloadUri(Execution::Context& context) + { + std::string installerUrl; + if (FAILED(GetInstallerUrl(context, installerUrl))) { - AICLI_LOG(Core, Error, << "Installer URL's zone is blocked by group policy: " << installerUrl << " (" << ToString(installerUrlZone) << ")"); - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; + AICLI_LOG(Core, Warning, << "Installer URL is not available. Skipping validation."); + return S_OK; } bool isSourceTrusted; @@ -278,16 +270,10 @@ namespace AppInstaller::CLI::Workflow return S_OK; } - if (IsSmartScreenRequired(installerUrlZone, isSourceTrusted) && IsUriBlockedBySmartScreen(context, installerUrl)) - { - AICLI_LOG(Core, Error, << "Installer URL was blocked by smart screen: " << installerUrl); - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; - } - - AICLI_LOG(Core, Info, << "Installer URL is validated: " << installerUrl); - return S_OK; + return EvaluateUri(context, installerUrl, isSourceTrusted); } + // Evaluate the source add uri HRESULT EvaluateSourceAddUri(Execution::Context& context) { std::string sourceAddUrl; @@ -297,30 +283,11 @@ namespace AppInstaller::CLI::Workflow return S_OK; } - Settings::SecurityZoneOptions sourceAddUrlZone; - if (FAILED(GetUriZone(sourceAddUrl, sourceAddUrlZone))) - { - AICLI_LOG(Core, Warning, << "Failed to get zone for source URL: " << sourceAddUrl << ". Skipping validation."); - return S_OK; - } - - if (IsZoneBlockedByGroupPolicy(context, sourceAddUrlZone)) - { - AICLI_LOG(Core, Error, << "Source URL's zone is blocked by group policy: " << sourceAddUrl << " (" << ToString(sourceAddUrlZone) << ")"); - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_POLICY; - } - - if (IsSmartScreenRequired(sourceAddUrlZone, false) && IsUriBlockedBySmartScreen(context, sourceAddUrl)) - { - AICLI_LOG(Core, Error, << "Source URL was blocked by smart screen: " << sourceAddUrl); - return APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE; - } - - AICLI_LOG(Core, Info, << "Source URL is validated: " << sourceAddUrl); - return S_OK; + return EvaluateUri(context, sourceAddUrl, false); } - HRESULT EvaluateUri(Execution::Context& context, UriValidationSource uriValidationSource) + // Evaluate the uri based on the source. + HRESULT EvaluateUriBySource(Execution::Context& context, UriValidationSource uriValidationSource) { switch (uriValidationSource) { @@ -339,7 +306,7 @@ namespace AppInstaller::CLI::Workflow // Execute the smart screen flow. void ExecuteUriValidation::operator()(Execution::Context& context) const { - auto uriValidation = EvaluateUri(context, m_uriValidationSource); + auto uriValidation = EvaluateUriBySource(context, m_uriValidationSource); if (FAILED(uriValidation)) { AICLI_TERMINATE_CONTEXT(uriValidation); diff --git a/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw b/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw index 50c8d3d35d..8baedc780e 100644 --- a/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw +++ b/src/AppInstallerCLIPackage/Shared/Strings/en-us/winget.resw @@ -304,6 +304,9 @@ They can be configured through the settings file 'winget settings'. Ignore the installer hash check failure + + Ignore the smart screen check failure + Ignore the malware scan performed as part of installing an archive type package from local manifest diff --git a/src/AppInstallerCLITests/GroupPolicy.cpp b/src/AppInstallerCLITests/GroupPolicy.cpp index d359a0a1ac..67cc684ea4 100644 --- a/src/AppInstallerCLITests/GroupPolicy.cpp +++ b/src/AppInstallerCLITests/GroupPolicy.cpp @@ -403,7 +403,7 @@ TEST_CASE("GroupPolicy_AllEnabled", "[groupPolicy]") SetRegistryValue(policiesKey.get(), ConfigurationPolicyValueName, 1); SetRegistryValue(policiesKey.get(), ProxyCommandLineOptionsPolicyValueName, 1); SetRegistryValue(policiesKey.get(), AllowedSecurityZonesPolicyValueName, 1); - SetRegistryValue(policiesKey.get(), SmartScreenValidationPolicyValueName, 1); + SetRegistryValue(policiesKey.get(), BypassSmartScreenValidationPolicyValueName, 1); GroupPolicy groupPolicy{ policiesKey.get() }; for (const auto& policy : TogglePolicy::GetAllPolicies()) diff --git a/src/AppInstallerCLITests/TestSettings.h b/src/AppInstallerCLITests/TestSettings.h index 09b40181b0..758e94bb1d 100644 --- a/src/AppInstallerCLITests/TestSettings.h +++ b/src/AppInstallerCLITests/TestSettings.h @@ -24,7 +24,7 @@ namespace TestCommon const std::wstring ConfigurationPolicyValueName = L"EnableWindowsPackageManagerConfiguration"; const std::wstring ProxyCommandLineOptionsPolicyValueName = L"EnableWindowsPackageManagerProxyCommandLineOptions"; const std::wstring AllowedSecurityZonesPolicyValueName = L"EnableWindowsPackageManagerAllowedSecurityZones"; - const std::wstring SmartScreenValidationPolicyValueName = L"EnableWindowsPackageManagerSmartScreenCheck"; + const std::wstring BypassSmartScreenValidationPolicyValueName = L"EnableBypassWindowsPackageManagerSmartScreenCheck"; const std::wstring SourceUpdateIntervalPolicyValueName = L"SourceAutoUpdateInterval"; const std::wstring SourceUpdateIntervalPolicyOldValueName = L"SourceAutoUpdateIntervalInMinutes"; diff --git a/src/AppInstallerCLITests/UriValidationFlow.cpp b/src/AppInstallerCLITests/UriValidationFlow.cpp index 1ad10736ba..f3779577fa 100644 --- a/src/AppInstallerCLITests/UriValidationFlow.cpp +++ b/src/AppInstallerCLITests/UriValidationFlow.cpp @@ -79,7 +79,7 @@ TEST_CASE("UriValidationFlow_Configuration_SmartScreen", "[UriValidationFlow][wo { SECTION("Not configured") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::NotConfigured); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::NotConfigured); EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetBlock); REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); @@ -87,7 +87,7 @@ TEST_CASE("UriValidationFlow_Configuration_SmartScreen", "[UriValidationFlow][wo SECTION("Enabled") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::Enabled); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::Enabled); EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetBlock); REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); @@ -95,7 +95,7 @@ TEST_CASE("UriValidationFlow_Configuration_SmartScreen", "[UriValidationFlow][wo SECTION("Disabled") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::Disabled); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::Disabled); EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetBlock); REQUIRE(S_OK == context.GetTerminationHR()); } @@ -130,7 +130,7 @@ TEST_CASE("UriValidationFlow_PackageCatalogSource_SmartScreen", "[UriValidationF { SECTION("Not configured") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::NotConfigured); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::NotConfigured); EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(InternetBlock); REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); @@ -138,7 +138,7 @@ TEST_CASE("UriValidationFlow_PackageCatalogSource_SmartScreen", "[UriValidationF SECTION("Enabled") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::Enabled); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::Enabled); EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(InternetBlock); REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); @@ -146,7 +146,7 @@ TEST_CASE("UriValidationFlow_PackageCatalogSource_SmartScreen", "[UriValidationF SECTION("Disabled") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::Disabled); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::Disabled); EXECUTE_CONTEXT_FOR_PACKAGE_CATALOG_SOURCE(InternetBlock); REQUIRE(S_OK == context.GetTerminationHR()); } @@ -157,28 +157,28 @@ TEST_CASE("UriValidationFlow_SmartScreenZoneRequirement", "[UriValidationFlow][w // Smart screen should only be evaluated for Internet and Untrusted zones. SECTION("Local") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::Enabled); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::Enabled); EXECUTE_CONTEXT_FOR_CONFIGURATION(LocalBlock); REQUIRE(S_OK == context.GetTerminationHR()); } SECTION("Intranet") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::Enabled); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::Enabled); EXECUTE_CONTEXT_FOR_CONFIGURATION(IntranetBlock); REQUIRE(S_OK == context.GetTerminationHR()); } SECTION("Trusted") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::Enabled); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::Enabled); EXECUTE_CONTEXT_FOR_CONFIGURATION(TrustedBlock); REQUIRE(S_OK == context.GetTerminationHR()); } SECTION("Internet") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::Enabled); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::Enabled); EXECUTE_CONTEXT_FOR_CONFIGURATION(InternetBlock); REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); @@ -186,7 +186,7 @@ TEST_CASE("UriValidationFlow_SmartScreenZoneRequirement", "[UriValidationFlow][w SECTION("Untrusted") { - SET_POLICY_STATE(TogglePolicy::Policy::SmartScreenCheck, PolicyState::Enabled); + SET_POLICY_STATE(TogglePolicy::Policy::BypassSmartScreenCheck, PolicyState::Enabled); EXECUTE_CONTEXT_FOR_CONFIGURATION(UntrustedBlock); REQUIRE_TERMINATED_WITH(context, APPINSTALLER_CLI_ERROR_BLOCKED_BY_REPUTATION_SERVICE); REQUIRE_OUTPUT_HAS_LOC(uriValidationOutput, Resource::String::UriBlockedBySmartScreen); diff --git a/src/AppInstallerCommonCore/AdminSettings.cpp b/src/AppInstallerCommonCore/AdminSettings.cpp index 5144342268..843811087f 100644 --- a/src/AppInstallerCommonCore/AdminSettings.cpp +++ b/src/AppInstallerCommonCore/AdminSettings.cpp @@ -20,7 +20,7 @@ namespace AppInstaller::Settings constexpr Utility::LocIndView s_AdminSettingsYaml_InstallerHashOverride = "InstallerHashOverride"_liv; constexpr Utility::LocIndView s_AdminSettingsYaml_LocalArchiveMalwareScanOverride = "LocalArchiveMalwareScanOverride"_liv; constexpr Utility::LocIndView s_AdminSettingsYaml_ProxyCommandLineOptions = "ProxyCommandLineOptions"_liv; - constexpr Utility::LocIndView s_AdminSettingsYaml_SmartScreenCheck = "SmartScreenCheck"_liv; + constexpr Utility::LocIndView s_AdminSettingsYaml_BypassSmartScreenCheck = "BypassSmartScreenCheck"_liv; constexpr Utility::LocIndView s_AdminSettingsYaml_DefaultProxy = "DefaultProxy"_liv; @@ -47,7 +47,7 @@ namespace AppInstaller::Settings bool InstallerHashOverride = false; bool LocalArchiveMalwareScanOverride = false; bool ProxyCommandLineOptions = false; - bool SmartScreenCheck = true; + bool BypassSmartScreenCheck = false; std::optional DefaultProxy; }; @@ -122,8 +122,8 @@ namespace AppInstaller::Settings case BoolAdminSetting::ProxyCommandLineOptions: m_settingValues.ProxyCommandLineOptions = enabled; return true; - case BoolAdminSetting::SmartScreenCheck: - m_settingValues.SmartScreenCheck = enabled; + case BoolAdminSetting::BypassSmartScreenCheck: + m_settingValues.BypassSmartScreenCheck = enabled; return true; default: return false; @@ -160,8 +160,8 @@ namespace AppInstaller::Settings return m_settingValues.LocalArchiveMalwareScanOverride; case BoolAdminSetting::ProxyCommandLineOptions: return m_settingValues.ProxyCommandLineOptions; - case BoolAdminSetting::SmartScreenCheck: - return m_settingValues.SmartScreenCheck; + case BoolAdminSetting::BypassSmartScreenCheck: + return m_settingValues.BypassSmartScreenCheck; default: return false; } @@ -217,7 +217,7 @@ namespace AppInstaller::Settings TryReadScalar(document, s_AdminSettingsYaml_InstallerHashOverride, m_settingValues.InstallerHashOverride); TryReadScalar(document, s_AdminSettingsYaml_LocalArchiveMalwareScanOverride, m_settingValues.LocalArchiveMalwareScanOverride); TryReadScalar(document, s_AdminSettingsYaml_ProxyCommandLineOptions, m_settingValues.ProxyCommandLineOptions); - TryReadScalar(document, s_AdminSettingsYaml_SmartScreenCheck, m_settingValues.SmartScreenCheck); + TryReadScalar(document, s_AdminSettingsYaml_BypassSmartScreenCheck, m_settingValues.BypassSmartScreenCheck); std::string defaultProxy; if (TryReadScalar(document, s_AdminSettingsYaml_DefaultProxy, defaultProxy)) @@ -235,7 +235,7 @@ namespace AppInstaller::Settings out << YAML::Key << s_AdminSettingsYaml_InstallerHashOverride << YAML::Value << m_settingValues.InstallerHashOverride; out << YAML::Key << s_AdminSettingsYaml_LocalArchiveMalwareScanOverride << YAML::Value << m_settingValues.LocalArchiveMalwareScanOverride; out << YAML::Key << s_AdminSettingsYaml_ProxyCommandLineOptions << YAML::Value << m_settingValues.ProxyCommandLineOptions; - out << YAML::Key << s_AdminSettingsYaml_SmartScreenCheck << YAML::Value << m_settingValues.SmartScreenCheck; + out << YAML::Key << s_AdminSettingsYaml_BypassSmartScreenCheck << YAML::Value << m_settingValues.BypassSmartScreenCheck; if (m_settingValues.DefaultProxy) { @@ -289,9 +289,9 @@ namespace AppInstaller::Settings { result = BoolAdminSetting::ProxyCommandLineOptions; } - else if (Utility::CaseInsensitiveEquals(s_AdminSettingsYaml_SmartScreenCheck, in)) + else if (Utility::CaseInsensitiveEquals(s_AdminSettingsYaml_BypassSmartScreenCheck, in)) { - result = BoolAdminSetting::SmartScreenCheck; + result = BoolAdminSetting::BypassSmartScreenCheck; } return result; @@ -323,8 +323,8 @@ namespace AppInstaller::Settings return s_AdminSettingsYaml_LocalArchiveMalwareScanOverride; case BoolAdminSetting::ProxyCommandLineOptions: return s_AdminSettingsYaml_ProxyCommandLineOptions; - case BoolAdminSetting::SmartScreenCheck: - return s_AdminSettingsYaml_SmartScreenCheck; + case BoolAdminSetting::BypassSmartScreenCheck: + return s_AdminSettingsYaml_BypassSmartScreenCheck; default: return "Unknown"_liv; } @@ -355,8 +355,8 @@ namespace AppInstaller::Settings return TogglePolicy::Policy::LocalArchiveMalwareScanOverride; case BoolAdminSetting::ProxyCommandLineOptions: return TogglePolicy::Policy::ProxyCommandLineOptions; - case BoolAdminSetting::SmartScreenCheck: - return TogglePolicy::Policy::SmartScreenCheck; + case BoolAdminSetting::BypassSmartScreenCheck: + return TogglePolicy::Policy::BypassSmartScreenCheck; default: return TogglePolicy::Policy::None; } diff --git a/src/AppInstallerCommonCore/Public/winget/AdminSettings.h b/src/AppInstallerCommonCore/Public/winget/AdminSettings.h index dac4412f8d..b37167b447 100644 --- a/src/AppInstallerCommonCore/Public/winget/AdminSettings.h +++ b/src/AppInstallerCommonCore/Public/winget/AdminSettings.h @@ -16,7 +16,7 @@ namespace AppInstaller::Settings InstallerHashOverride, LocalArchiveMalwareScanOverride, ProxyCommandLineOptions, - SmartScreenCheck, + BypassSmartScreenCheck, Max, }; diff --git a/src/AppInstallerSharedLib/GroupPolicy.cpp b/src/AppInstallerSharedLib/GroupPolicy.cpp index 3921329804..55300044ab 100644 --- a/src/AppInstallerSharedLib/GroupPolicy.cpp +++ b/src/AppInstallerSharedLib/GroupPolicy.cpp @@ -394,8 +394,8 @@ namespace AppInstaller::Settings return TogglePolicy(policy, "EnableWindowsPackageManagerProxyCommandLineOptions"sv, String::PolicyEnableProxyCommandLineOptions); case TogglePolicy::Policy::AllowedSecurityZones: return TogglePolicy(policy, "EnableWindowsPackageManagerAllowedSecurityZones"sv, String::PolicyEnableAllowedSecurityZones); - case TogglePolicy::Policy::SmartScreenCheck: - return TogglePolicy(policy, "EnableWindowsPackageManagerSmartScreenCheck"sv, String::PolicyEnableSmartScreenValidation); + case TogglePolicy::Policy::BypassSmartScreenCheck: + return TogglePolicy(policy, "EnableBypassWindowsPackageManagerSmartScreenCheck"sv, String::PolicyEnableBypassSmartScreenValidation); default: THROW_HR(E_UNEXPECTED); } diff --git a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h index 506d688519..b84a233adb 100644 --- a/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h +++ b/src/AppInstallerSharedLib/Public/winget/GroupPolicy.h @@ -59,7 +59,7 @@ namespace AppInstaller::Settings Configuration, ProxyCommandLineOptions, AllowedSecurityZones, - SmartScreenCheck, + BypassSmartScreenCheck, Max, }; diff --git a/src/AppInstallerSharedLib/Public/winget/Resources.h b/src/AppInstallerSharedLib/Public/winget/Resources.h index 081e30f33f..d3ad8feed3 100644 --- a/src/AppInstallerSharedLib/Public/winget/Resources.h +++ b/src/AppInstallerSharedLib/Public/winget/Resources.h @@ -61,7 +61,7 @@ namespace AppInstaller WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableWinGetConfiguration); WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableProxyCommandLineOptions); WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableAllowedSecurityZones); - WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableSmartScreenValidation); + WINGET_DEFINE_RESOURCE_STRINGID(PolicyEnableBypassSmartScreenValidation); WINGET_DEFINE_RESOURCE_STRINGID(SettingsWarningInvalidFieldFormat); WINGET_DEFINE_RESOURCE_STRINGID(SettingsWarningInvalidFieldValue);