From 52959b91dac5d9990513060b54f618a4150bfe9c Mon Sep 17 00:00:00 2001 From: Matej Kenda Date: Mon, 18 Nov 2024 17:06:20 +0100 Subject: [PATCH] DB logger sample (#4759) * sample(DBLogger): New sample to demonstrate DB logging to a file. (#4750) * sample(DBLogger): Create messages via SQL logger in a thread (#4750) * sample(DBLogger): Save messages from SQL files to an SQL database (works with SQLite) (#4750) * chore(Makefile): Data samples depend on PocoUtil (#4750) * sample(DBLogger): Refactored DBLogger with std::filesystem::directory_iterator and std::thread. * sample(DBLogger): Add missing include * sample(DBLogger): Extracted log scanning and inserting functionality to class SQLLogInserter. * sample(DBLogger): Create new logging table only when using demo messages option. * feat(DBLogger): VS projects * sample(DBLogger): Acquire options from configuration file. * feat(DBLogger): regenerate VS projects (progen file change) * sample(DBLogger): Add example DBLogger.properties file. * sample(DBLogger): Process as much as possible when stopping processing. * sample(DBLogger): Meaningful defaults in properties file. * sample(DBLogger): Verify validity of database session on startup. * sample(DBLogger): Configure demo SQL channel in properties file. * chore(DBLogger): style and warnings --------- Co-authored-by: Aleksandar Fabijanic Co-authored-by: Alex Fabijanic --- Data/SQLite/CMakeLists.txt | 4 - Data/samples/CMakeLists.txt | 1 + Data/samples/DBLogger/CMakeLists.txt | 14 + Data/samples/DBLogger/DBLogger.progen | 11 + Data/samples/DBLogger/DBLogger.properties | 67 ++ Data/samples/DBLogger/DBLogger_vs160.vcxproj | 663 ++++++++++++ .../DBLogger/DBLogger_vs160.vcxproj.filters | 17 + Data/samples/DBLogger/DBLogger_vs170.vcxproj | 978 ++++++++++++++++++ .../DBLogger/DBLogger_vs170.vcxproj.filters | 17 + Data/samples/DBLogger/DBLogger_vs90.vcproj | 451 ++++++++ Data/samples/DBLogger/Makefile | 19 + Data/samples/DBLogger/src/DBLogger.cpp | 285 +++++ Data/samples/DBLogger/src/SQLLogInserter.cpp | 257 +++++ Data/samples/DBLogger/src/SQLLogInserter.h | 134 +++ Data/samples/Makefile | 1 + Data/samples/samples_vs160.sln | 2 + Data/samples/samples_vs170.sln | 534 +++++----- Foundation/include/Poco/Thread.h | 2 +- Foundation/src/Timestamp.cpp | 2 +- Makefile | 2 +- Util/src/ServerApplication.cpp | 2 +- 21 files changed, 3208 insertions(+), 255 deletions(-) create mode 100644 Data/samples/DBLogger/CMakeLists.txt create mode 100644 Data/samples/DBLogger/DBLogger.progen create mode 100644 Data/samples/DBLogger/DBLogger.properties create mode 100644 Data/samples/DBLogger/DBLogger_vs160.vcxproj create mode 100644 Data/samples/DBLogger/DBLogger_vs160.vcxproj.filters create mode 100644 Data/samples/DBLogger/DBLogger_vs170.vcxproj create mode 100644 Data/samples/DBLogger/DBLogger_vs170.vcxproj.filters create mode 100644 Data/samples/DBLogger/DBLogger_vs90.vcproj create mode 100644 Data/samples/DBLogger/Makefile create mode 100644 Data/samples/DBLogger/src/DBLogger.cpp create mode 100644 Data/samples/DBLogger/src/SQLLogInserter.cpp create mode 100644 Data/samples/DBLogger/src/SQLLogInserter.h diff --git a/Data/SQLite/CMakeLists.txt b/Data/SQLite/CMakeLists.txt index 263acc1ad4..7141112e63 100644 --- a/Data/SQLite/CMakeLists.txt +++ b/Data/SQLite/CMakeLists.txt @@ -13,10 +13,6 @@ else() POCO_SOURCES(SQLITE_SRCS sqlite3 src/sqlite3.c ) - - POCO_HEADERS(SQLITE_SRCS sqlite3 - src/sqlite3.h - ) endif() # Version Resource diff --git a/Data/samples/CMakeLists.txt b/Data/samples/CMakeLists.txt index 58727cd3c4..7aee11a559 100644 --- a/Data/samples/CMakeLists.txt +++ b/Data/samples/CMakeLists.txt @@ -4,3 +4,4 @@ add_subdirectory(RowFormatter) add_subdirectory(Tuple) add_subdirectory(TypeHandler) add_subdirectory(WebNotifier) +add_subdirectory(DBLogger) diff --git a/Data/samples/DBLogger/CMakeLists.txt b/Data/samples/DBLogger/CMakeLists.txt new file mode 100644 index 0000000000..74fa2f6799 --- /dev/null +++ b/Data/samples/DBLogger/CMakeLists.txt @@ -0,0 +1,14 @@ + +# Sources +file(GLOB SRCS_G "src/*.cpp") +POCO_SOURCES_AUTO(DBLOGGER_SRCS ${SRCS_G}) + +# Headers +file(GLOB_RECURSE HDRS_G "src/*.h") +POCO_HEADERS_AUTO(DBLOGGER_SRCS ${HDRS_G}) + +add_executable(DBLogger ${DBLOGGER_SRCS}) + +target_link_libraries(DBLogger PUBLIC Poco::Util Poco::DataSQLite) + +add_custom_target(DBLogger-properties SOURCES DBLogger.properties) diff --git a/Data/samples/DBLogger/DBLogger.progen b/Data/samples/DBLogger/DBLogger.progen new file mode 100644 index 0000000000..939ad5c8f3 --- /dev/null +++ b/Data/samples/DBLogger/DBLogger.progen @@ -0,0 +1,11 @@ +vc.project.guid = ${vc.project.guidFromName} +vc.project.name = ${vc.project.baseName} +vc.project.target = ${vc.project.name} +vc.project.type = executable +vc.project.pocobase = ..\\..\\.. +vc.project.platforms = Win32 +vc.project.configurations = debug_shared, release_shared, debug_static_mt, release_static_mt, debug_static_md, release_static_md +vc.project.prototype = ${vc.project.name}_vs90.vcproj +vc.project.compiler.include = ..\\..\\..\\Foundation\\include;..\\..\\..\\JSON\\include;..\\..\\..\\XML\\include;..\\..\\..\\Util\\include;..\\..\\..\\Data\\include;..\\..\\..\\Data\\SQLParser;..\\Data\\SQLParser\\src;..\\..\\..\\Data\\SQLite\\include +vc.project.compiler.additionalOptions = /Zc:__cplusplus +vc.project.linker.dependencies = iphlpapi.lib diff --git a/Data/samples/DBLogger/DBLogger.properties b/Data/samples/DBLogger/DBLogger.properties new file mode 100644 index 0000000000..be72e27307 --- /dev/null +++ b/Data/samples/DBLogger/DBLogger.properties @@ -0,0 +1,67 @@ + +# +# Database inserter (destination) +# + +# +# Destination database parameters: +# +# (Mandatory) Database connector (for example sqlite) +# +DBLogger.connector = sqlite + +# +# (Mandatory) Database connection string (connector specific) +# +DBLogger.constring = demo-logs.db3 + +# +# (Optional) Number of workers to insert logs into the database in parallel (default = 2) +# +# DBLogger.workers = 2 + +# ---------------------------------------------------------------- + +# +# (Optional) Create demo SQL messages for testing purposes (default = false) +# +DBLogger.demo = true + +logging.loggers.root.channel = console +logging.loggers.root.level = information + +logging.channels.console.class = ColorConsoleChannel +logging.channels.console.pattern = %L%Y-%m-%d %H:%M:%S.%i [%p] : %t + +# +# SQL logger to create demo messages +# NOTE: Do not rename the logger. +# + +logging.loggers.sqldemo.channel = sql +logging.loggers.sqldemo.name = SQLDemo +logging.loggers.sqldemo.level = debug + +logging.channels.sql.class = SQLChannel +logging.channels.sql.name = DBLogger + +# +# (Mandatory) Directory to scan for .sql files +# +logging.channels.sql.directory = . + +# +# NOTE: Do not configure database to create SQL logger files +# +# logging.channels.sql.connector = SQLite +# logging.channels.sql.connect = DBLogger.db3 + +logging.channels.sql.timeout = 3000 +logging.channels.sql.minBatch = 5 +logging.channels.sql.maxBatch = 1000 +logging.channels.sql.bulk = true +logging.channels.sql.table = T_LOG + +logging.channels.sql.throw = false +logging.channels.sql.file = ${application.baseName}.sql + diff --git a/Data/samples/DBLogger/DBLogger_vs160.vcxproj b/Data/samples/DBLogger/DBLogger_vs160.vcxproj new file mode 100644 index 0000000000..1f0d774e95 --- /dev/null +++ b/Data/samples/DBLogger/DBLogger_vs160.vcxproj @@ -0,0 +1,663 @@ + + + + + debug_shared + Win32 + + + debug_shared + x64 + + + debug_static_md + Win32 + + + debug_static_md + x64 + + + debug_static_mt + Win32 + + + debug_static_mt + x64 + + + release_shared + Win32 + + + release_shared + x64 + + + release_static_md + Win32 + + + release_static_md + x64 + + + release_static_mt + Win32 + + + release_static_mt + x64 + + + + 17.0 + DBLogger + {2F659B70-DA60-39DD-A7C8-958805D371F9} + DBLogger + Win32Proj + + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + Application + MultiByte + v142 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>17.0.35219.272 + DBLoggerd + DBLoggerd + DBLoggerd + DBLogger + DBLogger + DBLogger + DBLoggerd + DBLoggerd + DBLoggerd + DBLogger + DBLogger + DBLogger + + + bin\ + obj\DBLogger\$(Configuration)\ + true + + + bin\ + obj\DBLogger\$(Configuration)\ + false + + + bin\static_mt\ + obj\DBLogger\$(Configuration)\ + true + + + bin\static_mt\ + obj\DBLogger\$(Configuration)\ + false + + + bin\static_md\ + obj\DBLogger\$(Configuration)\ + true + + + bin\static_md\ + obj\DBLogger\$(Configuration)\ + false + + + bin64\ + obj64\DBLogger\$(Configuration)\ + true + + + bin64\ + obj64\DBLogger\$(Configuration)\ + false + + + bin64\static_mt\ + obj64\DBLogger\$(Configuration)\ + true + + + bin64\static_mt\ + obj64\DBLogger\$(Configuration)\ + false + + + bin64\static_md\ + obj64\DBLogger\$(Configuration)\ + true + + + bin64\static_md\ + obj64\DBLogger\$(Configuration)\ + false + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;%(AdditionalDependencies) + bin\DBLoggerd.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;%(AdditionalDependencies) + bin\DBLogger.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX86 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin\static_mt\DBLoggerd.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin\static_mt\DBLogger.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX86 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin\static_md\DBLoggerd.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin\static_md\DBLogger.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX86 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;%(AdditionalDependencies) + bin64\DBLoggerd.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX64 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;%(AdditionalDependencies) + bin64\DBLogger.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX64 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin64\static_mt\DBLoggerd.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX64 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin64\static_mt\DBLogger.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX64 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin64\static_md\DBLoggerd.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX64 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin64\static_md\DBLogger.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX64 + + + + + true + stdcpp17 + stdc11 + + + true + stdcpp17 + stdc11 + + + + + diff --git a/Data/samples/DBLogger/DBLogger_vs160.vcxproj.filters b/Data/samples/DBLogger/DBLogger_vs160.vcxproj.filters new file mode 100644 index 0000000000..71f214217d --- /dev/null +++ b/Data/samples/DBLogger/DBLogger_vs160.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {8747f452-7c1b-44d2-b0e5-1681f3dab78e} + + + {f73ed930-0047-402d-8e77-3b9b9ddbc3a7} + + + + + + Source Files + + + \ No newline at end of file diff --git a/Data/samples/DBLogger/DBLogger_vs170.vcxproj b/Data/samples/DBLogger/DBLogger_vs170.vcxproj new file mode 100644 index 0000000000..19a6d7010e --- /dev/null +++ b/Data/samples/DBLogger/DBLogger_vs170.vcxproj @@ -0,0 +1,978 @@ + + + + + debug_shared + ARM64 + + + debug_shared + Win32 + + + debug_shared + x64 + + + debug_static_md + ARM64 + + + debug_static_md + Win32 + + + debug_static_md + x64 + + + debug_static_mt + ARM64 + + + debug_static_mt + Win32 + + + debug_static_mt + x64 + + + release_shared + ARM64 + + + release_shared + Win32 + + + release_shared + x64 + + + release_static_md + ARM64 + + + release_static_md + Win32 + + + release_static_md + x64 + + + release_static_mt + ARM64 + + + release_static_mt + Win32 + + + release_static_mt + x64 + + + + 17.0 + DBLogger + {2F659B70-DA60-39DD-A7C8-958805D371F9} + DBLogger + Win32Proj + + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>17.0.35219.272 + DBLoggerd + DBLoggerd + DBLoggerd + DBLogger + DBLogger + DBLogger + DBLoggerd + DBLoggerd + DBLoggerd + DBLogger + DBLogger + DBLogger + DBLoggerd + DBLoggerd + DBLoggerd + DBLogger + DBLogger + DBLogger + + + binA64\ + objA64\DBLogger\$(Configuration)\ + true + + + binA64\ + objA64\DBLogger\$(Configuration)\ + false + + + binA64\static_mt\ + objA64\DBLogger\$(Configuration)\ + true + + + binA64\static_mt\ + objA64\DBLogger\$(Configuration)\ + false + + + binA64\static_md\ + objA64\DBLogger\$(Configuration)\ + true + + + binA64\static_md\ + objA64\DBLogger\$(Configuration)\ + false + + + bin\ + obj\DBLogger\$(Configuration)\ + true + + + bin\ + obj\DBLogger\$(Configuration)\ + false + + + bin\static_mt\ + obj\DBLogger\$(Configuration)\ + true + + + bin\static_mt\ + obj\DBLogger\$(Configuration)\ + false + + + bin\static_md\ + obj\DBLogger\$(Configuration)\ + true + + + bin\static_md\ + obj\DBLogger\$(Configuration)\ + false + + + bin64\ + obj64\DBLogger\$(Configuration)\ + true + + + bin64\ + obj64\DBLogger\$(Configuration)\ + false + + + bin64\static_mt\ + obj64\DBLogger\$(Configuration)\ + true + + + bin64\static_mt\ + obj64\DBLogger\$(Configuration)\ + false + + + bin64\static_md\ + obj64\DBLogger\$(Configuration)\ + true + + + bin64\static_md\ + obj64\DBLogger\$(Configuration)\ + false + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName).exe + ..\..\..\libA64;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineARM64 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;%(AdditionalDependencies) + binA64\DBLogger.exe + ..\..\..\libA64;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineARM64 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + binA64\static_mt\DBLoggerd.exe + ..\..\..\libA64;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineARM64 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + binA64\static_mt\DBLogger.exe + ..\..\..\libA64;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineARM64 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + binA64\static_md\DBLoggerd.exe + ..\..\..\libA64;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineARM64 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName).exe + ..\..\..\libA64;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineARM64 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;%(AdditionalDependencies) + bin\DBLoggerd.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;%(AdditionalDependencies) + bin\DBLogger.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX86 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin\static_mt\DBLoggerd.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin\static_mt\DBLogger.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX86 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin\static_md\DBLoggerd.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin\static_md\DBLogger.exe + ..\..\..\lib;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX86 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;%(AdditionalDependencies) + bin64\DBLoggerd.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX64 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;%(AdditionalDependencies) + bin64\DBLogger.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX64 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin64\static_mt\DBLoggerd.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX64 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin64\static_mt\DBLogger.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX64 + + + + + Disabled + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + true + true + true + + Level3 + ProgramDatabase + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin64\static_md\DBLoggerd.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + true + true + $(OutDir)$(TargetName).pdb + Console + MachineX64 + + + + + MaxSpeed + OnlyExplicitInline + true + Speed + true + .\include;..\..\..\Foundation\include;..\..\..\JSON\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Data\include;..\..\..\Data\SQLParser;..\Data\SQLParser\src;..\..\..\Data\SQLite\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + true + true + true + + Level3 + + Default + $(OutDir)$(TargetName).pdb + /Zc:__cplusplus %(AdditionalOptions) + true + stdcpp17 + stdc11 + + + iphlpapi.lib;winmm.lib;iphlpapi.lib;%(AdditionalDependencies) + bin64\static_md\DBLogger.exe + ..\..\..\lib64;%(AdditionalLibraryDirectories) + false + Console + true + true + MachineX64 + + + + + true + stdcpp17 + stdc11 + + + true + stdcpp17 + stdc11 + + + + + diff --git a/Data/samples/DBLogger/DBLogger_vs170.vcxproj.filters b/Data/samples/DBLogger/DBLogger_vs170.vcxproj.filters new file mode 100644 index 0000000000..4f7a16b01b --- /dev/null +++ b/Data/samples/DBLogger/DBLogger_vs170.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {b2b53da4-c45b-4734-9096-6c64453817a6} + + + {654b0a83-74d5-4a84-b813-6493ce240b90} + + + + + + Source Files + + + \ No newline at end of file diff --git a/Data/samples/DBLogger/DBLogger_vs90.vcproj b/Data/samples/DBLogger/DBLogger_vs90.vcproj new file mode 100644 index 0000000000..4954238b5d --- /dev/null +++ b/Data/samples/DBLogger/DBLogger_vs90.vcproj @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Data/samples/DBLogger/Makefile b/Data/samples/DBLogger/Makefile new file mode 100644 index 0000000000..25fd65b704 --- /dev/null +++ b/Data/samples/DBLogger/Makefile @@ -0,0 +1,19 @@ +# +# Makefile +# +# Makefile for Poco Data DBLogger sample +# + +include $(POCO_BASE)/build/rules/global + +objects = DBLogger SQLLogInserter + +ifndef POCO_DATA_NO_SQL_PARSER + target_includes = $(POCO_BASE)/Data/src +endif + +target = DBLogger +target_version = 1 +target_libs = PocoDataSQLite PocoData PocoFoundation PocoUtil + +include $(POCO_BASE)/build/rules/exec diff --git a/Data/samples/DBLogger/src/DBLogger.cpp b/Data/samples/DBLogger/src/DBLogger.cpp new file mode 100644 index 0000000000..3edf46d25f --- /dev/null +++ b/Data/samples/DBLogger/src/DBLogger.cpp @@ -0,0 +1,285 @@ +// +// DBLogger.cpp +// +// This sample demonstrates the Data library recordset row formatting +// and streaming capabilities. +// +// Copyright (c) 2024, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 + + +#include "Poco/Data/SQLChannel.h" +#include "Poco/Data/SQLite/Connector.h" +#include "Poco/Util/HelpFormatter.h" +#include "Poco/Util/Option.h" +#include "Poco/Util/OptionException.h" +#include "Poco/Util/OptionSet.h" +#include "Poco/Util/ServerApplication.h" + +#include "SQLLogInserter.h" + +using namespace Poco::Data::Keywords; +using Poco::Util::ServerApplication; +using Poco::Util::Option; +using Poco::Util::OptionSet; +using Poco::Util::HelpFormatter; +using Poco::Util::OptionCallback; + +using namespace std::string_literals; + + +class DBLogger: public ServerApplication +{ +public: + + using WorkSet = std::unordered_set; + + DBLogger() + { + Poco::Data::SQLite::Connector::registerConnector(); + Poco::Data::SQLChannel::registerChannel(); + } + + ~DBLogger() override = default; + +protected: + void initialize(Application& self) override + { + if (_helpRequested) + { + return; + } + + loadConfiguration(); // load default configuration files, if present + Application::initialize(self); + + const auto& cfg { config() }; + + if (!cfg.has("logging.channels.sql.directory")) + { + throw Poco::Util::MissingOptionException ("Missing scanning directory."); + } + _inserter.setDirectory(cfg.getString("logging.channels.sql.directory") ); + + if (!cfg.has("DBLogger.connector")) + { + throw Poco::Util::MissingOptionException ("Missing database connector."); + } + _inserter.setConnector(cfg.getString("DBLogger.connector") ); + + if (!cfg.has("DBLogger.constring")) + { + throw Poco::Util::MissingOptionException ("Missing database connection string."); + } + _inserter.setConnectionString(cfg.getString("DBLogger.constring") ); + + _inserter.setNumWorkers(cfg.getUInt64("DBLogger.workers", 2) ); + _demoMessagesRequested = cfg.getBool("DBLogger.demo", false); + + logger().information("Directory: %s", _inserter.directory()); + logger().information("Database: %s, %s", _inserter.connector(), _inserter.connectionString()); + logger().information("Number of workers: %z", _inserter.numWorkers()); + + if (_demoMessagesRequested) + { + auto& dl = Poco::Logger::get("SQLDemo"); + auto* sqlChannel = dynamic_cast(dl.getChannel().get()); + if (sqlChannel == nullptr) + { + throw Poco::Util::UnexpectedArgumentException ("SQLDemo logger does not have SQL channel."); + } + + _tableName = cfg.getString("logging.channels.sql.table"); + + // Only delete and create table when creating demo messages + logger().information("Demo messages: Creating new table: %s", _tableName); + + Poco::Data::Session session (_inserter.connector(), _inserter.connectionString()); + + if (!session.isGood() || !session.isConnected()) + { + throw Poco::Data::NotConnectedException("Can't create demo database."); + } + + session << ("DROP TABLE IF EXISTS "s + _tableName), now; + const auto create { + "CREATE TABLE "s + _tableName + + " (Source VARCHAR, Name VARCHAR, ProcessId INTEGER, Thread VARCHAR,"s + + " ThreadId INTEGER, Priority INTEGER, Text VARCHAR, DateTime DATE)"s + }; + + session << create, now; + } + + _active = true; + _startTime.update(); + + _inserter.start(); + + logger().information("Started directory scanning."); + + if (_demoMessagesRequested) + { + _sqlSourceThread = std::thread(&DBLogger::createMessages, this); + logger().information("Started creating demo messages."); + } + } + + + void uninitialize() override + { + if (_helpRequested) + { + return; + } + + logger().information("Request to stop processing."); + + if (_demoMessagesRequested) + { + _sqlSourceThread.join(); + } + _inserter.stop(); + + logger().information( + "Created %z messages, processed %z files in %Ld ms.", + _created, _inserter.totalProcessed(), (_startTime.elapsed() / 1000) + ); + + Application::uninitialize(); + } + + + void reinitialize(Application& self) override + { + Application::reinitialize(self); + } + + + void defineOptions(OptionSet& options) override + { + Application::defineOptions(options); + + options.addOption( + Option("help", "h", "display help information on command line arguments") + .required(false) + .repeatable(false) + .callback(OptionCallback(this, &DBLogger::handleHelp)) + ); + + options.addOption( + Option("?", "?", "display help information on command line arguments") + .required(false) + .repeatable(false) + .callback(OptionCallback(this, &DBLogger::handleHelp)) + ); + + options.addOption( + Option("dir", "d", "directory path to scan for SQL log files") + .repeatable(false) + .argument("dir") + .binding("logging.channels.sql.directory") + ); + + options.addOption( + Option("connector", "c", "database connector") + .repeatable(false) + .argument("type") + .binding("DBLogger.connector") + ); + + options.addOption( + Option("constring", "s", "database connection string") + .repeatable(false) + .argument("cstr") + .binding("DBLogger.constring") + ); + + options.addOption( + Option("workers", "w", "number of workers inserting into database (default 2)") + .repeatable(false) + .argument("N") + .binding("DBLogger.workers") + ); + + // Only command line option + options.addOption( + Option("demo", "m", "create demo messages") + .required(false) + .repeatable(false) + .binding("DBLogger.demo") + .callback(OptionCallback(this, &DBLogger::handleCreateDemoMessages))); + + } + + + void handleHelp(const std::string& name, const std::string& value) + { + _helpRequested = true; + displayHelp(); + stopOptionsProcessing(); + } + + + void handleCreateDemoMessages(const std::string& name, const std::string& value) + { + config().setBool("DBLogger.demo", true); + } + + + void displayHelp() + { + HelpFormatter helpFormatter(options()); + helpFormatter.setCommand(commandName()); + helpFormatter.setUsage("OPTIONS"); + helpFormatter.format(std::cout); + } + + + void createMessages() + { + int i {0}; + auto& dl = Poco::Logger::get("SQLDemo"); + + while (_active) + { + for (int j = 0; j < 100 && _active; ++j) + { + dl.debug("%d Informational message", i); + ++i; + ++_created; + } + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + } + } + + + int main(const std::vector& args) override + { + if (!_helpRequested) + { + waitForTerminationRequest(); + + _active = false; + } + return Application::EXIT_OK; + } + +private: + bool _helpRequested {false}; + bool _demoMessagesRequested {false}; + + SQLLogInserter _inserter; + + Poco::Timestamp _startTime; + bool _active {false}; + + std::size_t _created{0}; + std::thread _sqlSourceThread; + std::string _tableName{"T_POCO_LOG"}; +}; + + +POCO_SERVER_MAIN(DBLogger) diff --git a/Data/samples/DBLogger/src/SQLLogInserter.cpp b/Data/samples/DBLogger/src/SQLLogInserter.cpp new file mode 100644 index 0000000000..82948bc5b3 --- /dev/null +++ b/Data/samples/DBLogger/src/SQLLogInserter.cpp @@ -0,0 +1,257 @@ +// +// SQLLogInserter.cpp +// +// This sample demonstrates the Data library recordset row formatting +// and streaming capabilities. +// +// Copyright (c) 2024, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 + +#include "SQLLogInserter.h" + +#include "Poco/Data/DataException.h" + +#include +#include +#include + + +using namespace Poco::Data::Keywords; +using namespace std::string_literals; + + +void SQLLogInserter::start() +{ + _dataSession = std::make_shared(_connector, _connectionString); + + if (!_dataSession->isGood() || !_dataSession->isConnected()) + { + throw Poco::Data::NotConnectedException("Can't connect to database."); + } + + _active = true; + _doneProcessing = false; + + _workSet.reserve(MAX_WORKSET_SIZE * 2); + + for (std::size_t i = 0; i < _numWorkers; i++) + { + _workers.emplace_back(&SQLLogInserter::runProcessingEntries, this); + } + + // Thread to scan the directory + _dirScanThread = std::thread(&SQLLogInserter::runDirectoryScan, this); +} + + +void SQLLogInserter::stop() +{ + _active = false; + _workCondition.notify_all(); + _underflowCondition.notify_all(); + + { + std::unique_lock l(_workMutex); + while (!_workSet.empty() || !_processingSet.empty()) + { + _completedCondition.wait_for(l, std::chrono::milliseconds(5000)); + } + } + + if (_dirScanThread.joinable()) + { + _dirScanThread.join(); + } + + // stop all worker threads + for (auto& w: _workers) + { + if (w.joinable()) { + w.join(); + } + } + + _dataSession->close(); +} + + +std::size_t SQLLogInserter::insertEntries(std::vector& entries) +{ + std::unique_lock l(_workMutex); + + while (_workSet.size() > MAX_WORKSET_SIZE && _active) + { + // Prevent creating too large work set + _underflowCondition.wait_for(l, std::chrono::milliseconds(200)); + } + + const auto wss = _workSet.size(); + // Do not re-insert entries that are being processed. + entries.erase( + std::remove_if( + entries.begin(), + entries.end(), + [this](const std::string& e) { + return this->_processingSet.find(e) != this->_processingSet.end(); + } + ), + entries.end() + ); + + _workSet.insert(entries.begin(), entries.end()); + _workCondition.notify_all(); + return _workSet.size() - wss; +} + + +std::string SQLLogInserter::popEntry() +{ + std::unique_lock l(_workMutex); + while (_workSet.empty() && !_doneProcessing) + { + _workCondition.wait_for(l, std::chrono::milliseconds(200)); + } + if (_workSet.empty()) + { + // Exited loop because of _doneProcessing + return {}; + } + auto entry = (*_workSet.begin()); + _processingSet.insert(entry); + _workSet.erase(_workSet.begin()); + if (_workSet.size() < MAX_WORKSET_SIZE) + { + _underflowCondition.notify_all(); + } + return entry; +} + + +void SQLLogInserter::removeEntry(const std::string& entry) +{ + std::unique_lock l(_workMutex); + auto i = _processingSet.find(entry); + if (i != _processingSet.end()) + { + _processingSet.erase(i); + } +} + + +void SQLLogInserter::processFile(const std::string &entry) +{ + if (entry.empty()) + { + return; + } + if (!std::filesystem::exists(entry)) + { + // Directory iterator can pick up files that were already processed + // Ignore such entries. + removeEntry(entry); + return; + } + bool success {false}; + try + { + const std::ifstream is(entry); + std::stringstream buffer; + buffer << is.rdbuf(); + const auto& sql { buffer.str() }; + + if (!sql.empty()) + { + auto& s = (*_dataSession); + + s << sql, now; + + ++_processed; + success = true; + } + } + catch (const Poco::Exception& e) + { + // Failed inserting into the database + } + if (success) + { + std::filesystem::remove(entry); + } + else + { + std::filesystem::path newPath {entry}; + newPath.replace_extension("err"s); + std::filesystem::rename(entry, newPath); + } + removeEntry(entry); +} + + +std::size_t SQLLogInserter::scanDirectory() +{ + std::vector newEntries; + newEntries.reserve(1000); + const std::filesystem::directory_iterator diriter( + _directory, + std::filesystem::directory_options::skip_permission_denied + ); + for (const auto& entry: diriter) + { + if (_dataSession == nullptr || !_dataSession->isGood()) + { + // Do not process files if database session is not healthy. + // Files will be processed later. + return 0; + } + + if (!std::filesystem::exists(entry)) + { + continue; + } + if (!entry.is_regular_file()) + { + continue; + } + if (entry.path().extension() != ".sql"s) + { + continue; + } + newEntries.push_back(entry.path().string()); + } + return insertEntries(newEntries); +} + + +void SQLLogInserter::runDirectoryScan() +{ + while (!_doneProcessing) + { + auto scheduled = scanDirectory(); + if (!_active && !_doneProcessing) + { + // Last scan directory to clean up + (void)scanDirectory(); + _doneProcessing = true; + _workCondition.notify_all(); + break; + } + if (scheduled == 0) + { + // No new files to be scheduled. Wait a bit. + std::this_thread::sleep_for(std::chrono::milliseconds(500)); + } + } +} + + +void SQLLogInserter::runProcessingEntries() +{ + while (!_workSet.empty() || !_doneProcessing) + { + auto entry = popEntry(); + processFile(entry); + } + _completedCondition.notify_all(); +} diff --git a/Data/samples/DBLogger/src/SQLLogInserter.h b/Data/samples/DBLogger/src/SQLLogInserter.h new file mode 100644 index 0000000000..2308169f48 --- /dev/null +++ b/Data/samples/DBLogger/src/SQLLogInserter.h @@ -0,0 +1,134 @@ +// +// SQLLogInserter.cpp +// +// This sample demonstrates the Data library recordset row formatting +// and streaming capabilities. +// +// Copyright (c) 2024, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 + +#ifndef SQLLogInserter_INCLUDED +#define SQLLogInserter_INCLUDED + +#include "Poco/Data/SQLChannel.h" + +#include +#include +#include +#include + +using namespace Poco::Data::Keywords; +using namespace std::string_literals; + +class SQLLogInserter +{ +public: + + SQLLogInserter() = default; + ~SQLLogInserter() = default; + + void start(); + void stop(); + + void setDirectory(const std::string& directory); + std::string directory() const; + + void setConnector(const std::string& connector); + std::string connector() const; + + void setConnectionString(const std::string& cs); + std::string connectionString() const; + + void setNumWorkers(std::size_t number); + std::size_t numWorkers() const; + + std::size_t totalProcessed() const; + +private: + + using WorkSet = std::unordered_set; + + std::size_t insertEntries(std::vector& entries); + std::string popEntry(); + void removeEntry(const std::string &entry); + void processFile(const std::string& entry); + std::size_t scanDirectory(); + + void runDirectoryScan(); + void runProcessingEntries(); + + static constexpr std::size_t MAX_WORKSET_SIZE {1000}; + + std::string _directory; + std::string _connector; + std::string _connectionString; + std::size_t _numWorkers {2}; + + bool _active {false}; + bool _doneProcessing {false}; + + std::size_t _processed{0}; + + std::thread _dirScanThread; + + WorkSet _workSet; + WorkSet _processingSet; + std::mutex _workMutex; + std::condition_variable _workCondition; + std::condition_variable _underflowCondition; + std::condition_variable _completedCondition; + + std::vector _workers; + + Poco::AutoPtr _sqlChannel; + std::shared_ptr _dataSession; +}; + +inline void SQLLogInserter::setDirectory(const std::string& directory) +{ + _directory = directory; +} + +inline std::string SQLLogInserter::directory() const +{ + return _directory; +} + +inline void SQLLogInserter::setConnector(const std::string& connector) +{ + _connector = connector; +} + +inline std::string SQLLogInserter::connector() const +{ + return _connector; +} + +inline void SQLLogInserter::setConnectionString(const std::string& cs) +{ + _connectionString = cs; +} + +inline std::string SQLLogInserter::connectionString() const +{ + return _connectionString; +} + +inline void SQLLogInserter::setNumWorkers(std::size_t number) +{ + _numWorkers = number; +} + +inline std::size_t SQLLogInserter::numWorkers() const +{ + return _numWorkers; +} + +inline std::size_t SQLLogInserter::totalProcessed() const +{ + return _processed; +} + +#endif // SQLLogInserter_INCLUDED diff --git a/Data/samples/Makefile b/Data/samples/Makefile index da7624067f..b98c559c00 100644 --- a/Data/samples/Makefile +++ b/Data/samples/Makefile @@ -13,3 +13,4 @@ projects: $(MAKE) -C RowFormatter $(MAKECMDGOALS) $(MAKE) -C Tuple $(MAKECMDGOALS) $(MAKE) -C WebNotifier $(MAKECMDGOALS) + $(MAKE) -C DBLogger $(MAKECMDGOALS) diff --git a/Data/samples/samples_vs160.sln b/Data/samples/samples_vs160.sln index a05a62a4a6..bfe2c550f6 100644 --- a/Data/samples/samples_vs160.sln +++ b/Data/samples/samples_vs160.sln @@ -12,6 +12,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TypeHandler", "TypeHandler\ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebNotifier", "WebNotifier\WebNotifier_vs160.vcxproj", "{BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DBLogger", "DBLogger\DBLogger_vs160.vcxproj", "{BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution debug_shared|Win32 = debug_shared|Win32 diff --git a/Data/samples/samples_vs170.sln b/Data/samples/samples_vs170.sln index 6f30352e87..7069e022e7 100644 --- a/Data/samples/samples_vs170.sln +++ b/Data/samples/samples_vs170.sln @@ -1,5 +1,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 +VisualStudioVersion = 17.11.35303.130 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Binding", "Binding\Binding_vs170.vcxproj", "{0F0DF069-83D1-378D-A949-8DF9A883B627}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RecordSet", "RecordSet\RecordSet_vs170.vcxproj", "{FEE20DCE-B9E3-30AB-A40C-B6A324997328}" @@ -12,352 +14,390 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TypeHandler", "TypeHandler\ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebNotifier", "WebNotifier\WebNotifier_vs170.vcxproj", "{BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DBLogger", "DBLogger\DBLogger_vs170.vcxproj", "{2F659B70-DA60-39DD-A7C8-958805D371F9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution debug_shared|ARM64 = debug_shared|ARM64 - release_shared|ARM64 = release_shared|ARM64 - debug_static_mt|ARM64 = debug_static_mt|ARM64 - release_static_mt|ARM64 = release_static_mt|ARM64 - debug_static_md|ARM64 = debug_static_md|ARM64 - release_static_md|ARM64 = release_static_md|ARM64 debug_shared|Win32 = debug_shared|Win32 - release_shared|Win32 = release_shared|Win32 - debug_static_mt|Win32 = debug_static_mt|Win32 - release_static_mt|Win32 = release_static_mt|Win32 - debug_static_md|Win32 = debug_static_md|Win32 - release_static_md|Win32 = release_static_md|Win32 debug_shared|x64 = debug_shared|x64 - release_shared|x64 = release_shared|x64 - debug_static_mt|x64 = debug_static_mt|x64 - release_static_mt|x64 = release_static_mt|x64 + debug_static_md|ARM64 = debug_static_md|ARM64 + debug_static_md|Win32 = debug_static_md|Win32 debug_static_md|x64 = debug_static_md|x64 + debug_static_mt|ARM64 = debug_static_mt|ARM64 + debug_static_mt|Win32 = debug_static_mt|Win32 + debug_static_mt|x64 = debug_static_mt|x64 + release_shared|ARM64 = release_shared|ARM64 + release_shared|Win32 = release_shared|Win32 + release_shared|x64 = release_shared|x64 + release_static_md|ARM64 = release_static_md|ARM64 + release_static_md|Win32 = release_static_md|Win32 release_static_md|x64 = release_static_md|x64 + release_static_mt|ARM64 = release_static_mt|ARM64 + release_static_mt|Win32 = release_static_mt|Win32 + release_static_mt|x64 = release_static_mt|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_shared|ARM64.ActiveCfg = debug_shared|ARM64 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_shared|ARM64.Build.0 = debug_shared|ARM64 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_shared|ARM64.Deploy.0 = debug_shared|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|ARM64.Build.0 = release_shared|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_shared|Win32.ActiveCfg = debug_shared|Win32 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_shared|Win32.Build.0 = debug_shared|Win32 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_shared|Win32.Deploy.0 = debug_shared|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|Win32.ActiveCfg = release_shared|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|Win32.Build.0 = release_shared|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|Win32.Deploy.0 = release_shared|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|Win32.Build.0 = release_static_md|Win32 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_shared|x64.ActiveCfg = debug_shared|x64 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_shared|x64.Build.0 = debug_shared|x64 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_shared|x64.Deploy.0 = debug_shared|x64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|x64.ActiveCfg = release_shared|x64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|x64.Build.0 = release_shared|x64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|x64.Deploy.0 = release_shared|x64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|x64.Build.0 = release_static_mt|x64 - {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|x64.ActiveCfg = debug_static_md|x64 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|x64.Build.0 = debug_static_md|x64 {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_md|x64.Deploy.0 = debug_static_md|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|ARM64.Build.0 = release_shared|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|Win32.ActiveCfg = release_shared|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|Win32.Build.0 = release_shared|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|Win32.Deploy.0 = release_shared|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|x64.ActiveCfg = release_shared|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|x64.Build.0 = release_shared|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_shared|x64.Deploy.0 = release_shared|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|Win32.Build.0 = release_static_md|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|x64.ActiveCfg = release_static_md|x64 {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|x64.Build.0 = release_static_md|x64 {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_md|x64.Deploy.0 = release_static_md|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|x64.Build.0 = release_static_mt|x64 + {0F0DF069-83D1-378D-A949-8DF9A883B627}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_shared|ARM64.ActiveCfg = debug_shared|ARM64 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_shared|ARM64.Build.0 = debug_shared|ARM64 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_shared|ARM64.Deploy.0 = debug_shared|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|ARM64.Build.0 = release_shared|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_shared|Win32.ActiveCfg = debug_shared|Win32 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_shared|Win32.Build.0 = debug_shared|Win32 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_shared|Win32.Deploy.0 = debug_shared|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|Win32.ActiveCfg = release_shared|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|Win32.Build.0 = release_shared|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|Win32.Deploy.0 = release_shared|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|Win32.Build.0 = release_static_md|Win32 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_shared|x64.ActiveCfg = debug_shared|x64 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_shared|x64.Build.0 = debug_shared|x64 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_shared|x64.Deploy.0 = debug_shared|x64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|x64.ActiveCfg = release_shared|x64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|x64.Build.0 = release_shared|x64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|x64.Deploy.0 = release_shared|x64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|x64.Build.0 = release_static_mt|x64 - {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|x64.ActiveCfg = debug_static_md|x64 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|x64.Build.0 = debug_static_md|x64 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_md|x64.Deploy.0 = debug_static_md|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|ARM64.Build.0 = release_shared|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|Win32.ActiveCfg = release_shared|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|Win32.Build.0 = release_shared|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|Win32.Deploy.0 = release_shared|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|x64.ActiveCfg = release_shared|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|x64.Build.0 = release_shared|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_shared|x64.Deploy.0 = release_shared|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|Win32.Build.0 = release_static_md|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|x64.ActiveCfg = release_static_md|x64 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|x64.Build.0 = release_static_md|x64 {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_md|x64.Deploy.0 = release_static_md|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|x64.Build.0 = release_static_mt|x64 + {FEE20DCE-B9E3-30AB-A40C-B6A324997328}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_shared|ARM64.ActiveCfg = debug_shared|ARM64 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_shared|ARM64.Build.0 = debug_shared|ARM64 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_shared|ARM64.Deploy.0 = debug_shared|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|ARM64.Build.0 = release_shared|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_shared|Win32.ActiveCfg = debug_shared|Win32 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_shared|Win32.Build.0 = debug_shared|Win32 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_shared|Win32.Deploy.0 = debug_shared|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|Win32.ActiveCfg = release_shared|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|Win32.Build.0 = release_shared|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|Win32.Deploy.0 = release_shared|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|Win32.Build.0 = release_static_md|Win32 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_shared|x64.ActiveCfg = debug_shared|x64 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_shared|x64.Build.0 = debug_shared|x64 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_shared|x64.Deploy.0 = debug_shared|x64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|x64.ActiveCfg = release_shared|x64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|x64.Build.0 = release_shared|x64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|x64.Deploy.0 = release_shared|x64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|x64.Build.0 = release_static_mt|x64 - {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|x64.ActiveCfg = debug_static_md|x64 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|x64.Build.0 = debug_static_md|x64 {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_md|x64.Deploy.0 = debug_static_md|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|ARM64.Build.0 = release_shared|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|Win32.ActiveCfg = release_shared|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|Win32.Build.0 = release_shared|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|Win32.Deploy.0 = release_shared|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|x64.ActiveCfg = release_shared|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|x64.Build.0 = release_shared|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_shared|x64.Deploy.0 = release_shared|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|Win32.Build.0 = release_static_md|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|x64.ActiveCfg = release_static_md|x64 {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|x64.Build.0 = release_static_md|x64 {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_md|x64.Deploy.0 = release_static_md|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|x64.Build.0 = release_static_mt|x64 + {133C62C7-3301-3F43-9ABF-14DF094A042F}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_shared|ARM64.ActiveCfg = debug_shared|ARM64 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_shared|ARM64.Build.0 = debug_shared|ARM64 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_shared|ARM64.Deploy.0 = debug_shared|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|ARM64.Build.0 = release_shared|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_shared|Win32.ActiveCfg = debug_shared|Win32 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_shared|Win32.Build.0 = debug_shared|Win32 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_shared|Win32.Deploy.0 = debug_shared|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|Win32.ActiveCfg = release_shared|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|Win32.Build.0 = release_shared|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|Win32.Deploy.0 = release_shared|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|Win32.Build.0 = release_static_md|Win32 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_shared|x64.ActiveCfg = debug_shared|x64 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_shared|x64.Build.0 = debug_shared|x64 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_shared|x64.Deploy.0 = debug_shared|x64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|x64.ActiveCfg = release_shared|x64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|x64.Build.0 = release_shared|x64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|x64.Deploy.0 = release_shared|x64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|x64.Build.0 = release_static_mt|x64 - {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|x64.ActiveCfg = debug_static_md|x64 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|x64.Build.0 = debug_static_md|x64 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_md|x64.Deploy.0 = debug_static_md|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|ARM64.Build.0 = release_shared|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|Win32.ActiveCfg = release_shared|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|Win32.Build.0 = release_shared|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|Win32.Deploy.0 = release_shared|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|x64.ActiveCfg = release_shared|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|x64.Build.0 = release_shared|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_shared|x64.Deploy.0 = release_shared|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|Win32.Build.0 = release_static_md|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|x64.ActiveCfg = release_static_md|x64 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|x64.Build.0 = release_static_md|x64 {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_md|x64.Deploy.0 = release_static_md|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|x64.Build.0 = release_static_mt|x64 + {F143DA5A-221A-3737-BCBA-F5BFD977038F}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_shared|ARM64.ActiveCfg = debug_shared|ARM64 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_shared|ARM64.Build.0 = debug_shared|ARM64 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_shared|ARM64.Deploy.0 = debug_shared|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|ARM64.Build.0 = release_shared|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_shared|Win32.ActiveCfg = debug_shared|Win32 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_shared|Win32.Build.0 = debug_shared|Win32 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_shared|Win32.Deploy.0 = debug_shared|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|Win32.ActiveCfg = release_shared|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|Win32.Build.0 = release_shared|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|Win32.Deploy.0 = release_shared|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|Win32.Build.0 = release_static_md|Win32 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_shared|x64.ActiveCfg = debug_shared|x64 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_shared|x64.Build.0 = debug_shared|x64 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_shared|x64.Deploy.0 = debug_shared|x64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|x64.ActiveCfg = release_shared|x64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|x64.Build.0 = release_shared|x64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|x64.Deploy.0 = release_shared|x64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|x64.Build.0 = release_static_mt|x64 - {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|x64.ActiveCfg = debug_static_md|x64 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|x64.Build.0 = debug_static_md|x64 {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_md|x64.Deploy.0 = debug_static_md|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|ARM64.Build.0 = release_shared|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|Win32.ActiveCfg = release_shared|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|Win32.Build.0 = release_shared|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|Win32.Deploy.0 = release_shared|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|x64.ActiveCfg = release_shared|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|x64.Build.0 = release_shared|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_shared|x64.Deploy.0 = release_shared|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|Win32.Build.0 = release_static_md|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|x64.ActiveCfg = release_static_md|x64 {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|x64.Build.0 = release_static_md|x64 {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_md|x64.Deploy.0 = release_static_md|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|x64.Build.0 = release_static_mt|x64 + {65A12348-CA20-324E-9F5E-7F82753C2C65}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_shared|ARM64.ActiveCfg = debug_shared|ARM64 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_shared|ARM64.Build.0 = debug_shared|ARM64 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_shared|ARM64.Deploy.0 = debug_shared|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|ARM64.Build.0 = release_shared|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_shared|Win32.ActiveCfg = debug_shared|Win32 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_shared|Win32.Build.0 = debug_shared|Win32 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_shared|Win32.Deploy.0 = debug_shared|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|Win32.ActiveCfg = release_shared|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|Win32.Build.0 = release_shared|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|Win32.Deploy.0 = release_shared|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|Win32.Build.0 = release_static_md|Win32 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_shared|x64.ActiveCfg = debug_shared|x64 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_shared|x64.Build.0 = debug_shared|x64 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_shared|x64.Deploy.0 = debug_shared|x64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|x64.ActiveCfg = release_shared|x64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|x64.Build.0 = release_shared|x64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|x64.Deploy.0 = release_shared|x64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|x64.Build.0 = release_static_mt|x64 - {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|ARM64.Deploy.0 = debug_static_md|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|x64.ActiveCfg = debug_static_md|x64 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|x64.Build.0 = debug_static_md|x64 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_md|x64.Deploy.0 = debug_static_md|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|ARM64.Deploy.0 = debug_static_mt|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|ARM64.Build.0 = release_shared|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|ARM64.Deploy.0 = release_shared|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|Win32.ActiveCfg = release_shared|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|Win32.Build.0 = release_shared|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|Win32.Deploy.0 = release_shared|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|x64.ActiveCfg = release_shared|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|x64.Build.0 = release_shared|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_shared|x64.Deploy.0 = release_shared|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|ARM64.Deploy.0 = release_static_md|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|Win32.Build.0 = release_static_md|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|Win32.Deploy.0 = release_static_md|Win32 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|x64.ActiveCfg = release_static_md|x64 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|x64.Build.0 = release_static_md|x64 {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_md|x64.Deploy.0 = release_static_md|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|ARM64.Deploy.0 = release_static_mt|ARM64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|x64.Build.0 = release_static_mt|x64 + {BACF8377-AD61-3B07-9BD5-6AEFCB0EC754}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_shared|ARM64.ActiveCfg = debug_shared|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_shared|ARM64.Build.0 = debug_shared|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_shared|Win32.ActiveCfg = debug_shared|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_shared|Win32.Build.0 = debug_shared|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_shared|x64.ActiveCfg = debug_shared|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_shared|x64.Build.0 = debug_shared|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_md|ARM64.ActiveCfg = debug_static_md|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_md|ARM64.Build.0 = debug_static_md|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_md|Win32.Build.0 = debug_static_md|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_md|x64.ActiveCfg = debug_static_md|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_md|x64.Build.0 = debug_static_md|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_mt|ARM64.ActiveCfg = debug_static_mt|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_mt|ARM64.Build.0 = debug_static_mt|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_shared|ARM64.ActiveCfg = release_shared|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_shared|ARM64.Build.0 = release_shared|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_shared|Win32.ActiveCfg = release_shared|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_shared|Win32.Build.0 = release_shared|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_shared|x64.ActiveCfg = release_shared|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_shared|x64.Build.0 = release_shared|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_md|ARM64.ActiveCfg = release_static_md|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_md|ARM64.Build.0 = release_static_md|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_md|Win32.ActiveCfg = release_static_md|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_md|Win32.Build.0 = release_static_md|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_md|x64.ActiveCfg = release_static_md|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_md|x64.Build.0 = release_static_md|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_mt|ARM64.ActiveCfg = release_static_mt|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_mt|ARM64.Build.0 = release_static_mt|ARM64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_mt|Win32.Build.0 = release_static_mt|Win32 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 + {2F659B70-DA60-39DD-A7C8-958805D371F9}.release_static_mt|x64.Build.0 = release_static_mt|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Foundation/include/Poco/Thread.h b/Foundation/include/Poco/Thread.h index 00d3da09e8..5b7e68b4e2 100644 --- a/Foundation/include/Poco/Thread.h +++ b/Foundation/include/Poco/Thread.h @@ -161,7 +161,7 @@ class Foundation_API Thread: private ThreadImpl /// The Thread ensures that the given target stays /// alive while the thread is running. - void start(Callable target, void* pData = 0); + void start(Callable target, void* pData = nullptr); /// Starts the thread with the given target and parameter. template diff --git a/Foundation/src/Timestamp.cpp b/Foundation/src/Timestamp.cpp index 1bfccf6139..bf612e7f17 100644 --- a/Foundation/src/Timestamp.cpp +++ b/Foundation/src/Timestamp.cpp @@ -133,7 +133,7 @@ void Timestamp::update() #else struct timeval tv; - if (gettimeofday(&tv, NULL)) + if (gettimeofday(&tv, nullptr)) throw SystemException("cannot get time of day"); _ts = TimeVal(tv.tv_sec)*resolution() + tv.tv_usec; diff --git a/Makefile b/Makefile index 7d7ee0d511..8a0ca3b766 100644 --- a/Makefile +++ b/Makefile @@ -262,7 +262,7 @@ DataTest-libexec: Data-libexec Data-tests: Data-libexec DataTest-libexec cppunit $(MAKE) -C $(POCO_BASE)/Data/testsuite -Data-samples: Data-libexec Data-libexec Data/SQLite-libexec Net-libexec +Data-samples: Data-libexec Data-libexec Data/SQLite-libexec Net-libexec Util-libexec $(MAKE) -C $(POCO_BASE)/Data/samples Data-clean: diff --git a/Util/src/ServerApplication.cpp b/Util/src/ServerApplication.cpp index 1a20db58b1..b9560d2190 100644 --- a/Util/src/ServerApplication.cpp +++ b/Util/src/ServerApplication.cpp @@ -523,7 +523,7 @@ void ServerApplication::waitForTerminationRequest() } sigaddset(&sset, SIGQUIT); sigaddset(&sset, SIGTERM); - sigprocmask(SIG_BLOCK, &sset, NULL); + sigprocmask(SIG_BLOCK, &sset, nullptr); int sig; sigwait(&sset, &sig); terminateCallback();