Skip to content

Commit

Permalink
RegistrationFreeWinRT sample
Browse files Browse the repository at this point in the history
Also: Clarify issue with conflicting providers in AMSIProvider.
  • Loading branch information
Windows classic samples committed May 9, 2019
1 parent 1d7d735 commit d42a2ea
Show file tree
Hide file tree
Showing 37 changed files with 1,059 additions and 0 deletions.
10 changes: 10 additions & 0 deletions Samples/AmsiProvider/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@ Note that the provider is loaded as an in-process server, which means that you n
regsvr32 AmsiProvider.dll
````

If your system has other providers installed, they may take priority over the sample provider.
To prevent this from happening (for testing purposes), go to the
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AMSI\Providers`
and
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\AMSI\Providers`
registry keys and temporarily rename the other providers
so that the system will use the sample provider.

### Exercising the sample provider

Events logged by the sample provider
Expand Down Expand Up @@ -54,3 +62,5 @@ to stop capturing events.
````
regsvr32 /u AmsiProvider.dll
````

If you temporarily renamed conflicting providers when you installed the sample provider, rename the keys back.
17 changes: 17 additions & 0 deletions Samples/RegistrationFreeWinRT/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Registration-free WinRT Samples

Demonstrates how to use [Registration-free WinRT](https://aka.ms/regfreewinrtblog) (a new feature in Windows 10 Version 1903) to reference a C++ Windows Runtime component in a non-packaged desktop app. More details can be found in each sample.

# Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [[email protected]](mailto:[email protected]) with any additional questions or comments.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>

<file name="WinRTComponent.dll">
<activatableClass
name="WinRTComponent.MessageHolder"
threadingModel="both"
xmlns="urn:schemas-microsoft-com:winrt.v1" />
</file>

</assembly>
145 changes: 145 additions & 0 deletions Samples/RegistrationFreeWinRT/cpp/CppConsoleApp/CppConsoleApp.vcxproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.190417.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.190417.3\build\native\Microsoft.Windows.CppWinRT.props')" />
<PropertyGroup Label="Globals">
<CppWinRTOptimized>true</CppWinRTOptimized>
<MinimalCoreWin>true</MinimalCoreWin>
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{98e9f08b-c3b5-455c-8469-845292506d68}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>CppConsoleApp</RootNamespace>
<WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.17763.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.18362.0</WindowsTargetPlatformMinVersion>
<ProjectName>CppConsoleApp</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
<UseDebugLibraries>true</UseDebugLibraries>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="PropertySheet.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="PropertySheet.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="PropertySheet.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="PropertySheet.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)$(MSBuildProjectName)\bin\$(PlatformShortName)\$(Configuration)\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)$(MSBuildProjectName)\bin\$(PlatformShortName)\$(Configuration)\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(SolutionDir)$(MSBuildProjectName)\bin\$(PlatformShortName)\$(Configuration)\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)$(MSBuildProjectName)\bin\$(PlatformShortName)\$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level4</WarningLevel>
<AdditionalOptions>%(AdditionalOptions) /permissive- /bigobj</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
<ClCompile Include="main.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
<Manifest Include="CppConsoleApp.exe.manifest" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="PropertySheet.props" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.190417.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.190417.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
<Import Project="..\packages\Microsoft.VCRTForwarders.140.1.0.0-rc\build\native\Microsoft.VCRTForwarders.140.targets" Condition="Exists('..\packages\Microsoft.VCRTForwarders.140.1.0.0-rc\build\native\Microsoft.VCRTForwarders.140.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>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}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.190417.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.190417.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.190417.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.190417.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.VCRTForwarders.140.1.0.0-rc\build\native\Microsoft.VCRTForwarders.140.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.VCRTForwarders.140.1.0.0-rc\build\native\Microsoft.VCRTForwarders.140.targets'))" />
</Target>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="pch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="PropertySheet.props" />
</ItemGroup>
<ItemGroup>
<Manifest Include="CppConsoleApp.exe.manifest" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup />
<ItemGroup />
<ItemGroup>
<Reference Include="$(SolutionDir)WinRTComponent\bin\$(PlatformShortName)\$(Configuration)\WinRTComponent.winmd">
<IsWinMDFile>true</IsWinMDFile>
</Reference>
<ReferenceCopyLocalPaths Include="$(SolutionDir)WinRTComponent\bin\$(PlatformShortName)\$(Configuration)\WinRTComponent.dll">
<IsWinMDFile>false</IsWinMDFile>
</ReferenceCopyLocalPaths>
</ItemGroup>
</Project>
9 changes: 9 additions & 0 deletions Samples/RegistrationFreeWinRT/cpp/CppConsoleApp/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#include "pch.h"
#include "winrt/WinRTComponent.h"

int wmain(int /*argc*/, wchar_t** /*argv*/)
{
winrt::init_apartment(winrt::apartment_type::single_threaded);
winrt::WinRTComponent::MessageHolder messageHolder;
std::wcout << messageHolder.Message().c_str() << std::endl;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.VCRTForwarders.140" version="1.0.0-rc" targetFramework="native" />
<package id="Microsoft.Windows.CppWinRT" version="2.0.190417.3" targetFramework="native" />
</packages>
1 change: 1 addition & 0 deletions Samples/RegistrationFreeWinRT/cpp/CppConsoleApp/pch.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "pch.h"
5 changes: 5 additions & 0 deletions Samples/RegistrationFreeWinRT/cpp/CppConsoleApp/pch.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#include <iostream>
#include <winrt/coroutine.h>
#include <winrt/Windows.Foundation.h>
54 changes: 54 additions & 0 deletions Samples/RegistrationFreeWinRT/cpp/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Registration-free WinRT in C++ Desktop App Sample

This sample demonstrates how to use [Registration-free WinRT](https://aka.ms/regfreewinrtblog) a new feature in Windows 10 Version 1903 to reference a C++ Windows Runtime component in a non-packaged C++ desktop app. It contains a C++ desktop app (CppConsoleApp.vcxproj) and a WinRT Component (WinRTComponent.vcxproj).

You can learn more about Registration-free WinRT [here](https://aka.ms/regfreewinrtblog).

The C++ desktop app uses:
* [C++/WinRT](https://github.com/Microsoft/xlang/blob/f1309fe42d929d612aa9b66557d9a22769067b3f/src/package/cppwinrt/nuget/readme.md) to create projection header files of the component for use in the app code
* The [Microsoft.VCRTForwarders.140](https://aka.ms/vcrtfwdnuget) NuGet package to manage C++ Runtime dependencies for the component. The GitHub repo can be found [here](https://aka.ms/vcrtfwdgit).

## Requirements

The sample requires Windows 10 Version 1903.

## Instructions

### CppConsoleApp

A non-packaged C++ app referencing a C++ WinRT Component.

* The specific DLLs and classes (from the WinRT component) being referenced should be declared in the [Win32 Application manifest](https://docs.microsoft.com/en-us/windows/desktop/SbsCs/application-manifests) - CppConsoleApp.exe.manifest.

To add a new Win32 Application Manifest to a desktop app, right click on the project, then select Add, New Item, General, Application Manifest File, and name it yourappname.exe.manifest.

* For the System to locate the component DLLs specified in the application manifest at runtime, the DLLs must be in the same directory as the app's .exe. This project uses a propery sheet (PropertySheet.props) to copy the component DLL to the app's output directory.

* The property sheet is also used to add a reference to the component's WinMD to enable [C++/WinRT](https://github.com/Microsoft/xlang/tree/master/src/package/cppwinrt/nuget) to generate projection headers of the component which are used in the app code.

* To add your own property sheet to a C++ project:
* right-click the project node
* select Add, New Item, Visual C++, Property Sheets, Property Sheet (.props)
* edit the resulting property sheet file
* add the necessary project customizations
* select View, Other Windows, Property Manager
* right-click the project node
* select Add Existing Property Sheet...
* select the newly created property sheet file

### WinRTComponent

A simple C++ WinRT Component with a class returning a string

* The component is written using [C++/WinRT](https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/intro-to-using-cpp-with-winrt) instead of [C++/CX](https://docs.microsoft.com/en-us/cpp/cppcx/visual-c-language-reference-c-cx?view=vs-2017). Therefore, it requires an installed Nuget Package: [Microsoft.Windows.CppWinRT](https://www.nuget.org/packages/Microsoft.Windows.CppWinRT/).
* To manage the specific C++ Runtime Dependencies of the WinRT component, the app uses the [Microsoft.VCRTForwarders.140](https://aka.ms/vcrtfwdnuget) NuGet package.

### Building and running the sample

1. Load the Project solution.
2. Retarget the solution to the SDK version on your machine: Right click, Retarget solution
3. Build the WinRTComponent project.
4. Build the CppConsoleApp project
5. Run the app


49 changes: 49 additions & 0 deletions Samples/RegistrationFreeWinRT/cpp/RegFree_WinRT.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.572
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinRTComponent", "WinRTComponent\WinRTComponent.vcxproj", "{6B047504-BB89-4432-BBF1-1D67BD44FCC1}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CppConsoleApp", "CppConsoleApp\CppConsoleApp.vcxproj", "{98E9F08B-C3B5-455C-8469-845292506D68}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|ARM = Release|ARM
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Debug|ARM.ActiveCfg = Debug|ARM
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Debug|ARM.Build.0 = Debug|ARM
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Debug|x64.ActiveCfg = Debug|x64
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Debug|x64.Build.0 = Debug|x64
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Debug|x86.ActiveCfg = Debug|Win32
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Debug|x86.Build.0 = Debug|Win32
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Release|ARM.ActiveCfg = Release|ARM
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Release|ARM.Build.0 = Release|ARM
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Release|x64.ActiveCfg = Release|x64
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Release|x64.Build.0 = Release|x64
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Release|x86.ActiveCfg = Release|Win32
{6B047504-BB89-4432-BBF1-1D67BD44FCC1}.Release|x86.Build.0 = Release|Win32
{98E9F08B-C3B5-455C-8469-845292506D68}.Debug|ARM.ActiveCfg = Debug|Win32
{98E9F08B-C3B5-455C-8469-845292506D68}.Debug|x64.ActiveCfg = Debug|x64
{98E9F08B-C3B5-455C-8469-845292506D68}.Debug|x64.Build.0 = Debug|x64
{98E9F08B-C3B5-455C-8469-845292506D68}.Debug|x86.ActiveCfg = Debug|Win32
{98E9F08B-C3B5-455C-8469-845292506D68}.Debug|x86.Build.0 = Debug|Win32
{98E9F08B-C3B5-455C-8469-845292506D68}.Release|ARM.ActiveCfg = Release|Win32
{98E9F08B-C3B5-455C-8469-845292506D68}.Release|x64.ActiveCfg = Release|x64
{98E9F08B-C3B5-455C-8469-845292506D68}.Release|x64.Build.0 = Release|x64
{98E9F08B-C3B5-455C-8469-845292506D68}.Release|x86.ActiveCfg = Release|Win32
{98E9F08B-C3B5-455C-8469-845292506D68}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8718AA5E-3A4F-417A-BADF-E6458A9F6E04}
EndGlobalSection
EndGlobal
Loading

0 comments on commit d42a2ea

Please sign in to comment.