diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2020-11-24 18:40:05 +0100 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2020-11-24 18:40:05 +0100 |
commit | e75e5ddfea7fbb581d0be0fd680d06a567078b39 (patch) | |
tree | f0d2ef12d9545c78b59216eeaac73ed711854312 | |
parent | 578e9a52f81fb00177e32121b3a6628d1b667f1e (diff) | |
parent | 11ab26cd9642d6be7496df5e4e14486a51fc5419 (diff) |
Merge remote-tracking branch 'impl/VS-2017'
-rw-r--r-- | CheatEngineServer/CheatEngine.h | 74 | ||||
-rw-r--r-- | CheatEngineServer/CheatEngineServer.cpp | 83 | ||||
-rw-r--r-- | CheatEngineServer/CheatEngineServer.vcxproj | 168 | ||||
-rw-r--r-- | CheatEngineServer/CheatEngineServer.vcxproj.filters | 33 | ||||
-rw-r--r-- | CheatEngineServer/CommandDispatcher.cpp | 102 | ||||
-rw-r--r-- | CheatEngineServer/CommandDispatcher.h | 7 | ||||
-rw-r--r-- | KMemDriver.sln | 18 |
7 files changed, 479 insertions, 6 deletions
diff --git a/CheatEngineServer/CheatEngine.h b/CheatEngineServer/CheatEngine.h new file mode 100644 index 0000000..3cfbc32 --- /dev/null +++ b/CheatEngineServer/CheatEngine.h @@ -0,0 +1,74 @@ +#pragma once + +#include <winsock.h> + +#define CE_PORT "52736" + +typedef enum ce_command { + CMD_GETVERSION = 0, + CMD_CLOSECONNECTION, + CMD_TERMINATESERVER, + CMD_OPENPROCESS, + CMD_CREATETOOLHELP32SNAPSHOT, + CMD_PROCESS32FIRST, + CMD_PROCESS32NEXT, + CMD_CLOSEHANDLE, + CMD_VIRTUALQUERYEX, + CMD_READPROCESSMEMORY, + CMD_WRITEPROCESSMEMORY, + CMD_STARTDEBUG, + CMD_STOPDEBUG, + CMD_WAITFORDEBUGEVENT, + CMD_CONTINUEFROMDEBUGEVENT, + CMD_SETBREAKPOINT, + CMD_REMOVEBREAKPOINT, + CMD_SUSPENDTHREAD, + CMD_RESUMETHREAD, + CMD_GETTHREADCONTEXT, + CMD_SETTHREADCONTEXT, + CMD_GETARCHITECTURE, + CMD_MODULE32FIRST, + CMD_MODULE32NEXT, + CMD_GETSYMBOLLISTFROMFILE, + CMD_LOADEXTENSION, + CMD_ALLOC, + CMD_FREE, + CMD_CREATETHREAD, + CMD_LOADMODULE, + CMD_SPEEDHACK_SETSPEED, + CMD_VIRTUALQUERYEXFULL, + CMD_GETREGIONINFO, + CMD_AOBSCAN = 200, + CMD_COMMANDLIST2 = 255, + + CMD_MAX +} ce_command; + +static inline char const * ce_command_to_string(enum ce_command cmd) +{ + static char const * const cmd_map[] = { + "CMD_GETVERSION", "CMD_CLOSECONNECTION", "CMD_TERMINATESERVER", "CMD_OPENPROCESS", + "CMD_CREATETOOLHELP32SNAPSHOT", "CMD_PROCESS32FIRST", "CMD_PROCESS32NEXT", "CMD_CLOSEHANDLE", + "CMD_VIRTUALQUERYEX", "CMD_READPROCESSMEMORY", "CMD_WRITEPROCESSMEMORY", "CMD_STARTDEBUG", + "CMD_STOPDEBUG", "CMD_WAITFORDEBUGEVENT", "CMD_CONTINUEFROMDEBUGEVENT", "CMD_SETBREAKPOINT", + "CMD_REMOVEBREAKPOINT", "CMD_SUSPENDTHREAD", "CMD_RESUMETHREAD", "CMD_GETTHREADCONTEXT", + "CMD_SETTHREADCONTEXT", "CMD_GETARCHITECTURE", "CMD_MODULE32FIRST", "CMD_MODULE32NEXT", + "CMD_GETSYMBOLLISTFROMFILE", "CMD_LOADEXTENSION", "CMD_ALLOC", "CMD_FREE", "CMD_CREATETHREAD", + "CMD_LOADMODULE", "CMD_SPEEDHACK_SETSPEED", "CMD_VIRTUALQUERYEXFULL", "CMD_GETREGIONINFO", + "CMD_AOBSCAN", "CMD_COMMANDLIST2" + }; + if (cmd < 0 || cmd >= CMD_MAX) + { + return "Unknown Command"; + } + return cmd_map[cmd]; +} + +class CEConnection { +public: + explicit CEConnection(SOCKET s) : sock(s) {} + SOCKET getSocket(void) { return sock; } + void closeSocket(void) { closesocket(sock); } +private: + SOCKET sock; +};
\ No newline at end of file diff --git a/CheatEngineServer/CheatEngineServer.cpp b/CheatEngineServer/CheatEngineServer.cpp new file mode 100644 index 0000000..3dc6361 --- /dev/null +++ b/CheatEngineServer/CheatEngineServer.cpp @@ -0,0 +1,83 @@ +#include <winsock2.h> +#include <ws2tcpip.h> +#include <stdio.h> + +#include <iostream> +#include <thread> + +#include "CheatEngine.h" +#include "CommandDispatcher.h" + +static SOCKET make_accept_sock(const char *servspec) { + const int one = 1; + struct addrinfo hints = {}; + struct addrinfo *res = 0, *ai = 0, *ai4 = 0; + SOCKET sock; + + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE; + + if (servspec == NULL) + { + servspec = "0::0"; + } + std::cout << "Listen on " << servspec << ":" << CE_PORT << std::endl; + getaddrinfo(servspec, CE_PORT, &hints, &res); + + for (ai = res; ai; ai = ai->ai_next) { + if (ai->ai_family == PF_INET6) break; + else if (ai->ai_family == PF_INET) ai4 = ai; + } + ai = ai ? ai : ai4; + + sock = socket(ai->ai_family, SOCK_STREAM, 0); + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&one, sizeof(one)); + if (bind(sock, ai->ai_addr, (int)ai->ai_addrlen) != 0) + { + } + if (listen(sock, 256) != 0) + { + } + freeaddrinfo(res); + + return sock; +} + +static void new_connection(SOCKET sock) { + CEConnection cec(sock); + std::cout << "New connection .." << std::endl; + while (1) { + if (CheckForAndDispatchCommand(cec) != 0) + { + std::cout << "Closing connection .." << std::endl; + cec.closeSocket(); + break; + } + } +} + +static void accept_loop(const char *servspec) { + SOCKET sock = make_accept_sock(servspec); + + for (;;) { + SOCKET new_sock = accept(sock, 0, 0); + new_connection(new_sock); + //std::thread t(new_connection, new_sock); + //t.detach(); + } +} + +int main() +{ + WSADATA wsaData; + DWORD iResult; + + iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (iResult != 0) { + std::cout << "WSAStartup failed: " << iResult << "\n"; + return 1; + } + + accept_loop("0.0.0.0"); +}
\ No newline at end of file diff --git a/CheatEngineServer/CheatEngineServer.vcxproj b/CheatEngineServer/CheatEngineServer.vcxproj new file mode 100644 index 0000000..623d97d --- /dev/null +++ b/CheatEngineServer/CheatEngineServer.vcxproj @@ -0,0 +1,168 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <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="Globals"> + <VCProjectVersion>15.0</VCProjectVersion> + <ProjectGuid>{B6441DA8-67E2-47E9-9A10-CD5C90173EAC}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>CheatEngineServer</RootNamespace> + <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v141</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v141</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v141</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + <SpectreMitigation>false</SpectreMitigation> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v141</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + <SpectreMitigation>false</SpectreMitigation> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <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)'=='Release|Win32'"> + <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|x64'"> + <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)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);ws2_32.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);ws2_32.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ConformanceMode>true</ConformanceMode> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="CheatEngineServer.cpp" /> + <ClCompile Include="CommandDispatcher.cpp" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="CheatEngine.h" /> + <ClInclude Include="CommandDispatcher.h" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/CheatEngineServer/CheatEngineServer.vcxproj.filters b/CheatEngineServer/CheatEngineServer.vcxproj.filters new file mode 100644 index 0000000..2aead5c --- /dev/null +++ b/CheatEngineServer/CheatEngineServer.vcxproj.filters @@ -0,0 +1,33 @@ +<?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;ipp;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> + <ClCompile Include="CheatEngineServer.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="CommandDispatcher.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="CheatEngine.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="CommandDispatcher.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/CheatEngineServer/CommandDispatcher.cpp b/CheatEngineServer/CommandDispatcher.cpp new file mode 100644 index 0000000..1f9a7d1 --- /dev/null +++ b/CheatEngineServer/CommandDispatcher.cpp @@ -0,0 +1,102 @@ +#include "CommandDispatcher.h" + +#include <winsock.h> + +#include <iostream> + +int DispatchCommand(CEConnection & con, char command) +{ + enum ce_command cmd = (enum ce_command)command; + + std::cout << "Command: " << ce_command_to_string(cmd) << std::endl; + + switch (cmd) + { + case CMD_GETVERSION: + break; + case CMD_CLOSECONNECTION: + break; + case CMD_TERMINATESERVER: + break; + case CMD_OPENPROCESS: + break; + case CMD_CREATETOOLHELP32SNAPSHOT: + break; + case CMD_PROCESS32FIRST: + break; + case CMD_PROCESS32NEXT: + break; + case CMD_CLOSEHANDLE: + break; + case CMD_VIRTUALQUERYEX: + break; + case CMD_READPROCESSMEMORY: + break; + case CMD_WRITEPROCESSMEMORY: + break; + case CMD_STARTDEBUG: + break; + case CMD_STOPDEBUG: + break; + case CMD_WAITFORDEBUGEVENT: + break; + case CMD_CONTINUEFROMDEBUGEVENT: + break; + case CMD_SETBREAKPOINT: + break; + case CMD_REMOVEBREAKPOINT: + break; + case CMD_SUSPENDTHREAD: + break; + case CMD_RESUMETHREAD: + break; + case CMD_GETTHREADCONTEXT: + break; + case CMD_SETTHREADCONTEXT: + break; + case CMD_GETARCHITECTURE: + break; + case CMD_MODULE32FIRST: + break; + case CMD_MODULE32NEXT: + break; + case CMD_GETSYMBOLLISTFROMFILE: + break; + case CMD_LOADEXTENSION: + break; + case CMD_ALLOC: + break; + case CMD_FREE: + break; + case CMD_CREATETHREAD: + break; + case CMD_LOADMODULE: + break; + case CMD_SPEEDHACK_SETSPEED: + break; + case CMD_VIRTUALQUERYEXFULL: + break; + case CMD_GETREGIONINFO: + break; + case CMD_AOBSCAN: + break; + case CMD_COMMANDLIST2: + break; + } + + return 1; +} + +int CheckForAndDispatchCommand(CEConnection & con) +{ + int r; + char command; + + r = recv(con.getSocket(), &command, 1, 0); + if (r == 1) + { + return DispatchCommand(con, command); + } + + return 0; +}
\ No newline at end of file diff --git a/CheatEngineServer/CommandDispatcher.h b/CheatEngineServer/CommandDispatcher.h new file mode 100644 index 0000000..c4c6e55 --- /dev/null +++ b/CheatEngineServer/CommandDispatcher.h @@ -0,0 +1,7 @@ +#pragma once + +#include "CheatEngine.h" + +int CheckForAndDispatchCommand(CEConnection & con); + +int DispatchCommand(CEConnection & con, char command);
\ No newline at end of file diff --git a/KMemDriver.sln b/KMemDriver.sln index bb0274c..c38f0f1 100644 --- a/KMemDriver.sln +++ b/KMemDriver.sln @@ -14,6 +14,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IntegrationTest", "Integrat {B6790A97-6995-46B6-AD73-AC5BC4AC76DB} = {B6790A97-6995-46B6-AD73-AC5BC4AC76DB} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CheatEngineServer", "CheatEngineServer\CheatEngineServer.vcxproj", "{B6441DA8-67E2-47E9-9A10-CD5C90173EAC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -22,21 +24,25 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {5B65BD0E-C43C-41E3-A016-1CD0B092998F}.Debug|x64.ActiveCfg = Debug|x64 {5B65BD0E-C43C-41E3-A016-1CD0B092998F}.Debug|x64.Build.0 = Debug|x64 - {5B65BD0E-C43C-41E3-A016-1CD0B092998F}.Release|x64.ActiveCfg = Release|x64 - {5B65BD0E-C43C-41E3-A016-1CD0B092998F}.Release|x64.Build.0 = Release|x64 + {5B65BD0E-C43C-41E3-A016-1CD0B092998F}.Release|x64.ActiveCfg = Debug|x64 + {5B65BD0E-C43C-41E3-A016-1CD0B092998F}.Release|x64.Build.0 = Debug|x64 {5B65BD0E-C43C-41E3-A016-1CD0B092998F}.Release|x64.Deploy.0 = Release|x64 {B6790A97-6995-46B6-AD73-AC5BC4AC76DB}.Debug|x64.ActiveCfg = Debug|x64 {B6790A97-6995-46B6-AD73-AC5BC4AC76DB}.Debug|x64.Build.0 = Debug|x64 - {B6790A97-6995-46B6-AD73-AC5BC4AC76DB}.Release|x64.ActiveCfg = Release|x64 - {B6790A97-6995-46B6-AD73-AC5BC4AC76DB}.Release|x64.Build.0 = Release|x64 + {B6790A97-6995-46B6-AD73-AC5BC4AC76DB}.Release|x64.ActiveCfg = Debug|x64 + {B6790A97-6995-46B6-AD73-AC5BC4AC76DB}.Release|x64.Build.0 = Debug|x64 {E27E6F2C-154E-46AF-BED4-78D50C751565}.Debug|x64.ActiveCfg = Release|x64 {E27E6F2C-154E-46AF-BED4-78D50C751565}.Debug|x64.Build.0 = Release|x64 {E27E6F2C-154E-46AF-BED4-78D50C751565}.Release|x64.ActiveCfg = Release|x64 {E27E6F2C-154E-46AF-BED4-78D50C751565}.Release|x64.Build.0 = Release|x64 {AD4E6887-32BA-4CC9-924C-18F0ECAFB576}.Debug|x64.ActiveCfg = Debug|x64 {AD4E6887-32BA-4CC9-924C-18F0ECAFB576}.Debug|x64.Build.0 = Debug|x64 - {AD4E6887-32BA-4CC9-924C-18F0ECAFB576}.Release|x64.ActiveCfg = Release|x64 - {AD4E6887-32BA-4CC9-924C-18F0ECAFB576}.Release|x64.Build.0 = Release|x64 + {AD4E6887-32BA-4CC9-924C-18F0ECAFB576}.Release|x64.ActiveCfg = Debug|x64 + {AD4E6887-32BA-4CC9-924C-18F0ECAFB576}.Release|x64.Build.0 = Debug|x64 + {B6441DA8-67E2-47E9-9A10-CD5C90173EAC}.Debug|x64.ActiveCfg = Debug|x64 + {B6441DA8-67E2-47E9-9A10-CD5C90173EAC}.Debug|x64.Build.0 = Debug|x64 + {B6441DA8-67E2-47E9-9A10-CD5C90173EAC}.Release|x64.ActiveCfg = Debug|x64 + {B6441DA8-67E2-47E9-9A10-CD5C90173EAC}.Release|x64.Build.0 = Debug|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE |