Index: ch.vc140.sln
===================================================================
diff -u -re2054db3fa2be3652ca376a318d49dbaba8539ed -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- ch.vc140.sln	(.../ch.vc140.sln)	(revision e2054db3fa2be3652ca376a318d49dbaba8539ed)
+++ ch.vc140.sln	(.../ch.vc140.sln)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -1,208 +1,262 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ch", "src\ch\ch.vc140.vcxproj", "{4B215B9A-58CA-4987-AC95-7DFC3043E100}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {D98F2D98-2352-4303-93EE-A5430C4E98AB}
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69} = {7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chext", "src\chext\chext.vc140.vcxproj", "{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {D98F2D98-2352-4303-93EE-A5430C4E98AB}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libictranslate", "src\libictranslate\libictranslate.vc140.vcxproj", "{DD1F3242-7EE4-4F41-8B8D-D833300C445F}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {D98F2D98-2352-4303-93EE-A5430C4E98AB}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ictranslate", "src\ictranslate\ictranslate.vc140.vcxproj", "{B0292250-B70C-4395-9859-F181FB113DA8}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {D98F2D98-2352-4303-93EE-A5430C4E98AB}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libchcore", "src\libchcore\libchcore.vc140.vcxproj", "{CBBF380B-7B16-4A1E-8194-758DAD7D8011}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {D98F2D98-2352-4303-93EE-A5430C4E98AB}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "ext\sqlite3\sqlite3.vc140.vcxproj", "{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gmock", "ext\googletest\gmock.vc140.vcxproj", "{D98F2D98-2352-4303-93EE-A5430C4E98AB}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblogger", "src\liblogger\liblogger.vc140.vcxproj", "{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ext", "ext", "{0E7F04BC-F111-4174-A665-F58CDF142934}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regchext", "src\regchext\regchext.vcxproj", "{767D21BE-A123-46CD-B5D6-E01714E2A981}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-		Testing Debug|Win32 = Testing Debug|Win32
-		Testing Debug|x64 = Testing Debug|x64
-		Testing Release|Win32 = Testing Release|Win32
-		Testing Release|x64 = Testing Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Debug|Win32.ActiveCfg = Debug|Win32
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Debug|Win32.Build.0 = Debug|Win32
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Debug|x64.ActiveCfg = Debug|x64
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Debug|x64.Build.0 = Debug|x64
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Release|Win32.ActiveCfg = Release|Win32
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Release|Win32.Build.0 = Release|Win32
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Release|x64.ActiveCfg = Release|x64
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Release|x64.Build.0 = Release|x64
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Debug|x64.Build.0 = Testing Debug|x64
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Release|Win32.Build.0 = Testing Release|Win32
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Release|x64.ActiveCfg = Testing Release|x64
-		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Release|x64.Build.0 = Testing Release|x64
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Debug|Win32.ActiveCfg = Debug|Win32
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Debug|Win32.Build.0 = Debug|Win32
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Debug|x64.ActiveCfg = Debug|x64
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Debug|x64.Build.0 = Debug|x64
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Release|Win32.ActiveCfg = Release|Win32
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Release|Win32.Build.0 = Release|Win32
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Release|x64.ActiveCfg = Release|x64
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Release|x64.Build.0 = Release|x64
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Debug|x64.Build.0 = Testing Debug|x64
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Release|Win32.Build.0 = Testing Release|Win32
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Release|x64.ActiveCfg = Testing Release|x64
-		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Release|x64.Build.0 = Testing Release|x64
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Debug|Win32.Build.0 = Debug|Win32
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Debug|x64.ActiveCfg = Debug|x64
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Debug|x64.Build.0 = Debug|x64
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Release|Win32.ActiveCfg = Release|Win32
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Release|Win32.Build.0 = Release|Win32
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Release|x64.ActiveCfg = Release|x64
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Release|x64.Build.0 = Release|x64
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Debug|x64.Build.0 = Testing Debug|x64
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Release|Win32.Build.0 = Testing Release|Win32
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Release|x64.ActiveCfg = Testing Release|x64
-		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Release|x64.Build.0 = Testing Release|x64
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Debug|Win32.ActiveCfg = Debug|Win32
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Debug|Win32.Build.0 = Debug|Win32
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Debug|x64.ActiveCfg = Debug|x64
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Debug|x64.Build.0 = Debug|x64
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Release|Win32.ActiveCfg = Release|Win32
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Release|Win32.Build.0 = Release|Win32
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Release|x64.ActiveCfg = Release|x64
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Release|x64.Build.0 = Release|x64
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Debug|x64.Build.0 = Testing Debug|x64
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Release|Win32.Build.0 = Testing Release|Win32
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Release|x64.ActiveCfg = Testing Release|x64
-		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Release|x64.Build.0 = Testing Release|x64
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Debug|Win32.ActiveCfg = Debug|Win32
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Debug|Win32.Build.0 = Debug|Win32
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Debug|x64.ActiveCfg = Debug|x64
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Debug|x64.Build.0 = Debug|x64
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Release|Win32.ActiveCfg = Release|Win32
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Release|Win32.Build.0 = Release|Win32
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Release|x64.ActiveCfg = Release|x64
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Release|x64.Build.0 = Release|x64
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Debug|x64.Build.0 = Testing Debug|x64
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Release|Win32.Build.0 = Testing Release|Win32
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Release|x64.ActiveCfg = Testing Release|x64
-		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Release|x64.Build.0 = Testing Release|x64
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Debug|Win32.Build.0 = Debug|Win32
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Debug|x64.ActiveCfg = Debug|x64
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Debug|x64.Build.0 = Debug|x64
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Release|Win32.ActiveCfg = Release|Win32
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Release|Win32.Build.0 = Release|Win32
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Release|x64.ActiveCfg = Release|x64
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Release|x64.Build.0 = Release|x64
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Debug|x64.Build.0 = Testing Debug|x64
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Release|Win32.Build.0 = Testing Release|Win32
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Release|x64.ActiveCfg = Testing Release|x64
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Release|x64.Build.0 = Testing Release|x64
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Debug|Win32.Build.0 = Debug|Win32
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Debug|x64.ActiveCfg = Debug|x64
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Debug|x64.Build.0 = Debug|x64
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Release|Win32.ActiveCfg = Release|Win32
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Release|Win32.Build.0 = Release|Win32
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Release|x64.ActiveCfg = Release|x64
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Release|x64.Build.0 = Release|x64
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Debug|x64.Build.0 = Testing Debug|x64
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Release|Win32.Build.0 = Testing Release|Win32
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Release|x64.ActiveCfg = Testing Release|x64
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Release|x64.Build.0 = Testing Release|x64
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Debug|Win32.Build.0 = Debug|Win32
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Debug|x64.ActiveCfg = Debug|x64
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Debug|x64.Build.0 = Debug|x64
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Release|Win32.ActiveCfg = Release|Win32
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Release|Win32.Build.0 = Release|Win32
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Release|x64.ActiveCfg = Release|x64
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Release|x64.Build.0 = Release|x64
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Debug|x64.Build.0 = Testing Debug|x64
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Release|Win32.Build.0 = Testing Release|Win32
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Release|x64.ActiveCfg = Testing Release|x64
-		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Release|x64.Build.0 = Testing Release|x64
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Debug|Win32.ActiveCfg = Debug|Win32
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Debug|Win32.Build.0 = Debug|Win32
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Debug|x64.ActiveCfg = Debug|x64
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Debug|x64.Build.0 = Debug|x64
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Release|Win32.ActiveCfg = Release|Win32
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Release|Win32.Build.0 = Release|Win32
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Release|x64.ActiveCfg = Release|x64
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Release|x64.Build.0 = Release|x64
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Debug|x64.Build.0 = Testing Debug|x64
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Release|Win32.Build.0 = Testing Release|Win32
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Release|x64.ActiveCfg = Testing Release|x64
-		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Release|x64.Build.0 = Testing Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(NestedProjects) = preSolution
-		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC} = {0E7F04BC-F111-4174-A665-F58CDF142934}
-		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {0E7F04BC-F111-4174-A665-F58CDF142934}
-	EndGlobalSection
-	GlobalSection(DPCodeReviewSolutionGUID) = preSolution
-		DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
-	EndGlobalSection
-EndGlobal
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ch", "src\ch\ch.vc140.vcxproj", "{4B215B9A-58CA-4987-AC95-7DFC3043E100}"
+	ProjectSection(ProjectDependencies) = postProject
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {D98F2D98-2352-4303-93EE-A5430C4E98AB}
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69} = {7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chext", "src\chext\chext.vc140.vcxproj", "{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}"
+	ProjectSection(ProjectDependencies) = postProject
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {D98F2D98-2352-4303-93EE-A5430C4E98AB}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libictranslate", "src\libictranslate\libictranslate.vc140.vcxproj", "{DD1F3242-7EE4-4F41-8B8D-D833300C445F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {D98F2D98-2352-4303-93EE-A5430C4E98AB}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ictranslate", "src\ictranslate\ictranslate.vc140.vcxproj", "{B0292250-B70C-4395-9859-F181FB113DA8}"
+	ProjectSection(ProjectDependencies) = postProject
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {D98F2D98-2352-4303-93EE-A5430C4E98AB}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libchcore", "src\libchcore\libchcore.vc140.vcxproj", "{CBBF380B-7B16-4A1E-8194-758DAD7D8011}"
+	ProjectSection(ProjectDependencies) = postProject
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {D98F2D98-2352-4303-93EE-A5430C4E98AB}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "ext\sqlite3\sqlite3.vc140.vcxproj", "{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gmock", "ext\googletest\gmock.vc140.vcxproj", "{D98F2D98-2352-4303-93EE-A5430C4E98AB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblogger", "src\liblogger\liblogger.vc140.vcxproj", "{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ext", "ext", "{0E7F04BC-F111-4174-A665-F58CDF142934}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regchext", "src\regchext\regchext.vcxproj", "{767D21BE-A123-46CD-B5D6-E01714E2A981}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libchengine", "src\libchengine\libchengine.vcxproj", "{6840F785-917F-46EE-BD56-C296C7A5B9E9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libstring", "src\libstring\libstring.vcxproj", "{5BD38175-9F48-417D-8E5B-7093B1873CE5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libserializer", "src\libserializer\libserializer.vcxproj", "{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+		Testing Debug|Win32 = Testing Debug|Win32
+		Testing Debug|x64 = Testing Debug|x64
+		Testing Release|Win32 = Testing Release|Win32
+		Testing Release|x64 = Testing Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Debug|Win32.Build.0 = Debug|Win32
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Debug|x64.ActiveCfg = Debug|x64
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Debug|x64.Build.0 = Debug|x64
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Release|Win32.ActiveCfg = Release|Win32
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Release|Win32.Build.0 = Release|Win32
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Release|x64.ActiveCfg = Release|x64
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Release|x64.Build.0 = Release|x64
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{4B215B9A-58CA-4987-AC95-7DFC3043E100}.Testing Release|x64.Build.0 = Testing Release|x64
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Debug|Win32.ActiveCfg = Debug|Win32
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Debug|Win32.Build.0 = Debug|Win32
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Debug|x64.ActiveCfg = Debug|x64
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Debug|x64.Build.0 = Debug|x64
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Release|Win32.ActiveCfg = Release|Win32
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Release|Win32.Build.0 = Release|Win32
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Release|x64.ActiveCfg = Release|x64
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Release|x64.Build.0 = Release|x64
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}.Testing Release|x64.Build.0 = Testing Release|x64
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Debug|Win32.Build.0 = Debug|Win32
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Debug|x64.ActiveCfg = Debug|x64
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Debug|x64.Build.0 = Debug|x64
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Release|Win32.ActiveCfg = Release|Win32
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Release|Win32.Build.0 = Release|Win32
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Release|x64.ActiveCfg = Release|x64
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Release|x64.Build.0 = Release|x64
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{DD1F3242-7EE4-4F41-8B8D-D833300C445F}.Testing Release|x64.Build.0 = Testing Release|x64
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Debug|Win32.Build.0 = Debug|Win32
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Debug|x64.ActiveCfg = Debug|x64
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Debug|x64.Build.0 = Debug|x64
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Release|Win32.ActiveCfg = Release|Win32
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Release|Win32.Build.0 = Release|Win32
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Release|x64.ActiveCfg = Release|x64
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Release|x64.Build.0 = Release|x64
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{B0292250-B70C-4395-9859-F181FB113DA8}.Testing Release|x64.Build.0 = Testing Release|x64
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Debug|Win32.ActiveCfg = Debug|Win32
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Debug|Win32.Build.0 = Debug|Win32
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Debug|x64.ActiveCfg = Debug|x64
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Debug|x64.Build.0 = Debug|x64
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Release|Win32.ActiveCfg = Release|Win32
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Release|Win32.Build.0 = Release|Win32
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Release|x64.ActiveCfg = Release|x64
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Release|x64.Build.0 = Release|x64
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{CBBF380B-7B16-4A1E-8194-758DAD7D8011}.Testing Release|x64.Build.0 = Testing Release|x64
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Debug|Win32.Build.0 = Debug|Win32
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Debug|x64.ActiveCfg = Debug|x64
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Debug|x64.Build.0 = Debug|x64
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Release|Win32.ActiveCfg = Release|Win32
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Release|Win32.Build.0 = Release|Win32
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Release|x64.ActiveCfg = Release|x64
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Release|x64.Build.0 = Release|x64
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC}.Testing Release|x64.Build.0 = Testing Release|x64
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Debug|Win32.Build.0 = Debug|Win32
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Debug|x64.ActiveCfg = Debug|x64
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Debug|x64.Build.0 = Debug|x64
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Release|Win32.ActiveCfg = Release|Win32
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Release|Win32.Build.0 = Release|Win32
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Release|x64.ActiveCfg = Release|x64
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Release|x64.Build.0 = Release|x64
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB}.Testing Release|x64.Build.0 = Testing Release|x64
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Debug|Win32.Build.0 = Debug|Win32
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Debug|x64.ActiveCfg = Debug|x64
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Debug|x64.Build.0 = Debug|x64
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Release|Win32.ActiveCfg = Release|Win32
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Release|Win32.Build.0 = Release|Win32
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Release|x64.ActiveCfg = Release|x64
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Release|x64.Build.0 = Release|x64
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{DF9957D4-3D95-4AC3-AD3F-DCBEA058F79D}.Testing Release|x64.Build.0 = Testing Release|x64
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Debug|Win32.ActiveCfg = Debug|Win32
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Debug|Win32.Build.0 = Debug|Win32
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Debug|x64.ActiveCfg = Debug|x64
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Debug|x64.Build.0 = Debug|x64
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Release|Win32.ActiveCfg = Release|Win32
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Release|Win32.Build.0 = Release|Win32
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Release|x64.ActiveCfg = Release|x64
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Release|x64.Build.0 = Release|x64
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{767D21BE-A123-46CD-B5D6-E01714E2A981}.Testing Release|x64.Build.0 = Testing Release|x64
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Debug|Win32.Build.0 = Debug|Win32
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Debug|x64.ActiveCfg = Debug|x64
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Debug|x64.Build.0 = Debug|x64
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Release|Win32.ActiveCfg = Release|Win32
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Release|Win32.Build.0 = Release|Win32
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Release|x64.ActiveCfg = Release|x64
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Release|x64.Build.0 = Release|x64
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{6840F785-917F-46EE-BD56-C296C7A5B9E9}.Testing Release|x64.Build.0 = Testing Release|x64
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Debug|Win32.Build.0 = Debug|Win32
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Debug|x64.ActiveCfg = Debug|x64
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Debug|x64.Build.0 = Debug|x64
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Release|Win32.ActiveCfg = Release|Win32
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Release|Win32.Build.0 = Release|Win32
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Release|x64.ActiveCfg = Release|x64
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Release|x64.Build.0 = Release|x64
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{5BD38175-9F48-417D-8E5B-7093B1873CE5}.Testing Release|x64.Build.0 = Testing Release|x64
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Debug|Win32.Build.0 = Debug|Win32
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Debug|x64.ActiveCfg = Debug|x64
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Debug|x64.Build.0 = Debug|x64
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Release|Win32.ActiveCfg = Release|Win32
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Release|Win32.Build.0 = Release|Win32
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Release|x64.ActiveCfg = Release|x64
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Release|x64.Build.0 = Release|x64
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Testing Debug|Win32.ActiveCfg = Testing Debug|Win32
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Testing Debug|Win32.Build.0 = Testing Debug|Win32
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Testing Debug|x64.ActiveCfg = Testing Debug|x64
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Testing Debug|x64.Build.0 = Testing Debug|x64
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Testing Release|Win32.ActiveCfg = Testing Release|Win32
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Testing Release|Win32.Build.0 = Testing Release|Win32
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Testing Release|x64.ActiveCfg = Testing Release|x64
+		{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}.Testing Release|x64.Build.0 = Testing Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{D41831F5-B2A5-4C92-9F15-1D9AB04722CC} = {0E7F04BC-F111-4174-A665-F58CDF142934}
+		{D98F2D98-2352-4303-93EE-A5430C4E98AB} = {0E7F04BC-F111-4174-A665-F58CDF142934}
+	EndGlobalSection
+	GlobalSection(DPCodeReviewSolutionGUID) = preSolution
+		DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
+	EndGlobalSection
+EndGlobal
Index: scripts/jenkins/prepare-portable-package.bat
===================================================================
diff -u -ra9d93c35d3ff0164cc6c0234feb5f598a168f86e -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- scripts/jenkins/prepare-portable-package.bat	(.../prepare-portable-package.bat)	(revision a9d93c35d3ff0164cc6c0234feb5f598a168f86e)
+++ scripts/jenkins/prepare-portable-package.bat	(.../prepare-portable-package.bat)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -15,6 +15,9 @@
 xcopy "%WORKSPACE%\bin\release\chext.dll" "%TmpDir%\32bit\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\regchext.exe" "%TmpDir%\32bit\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\libchcore32u.dll" "%TmpDir%\32bit\" || exit /B 1
+xcopy "%WORKSPACE%\bin\release\libchengine32u.dll" "%TmpDir%\32bit\" || exit /B 1
+xcopy "%WORKSPACE%\bin\release\libserializer32u.dll" "%TmpDir%\32bit\" || exit /B 1
+xcopy "%WORKSPACE%\bin\release\libstring32u.dll" "%TmpDir%\32bit\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\liblogger32u.dll" "%TmpDir%\32bit\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\libictranslate32u.dll" "%TmpDir%\32bit\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\ictranslate.exe" "%TmpDir%\32bit\" || exit /B 1
@@ -33,6 +36,9 @@
 xcopy "%WORKSPACE%\bin\release\regchext64.exe" "%TmpDir%\64bit\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\libchcore64u.dll" "%TmpDir%\64bit\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\liblogger64u.dll" "%TmpDir%\64bit\" || exit /B 1
+xcopy "%WORKSPACE%\bin\release\libchengine64u.dll" "%TmpDir%\64bit\" || exit /B 1
+xcopy "%WORKSPACE%\bin\release\libserializer64u.dll" "%TmpDir%\64bit\" || exit /B 1
+xcopy "%WORKSPACE%\bin\release\libstring64u.dll" "%TmpDir%\64bit\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\libictranslate64u.dll" "%TmpDir%\64bit\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\ictranslate64.exe" "%TmpDir%\64bit\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\sqlite3_64.dll" "%TmpDir%\64bit\" || exit /B 1
@@ -46,6 +52,9 @@
 rem Prepare 32bit shell extension for 64bit build
 xcopy "%WORKSPACE%\bin\release\chext.dll" "%TmpDir%\64bit\ShellExt32\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\libchcore32u.dll" "%TmpDir%\64bit\ShellExt32\" || exit /B 1
+xcopy "%WORKSPACE%\bin\release\libchengine32u.dll" "%TmpDir%\64bit\ShellExt32\" || exit /B 1
+xcopy "%WORKSPACE%\bin\release\libserializer32u.dll" "%TmpDir%\64bit\ShellExt32\" || exit /B 1
+xcopy "%WORKSPACE%\bin\release\libstring32u.dll" "%TmpDir%\64bit\ShellExt32\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\liblogger32u.dll" "%TmpDir%\64bit\ShellExt32\" || exit /B 1
 xcopy "%WORKSPACE%\bin\release\sqlite3_32.dll" "%TmpDir%\64bit\ShellExt32\" || exit /B 1
 xcopy "%VSInstallDirX86%\VC\redist\x86\Microsoft.VC120.CRT\*" "%TmpDir%\64bit\ShellExt32\" || exit /B 1
Index: scripts/setup.iss
===================================================================
diff -u -r6ec02b46e99f231525621ac41aecd92f13a9b901 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- scripts/setup.iss	(.../setup.iss)	(revision 6ec02b46e99f231525621ac41aecd92f13a9b901)
+++ scripts/setup.iss	(.../setup.iss)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -1,192 +1,218 @@
-; Script generated by the Inno Setup Script Wizard.
-; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
-#define SETUP_COMPILER 1
-#include "../src/common/version.h"
-#define MyAppName PRODUCT_NAME
-#define MyAppVerName PRODUCT_NAME + " " + PRODUCT_VERSION
-#define MyAppPublisher "Józef Starosczyk"
-#define MyAppURL "http://www.copyhandler.com"
-
-#define InstallerFilename "chsetup-" + PRODUCT_VERSION
-
-#define ExeFilename32 "ch.exe"
-#define ExeFilename64 "ch64.exe"
-#define ShellExtFilename32 "chext.dll"
-#define ShellExtFilename64 "chext64.dll"
-#define LibCHCoreFilename32 "libchcore32u.dll"
-#define LibCHCoreFilename64 "libchcore64u.dll"
-#define LibLoggerFilename32 "liblogger32u.dll"
-#define LibLoggerFilename64 "liblogger64u.dll"
-#define LibictranslateFilename32 "libictranslate32u.dll"
-#define LibictranslateFilename64 "libictranslate64u.dll"
-#define ICTranslateFilename32 "ictranslate.exe"
-#define ICTranslateFilename64 "ictranslate64.exe"
-#define SQLite32 "sqlite3_32.dll"
-#define SQLite64 "sqlite3_64.dll"
-#define RegCHExtFilename32 "regchext.exe"
-#define RegCHExtFilename64 "regchext64.exe"
-#define MSRedistDir32 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\x86"
-#define MSRedistDir64 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\x64"
-#define DbgHelp32 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Remote Debugger\x86"
-#define DbgHelp64 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Remote Debugger\x64"
-
-[Setup]
-AppName={#MyAppName}
-AppVerName={#MyAppVerName}
-AppPublisher={#MyAppPublisher}
-AppPublisherURL={#MyAppURL}
-AppSupportURL={#MyAppURL}
-AppUpdatesURL={#MyAppURL}
-DefaultDirName={pf}\{#MyAppName}
-DefaultGroupName={#MyAppName}
-AllowNoIcons=true
-LicenseFile=..\License.txt
-OutputDir=.\
-OutputBaseFilename={#InstallerFilename}
-Compression=lzma/ultra
-SolidCompression=true
-AppMutex=_Copy handler_ instance
-ShowLanguageDialog=auto
-AppID={{9CF6A157-F0E8-4216-B229-C0CA8204BE2C}
-InternalCompressLevel=ultra
-AppCopyright={#COPYRIGHT_INFO}
-AppVersion={#PRODUCT_VERSION}
-UninstallDisplayIcon={app}\{#ExeFilename32}
-AppContact=ixen(at)copyhandler(dot)com
-VersionInfoVersion=
-VersionInfoTextVersion={#PRODUCT_VERSION}
-VersionInfoCopyright={#COPYRIGHT_INFO}
-ChangesEnvironment=true
-ArchitecturesInstallIn64BitMode=x64
-
-[Languages]
-Name: "english"; MessagesFile: "compiler:Default.isl"
-Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"
-Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl"
-Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl"
-Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
-Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"
-Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
-Name: "french"; MessagesFile: "compiler:Languages\French.isl"
-Name: "german"; MessagesFile: "compiler:Languages\German.isl"
-Name: "greek"; MessagesFile: "compiler:Languages\Greek.isl"
-Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
-Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl"
-Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
-Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
-Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
-Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
-Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
-Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
-Name: "serbiancyrillic"; MessagesFile: "compiler:Languages\SerbianCyrillic.isl"
-Name: "serbianlatin"; MessagesFile: "compiler:Languages\SerbianLatin.isl"
-Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl"
-Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
-Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"
-
-[Tasks]
-Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
-Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
-Name: startatboot; Description: {cm:StartAtBoot}; Flags: unchecked
-
-[Files]
-Source: "..\bin\release\help\*.chm"; DestDir: "{app}\help"; Flags: ignoreversion recursesubdirs createallsubdirs restartreplace uninsrestartdelete
-Source: "..\bin\release\langs\*.lng"; DestDir: "{app}\langs"; Flags: ignoreversion recursesubdirs createallsubdirs restartreplace uninsrestartdelete
-Source: "..\License.txt"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete
-
-; binaries - 32bit
-Source: "..\bin\release\{#ExeFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
-Source: "..\bin\release\{#ShellExtFilename32}"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete regserver replacesameversion; Check: not Is64BitInstallMode
-Source: "..\bin\release\{#RegCHExtFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
-Source: "..\bin\release\{#LibCHCoreFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
-Source: "..\bin\release\{#LibLoggerFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
-Source: "..\bin\release\{#LibictranslateFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
-Source: "..\bin\release\{#ICTranslateFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
-Source: "..\bin\release\{#SQLite32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
-
-Source: "{#MSRedistDir32}\Microsoft.VC120.CRT\*"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
-Source: "{#MSRedistDir32}\Microsoft.VC120.MFC\*"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
-Source: "{#DbgHelp32}\dbghelp.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
-
-; binaries - 64bit
-Source: "..\bin\release\{#ExeFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "..\bin\release\{#ShellExtFilename64}"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete regserver replacesameversion; Check: Is64BitInstallMode
-Source: "..\bin\release\{#RegCHExtFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "..\bin\release\{#LibCHCoreFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "..\bin\release\{#LibLoggerFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "..\bin\release\{#LibictranslateFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "..\bin\release\{#ICTranslateFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "..\bin\release\{#SQLite64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-
-Source: "{#MSRedistDir64}\Microsoft.VC120.CRT\*"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "{#MSRedistDir64}\Microsoft.VC120.MFC\*"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "{#DbgHelp64}\dbghelp.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-
-; binaries - 32bit shellext on 64bit system
-Source: "..\bin\release\{#ShellExtFilename32}"; DestDir: "{app}\ShellExt32"; Flags: restartreplace uninsrestartdelete regserver replacesameversion; Check: Is64BitInstallMode
-Source: "..\bin\release\{#LibCHCoreFilename32}"; DestDir: "{app}\ShellExt32"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "..\bin\release\{#LibLoggerFilename32}"; DestDir: "{app}\ShellExt32"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "..\bin\release\{#SQLite32}"; DestDir: "{app}\ShellExt32"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-Source: "{#MSRedistDir32}\Microsoft.VC120.CRT\*"; DestDir: "{app}\ShellExt32"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
-
-; NOTE: Don't use "Flags: ignoreversion" on any shared system files
-[Icons]
-Name: {group}\{#MyAppName}; Filename: {app}\{code:ExpandArch|ExeFilename}; WorkingDir: {app}
-Name: {group}\{cm:TranslateCopyHandler}; Filename: {app}\{code:ExpandArch|ICTranslateFilename}; Parameters: """{app}\langs\english.lng"""; WorkingDir: {app}\lang
-Name: {group}\{cm:UninstallCopyHandler}; Filename: {uninstallexe}; WorkingDir: {app}
-Name: {userdesktop}\{#MyAppName}; Filename: {app}\{code:ExpandArch|ExeFilename}; Tasks: desktopicon; WorkingDir: {app}
-Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{code:ExpandArch|ExeFilename}; Tasks: quicklaunchicon; WorkingDir: {app}
-
-[Run]
-Filename: "{app}\{code:ExpandArch|ExeFilename}"; Flags: nowait postinstall skipifsilent; Description: "{cm:LaunchProgram,{#MyAppName}}"
-
-[Registry]
-Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: none; ValueName: "Copy Handler"; Flags: deletevalue uninsdeletevalue
-Root: "HKCU"; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: none; ValueName: "Copy Handler"; Flags: uninsdeletevalue
-
-[Dirs]
-Name: {app}\help; Flags: uninsalwaysuninstall
-Name: {app}\langs; Flags: uninsalwaysuninstall
-
-[CustomMessages]
-TranslateCopyHandler=Translate Copy Handler
-polish.TranslateCopyHandler=Przetłumacz program Copy Handler
-UninstallCopyHandler=Uninstall Copy Handler
-polish.UninstallCopyHandler=Odinstaluj program Copy Handler
-StartAtBoot=Run program at system startup
-polish.StartAtBoot=Uruchom program przy starcie systemu
-
-[ThirdParty]
-CompileLogMethod=append
-
-[Code]
-function ExpandArch(ConstantStr: String): String;
-begin
-	if Is64BitInstallMode then
-	begin
-		case ConstantStr of
-			'ExeFilename': Result := '{#ExeFilename64}';
-			'ICTranslateFilename': Result := '{#ICTranslateFilename64}';
-		end;
-	end
-	else
-	begin
-		case ConstantStr of
-			'ExeFilename': Result := '{#ExeFilename32}';
-			'ICTranslateFilename': Result := '{#ICTranslateFilename32}';
-		end;
-	end;
-end;
-
-procedure CurStepChanged(CurStep: TSetupStep);
-var
-  ResultCode: Integer;
-begin
-    if CurStep = ssPostInstall then
-    begin
-        if IsTaskSelected('startatboot') then
-            ExecAsOriginalUser(ExpandConstant('{app}\{code:ExpandArch|ExeFilename}'), '--EnableLaunchAtStartup=1', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
-        else
-            ExecAsOriginalUser(ExpandConstant('{app}\{code:ExpandArch|ExeFilename}'), '--EnableLaunchAtStartup=0', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
-    end;
-end;
+; Script generated by the Inno Setup Script Wizard.
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
+#define SETUP_COMPILER 1
+#include "../src/common/version.h"
+#define MyAppName PRODUCT_NAME
+#define MyAppVerName PRODUCT_NAME + " " + PRODUCT_VERSION
+#define MyAppPublisher "Józef Starosczyk"
+#define MyAppURL "http://www.copyhandler.com"
+
+#define InstallerFilename "chsetup-" + PRODUCT_VERSION
+
+#define ExeFilename32 "ch.exe"
+#define ExeFilename64 "ch64.exe"
+
+#define ShellExtFilename32 "chext.dll"
+#define ShellExtFilename64 "chext64.dll"
+
+#define LibCHCoreFilename32 "libchcore32u.dll"
+#define LibCHCoreFilename64 "libchcore64u.dll"
+
+#define LibCHEngineFilename32 "libchengine32u.dll"
+#define LibCHEngineFilename64 "libchengine64u.dll"
+
+#define LibSerializerFilename32 "libserializer32u.dll"
+#define LibSerializerFilename64 "libserializer64u.dll"
+
+#define LibStringFilename32 "libstring32u.dll"
+#define LibStringFilename64 "libstring64u.dll"
+
+#define LibLoggerFilename32 "liblogger32u.dll"
+#define LibLoggerFilename64 "liblogger64u.dll"
+
+#define LibictranslateFilename32 "libictranslate32u.dll"
+#define LibictranslateFilename64 "libictranslate64u.dll"
+
+#define ICTranslateFilename32 "ictranslate.exe"
+#define ICTranslateFilename64 "ictranslate64.exe"
+
+#define SQLite32 "sqlite3_32.dll"
+#define SQLite64 "sqlite3_64.dll"
+
+#define RegCHExtFilename32 "regchext.exe"
+#define RegCHExtFilename64 "regchext64.exe"
+
+#define MSRedistDir32 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\x86"
+#define MSRedistDir64 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\x64"
+#define DbgHelp32 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Remote Debugger\x86"
+#define DbgHelp64 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Remote Debugger\x64"
+
+[Setup]
+AppName={#MyAppName}
+AppVerName={#MyAppVerName}
+AppPublisher={#MyAppPublisher}
+AppPublisherURL={#MyAppURL}
+AppSupportURL={#MyAppURL}
+AppUpdatesURL={#MyAppURL}
+DefaultDirName={pf}\{#MyAppName}
+DefaultGroupName={#MyAppName}
+AllowNoIcons=true
+LicenseFile=..\License.txt
+OutputDir=.\
+OutputBaseFilename={#InstallerFilename}
+Compression=lzma/ultra
+SolidCompression=true
+AppMutex=_Copy handler_ instance
+ShowLanguageDialog=auto
+AppID={{9CF6A157-F0E8-4216-B229-C0CA8204BE2C}
+InternalCompressLevel=ultra
+AppCopyright={#COPYRIGHT_INFO}
+AppVersion={#PRODUCT_VERSION}
+UninstallDisplayIcon={app}\{#ExeFilename32}
+AppContact=ixen(at)copyhandler(dot)com
+VersionInfoVersion=
+VersionInfoTextVersion={#PRODUCT_VERSION}
+VersionInfoCopyright={#COPYRIGHT_INFO}
+ChangesEnvironment=true
+ArchitecturesInstallIn64BitMode=x64
+
+[Languages]
+Name: "english"; MessagesFile: "compiler:Default.isl"
+Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"
+Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl"
+Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl"
+Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
+Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"
+Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
+Name: "french"; MessagesFile: "compiler:Languages\French.isl"
+Name: "german"; MessagesFile: "compiler:Languages\German.isl"
+Name: "greek"; MessagesFile: "compiler:Languages\Greek.isl"
+Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
+Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl"
+Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
+Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
+Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
+Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
+Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
+Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
+Name: "serbiancyrillic"; MessagesFile: "compiler:Languages\SerbianCyrillic.isl"
+Name: "serbianlatin"; MessagesFile: "compiler:Languages\SerbianLatin.isl"
+Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl"
+Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
+Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"
+
+[Tasks]
+Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
+Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
+Name: startatboot; Description: {cm:StartAtBoot}; Flags: unchecked
+
+[Files]
+Source: "..\bin\release\help\*.chm"; DestDir: "{app}\help"; Flags: ignoreversion recursesubdirs createallsubdirs restartreplace uninsrestartdelete
+Source: "..\bin\release\langs\*.lng"; DestDir: "{app}\langs"; Flags: ignoreversion recursesubdirs createallsubdirs restartreplace uninsrestartdelete
+Source: "..\License.txt"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete
+
+; binaries - 32bit
+Source: "..\bin\release\{#ExeFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#ShellExtFilename32}"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete regserver replacesameversion; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#RegCHExtFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibCHCoreFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibCHEngineFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibSerializerFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibStringFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibLoggerFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibictranslateFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#ICTranslateFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#SQLite32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+
+Source: "{#MSRedistDir32}\Microsoft.VC120.CRT\*"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "{#MSRedistDir32}\Microsoft.VC120.MFC\*"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "{#DbgHelp32}\dbghelp.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+
+; binaries - 64bit
+Source: "..\bin\release\{#ExeFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "..\bin\release\{#ShellExtFilename64}"; DestDir: "{app}"; Flags: restartreplace uninsrestartdelete regserver replacesameversion; Check: Is64BitInstallMode
+Source: "..\bin\release\{#RegCHExtFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "..\bin\release\{#LibCHCoreFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "..\bin\release\{#LibCHEngineFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibSerializerFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibStringFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibLoggerFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "..\bin\release\{#LibictranslateFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "..\bin\release\{#ICTranslateFilename64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "..\bin\release\{#SQLite64}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+
+Source: "{#MSRedistDir64}\Microsoft.VC120.CRT\*"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "{#MSRedistDir64}\Microsoft.VC120.MFC\*"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "{#DbgHelp64}\dbghelp.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+
+; binaries - 32bit shellext on 64bit system
+Source: "..\bin\release\{#ShellExtFilename32}"; DestDir: "{app}\ShellExt32"; Flags: restartreplace uninsrestartdelete regserver replacesameversion; Check: Is64BitInstallMode
+Source: "..\bin\release\{#LibCHCoreFilename32}"; DestDir: "{app}\ShellExt32"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "..\bin\release\{#LibCHEngineFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibSerializerFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibStringFilename32}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: not Is64BitInstallMode
+Source: "..\bin\release\{#LibLoggerFilename32}"; DestDir: "{app}\ShellExt32"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "..\bin\release\{#SQLite32}"; DestDir: "{app}\ShellExt32"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+Source: "{#MSRedistDir32}\Microsoft.VC120.CRT\*"; DestDir: "{app}\ShellExt32"; Flags: ignoreversion restartreplace uninsrestartdelete; Check: Is64BitInstallMode
+
+; NOTE: Don't use "Flags: ignoreversion" on any shared system files
+[Icons]
+Name: {group}\{#MyAppName}; Filename: {app}\{code:ExpandArch|ExeFilename}; WorkingDir: {app}
+Name: {group}\{cm:TranslateCopyHandler}; Filename: {app}\{code:ExpandArch|ICTranslateFilename}; Parameters: """{app}\langs\english.lng"""; WorkingDir: {app}\lang
+Name: {group}\{cm:UninstallCopyHandler}; Filename: {uninstallexe}; WorkingDir: {app}
+Name: {userdesktop}\{#MyAppName}; Filename: {app}\{code:ExpandArch|ExeFilename}; Tasks: desktopicon; WorkingDir: {app}
+Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{code:ExpandArch|ExeFilename}; Tasks: quicklaunchicon; WorkingDir: {app}
+
+[Run]
+Filename: "{app}\{code:ExpandArch|ExeFilename}"; Flags: nowait postinstall skipifsilent; Description: "{cm:LaunchProgram,{#MyAppName}}"
+
+[Registry]
+Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: none; ValueName: "Copy Handler"; Flags: deletevalue uninsdeletevalue
+Root: "HKCU"; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: none; ValueName: "Copy Handler"; Flags: uninsdeletevalue
+
+[Dirs]
+Name: {app}\help; Flags: uninsalwaysuninstall
+Name: {app}\langs; Flags: uninsalwaysuninstall
+
+[CustomMessages]
+TranslateCopyHandler=Translate Copy Handler
+polish.TranslateCopyHandler=Przetłumacz program Copy Handler
+UninstallCopyHandler=Uninstall Copy Handler
+polish.UninstallCopyHandler=Odinstaluj program Copy Handler
+StartAtBoot=Run program at system startup
+polish.StartAtBoot=Uruchom program przy starcie systemu
+
+[ThirdParty]
+CompileLogMethod=append
+
+[Code]
+function ExpandArch(ConstantStr: String): String;
+begin
+	if Is64BitInstallMode then
+	begin
+		case ConstantStr of
+			'ExeFilename': Result := '{#ExeFilename64}';
+			'ICTranslateFilename': Result := '{#ICTranslateFilename64}';
+		end;
+	end
+	else
+	begin
+		case ConstantStr of
+			'ExeFilename': Result := '{#ExeFilename32}';
+			'ICTranslateFilename': Result := '{#ICTranslateFilename32}';
+		end;
+	end;
+end;
+
+procedure CurStepChanged(CurStep: TSetupStep);
+var
+  ResultCode: Integer;
+begin
+    if CurStep = ssPostInstall then
+    begin
+        if IsTaskSelected('startatboot') then
+            ExecAsOriginalUser(ExpandConstant('{app}\{code:ExpandArch|ExeFilename}'), '--EnableLaunchAtStartup=1', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
+        else
+            ExecAsOriginalUser(ExpandConstant('{app}\{code:ExpandArch|ExeFilename}'), '--EnableLaunchAtStartup=0', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
+    end;
+end;
Index: src/ch/BufferSizeDlg.cpp
===================================================================
diff -u -r5aac942a83e4a308ff401cca43be501b1bbdfb6a -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/BufferSizeDlg.cpp	(.../BufferSizeDlg.cpp)	(revision 5aac942a83e4a308ff401cca43be501b1bbdfb6a)
+++ src/ch/BufferSizeDlg.cpp	(.../BufferSizeDlg.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -30,7 +30,7 @@
 /////////////////////////////////////////////////////////////////////////////
 // CBufferSizeDlg dialog
 
-CBufferSizeDlg::CBufferSizeDlg(chcore::TBufferSizes* pInitialBufferSizes, chcore::TBufferSizes::EBufferType eSelectedBuffer) :
+CBufferSizeDlg::CBufferSizeDlg(chengine::TBufferSizes* pInitialBufferSizes, chengine::TBufferSizes::EBufferType eSelectedBuffer) :
 	ictranslate::CLanguageDialog(IDD_BUFFERSIZE_DIALOG),
 	m_eSelectedBuffer(eSelectedBuffer)
 {
@@ -114,23 +114,23 @@
 	// set focus to the requested control
 	switch (m_eSelectedBuffer)
 	{
-	case chcore::TBufferSizes::eBuffer_Default:
+	case chengine::TBufferSizes::eBuffer_Default:
 		GetDlgItem(IDC_DEFAULTSIZE_EDIT)->SetFocus();
 		static_cast<CEdit*>(GetDlgItem(IDC_DEFAULTSIZE_EDIT))->SetSel(0, -1);
 		break;
-	case chcore::TBufferSizes::eBuffer_OneDisk:
+	case chengine::TBufferSizes::eBuffer_OneDisk:
 		GetDlgItem(IDC_ONEDISKSIZE_EDIT)->SetFocus();
 		static_cast<CEdit*>(GetDlgItem(IDC_ONEDISKSIZE_EDIT))->SetSel(0, -1);
 		break;
-	case chcore::TBufferSizes::eBuffer_TwoDisks:
+	case chengine::TBufferSizes::eBuffer_TwoDisks:
 		GetDlgItem(IDC_TWODISKSSIZE_EDIT)->SetFocus();
 		static_cast<CEdit*>(GetDlgItem(IDC_TWODISKSSIZE_EDIT))->SetSel(0, -1);
 		break;
-	case chcore::TBufferSizes::eBuffer_CD:
+	case chengine::TBufferSizes::eBuffer_CD:
 		GetDlgItem(IDC_CDROMSIZE_EDIT)->SetFocus();
 		static_cast<CEdit*>(GetDlgItem(IDC_CDROMSIZE_EDIT))->SetSel(0, -1);
 		break;
-	case chcore::TBufferSizes::eBuffer_LAN:
+	case chengine::TBufferSizes::eBuffer_LAN:
 		GetDlgItem(IDC_LANSIZE_EDIT)->SetFocus();
 		static_cast<CEdit*>(GetDlgItem(IDC_LANSIZE_EDIT))->SetSel(0, -1);
 		break;
Index: src/ch/BufferSizeDlg.h
===================================================================
diff -u -r5aac942a83e4a308ff401cca43be501b1bbdfb6a -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/BufferSizeDlg.h	(.../BufferSizeDlg.h)	(revision 5aac942a83e4a308ff401cca43be501b1bbdfb6a)
+++ src/ch/BufferSizeDlg.h	(.../BufferSizeDlg.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,17 +19,17 @@
 #ifndef __BUFFERSIZEDLG_H__
 #define __BUFFERSIZEDLG_H__
 
-#include "../libchcore/TBufferSizes.h"
-
 /////////////////////////////////////////////////////////////////////////////
 // CBufferSizeDlg dialog
 
+#include "../libchengine/TBufferSizes.h"
+
 class CBufferSizeDlg : public ictranslate::CLanguageDialog
 {
 public:
-	explicit CBufferSizeDlg(chcore::TBufferSizes* pInitialBufferSizes, chcore::TBufferSizes::EBufferType eSelectedBuffer = chcore::TBufferSizes::eBuffer_Default);
+	explicit CBufferSizeDlg(chengine::TBufferSizes* pInitialBufferSizes, chengine::TBufferSizes::EBufferType eSelectedBuffer = chengine::TBufferSizes::eBuffer_Default);
 
-	const chcore::TBufferSizes& GetBufferSizes() const { return m_bsSizes; }
+	const chengine::TBufferSizes& GetBufferSizes() const { return m_bsSizes; }
 
 protected:
 	void DoDataExchange(CDataExchange* pDX) override;    // DDX/DDV support
@@ -69,8 +69,8 @@
 	unsigned int m_uiMaxConcurrentReads = 0;
 	unsigned int m_uiMaxConcurrentWrites = 0;
 
-	chcore::TBufferSizes::EBufferType m_eSelectedBuffer;
-	chcore::TBufferSizes m_bsSizes;
+	chengine::TBufferSizes::EBufferType m_eSelectedBuffer;
+	chengine::TBufferSizes m_bsSizes;
 };
 
 #endif
Index: src/ch/CfgProperties.h
===================================================================
diff -u -r5aac942a83e4a308ff401cca43be501b1bbdfb6a -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/CfgProperties.h	(.../CfgProperties.h)	(revision 5aac942a83e4a308ff401cca43be501b1bbdfb6a)
+++ src/ch/CfgProperties.h	(.../CfgProperties.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -21,11 +21,9 @@
 
 #pragma once
 
-#include "../libchcore/TTaskConfiguration.h"
 #include "UpdateVersionInfo.h"
+#include "../libchengine/TTaskConfiguration.h"
 
-namespace chcore { class TConfig; }
-
 // properties definitions
 enum ECHProperties
 {
@@ -186,9 +184,9 @@
 #define ADAPT_TASK_PROPERTY(enum_id, task_enum_id)\
 	template<> struct PropData<enum_id>\
 {\
-	typedef chcore::TaskPropData<task_enum_id>::value_type value_type;\
-	static value_type GetDefaultValue() { return chcore::TaskPropData<task_enum_id>::GetDefaultValue(); }\
-	static const wchar_t* GetPropertyName() { return chcore::TaskPropData<task_enum_id>::GetPropertyName(); }\
+	typedef chengine::TaskPropData<task_enum_id>::value_type value_type;\
+	static value_type GetDefaultValue() { return chengine::TaskPropData<task_enum_id>::GetDefaultValue(); }\
+	static const wchar_t* GetPropertyName() { return chengine::TaskPropData<task_enum_id>::GetPropertyName(); }\
 	static const wchar_t* GetPropertyNamePrefix() { return BRANCH_TASK_SETTINGS _T("."); }\
 }
 
@@ -257,26 +255,26 @@
 PROPERTY(PP_CMLIMITMAXOPERATIONS, unsigned int, _T("CHConfig.Core.Operation.LimitMaxOperations"), 1);
 
 // Task default settings (see TTaskConfiguration.h)
-ADAPT_TASK_PROPERTY(PP_BFUSEONLYDEFAULT, chcore::eTO_UseOnlyDefaultBuffer);
-ADAPT_TASK_PROPERTY(PP_BFDEFAULT, chcore::eTO_DefaultBufferSize);
-ADAPT_TASK_PROPERTY(PP_BFONEDISK, chcore::eTO_OneDiskBufferSize);
-ADAPT_TASK_PROPERTY(PP_BFTWODISKS, chcore::eTO_TwoDisksBufferSize);
-ADAPT_TASK_PROPERTY(PP_BFCD, chcore::eTO_CDBufferSize);
-ADAPT_TASK_PROPERTY(PP_BFLAN, chcore::eTO_LANBufferSize);
-ADAPT_TASK_PROPERTY(PP_BFUSENOBUFFERING, chcore::eTO_DisableBuffering);
-ADAPT_TASK_PROPERTY(PP_BFBOUNDARYLIMIT, chcore::eTO_DisableBufferingMinSize);
-ADAPT_TASK_PROPERTY(PP_BFQUEUEDEPTH, chcore::eTO_BufferQueueDepth);
-ADAPT_TASK_PROPERTY(PP_MAXREADAHEAD, chcore::eTO_MaxReadAheadBuffers);
-ADAPT_TASK_PROPERTY(PP_MAXCONCURRENTREADS, chcore::eTO_MaxConcurrentReads);
-ADAPT_TASK_PROPERTY(PP_MAXCONCURRENTWRITES, chcore::eTO_MaxConcurrentWrites);
+ADAPT_TASK_PROPERTY(PP_BFUSEONLYDEFAULT, chengine::eTO_UseOnlyDefaultBuffer);
+ADAPT_TASK_PROPERTY(PP_BFDEFAULT, chengine::eTO_DefaultBufferSize);
+ADAPT_TASK_PROPERTY(PP_BFONEDISK, chengine::eTO_OneDiskBufferSize);
+ADAPT_TASK_PROPERTY(PP_BFTWODISKS, chengine::eTO_TwoDisksBufferSize);
+ADAPT_TASK_PROPERTY(PP_BFCD, chengine::eTO_CDBufferSize);
+ADAPT_TASK_PROPERTY(PP_BFLAN, chengine::eTO_LANBufferSize);
+ADAPT_TASK_PROPERTY(PP_BFUSENOBUFFERING, chengine::eTO_DisableBuffering);
+ADAPT_TASK_PROPERTY(PP_BFBOUNDARYLIMIT, chengine::eTO_DisableBufferingMinSize);
+ADAPT_TASK_PROPERTY(PP_BFQUEUEDEPTH, chengine::eTO_BufferQueueDepth);
+ADAPT_TASK_PROPERTY(PP_MAXREADAHEAD, chengine::eTO_MaxReadAheadBuffers);
+ADAPT_TASK_PROPERTY(PP_MAXCONCURRENTREADS, chengine::eTO_MaxConcurrentReads);
+ADAPT_TASK_PROPERTY(PP_MAXCONCURRENTWRITES, chengine::eTO_MaxConcurrentWrites);
 
-ADAPT_TASK_PROPERTY(PP_CMSETDESTATTRIBUTES, chcore::eTO_SetDestinationAttributes);
-ADAPT_TASK_PROPERTY(PP_CMPROTECTROFILES, chcore::eTO_ProtectReadOnlyFiles);
-ADAPT_TASK_PROPERTY(PP_CMREADSIZEBEFOREBLOCKING, chcore::eTO_ScanDirectoriesBeforeBlocking);
-ADAPT_TASK_PROPERTY(PP_CMFASTMOVEBEFOREBLOCKING, chcore::eTO_FastMoveBeforeBlocking);
-ADAPT_TASK_PROPERTY(PP_CMDEFAULTPRIORITY, chcore::eTO_ThreadPriority);
-ADAPT_TASK_PROPERTY(PP_CMDISABLEPRIORITYBOOST, chcore::eTO_DisablePriorityBoost);
-ADAPT_TASK_PROPERTY(PP_CMDELETEAFTERFINISHED, chcore::eTO_DeleteInSeparateSubTask);
+ADAPT_TASK_PROPERTY(PP_CMSETDESTATTRIBUTES, chengine::eTO_SetDestinationAttributes);
+ADAPT_TASK_PROPERTY(PP_CMPROTECTROFILES, chengine::eTO_ProtectReadOnlyFiles);
+ADAPT_TASK_PROPERTY(PP_CMREADSIZEBEFOREBLOCKING, chengine::eTO_ScanDirectoriesBeforeBlocking);
+ADAPT_TASK_PROPERTY(PP_CMFASTMOVEBEFOREBLOCKING, chengine::eTO_FastMoveBeforeBlocking);
+ADAPT_TASK_PROPERTY(PP_CMDEFAULTPRIORITY, chengine::eTO_ThreadPriority);
+ADAPT_TASK_PROPERTY(PP_CMDISABLEPRIORITYBOOST, chengine::eTO_DisablePriorityBoost);
+ADAPT_TASK_PROPERTY(PP_CMDELETEAFTERFINISHED, chengine::eTO_DeleteInSeparateSubTask);
 
 PROPERTY(PP_USECUSTOMNAMING, bool, _T("CHConfig.Core.Naming.UseCustomNaming"), false);
 PROPERTY(PP_CUSTOMNAME_FIRST, CString, _T("CHConfig.Core.Naming.FirstCustomName"), _T(""));
@@ -308,7 +306,7 @@
 // Properties retrieval
 
 template<ECHProperties PropID>
-typename PropData<PropID>::value_type GetPropValue(const chcore::TConfig& rConfig)
+typename PropData<PropID>::value_type GetPropValue(const chengine::TConfig& rConfig)
 {
 	typename PropData<PropID>::value_type tValue;
 	if(!GetConfigValue(rConfig, CString(PropData<PropID>::GetPropertyNamePrefix()) + PropData<PropID>::GetPropertyName(), tValue))
@@ -317,7 +315,7 @@
 }
 
 template<ECHProperties PropID>
-bool GetPropValue(const chcore::TConfig& rConfig, typename PropData<PropID>::value_type& rValue)
+bool GetPropValue(const chengine::TConfig& rConfig, typename PropData<PropID>::value_type& rValue)
 {
 	bool bResult = GetConfigValue(rConfig, CString(PropData<PropID>::GetPropertyNamePrefix()) + PropData<PropID>::GetPropertyName(), rValue);
 	if(!bResult)
@@ -327,7 +325,7 @@
 }
 
 template<ECHProperties PropID>
-void SetPropValue(chcore::TConfig& rConfig, const typename PropData<PropID>::value_type& rValue)
+void SetPropValue(chengine::TConfig& rConfig, const typename PropData<PropID>::value_type& rValue)
 {
 	SetConfigValue(rConfig, CString(PropData<PropID>::GetPropertyNamePrefix()) + PropData<PropID>::GetPropertyName(), rValue);
 }
Index: src/ch/ClipboardMonitor.cpp
===================================================================
diff -u -r8068e0c351055554340ac9755d1bc846893bf2b8 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/ClipboardMonitor.cpp	(.../ClipboardMonitor.cpp)	(revision 8068e0c351055554340ac9755d1bc846893bf2b8)
+++ src/ch/ClipboardMonitor.cpp	(.../ClipboardMonitor.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -1,207 +1,205 @@
-//******************************************************************************
-//   Copyright (C) 2001-2008 by Jozef Starosczyk
-//   ixen@copyhandler.com
-//
-//   This program is free software; you can redistribute it and/or modify
-//   it under the terms of the GNU Library General Public License
-//   (version 2) as published by the Free Software Foundation;
-//
-//   This program is distributed in the hope that it will be useful,
-//   but WITHOUT ANY WARRANTY; without even the implied warranty of
-//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//   GNU General Public License for more details.
-//
-//   You should have received a copy of the GNU Library General Public
-//   License along with this program; if not, write to the
-//   Free Software Foundation, Inc.,
-//   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-//
-/// @file ClipboardMonitor.cpp
-/// @brief Contains the implementation of clipboard monitor package.
-//******************************************************************************
-#include "stdafx.h"
-#include "../libchcore/TWorkerThreadController.h"
-#include "ClipboardMonitor.h"
-#include "ch.h"
-#include "../libchcore/TTaskManager.h"
-#include "../libchcore/TTask.h"
-#include "CfgProperties.h"
-#include "FolderDialog.h"
-#include "ShutdownDlg.h"
-#include "DirectoryChooser.h"
-#include "TTaskManagerWrapper.h"
-#include "resource.h"
-
-using namespace chcore;
-
-CClipboardMonitor CClipboardMonitor::S_ClipboardMonitor;
-
-CClipboardMonitor::CClipboardMonitor()
-{
-}
-
-CClipboardMonitor::~CClipboardMonitor()
-{
-	Stop();
-}
-
-void CClipboardMonitor::StartMonitor(chcore::TTaskManagerPtr spTasks)
-{
-	CClipboardMonitor::S_ClipboardMonitor.Start(spTasks);
-}
-
-void CClipboardMonitor::StopMonitor()
-{
-	return CClipboardMonitor::S_ClipboardMonitor.Stop();
-}
-
-void CClipboardMonitor::Start(chcore::TTaskManagerPtr spTasks)
-{
-	m_spTasks = spTasks;
-
-	m_threadWorker.StartThread(&CClipboardMonitor::ClipboardMonitorProc, this);
-}
-
-void CClipboardMonitor::Stop()
-{
-	m_threadWorker.StopThread();
-}
-
-DWORD WINAPI CClipboardMonitor::ClipboardMonitorProc(LPVOID pParam)
-{
-	CClipboardMonitor* pData = (CClipboardMonitor*)pParam;
-
-	// bufor
-	TCHAR path[_MAX_PATH];
-
-	// register clipboard format
-	UINT nFormat=RegisterClipboardFormat(_T("Preferred DropEffect"));
-	UINT uiCounter=0, uiShutCounter=0;
-
-	chcore::TConfig& rConfig = GetConfig();
-	for(;;)
-	{
-		if (uiCounter == 0 && GetPropValue<PP_PCLIPBOARDMONITORING>(rConfig) && IsClipboardFormatAvailable(CF_HDROP))
-		{
-			// get data from clipboard
-			OpenClipboard(nullptr);
-			HANDLE handle=GetClipboardData(CF_HDROP);
-
-			UINT nCount=DragQueryFile(static_cast<HDROP>(handle), 0xffffffff, nullptr, 0);
-
-			chcore::TTaskDefinition tTaskDefinition;
-
-			// list of files
-			for(UINT stIndex = 0; stIndex < nCount; stIndex++)
-			{
-				DragQueryFile(static_cast<HDROP>(handle), stIndex, path, _MAX_PATH);
-
-				tTaskDefinition.AddSourcePath(chcore::PathFromString(path));
-			}
-
-			// operation type
-			chcore::EOperationType eOperation = chcore::eOperation_Copy;
-
-			if(IsClipboardFormatAvailable(nFormat))
-			{
-				handle=GetClipboardData(nFormat);
-				LPVOID addr=GlobalLock(handle);
-
-				DWORD dwData=((DWORD*)addr)[0];
-				if(dwData & DROPEFFECT_COPY)
-					eOperation = chcore::eOperation_Copy;	// copy
-				else if(dwData & DROPEFFECT_MOVE)
-					eOperation = chcore::eOperation_Move;	// move
-
-				GlobalUnlock(handle);
-			}
-			else
-				eOperation = chcore::eOperation_Copy;	// default - copy
-
-			tTaskDefinition.SetOperationType(eOperation);	// copy
-
-			// set the default options for task
-			GetConfig().ExtractSubConfig(BRANCH_TASK_SETTINGS, tTaskDefinition.GetConfiguration());
-
-			EmptyClipboard();
-			CloseClipboard();
-
-			TSmartPath pathSelected;
-			INT_PTR iResult = DirectoryChooser::ChooseDirectory(eOperation, tTaskDefinition.GetSourcePaths(), pathSelected);
-			if(iResult == IDOK)
-			{
-				// get dest path
-				tTaskDefinition.SetDestinationPath(pathSelected);
-
-				TTaskManagerWrapper tTaskManager(pData->m_spTasks);
-
-				tTaskManager.CreateTask(tTaskDefinition);
-			}
-		}
-
-		// do we need to check for turning computer off
-		if(uiShutCounter == 0 && GetPropValue<PP_PSHUTDOWNAFTREFINISHED>(GetConfig()))
-		{
-			if(pData->m_spTasks->AreAllFinished())
-			{
-				TRACE("Shut down windows\n");
-				bool bShutdown=true;
-				if (GetPropValue<PP_PTIMEBEFORESHUTDOWN>(GetConfig()) != 0)
-				{
-					CShutdownDlg dlg;
-					dlg.SetOverallTime(GetPropValue<PP_PTIMEBEFORESHUTDOWN>(GetConfig()));
-					bShutdown=(dlg.DoModal() != IDCANCEL);
-				}
-
-				SetPropValue<PP_PSHUTDOWNAFTREFINISHED>(GetConfig(), false);
-				GetConfig().Write();
-				if(bShutdown)
-				{
-					// adjust token privileges for NT
-					HANDLE hToken = nullptr;
-					TOKEN_PRIVILEGES tp = { 0 };
-					if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)
-						&& LookupPrivilegeValue(nullptr, SE_SHUTDOWN_NAME, &tp.Privileges[0].Luid))
-					{
-						tp.PrivilegeCount=1;
-						tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
-
-						AdjustTokenPrivileges(hToken, FALSE, &tp, 0, nullptr, nullptr);
-
-					}
-
-					if(hToken)
-						CloseHandle(hToken);
-
-					BOOL bExit=ExitWindowsEx(EWX_POWEROFF | EWX_SHUTDOWN | (GetPropValue<PP_PFORCESHUTDOWN>(GetConfig()) ? EWX_FORCE : 0), 0);
-					if (bExit)
-						return 1;
-					else
-					{
-						// some kind of error
-						ictranslate::CFormat fmt(GetResManager().LoadString(IDS_SHUTDOWNERROR_STRING));
-						fmt.SetParam(_T("%errno"), GetLastError());
-						AfxMessageBox(fmt, MB_ICONERROR | MB_OK | MB_SYSTEMMODAL);
-					}
-				}
-			}
-		}
-
-		// sleep for some time
-		const int iSleepCount=200;
-		
-		if(pData->m_threadWorker.KillRequested(iSleepCount))
-			break;
-		
-		uiCounter+=iSleepCount;
-		uiShutCounter+=iSleepCount;
-		if(uiCounter >= GetPropValue<PP_PMONITORSCANINTERVAL>(GetConfig()))
-			uiCounter=0;
-		if(uiShutCounter >= 800)
-			uiShutCounter=0;
-	}
-
-	TRACE("Monitoring clipboard proc aborted...\n");
-
-	return 0;
-}
+//******************************************************************************
+//   Copyright (C) 2001-2008 by Jozef Starosczyk
+//   ixen@copyhandler.com
+//
+//   This program is free software; you can redistribute it and/or modify
+//   it under the terms of the GNU Library General Public License
+//   (version 2) as published by the Free Software Foundation;
+//
+//   This program is distributed in the hope that it will be useful,
+//   but WITHOUT ANY WARRANTY; without even the implied warranty of
+//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//   GNU General Public License for more details.
+//
+//   You should have received a copy of the GNU Library General Public
+//   License along with this program; if not, write to the
+//   Free Software Foundation, Inc.,
+//   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+/// @file ClipboardMonitor.cpp
+/// @brief Contains the implementation of clipboard monitor package.
+//******************************************************************************
+#include "stdafx.h"
+#include "../libchcore/TWorkerThreadController.h"
+#include "ClipboardMonitor.h"
+#include "ch.h"
+#include "CfgProperties.h"
+#include "FolderDialog.h"
+#include "ShutdownDlg.h"
+#include "DirectoryChooser.h"
+#include "TTaskManagerWrapper.h"
+#include "resource.h"
+
+using namespace chcore;
+
+CClipboardMonitor CClipboardMonitor::S_ClipboardMonitor;
+
+CClipboardMonitor::CClipboardMonitor()
+{
+}
+
+CClipboardMonitor::~CClipboardMonitor()
+{
+	Stop();
+}
+
+void CClipboardMonitor::StartMonitor(chengine::TTaskManagerPtr spTasks)
+{
+	CClipboardMonitor::S_ClipboardMonitor.Start(spTasks);
+}
+
+void CClipboardMonitor::StopMonitor()
+{
+	return CClipboardMonitor::S_ClipboardMonitor.Stop();
+}
+
+void CClipboardMonitor::Start(chengine::TTaskManagerPtr spTasks)
+{
+	m_spTasks = spTasks;
+
+	m_threadWorker.StartThread(&CClipboardMonitor::ClipboardMonitorProc, this);
+}
+
+void CClipboardMonitor::Stop()
+{
+	m_threadWorker.StopThread();
+}
+
+DWORD WINAPI CClipboardMonitor::ClipboardMonitorProc(LPVOID pParam)
+{
+	CClipboardMonitor* pData = (CClipboardMonitor*)pParam;
+
+	// bufor
+	TCHAR path[_MAX_PATH];
+
+	// register clipboard format
+	UINT nFormat=RegisterClipboardFormat(_T("Preferred DropEffect"));
+	UINT uiCounter=0, uiShutCounter=0;
+
+	chengine::TConfig& rConfig = GetConfig();
+	for(;;)
+	{
+		if (uiCounter == 0 && GetPropValue<PP_PCLIPBOARDMONITORING>(rConfig) && IsClipboardFormatAvailable(CF_HDROP))
+		{
+			// get data from clipboard
+			OpenClipboard(nullptr);
+			HANDLE handle=GetClipboardData(CF_HDROP);
+
+			UINT nCount=DragQueryFile(static_cast<HDROP>(handle), 0xffffffff, nullptr, 0);
+
+			chengine::TTaskDefinition tTaskDefinition;
+
+			// list of files
+			for(UINT stIndex = 0; stIndex < nCount; stIndex++)
+			{
+				DragQueryFile(static_cast<HDROP>(handle), stIndex, path, _MAX_PATH);
+
+				tTaskDefinition.AddSourcePath(chcore::PathFromString(path));
+			}
+
+			// operation type
+			chengine::EOperationType eOperation = chengine::eOperation_Copy;
+
+			if(IsClipboardFormatAvailable(nFormat))
+			{
+				handle=GetClipboardData(nFormat);
+				LPVOID addr=GlobalLock(handle);
+
+				DWORD dwData=((DWORD*)addr)[0];
+				if(dwData & DROPEFFECT_COPY)
+					eOperation = chengine::eOperation_Copy;	// copy
+				else if(dwData & DROPEFFECT_MOVE)
+					eOperation = chengine::eOperation_Move;	// move
+
+				GlobalUnlock(handle);
+			}
+			else
+				eOperation = chengine::eOperation_Copy;	// default - copy
+
+			tTaskDefinition.SetOperationType(eOperation);	// copy
+
+			// set the default options for task
+			GetConfig().ExtractSubConfig(BRANCH_TASK_SETTINGS, tTaskDefinition.GetConfiguration());
+
+			EmptyClipboard();
+			CloseClipboard();
+
+			TSmartPath pathSelected;
+			INT_PTR iResult = DirectoryChooser::ChooseDirectory(eOperation, tTaskDefinition.GetSourcePaths(), pathSelected);
+			if(iResult == IDOK)
+			{
+				// get dest path
+				tTaskDefinition.SetDestinationPath(pathSelected);
+
+				TTaskManagerWrapper tTaskManager(pData->m_spTasks);
+
+				tTaskManager.CreateTask(tTaskDefinition);
+			}
+		}
+
+		// do we need to check for turning computer off
+		if(uiShutCounter == 0 && GetPropValue<PP_PSHUTDOWNAFTREFINISHED>(GetConfig()))
+		{
+			if(pData->m_spTasks->AreAllFinished())
+			{
+				TRACE("Shut down windows\n");
+				bool bShutdown=true;
+				if (GetPropValue<PP_PTIMEBEFORESHUTDOWN>(GetConfig()) != 0)
+				{
+					CShutdownDlg dlg;
+					dlg.SetOverallTime(GetPropValue<PP_PTIMEBEFORESHUTDOWN>(GetConfig()));
+					bShutdown=(dlg.DoModal() != IDCANCEL);
+				}
+
+				SetPropValue<PP_PSHUTDOWNAFTREFINISHED>(GetConfig(), false);
+				GetConfig().Write();
+				if(bShutdown)
+				{
+					// adjust token privileges for NT
+					HANDLE hToken = nullptr;
+					TOKEN_PRIVILEGES tp = { 0 };
+					if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)
+						&& LookupPrivilegeValue(nullptr, SE_SHUTDOWN_NAME, &tp.Privileges[0].Luid))
+					{
+						tp.PrivilegeCount=1;
+						tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
+
+						AdjustTokenPrivileges(hToken, FALSE, &tp, 0, nullptr, nullptr);
+
+					}
+
+					if(hToken)
+						CloseHandle(hToken);
+
+					BOOL bExit=ExitWindowsEx(EWX_POWEROFF | EWX_SHUTDOWN | (GetPropValue<PP_PFORCESHUTDOWN>(GetConfig()) ? EWX_FORCE : 0), 0);
+					if (bExit)
+						return 1;
+					else
+					{
+						// some kind of error
+						ictranslate::CFormat fmt(GetResManager().LoadString(IDS_SHUTDOWNERROR_STRING));
+						fmt.SetParam(_T("%errno"), GetLastError());
+						AfxMessageBox(fmt, MB_ICONERROR | MB_OK | MB_SYSTEMMODAL);
+					}
+				}
+			}
+		}
+
+		// sleep for some time
+		const int iSleepCount=200;
+		
+		if(pData->m_threadWorker.KillRequested(iSleepCount))
+			break;
+		
+		uiCounter+=iSleepCount;
+		uiShutCounter+=iSleepCount;
+		if(uiCounter >= GetPropValue<PP_PMONITORSCANINTERVAL>(GetConfig()))
+			uiCounter=0;
+		if(uiShutCounter >= 800)
+			uiShutCounter=0;
+	}
+
+	TRACE("Monitoring clipboard proc aborted...\n");
+
+	return 0;
+}
Index: src/ch/ClipboardMonitor.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/ClipboardMonitor.h	(.../ClipboardMonitor.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/ClipboardMonitor.h	(.../ClipboardMonitor.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -23,7 +23,7 @@
 #define __CLIPBOARDMONITOR_H__
 
 #include "../libchcore/TWorkerThreadController.h"
-#include "../libchcore/TTaskManager.h"
+#include "../libchengine/TTaskManager.h"
 
 namespace chcore
 {
@@ -33,10 +33,10 @@
 class CClipboardMonitor
 {
 public:
-	static void StartMonitor(chcore::TTaskManagerPtr spTasks);
+	static void StartMonitor(chengine::TTaskManagerPtr spTasks);
 	static void StopMonitor();
 
-	void Start(chcore::TTaskManagerPtr spTasks);
+	void Start(chengine::TTaskManagerPtr spTasks);
 	void Stop();
 
 protected:
@@ -48,7 +48,7 @@
 protected:
 	static CClipboardMonitor S_ClipboardMonitor;
 
-	chcore::TTaskManagerPtr m_spTasks;
+	chengine::TTaskManagerPtr m_spTasks;
 
 	// thread control
 	chcore::TWorkerThreadController m_threadWorker;
Index: src/ch/CustomCopyDlg.cpp
===================================================================
diff -u -r4797e4b6b266900bfdcdf4ca6eda47c216ad9db1 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/CustomCopyDlg.cpp	(.../CustomCopyDlg.cpp)	(revision 4797e4b6b266900bfdcdf4ca6eda47c216ad9db1)
+++ src/ch/CustomCopyDlg.cpp	(.../CustomCopyDlg.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,16 +19,16 @@
 #include "stdafx.h"
 #include <boost/shared_array.hpp>
 #include "resource.h"
-#include "../libchcore/TFileInfo.h"
 #include "CustomCopyDlg.h"
 #include "structs.h"
 #include "dialogs.h"
 #include "BufferSizeDlg.h"
 #include "FilterDlg.h"
 #include "StringHelpers.h"
 #include "ch.h"
-#include "../libchcore/TTaskConfigBufferSizes.h"
 #include "CfgProperties.h"
+#include "../libchengine/TTaskDefinition.h"
+#include "../libchengine/TTaskConfigBufferSizes.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -46,7 +46,7 @@
 	GetConfig().ExtractSubConfig(BRANCH_TASK_SETTINGS, m_tTaskDefinition.GetConfiguration());
 }
 
-CCustomCopyDlg::CCustomCopyDlg(const chcore::TTaskDefinition& rTaskDefinition) :
+CCustomCopyDlg::CCustomCopyDlg(const chengine::TTaskDefinition& rTaskDefinition) :
 	ictranslate::CLanguageDialog(IDD_CUSTOM_COPY_DIALOG),
 	m_tTaskDefinition(rTaskDefinition)
 {
@@ -211,15 +211,15 @@
 	m_ctlOperation.AddString(GetResManager().LoadString(IDS_CCDMOVE_STRING));
 
 	// copying/moving
-	m_ctlOperation.SetCurSel(m_tTaskDefinition.GetOperationType() == chcore::eOperation_Move ? 1 : 0);
+	m_ctlOperation.SetCurSel(m_tTaskDefinition.GetOperationType() == chengine::eOperation_Move ? 1 : 0);
 
 	// fill priority combo
 	for (int stIndex=0;stIndex<7;stIndex++)
 	{
 		m_ctlPriority.AddString(GetResManager().LoadString(IDS_PRIORITY0_STRING+stIndex));
 	}
 
-	m_ctlPriority.SetCurSel(PriorityToIndex(chcore::GetTaskPropValue<chcore::eTO_ThreadPriority>(m_tTaskDefinition.GetConfiguration())));
+	m_ctlPriority.SetCurSel(PriorityToIndex(chengine::GetTaskPropValue<chengine::eTO_ThreadPriority>(m_tTaskDefinition.GetConfiguration())));
 
 	// fill buffer sizes listbox
 	SetBuffersizesString();
@@ -277,9 +277,9 @@
 	m_bFilters = !m_tTaskDefinition.GetFilters().IsEmpty();
 
 	// other custom flags
-	m_bIgnoreFolders = chcore::GetTaskPropValue<chcore::eTO_IgnoreDirectories>(m_tTaskDefinition.GetConfiguration());
-	m_bForceDirectories = chcore::GetTaskPropValue<chcore::eTO_CreateDirectoriesRelativeToRoot>(m_tTaskDefinition.GetConfiguration());
-	m_bOnlyCreate = chcore::GetTaskPropValue<chcore::eTO_CreateEmptyFiles>(m_tTaskDefinition.GetConfiguration());
+	m_bIgnoreFolders = chengine::GetTaskPropValue<chengine::eTO_IgnoreDirectories>(m_tTaskDefinition.GetConfiguration());
+	m_bForceDirectories = chengine::GetTaskPropValue<chengine::eTO_CreateDirectoriesRelativeToRoot>(m_tTaskDefinition.GetConfiguration());
+	m_bOnlyCreate = chengine::GetTaskPropValue<chengine::eTO_CreateEmptyFiles>(m_tTaskDefinition.GetConfiguration());
 	m_bAdvanced = (m_bIgnoreFolders | m_bForceDirectories | m_bOnlyCreate);
 
 	UpdateData(FALSE);
@@ -369,11 +369,11 @@
 	m_ctlFilters.InsertColumn(6, &lvc);
 
 	// refresh the entries in filters' list
-	const chcore::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
+	const chengine::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
 	m_ctlFilters.DeleteAllItems();
 	for(size_t stIndex = 0; stIndex < afFilters.GetSize(); ++stIndex)
 	{
-		const chcore::TFileFilter* pFilter = afFilters.GetAt(stIndex);
+		const chengine::TFileFilter* pFilter = afFilters.GetAt(stIndex);
 		if(pFilter)
 			AddFilter(*pFilter, boost::numeric_cast<int>(stIndex));
 	}
@@ -477,7 +477,7 @@
 	// fill the list
 	ictranslate::CFormat fmt;
 
-	chcore::TBufferSizes bsSizes = chcore::GetTaskPropBufferSizes(m_tTaskDefinition.GetConfiguration());
+	chengine::TBufferSizes bsSizes = GetTaskPropBufferSizes(m_tTaskDefinition.GetConfiguration());
 
 	fmt.SetFormat(GetResManager().LoadString(IDS_BSEDEFAULT_STRING));
 	fmt.SetParam(_T("%size"), GetSizeString(bsSizes.GetDefaultSize(), true));
@@ -505,7 +505,7 @@
 
 void CCustomCopyDlg::OnChangebufferButton()
 {
-	chcore::TBufferSizes tBufferSizes = GetTaskPropBufferSizes(m_tTaskDefinition.GetConfiguration());
+	chengine::TBufferSizes tBufferSizes = GetTaskPropBufferSizes(m_tTaskDefinition.GetConfiguration());
 
 	CBufferSizeDlg dlg(&tBufferSizes);
 	if(dlg.DoModal() == IDOK)
@@ -540,10 +540,10 @@
 {
 	CFilterDlg dlg;
 
-	chcore::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
+	chengine::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
 	for (size_t i = 0; i < afFilters.GetSize(); i++)
 	{
-		const chcore::TFileFilter* pFilter = afFilters.GetAt(i);
+		const chengine::TFileFilter* pFilter = afFilters.GetAt(i);
 		BOOST_ASSERT(pFilter);
 		if(pFilter)
 		{
@@ -566,7 +566,7 @@
 	}
 }
 
-void CCustomCopyDlg::AddFilter(const chcore::TFileFilter &rFilter, int iPos)
+void CCustomCopyDlg::AddFilter(const chengine::TFileFilter &rFilter, int iPos)
 {
 	LVITEM lvi;
 	CString strLoaded;
@@ -579,7 +579,7 @@
 	
 	if (rFilter.GetUseMask())
 	{
-		chcore::TString strData = rFilter.GetCombinedMask();
+		string::TString strData = rFilter.GetCombinedMask();
 		strLoaded = strData.c_str();
 	}
 	else
@@ -594,7 +594,7 @@
 	
 	if(rFilter.GetUseExcludeMask())
 	{
-		chcore::TString strData = rFilter.GetCombinedExcludeMask();
+		string::TString strData = rFilter.GetCombinedExcludeMask();
 		strLoaded = strData.c_str();
 	}
 	else
@@ -630,7 +630,7 @@
 	{
 		strLoaded.Format(_T("%s %s"), GetResManager().LoadString(IDS_DATECREATED_STRING+rFilter.GetDateType()), GetResManager().LoadString(IDS_LT_STRING+rFilter.GetDateCmpType1()));
 
-		chcore::TString strFmtDateTime = rFilter.GetDateTime1().Format(rFilter.GetUseDate1(), rFilter.GetUseTime1());
+		string::TString strFmtDateTime = rFilter.GetDateTime1().Format(rFilter.GetUseDate1(), rFilter.GetUseTime1());
 		strLoaded += strFmtDateTime.c_str();
 
 		if (rFilter.GetUseDateTime2())
@@ -700,7 +700,7 @@
 
 void CCustomCopyDlg::OnRemovefilterButton() 
 {
-	chcore::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
+	chengine::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
 
 	POSITION pos;
 	int iItem;
@@ -759,11 +759,11 @@
 	POSITION pos = m_ctlFilters.GetFirstSelectedItemPosition();
 	if(pos != nullptr)
 	{
-		chcore::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
+		chengine::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
 
 		int iItem = m_ctlFilters.GetNextSelectedItem(pos);
 		CFilterDlg dlg;
-		const chcore::TFileFilter* pFilter = afFilters.GetAt(iItem);
+		const chengine::TFileFilter* pFilter = afFilters.GetAt(iItem);
 		BOOST_ASSERT(pFilter);
 		if(pFilter)
 			dlg.m_ffFilter = *pFilter;
@@ -805,8 +805,8 @@
 	int iItem = m_ctlBufferSizes.GetCurSel();
 	if(iItem != LB_ERR)
 	{
-		chcore::TBufferSizes tBufferSizes = GetTaskPropBufferSizes(m_tTaskDefinition.GetConfiguration());
-		CBufferSizeDlg dlg(&tBufferSizes, (chcore::TBufferSizes::EBufferType)iItem);
+		chengine::TBufferSizes tBufferSizes = GetTaskPropBufferSizes(m_tTaskDefinition.GetConfiguration());
+		CBufferSizeDlg dlg(&tBufferSizes, (chengine::TBufferSizes::EBufferType)iItem);
 
 		if(dlg.DoModal() == IDOK)
 		{
@@ -1020,14 +1020,14 @@
 	}
 
 	// operation type
-	m_tTaskDefinition.SetOperationType(m_ctlOperation.GetCurSel() == 0 ? chcore::eOperation_Copy : chcore::eOperation_Move);
+	m_tTaskDefinition.SetOperationType(m_ctlOperation.GetCurSel() == 0 ? chengine::eOperation_Copy : chengine::eOperation_Move);
 
 	// priority
-	chcore::SetTaskPropValue<chcore::eTO_ThreadPriority>(m_tTaskDefinition.GetConfiguration(), IndexToPriority(m_ctlPriority.GetCurSel()));
+	chengine::SetTaskPropValue<chengine::eTO_ThreadPriority>(m_tTaskDefinition.GetConfiguration(), IndexToPriority(m_ctlPriority.GetCurSel()));
 
-	chcore::SetTaskPropValue<chcore::eTO_IgnoreDirectories>(m_tTaskDefinition.GetConfiguration(), (m_bIgnoreFolders != 0));
-	chcore::SetTaskPropValue<chcore::eTO_CreateDirectoriesRelativeToRoot>(m_tTaskDefinition.GetConfiguration(), (m_bForceDirectories != 0));
-	chcore::SetTaskPropValue<chcore::eTO_CreateEmptyFiles>(m_tTaskDefinition.GetConfiguration(), (m_bOnlyCreate != 0));
+	chengine::SetTaskPropValue<chengine::eTO_IgnoreDirectories>(m_tTaskDefinition.GetConfiguration(), (m_bIgnoreFolders != 0));
+	chengine::SetTaskPropValue<chengine::eTO_CreateDirectoriesRelativeToRoot>(m_tTaskDefinition.GetConfiguration(), (m_bForceDirectories != 0));
+	chengine::SetTaskPropValue<chengine::eTO_CreateEmptyFiles>(m_tTaskDefinition.GetConfiguration(), (m_bOnlyCreate != 0));
 }
 
 bool CCustomCopyDlg::HasBasicTaskData()
Index: src/ch/CustomCopyDlg.h
===================================================================
diff -u -r12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/CustomCopyDlg.h	(.../CustomCopyDlg.h)	(revision 12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45)
+++ src/ch/CustomCopyDlg.h	(.../CustomCopyDlg.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,20 +19,23 @@
 #ifndef __CUSTOMCOPYDLG_H__
 #define __CUSTOMCOPYDLG_H__
 
-#include "../libchcore/TFileFilter.h"
-#include "../libchcore/TTaskDefinition.h"
 #include "CDragDropListCtrl.h"
 #include "CDragDropComboEx.h"
+#include "../libchengine/TTaskDefinition.h"
 
 /////////////////////////////////////////////////////////////////////////////
 // CCustomCopyDlg dialog
 
+namespace chengine {
+	class TFileFilter;
+}
+
 class CCustomCopyDlg : public ictranslate::CLanguageDialog
 {
 // Construction
 public:
 	CCustomCopyDlg();   // standard constructor
-	explicit CCustomCopyDlg(const chcore::TTaskDefinition& rTaskDefinition);
+	explicit CCustomCopyDlg(const chengine::TTaskDefinition& rTaskDefinition);
 
 // Overrides
 protected:
@@ -46,7 +49,7 @@
 
 	void UpdateComboIcon();
 	void EnableControls();
-	void AddFilter(const chcore::TFileFilter& rFilter, int iPos=-1);
+	void AddFilter(const chengine::TFileFilter& rFilter, int iPos=-1);
 	void AddPath(CString strPath);
 
 	void SetBuffersizesString();
@@ -80,7 +83,7 @@
 	DECLARE_MESSAGE_MAP()
 
 public:
-	chcore::TTaskDefinition m_tTaskDefinition;
+	chengine::TTaskDefinition m_tTaskDefinition;
 	std::vector<CString> m_vRecent;						// recently selected paths
 
 	CDragDropComboEx	m_ctlDstPath;
Index: src/ch/DirectoryChooser.cpp
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/DirectoryChooser.cpp	(.../DirectoryChooser.cpp)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/DirectoryChooser.cpp	(.../DirectoryChooser.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -24,14 +24,15 @@
 #include "../libchcore/TPath.h"
 #include "CfgProperties.h"
 #include "resource.h"
+#include "../libchengine/TConfigSerializers.h"
 
 namespace DirectoryChooser
 {
-INT_PTR ChooseDirectory(chcore::EOperationType eOperation, const chcore::TPathContainer& rInputPaths, chcore::TSmartPath& rSelectedPath)
+INT_PTR ChooseDirectory(chengine::EOperationType eOperation, const chcore::TPathContainer& rInputPaths, chcore::TSmartPath& rSelectedPath)
 {
 	rSelectedPath.Clear();
 
-	chcore::TConfig& rConfig = GetConfig();
+	chengine::TConfig& rConfig = GetConfig();
 
 	// get dest folder
 	CFolderDialog dlg;
@@ -47,9 +48,9 @@
 
 	dlg.m_bdData.strInitialDir=(dlg.m_bdData.cvRecent.size() > 0) ? dlg.m_bdData.cvRecent.at(0) : _T("");
 
-	if(eOperation == chcore::eOperation_Copy)
+	if(eOperation == chengine::eOperation_Copy)
 		dlg.m_bdData.strCaption = GetResManager().LoadString(IDS_TITLECOPY_STRING);
-	else if(eOperation == chcore::eOperation_Move)
+	else if(eOperation == chengine::eOperation_Move)
 		dlg.m_bdData.strCaption = GetResManager().LoadString(IDS_TITLEMOVE_STRING);
 	else
 		dlg.m_bdData.strCaption = GetResManager().LoadString(IDS_TITLEUNKNOWNOPERATION_STRING);
Index: src/ch/DirectoryChooser.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/DirectoryChooser.h	(.../DirectoryChooser.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/DirectoryChooser.h	(.../DirectoryChooser.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,12 +19,17 @@
 #ifndef __DIRECTORYCHOOSER_H__
 #define __DIRECTORYCHOOSER_H__
 
-#include "../libchcore/EOperationTypes.h"
+#include "../libchengine/EOperationTypes.h"
 
+namespace chcore
+{
+	class TPathContainer;
+	class TSmartPath;
+}
+
 namespace DirectoryChooser
 {
-	INT_PTR ChooseDirectory(chcore::EOperationType eOperation, const chcore::TPathContainer& rInputPaths, chcore::TSmartPath& rSelectedPath);
+	INT_PTR ChooseDirectory(chengine::EOperationType eOperation, const chcore::TPathContainer& rInputPaths, chcore::TSmartPath& rSelectedPath);
 }
 
-
 #endif
Index: src/ch/FeedbackFileErrorDlg.cpp
===================================================================
diff -u -rd9527df01ee91b35d9a5fdccb80ded25a9c8265f -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FeedbackFileErrorDlg.cpp	(.../FeedbackFileErrorDlg.cpp)	(revision d9527df01ee91b35d9a5fdccb80ded25a9c8265f)
+++ src/ch/FeedbackFileErrorDlg.cpp	(.../FeedbackFileErrorDlg.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -67,7 +67,7 @@
 	strFmt += rResManager.LoadString(IDS_INFO_REASON_STRING);
 
 	// get system error string
-	chcore::TString strError = chcore::TWin32ErrorFormatter::FormatWin32ErrorCode(m_ulSysError, true);
+	string::TString strError = chcore::TWin32ErrorFormatter::FormatWin32ErrorCode(m_ulSysError, true);
 
 	ictranslate::CFormat fmt(strFmt);
 	fmt.SetParam(_T("%filename"), m_strSrcPath);
@@ -83,29 +83,29 @@
 void CFeedbackFileErrorDlg::OnBnClickedRetryButton()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Retry);
+	EndDialog(chengine::EFeedbackResult::eResult_Retry);
 }
 
 void CFeedbackFileErrorDlg::OnBnClickedSkipButton()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Skip);
+	EndDialog(chengine::EFeedbackResult::eResult_Skip);
 }
 
 void CFeedbackFileErrorDlg::OnBnClickedPauseButton()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Pause);
+	EndDialog(chengine::EFeedbackResult::eResult_Pause);
 }
 
 void CFeedbackFileErrorDlg::OnBnClickedCancel()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Cancel);
+	EndDialog(chengine::EFeedbackResult::eResult_Cancel);
 }
 
 void CFeedbackFileErrorDlg::OnCancel()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Cancel);
+	EndDialog(chengine::EFeedbackResult::eResult_Cancel);
 }
Index: src/ch/FeedbackHandler.cpp
===================================================================
diff -u -r8068e0c351055554340ac9755d1bc846893bf2b8 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FeedbackHandler.cpp	(.../FeedbackHandler.cpp)	(revision 8068e0c351055554340ac9755d1bc846893bf2b8)
+++ src/ch/FeedbackHandler.cpp	(.../FeedbackHandler.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -17,16 +17,18 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 #include "stdafx.h"
-#include "../libchcore/TFileInfo.h"
 #include "FeedbackHandler.h"
 #include "FeedbackReplaceDlg.h"
 #include "FeedbackFileErrorDlg.h"
 #include "FeedbackNotEnoughSpaceDlg.h"
 #include "ch.h"
 #include "mmsystem.h"
 #include "CfgProperties.h"
+#include "../libchengine/TConfigSerializers.h"
 
 using namespace chcore;
+using namespace chengine;
+using namespace string;
 
 CFeedbackHandler::CFeedbackHandler() :
 	TFeedbackHandlerBase()
Index: src/ch/FeedbackHandler.h
===================================================================
diff -u -rc085b65f1de24f25feab2bac2d5882abf04aabcf -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FeedbackHandler.h	(.../FeedbackHandler.h)	(revision c085b65f1de24f25feab2bac2d5882abf04aabcf)
+++ src/ch/FeedbackHandler.h	(.../FeedbackHandler.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,21 +19,24 @@
 #ifndef __FEEDBACKHANDLER_H__
 #define __FEEDBACKHANDLER_H__
 
-#include "../libchcore/TFeedbackHandlerBase.h"
-#include "../libchcore/EFileError.h"
-#include "../libchcore/TFeedbackResult.h"
+#include "../libchengine/TFeedbackHandlerBase.h"
 
-class CFeedbackHandler : public chcore::TFeedbackHandlerBase
+namespace string
 {
+	class TString;
+}
+
+class CFeedbackHandler : public chengine::TFeedbackHandlerBase
+{
 public:
 	CFeedbackHandler();
 	virtual ~CFeedbackHandler();
 
-	chcore::TFeedbackResult FileError(const chcore::TString& strSrcPath, const chcore::TString& strDstPath, chcore::EFileError eFileError, unsigned long ulError) override;
-	chcore::TFeedbackResult FileAlreadyExists(const chcore::TFileInfo& spSrcFileInfo, const chcore::TFileInfo& spDstFileInfo) override;
-	chcore::TFeedbackResult NotEnoughSpace(const chcore::TString& strSrcPath, const chcore::TString& strDstPath, unsigned long long ullRequiredSize) override;
-	chcore::TFeedbackResult OperationFinished() override;
-	chcore::TFeedbackResult OperationError() override;
+	chengine::TFeedbackResult FileError(const string::TString& strSrcPath, const string::TString& strDstPath, chengine::EFileError eFileError, unsigned long ulError) override;
+	chengine::TFeedbackResult FileAlreadyExists(const chengine::TFileInfo& spSrcFileInfo, const chengine::TFileInfo& spDstFileInfo) override;
+	chengine::TFeedbackResult NotEnoughSpace(const string::TString& strSrcPath, const string::TString& strDstPath, unsigned long long ullRequiredSize) override;
+	chengine::TFeedbackResult OperationFinished() override;
+	chengine::TFeedbackResult OperationError() override;
 
 protected:
 	friend class CFeedbackHandlerFactory;
Index: src/ch/FeedbackHandlerFactory.cpp
===================================================================
diff -u -r4fe995b304ea342b50293f92d3c1992b43b820f7 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FeedbackHandlerFactory.cpp	(.../FeedbackHandlerFactory.cpp)	(revision 4fe995b304ea342b50293f92d3c1992b43b820f7)
+++ src/ch/FeedbackHandlerFactory.cpp	(.../FeedbackHandlerFactory.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -1,34 +1,34 @@
-// ============================================================================
-//  Copyright (C) 2001-2015 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#include "stdafx.h"
-#include "FeedbackHandlerFactory.h"
-#include "FeedbackHandler.h"
-
-CFeedbackHandlerFactory::CFeedbackHandlerFactory()
-{
-}
-
-CFeedbackHandlerFactory::~CFeedbackHandlerFactory()
-{
-}
-
-chcore::IFeedbackHandlerPtr CFeedbackHandlerFactory::Create()
-{
-	return std::make_shared<CFeedbackHandler>();
-}
+// ============================================================================
+//  Copyright (C) 2001-2015 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#include "stdafx.h"
+#include "FeedbackHandlerFactory.h"
+#include "FeedbackHandler.h"
+
+CFeedbackHandlerFactory::CFeedbackHandlerFactory()
+{
+}
+
+CFeedbackHandlerFactory::~CFeedbackHandlerFactory()
+{
+}
+
+chengine::IFeedbackHandlerPtr CFeedbackHandlerFactory::Create()
+{
+	return std::make_shared<CFeedbackHandler>();
+}
Index: src/ch/FeedbackHandlerFactory.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FeedbackHandlerFactory.h	(.../FeedbackHandlerFactory.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/FeedbackHandlerFactory.h	(.../FeedbackHandlerFactory.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,16 +19,15 @@
 #ifndef __FEEDBACKHANDLERFACTORY_H__
 #define __FEEDBACKHANDLERFACTORY_H__
 
-#include "../libchcore/IFeedbackHandlerFactory.h"
-#include "../libchcore/IFeedbackHandler.h"
+#include "../libchengine/IFeedbackHandlerFactory.h"
 
-class CFeedbackHandlerFactory : public chcore::IFeedbackHandlerFactory
+class CFeedbackHandlerFactory : public chengine::IFeedbackHandlerFactory
 {
 public:
 	CFeedbackHandlerFactory();
 	virtual ~CFeedbackHandlerFactory();
 
-	chcore::IFeedbackHandlerPtr Create() override;
+	chengine::IFeedbackHandlerPtr Create() override;
 };
 
 typedef std::shared_ptr<CFeedbackHandlerFactory> CFeedbackHandlerFactoryPtr;
Index: src/ch/FeedbackNotEnoughSpaceDlg.cpp
===================================================================
diff -u -r5f6477e71c348782f8149a86c7a3ae903e5ff635 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FeedbackNotEnoughSpaceDlg.cpp	(.../FeedbackNotEnoughSpaceDlg.cpp)	(revision 5f6477e71c348782f8149a86c7a3ae903e5ff635)
+++ src/ch/FeedbackNotEnoughSpaceDlg.cpp	(.../FeedbackNotEnoughSpaceDlg.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -20,9 +20,8 @@
 #include "ch.h"
 #include "FeedbackNotEnoughSpaceDlg.h"
 #include "StringHelpers.h"
-#include "FeedbackHandler.h"
 #include "resource.h"
-#include "../libchcore/TLocalFilesystem.h"
+#include "../libchengine/EFeedbackResult.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -163,7 +162,7 @@
 			if (m_ullRequired <= ullFree)
 			{
 				CLanguageDialog::OnTimer(nIDEvent);
-				EndDialog(chcore::EFeedbackResult::eResult_Retry);
+				EndDialog(chengine::EFeedbackResult::eResult_Retry);
 			}
 		}
 	}
@@ -174,13 +173,13 @@
 void CFeedbackNotEnoughSpaceDlg::OnRetryButton() 
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Retry);
+	EndDialog(chengine::EFeedbackResult::eResult_Retry);
 }
 
 void CFeedbackNotEnoughSpaceDlg::OnIgnoreButton() 
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Ignore);
+	EndDialog(chengine::EFeedbackResult::eResult_Ignore);
 }
 
 void CFeedbackNotEnoughSpaceDlg::OnLanguageChanged()
@@ -191,11 +190,11 @@
 void CFeedbackNotEnoughSpaceDlg::OnCancel()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Cancel);
+	EndDialog(chengine::EFeedbackResult::eResult_Cancel);
 }
 
 void CFeedbackNotEnoughSpaceDlg::OnBnClickedCancel()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Cancel);
+	EndDialog(chengine::EFeedbackResult::eResult_Cancel);
 }
Index: src/ch/FeedbackNotEnoughSpaceDlg.h
===================================================================
diff -u -r12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FeedbackNotEnoughSpaceDlg.h	(.../FeedbackNotEnoughSpaceDlg.h)	(revision 12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45)
+++ src/ch/FeedbackNotEnoughSpaceDlg.h	(.../FeedbackNotEnoughSpaceDlg.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -18,8 +18,9 @@
 ***************************************************************************/
 #ifndef __FEEDBACKNOTENOUGHSPACEDLG_H__
 #define __FEEDBACKNOTENOUGHSPACEDLG_H__
-#include "../libchcore/TLocalFilesystem.h"
 
+#include "../libchengine/TLocalFilesystem.h"
+
 /////////////////////////////////////////////////////////////////////////////
 // CFeedbackNotEnoughSpaceDlg dialog
 
@@ -57,7 +58,7 @@
 	BOOL m_bAllItems;
 
 private:
-	chcore::TLocalFilesystem m_fsLocal;
+	chengine::TLocalFilesystem m_fsLocal;
 };
 
 #endif
Index: src/ch/FeedbackReplaceDlg.cpp
===================================================================
diff -u -rd9527df01ee91b35d9a5fdccb80ded25a9c8265f -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FeedbackReplaceDlg.cpp	(.../FeedbackReplaceDlg.cpp)	(revision d9527df01ee91b35d9a5fdccb80ded25a9c8265f)
+++ src/ch/FeedbackReplaceDlg.cpp	(.../FeedbackReplaceDlg.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -3,17 +3,17 @@
 
 #include "stdafx.h"
 #include "ch.h"
-#include "../libchcore/TFileInfo.h"
 #include "FeedbackReplaceDlg.h"
 #include "../libictranslate/ResourceManager.h"
 #include "FeedbackHandler.h"
 #include "resource.h"
+#include "../libchengine/TFileInfo.h"
 
 // CFeedbackReplaceDlg dialog
 
 IMPLEMENT_DYNAMIC(CFeedbackReplaceDlg, ictranslate::CLanguageDialog)
 
-CFeedbackReplaceDlg::CFeedbackReplaceDlg(const chcore::TFileInfo& spSrcFile, const chcore::TFileInfo& spDstFile, CWnd* pParent /*=nullptr*/)
+CFeedbackReplaceDlg::CFeedbackReplaceDlg(const chengine::TFileInfo& spSrcFile, const chengine::TFileInfo& spDstFile, CWnd* pParent /*=nullptr*/)
 	: ictranslate::CLanguageDialog(IDD_FEEDBACK_REPLACE_DIALOG, pParent),
 	m_bAllItems(FALSE),
 	m_rSrcFile(spSrcFile),
@@ -187,37 +187,37 @@
 void CFeedbackReplaceDlg::OnBnClickedReplaceButton()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Overwrite);
+	EndDialog(chengine::EFeedbackResult::eResult_Overwrite);
 }
 
 void CFeedbackReplaceDlg::OnBnClickedCopyRestButton()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_CopyRest);
+	EndDialog(chengine::EFeedbackResult::eResult_CopyRest);
 }
 
 void CFeedbackReplaceDlg::OnBnClickedSkipButton()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Skip);
+	EndDialog(chengine::EFeedbackResult::eResult_Skip);
 }
 
 void CFeedbackReplaceDlg::OnBnClickedPauseButton()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Pause);
+	EndDialog(chengine::EFeedbackResult::eResult_Pause);
 }
 
 void CFeedbackReplaceDlg::OnBnClickedCancelButton()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Cancel);
+	EndDialog(chengine::EFeedbackResult::eResult_Cancel);
 }
 
 void CFeedbackReplaceDlg::OnCancel()
 {
 	UpdateData(TRUE);
-	EndDialog(chcore::EFeedbackResult::eResult_Cancel);
+	EndDialog(chengine::EFeedbackResult::eResult_Cancel);
 }
 
 bool CFeedbackReplaceDlg::IsApplyToAllItemsChecked() const
Index: src/ch/FeedbackReplaceDlg.h
===================================================================
diff -u -r12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FeedbackReplaceDlg.h	(.../FeedbackReplaceDlg.h)	(revision 12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45)
+++ src/ch/FeedbackReplaceDlg.h	(.../FeedbackReplaceDlg.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,12 +19,17 @@
 #ifndef __FEEDBACKREPLACEDLG_H__
 #define __FEEDBACKREPLACEDLG_H__
 
+namespace chengine
+{
+	class TFileInfo;
+}
+
 class CFeedbackReplaceDlg : public ictranslate::CLanguageDialog
 {
 	DECLARE_DYNAMIC(CFeedbackReplaceDlg)
 
 public:
-	CFeedbackReplaceDlg(const chcore::TFileInfo& spSrcFile, const chcore::TFileInfo& spDstFile, CWnd* pParent = nullptr);   // standard constructor
+	CFeedbackReplaceDlg(const chengine::TFileInfo& spSrcFile, const chengine::TFileInfo& spDstFile, CWnd* pParent = nullptr);   // standard constructor
 	virtual ~CFeedbackReplaceDlg();
 
 	BOOL OnInitDialog() override;
@@ -57,8 +62,8 @@
 	BOOL m_bAllItems;
 
 protected:
-	const chcore::TFileInfo& m_rSrcFile;
-	const chcore::TFileInfo& m_rDstFile;
+	const chengine::TFileInfo& m_rSrcFile;
+	const chengine::TFileInfo& m_rDstFile;
 
 public:
 	afx_msg void OnBnClickedReplaceButton();
Index: src/ch/FilterDlg.cpp
===================================================================
diff -u -r19b135b50b55b75d008526a799344bda9a62dc22 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FilterDlg.cpp	(.../FilterDlg.cpp)	(revision 19b135b50b55b75d008526a799344bda9a62dc22)
+++ src/ch/FilterDlg.cpp	(.../FilterDlg.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -17,7 +17,6 @@
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
 #include "stdafx.h"
-#include "../libchcore/TFileFilter.h"
 #include "ch.h"
 #include "FilterDlg.h"
 #include "resource.h"
@@ -348,27 +347,27 @@
 	m_ffFilter.SetUseSize1(m_bSize != 0);
 	m_ffFilter.SetUseSize2(m_bSize2 != 0);
 
-	m_ffFilter.SetSizeType1((chcore::TFileFilter::ESizeCompareType)m_ctlSizeType1.GetCurSel());
-	m_ffFilter.SetSizeType2((chcore::TFileFilter::ESizeCompareType)m_ctlSizeType2.GetCurSel());
+	m_ffFilter.SetSizeType1((chengine::TFileFilter::ESizeCompareType)m_ctlSizeType1.GetCurSel());
+	m_ffFilter.SetSizeType2((chengine::TFileFilter::ESizeCompareType)m_ctlSizeType2.GetCurSel());
 
 	m_ffFilter.SetSize1(static_cast<unsigned __int64>(m_uiSize1)*static_cast<unsigned __int64>(GetMultiplier(m_ctlSize1Multi.GetCurSel())));
 	m_ffFilter.SetSize2(static_cast<unsigned __int64>(m_uiSize2)*static_cast<unsigned __int64>(GetMultiplier(m_ctlSize2Multi.GetCurSel())));
 
 	// date
-	m_ffFilter.SetDateType((chcore::TFileFilter::EDateType)m_ctlDateType.GetCurSel());
+	m_ffFilter.SetDateType((chengine::TFileFilter::EDateType)m_ctlDateType.GetCurSel());
 
-	m_ffFilter.SetDateCmpType1((chcore::TFileFilter::EDateCompareType)m_ctlDateType1.GetCurSel());
-	m_ffFilter.SetDateCmpType2((chcore::TFileFilter::EDateCompareType)m_ctlDateType2.GetCurSel());
+	m_ffFilter.SetDateCmpType1((chengine::TFileFilter::EDateCompareType)m_ctlDateType1.GetCurSel());
+	m_ffFilter.SetDateCmpType2((chengine::TFileFilter::EDateCompareType)m_ctlDateType2.GetCurSel());
 
 	CTime tDate;
 	CTime tTime;
 	m_ffFilter.SetUseDate1(m_ctlDate1.GetTime(tDate) == GDT_VALID);
 	m_ffFilter.SetUseTime1(m_ctlTime1.GetTime(tTime) == GDT_VALID);
-	m_ffFilter.SetDateTime1(chcore::TDateTime(tDate.GetYear(), tDate.GetMonth(), tDate.GetDay(), tTime.GetHour(), tTime.GetMinute(), tTime.GetSecond()));
+	m_ffFilter.SetDateTime1(chengine::TDateTime(tDate.GetYear(), tDate.GetMonth(), tDate.GetDay(), tTime.GetHour(), tTime.GetMinute(), tTime.GetSecond()));
 	
 	m_ffFilter.SetUseDate2(m_ctlDate2.GetTime(tDate) == GDT_VALID);
 	m_ffFilter.SetUseTime2(m_ctlTime2.GetTime(tTime) == GDT_VALID);
-	m_ffFilter.SetDateTime2(chcore::TDateTime(tDate.GetYear(), tDate.GetMonth(), tDate.GetDay(), tTime.GetHour(), tTime.GetMinute(), tTime.GetSecond()));
+	m_ffFilter.SetDateTime2(chengine::TDateTime(tDate.GetYear(), tDate.GetMonth(), tDate.GetDay(), tTime.GetHour(), tTime.GetMinute(), tTime.GetSecond()));
 
 	m_ffFilter.SetUseDateTime1((m_bDate1 != 0) && (m_ffFilter.GetUseDate1() || m_ffFilter.GetUseTime1()));
 	m_ffFilter.SetUseDateTime2((m_bDate2 != 0) && (m_ffFilter.GetUseDate2() || m_ffFilter.GetUseTime2()));
Index: src/ch/FilterDlg.h
===================================================================
diff -u -r12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FilterDlg.h	(.../FilterDlg.h)	(revision 12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45)
+++ src/ch/FilterDlg.h	(.../FilterDlg.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -18,6 +18,7 @@
 ***************************************************************************/
 #ifndef __FILTERDLG_H__
 #define __FILTERDLG_H__
+#include "../libchengine/TFileFilter.h"
 
 /////////////////////////////////////////////////////////////////////////////
 // CFilterDlg dialog
@@ -72,7 +73,7 @@
 	// Implementation
 public:
 	void SetSize2(unsigned __int64 ullSize);
-	chcore::TFileFilter m_ffFilter;
+	chengine::TFileFilter m_ffFilter;
 	CStringArray m_astrAddMask;
 	CStringArray m_astrAddExcludeMask;
 
Index: src/ch/FolderDialog.h
===================================================================
diff -u -r12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/FolderDialog.h	(.../FolderDialog.h)	(revision 12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45)
+++ src/ch/FolderDialog.h	(.../FolderDialog.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -35,7 +35,7 @@
 #include "DirTreeCtrl.h"
 #include "ThemedButton.h"
 #include "../libictranslate/LanguageDialog.h"
-#include "../libchcore/TLocalFilesystem.h"
+#include "../libchengine/TLocalFilesystem.h"
 
 /////////////////////////////////////////////////////////////////////////////
 // CFolderDialog dialog
@@ -146,7 +146,7 @@
 	DECLARE_MESSAGE_MAP()
 
 private:
-	chcore::TLocalFilesystem m_fsLocal;
+	chengine::TLocalFilesystem m_fsLocal;
 };
 
 #endif
Index: src/ch/MainWnd.cpp
===================================================================
diff -u -re98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/MainWnd.cpp	(.../MainWnd.cpp)	(revision e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8)
+++ src/ch/MainWnd.cpp	(.../MainWnd.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -32,18 +32,16 @@
 #include "ClipboardMonitor.h"
 #include <boost/shared_array.hpp>
 #include "../common/TShellExtMenuConfig.h"
-#include "../libchcore/TConfig.h"
 #include "../libchcore/TCoreException.h"
-#include "../libchcore/TTaskManagerStatsSnapshot.h"
-#include "../libchcore/TSQLiteSerializerFactory.h"
 #include "TRecentPathsTools.h"
 #include "DirectoryChooser.h"
 #include "FeedbackHandlerFactory.h"
-#include "../libchcore/TTask.h"
 #include "TTaskManagerWrapper.h"
 #include "CfgProperties.h"
 #include "resource.h"
 #include "../liblogger/TAsyncMultiLogger.h"
+#include "../libchengine/TConfigSerializers.h"
+#include "../libserializer/TSQLiteSerializerFactory.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -81,7 +79,7 @@
 /////////////////////////////////////////////////////////////////////////////
 // CMainWnd construction/destruction
 CMainWnd::CMainWnd() :
-	m_spTaskMgrStats(new chcore::TTaskManagerStatsSnapshot),
+	m_spTaskMgrStats(new chengine::TTaskManagerStatsSnapshot),
 	m_spLog(logger::MakeLogger(GetLogFileData(), L"MainWnd"))
 {
 }
@@ -242,12 +240,12 @@
 
 	logger::TLogFileDataPtr spLogFileData = logger::TAsyncMultiLogger::GetInstance()->CreateLoggerData(pathEngineLog.ToString(), GetApp().GetEngineLoggerConfig());
 
-	TSQLiteSerializerFactoryPtr spSerializerFactory(new TSQLiteSerializerFactory(PathFromString(strTasksDir), spLogFileData));
-	IFeedbackHandlerFactoryPtr spFeedbackFactory(new CFeedbackHandlerFactory);
+	serializer::TSQLiteSerializerFactoryPtr spSerializerFactory(new serializer::TSQLiteSerializerFactory(PathFromString(strTasksDir), spLogFileData));
+	chengine::IFeedbackHandlerFactoryPtr spFeedbackFactory(new CFeedbackHandlerFactory);
 
 	try
 	{
-		m_spTasks.reset(new chcore::TTaskManager(spSerializerFactory, spFeedbackFactory, PathFromString(strTasksDir), GetApp().GetEngineLoggerConfig(), spLogFileData));
+		m_spTasks.reset(new chengine::TTaskManager(spSerializerFactory, spFeedbackFactory, PathFromString(strTasksDir), GetApp().GetEngineLoggerConfig(), spLogFileData));
 	}
 	catch(const std::exception& e)
 	{
@@ -258,7 +256,7 @@
 	{
 		if(MsgBox(IDS_TASKMANAGER_LOAD_FAILED, MB_ICONERROR | MB_OKCANCEL) == IDOK)
 		{
-			m_spTasks.reset(new chcore::TTaskManager(spSerializerFactory, spFeedbackFactory, PathFromString(strTasksDir), GetApp().GetEngineLoggerConfig(), spLogFileData, true));
+			m_spTasks.reset(new chengine::TTaskManager(spSerializerFactory, spFeedbackFactory, PathFromString(strTasksDir), GetApp().GetEngineLoggerConfig(), spLogFileData, true));
 		}
 		else
 			return false;
@@ -363,7 +361,7 @@
 /////////////////////////////////////////////////////////////////////////////
 // CMainWnd/CTrayIcon menu message handlers
 
-void CMainWnd::ShowStatusWindow(const chcore::TTaskPtr& spSelect)
+void CMainWnd::ShowStatusWindow(const chengine::TTaskPtr& spSelect)
 {
 	m_pdlgStatus=new CStatusDlg(m_spTasks.get(), this);	// self deleting
 	m_pdlgStatus->m_spInitialSelection = spSelect;
@@ -495,11 +493,11 @@
 			if(!pszBuffer || ulLen == 0 || pszBuffer[ulLen - 1] != L'\0')
 				return FALSE;
 
-			chcore::TString wstrData(pszBuffer);
+			string::TString wstrData(pszBuffer);
 
 			LOG_DEBUG(m_spLog) << L"Received task definition to process: " << wstrData;
 
-			chcore::TTaskDefinition tTaskDefinition;
+			chengine::TTaskDefinition tTaskDefinition;
 			CString strError;
 			try
 			{
@@ -531,7 +529,7 @@
 			}
 
 			// apply current options from global config; in the future we might want to merge the incoming options with global ones instead of overwriting...
-			chcore::TConfig& rConfig = GetConfig();
+			chengine::TConfig& rConfig = GetConfig();
 			rConfig.ExtractSubConfig(BRANCH_TASK_SETTINGS, tTaskDefinition.GetConfiguration());
 
 			// special operation - modify stuff
@@ -608,7 +606,7 @@
 
 			try
 			{
-				chcore::TTaskPtr spTask = m_spTasks->ImportTask(strPath);
+				chengine::TTaskPtr spTask = m_spTasks->ImportTask(strPath);
 				if(spTask)
 					spTask->Store(true);
 				bImported = true;
@@ -649,7 +647,7 @@
 
 void CMainWnd::OnPopupCustomCopy() 
 {
-	chcore::TConfig& rConfig = GetConfig();
+	chengine::TConfig& rConfig = GetConfig();
 
 	CCustomCopyDlg dlg;
 
@@ -661,7 +659,7 @@
 
 		SetPropValue<PP_RECENTPATHS>(rConfig, dlg.m_vRecent);
 
-		chcore::TTaskDefinition tTaskDefinition = dlg.m_tTaskDefinition;
+		chengine::TTaskDefinition tTaskDefinition = dlg.m_tTaskDefinition;
 
 		TTaskManagerWrapper tTaskManager(m_spTasks);
 		tTaskManager.CreateTask(tTaskDefinition);
@@ -674,7 +672,7 @@
 	{
 	case WM_MINIVIEWDBLCLK:
 		{
-			chcore::TTaskPtr spTask = m_spTasks->GetTaskByTaskID(boost::numeric_cast<chcore::taskid_t>(lParam));
+			chengine::TTaskPtr spTask = m_spTasks->GetTaskByTaskID(boost::numeric_cast<chengine::taskid_t>(lParam));
 			ShowStatusWindow(spTask);
 			break;
 		}
@@ -856,7 +854,7 @@
 			pDlg->m_bAutoDelete = true;
 
 			pDlg->Create();
-			chcore::TConfig& rConfig = GetConfig();
+			chengine::TConfig& rConfig = GetConfig();
 			try
 			{
 				SetPropValue<PP_LAST_UPDATE_TIMESTAMP>(rConfig, _time64(nullptr));
Index: src/ch/MainWnd.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/MainWnd.h	(.../MainWnd.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/MainWnd.h	(.../MainWnd.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -21,8 +21,9 @@
 #define __MAINFRM_H__
 
 #include "TrayIcon.h"
-#include "../libchcore/TTaskManager.h"
 #include "../libchcore/TSharedMemory.h"
+#include "../libchengine/TTask.h"
+#include "../libchengine/TTaskManager.h"
 
 class TShellExtMenuConfig;
 class CMiniViewDlg;
@@ -43,7 +44,7 @@
 
 	BOOL RegisterClass();
 	int ShowTrayIcon();
-	void ShowStatusWindow(const chcore::TTaskPtr& spSelect = chcore::TTaskPtr());
+	void ShowStatusWindow(const chengine::TTaskPtr& spSelect = chengine::TTaskPtr());
 	void PrepareToExit();
 
 	void ProcessCommandLine(const TCommandLineParser& rCommandLine);
@@ -75,11 +76,11 @@
 	DECLARE_MESSAGE_MAP()
 
 private:
-	chcore::TTaskManagerStatsSnapshotPtr m_spTaskMgrStats;
+	chengine::TTaskManagerStatsSnapshotPtr m_spTaskMgrStats;
 
 	CTrayIcon m_ctlTray;
 
-	chcore::TTaskManagerPtr m_spTasks;
+	chengine::TTaskManagerPtr m_spTasks;
 	chcore::TSharedMemory m_tCHExtharedMemory;
 
 	CMiniViewDlg* m_pdlgMiniView = nullptr;
Index: src/ch/MiniViewDlg.cpp
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/MiniViewDlg.cpp	(.../MiniViewDlg.cpp)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/MiniViewDlg.cpp	(.../MiniViewDlg.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -17,15 +17,14 @@
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
 #include "stdafx.h"
-#include "../libchcore/TTaskManager.h"
-#include "../libchcore/TTask.h"
 #include "MiniViewDlg.h"
 #include "ch.h"
 #include <assert.h>
 #include "MemDC.h"
-#include "../libchcore/TTaskManagerStatsSnapshot.h"
 #include "CfgProperties.h"
 #include "resource.h"
+#include "../libchengine/TTaskManager.h"
+#include "../libchengine/TTask.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -46,7 +45,7 @@
 /////////////////////////////////////////////////////////////////////////////
 // CMiniViewDlg dialog
 
-CMiniViewDlg::CMiniViewDlg(chcore::TTaskManager* pTaskManager, bool *pbHide, CWnd* pParent /*=nullptr*/)
+CMiniViewDlg::CMiniViewDlg(chengine::TTaskManager* pTaskManager, bool *pbHide, CWnd* pParent /*=nullptr*/)
 	:ictranslate::CLanguageDialog(IDD_MINIVIEW_DIALOG, pParent, &m_bLock),
 	m_pTasks(pTaskManager),
 	m_iLastHeight(0),
@@ -195,7 +194,7 @@
 	if(!m_pTasks)
 		return;
 
-	chcore::TTaskManagerStatsSnapshotPtr spTaskMgrStats(new chcore::TTaskManagerStatsSnapshot);
+	chengine::TTaskManagerStatsSnapshotPtr spTaskMgrStats(new chengine::TTaskManagerStatsSnapshot);
 
 	m_pTasks->GetStatsSnapshot(spTaskMgrStats);
 
@@ -207,25 +206,25 @@
 		size_t stTasksCount = spTaskMgrStats->GetTaskStatsCount();
 		for(size_t stIndex = 0; stIndex < stTasksCount; ++stIndex)
 		{
-			chcore::TTaskStatsSnapshotPtr spTaskStats = spTaskMgrStats->GetTaskStatsAt(stIndex);
-			chcore::ETaskCurrentState eTaskState = spTaskStats->GetTaskState();
+			chengine::TTaskStatsSnapshotPtr spTaskStats = spTaskMgrStats->GetTaskStatsAt(stIndex);
+			chengine::ETaskCurrentState eTaskState = spTaskStats->GetTaskState();
 
-			if(eTaskState != chcore::eTaskState_Finished && eTaskState != chcore::eTaskState_Cancelled && eTaskState != chcore::eTaskState_LoadError)
+			if(eTaskState != chengine::eTaskState_Finished && eTaskState != chengine::eTaskState_Cancelled && eTaskState != chengine::eTaskState_LoadError)
 			{
 				pItem = m_ctlStatus.GetItemAddress(index++);
 
 				// load
-				if(eTaskState == chcore::eTaskState_Error)
+				if(eTaskState == chengine::eTaskState_Error)
 					pItem->m_crColor=RGB(255, 0, 0);
-				else if(eTaskState == chcore::eTaskState_Paused)
+				else if(eTaskState == chengine::eTaskState_Paused)
 					pItem->m_crColor=RGB(255, 255, 0);
-				else if(eTaskState == chcore::eTaskState_Waiting)
+				else if(eTaskState == chengine::eTaskState_Waiting)
 					pItem->m_crColor=RGB(0, 0, 255);
 				else
 					pItem->m_crColor=RGB(0, 255, 0);
 
-				chcore::TString strPath;
-				chcore::TSubTaskStatsSnapshotPtr spSubtaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot();
+				string::TString strPath;
+				chengine::TSubTaskStatsSnapshotPtr spSubtaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot();
 				if(spSubtaskStats)
 					strPath = spSubtaskStats->GetCurrentPath();
 
@@ -277,7 +276,7 @@
 	pItem->m_crColor=GetSysColor(COLOR_HIGHLIGHT);
 	pItem->m_strText=GetResManager().LoadString(IDS_MINIVIEWALL_STRING);
 	pItem->m_uiPos = boost::numeric_cast<int>(spTaskMgrStats->GetCombinedProgress() * 100.0);
-	pItem->m_tTaskID = chcore::NoTaskID;
+	pItem->m_tTaskID = chengine::NoTaskID;
 
 	// get rid of the rest
 	m_ctlStatus.SetSmoothProgress(GetPropValue<PP_MVUSESMOOTHPROGRESS>(GetConfig()));
@@ -438,7 +437,7 @@
 			if (iSel == LB_ERR || (size_t)iSel >= pDlg->m_ctlStatus.m_vItems.size())
 				return;
 
-			chcore::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID);
+			chengine::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID);
 			if(spTask)
 				spTask->PauseProcessing();
 			else
@@ -546,10 +545,10 @@
 			if (iSel == LB_ERR || (size_t)iSel >= pDlg->m_ctlStatus.m_vItems.size())
 				return;
 
-			chcore::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID);
+			chengine::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID);
 			if (spTask)
 			{
-				if(spTask->GetTaskState() == chcore::eTaskState_Waiting)
+				if(spTask->GetTaskState() == chengine::eTaskState_Waiting)
 					spTask->SetForceFlag(true);
 				else
 					spTask->ResumeProcessing();
@@ -591,7 +590,7 @@
 		if (iSel == LB_ERR || (size_t)iSel >= pDlg->m_ctlStatus.m_vItems.size())
 			return;
 
-		chcore::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID);
+		chengine::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID);
 		if(spTask)
 			spTask->CancelProcessing();
 		else
@@ -646,7 +645,7 @@
 			if (iSel == LB_ERR || (size_t)iSel >= pDlg->m_ctlStatus.m_vItems.size())
 				return;
 
-			chcore::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID);
+			chengine::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID);
 			if(spTask)
 				spTask->RestartProcessing();
 			else
@@ -804,7 +803,7 @@
 	if(iSel == LB_ERR || (size_t)iSel >= m_ctlStatus.m_vItems.size())
 		return;
 
-	chcore::taskid_t tTaskID = m_ctlStatus.m_vItems.at(iSel)->m_tTaskID;
+	chengine::taskid_t tTaskID = m_ctlStatus.m_vItems.at(iSel)->m_tTaskID;
 	GetParent()->PostMessage(WM_MINIVIEWDBLCLK, 0, boost::numeric_cast<LPARAM>(tTaskID));
 }
 
Index: src/ch/MiniViewDlg.h
===================================================================
diff -u -r541304f4e098b4c7617b718287ab40646d5deb92 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/MiniViewDlg.h	(.../MiniViewDlg.h)	(revision 541304f4e098b4c7617b718287ab40646d5deb92)
+++ src/ch/MiniViewDlg.h	(.../MiniViewDlg.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -24,6 +24,10 @@
 #include "ProgressListBox.h"
 #include <array>
 
+namespace chengine {
+	class TTaskManager;
+}
+
 namespace chcore
 {
 	class TTaskManager;
@@ -54,7 +58,7 @@
 
 // Construction
 public:
-	CMiniViewDlg(chcore::TTaskManager* pArray, bool* pbHide, CWnd* pParent = nullptr);   // standard constructor
+	CMiniViewDlg(chengine::TTaskManager* pArray, bool* pbHide, CWnd* pParent = nullptr);   // standard constructor
 
 	void ShowWindow();
 	void HideWindow();
@@ -96,7 +100,7 @@
 
 private:
 	// from CMainWnd
-	chcore::TTaskManager *m_pTasks;
+	chengine::TTaskManager *m_pTasks;
 
 	CBrush m_brBackground;
 	int m_iLastHeight;
Index: src/ch/OptionsDlg.cpp
===================================================================
diff -u -r19b135b50b55b75d008526a799344bda9a62dc22 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/OptionsDlg.cpp	(.../OptionsDlg.cpp)	(revision 19b135b50b55b75d008526a799344bda9a62dc22)
+++ src/ch/OptionsDlg.cpp	(.../OptionsDlg.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -26,6 +26,7 @@
 #include <assert.h>
 #include "structs.h"
 #include "CfgProperties.h"
+#include "../libchengine/TConfigSerializers.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -104,7 +105,7 @@
 	m_ctlProperties.Init();
 
 	// copy shortcut and recent paths
-	chcore::TConfig& rConfig = GetConfig();
+	chengine::TConfig& rConfig = GetConfig();
 
 	m_cvRecent.clear();
 	GetPropValue<PP_RECENTPATHS>(rConfig, m_cvRecent);
@@ -132,7 +133,7 @@
 {
 	COptionsDlg* pDlg=static_cast<COptionsDlg*>(lpParam);
 
-	chcore::TBufferSizes tBufferSizes(pDlg->GetBoolProp(iIndex - iParam - 1),
+	chengine::TBufferSizes tBufferSizes(pDlg->GetBoolProp(iIndex - iParam - 1),
 		pDlg->GetUintProp(iIndex - iParam + 7),
 		pDlg->GetUintProp(iIndex - iParam),
 		pDlg->GetUintProp(iIndex - iParam + 1),
@@ -143,7 +144,7 @@
 		pDlg->GetUintProp(iIndex - iParam + 9),
 		pDlg->GetUintProp(iIndex - iParam + 10));
 
-	CBufferSizeDlg dlg(&tBufferSizes, (chcore::TBufferSizes::EBufferType)iParam);
+	CBufferSizeDlg dlg(&tBufferSizes, (chengine::TBufferSizes::EBufferType)iParam);
 	if (dlg.DoModal() == IDOK)
 	{
 		tBufferSizes = dlg.GetBufferSizes();
@@ -363,7 +364,7 @@
 	// counter
 	int iPosition=0;
 
-	chcore::TConfig& rConfig = GetConfig();
+	chengine::TConfig& rConfig = GetConfig();
 	rConfig.DelayNotifications();
 
 	SKIP_SEPARATOR(iPosition);
Index: src/ch/ProgressListBox.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/ProgressListBox.h	(.../ProgressListBox.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/ProgressListBox.h	(.../ProgressListBox.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,7 +19,7 @@
 #ifndef __PROGRESSLISTBOX_H__
 #define __PROGRESSLISTBOX_H__
 
-#include "../libchcore/TaskID.h"
+#include "../libchengine/TaskID.h"
 
 /////////////////////////////////////////////////////////////////////////////
 // CProgressListBox window
@@ -32,7 +32,7 @@
 
 	COLORREF m_crColor;
 
-	chcore::taskid_t m_tTaskID;
+	chengine::taskid_t m_tTaskID;
 };
 
 class CProgressListBox : public CListBox
Index: src/ch/StatusDlg.cpp
===================================================================
diff -u -rd9527df01ee91b35d9a5fdccb80ded25a9c8265f -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/StatusDlg.cpp	(.../StatusDlg.cpp)	(revision d9527df01ee91b35d9a5fdccb80ded25a9c8265f)
+++ src/ch/StatusDlg.cpp	(.../StatusDlg.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -18,17 +18,14 @@
 ***************************************************************************/
 #include "stdafx.h"
 #include "ch.h"
-#include "../libchcore/TTaskManager.h"
-#include "../libchcore/TTask.h"
 #include "resource.h"
 #include "StatusDlg.h"
 #include "BufferSizeDlg.h"
 #include "StringHelpers.h"
 #include "StaticEx.h"
 #include "Structs.h"
-#include "../libchcore/TTaskStatsSnapshot.h"
-#include "../libchcore/TTaskManagerStatsSnapshot.h"
 #include "CfgProperties.h"
+#include "../libchengine/TTaskManager.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -41,10 +38,10 @@
 /////////////////////////////////////////////////////////////////////////////
 // CStatusDlg dialog
 
-CStatusDlg::CStatusDlg(chcore::TTaskManager* pTasks, CWnd* pParent /*=nullptr*/)
+CStatusDlg::CStatusDlg(chengine::TTaskManager* pTasks, CWnd* pParent /*=nullptr*/)
 	: ictranslate::CLanguageDialog(IDD_STATUS_DIALOG, pParent, &m_bLock),
 	m_pTasks(pTasks),
-	m_spTaskMgrStats(new chcore::TTaskManagerStatsSnapshot)
+	m_spTaskMgrStats(new chengine::TTaskManagerStatsSnapshot)
 {
 	RegisterStaticExControl(AfxGetInstanceHandle());
 }
@@ -176,7 +173,7 @@
 	bool bSelected = false;
 	while(stIndex < m_pTasks->GetSize())
 	{
-		chcore::TTaskPtr spTask = m_pTasks->GetAt(stIndex);
+		chengine::TTaskPtr spTask = m_pTasks->GetAt(stIndex);
 		if(m_spInitialSelection)
 		{
 			if(spTask == m_spInitialSelection)
@@ -259,38 +256,38 @@
 
 void CStatusDlg::OnSetBuffersizeButton()
 {
-	chcore::TTaskPtr spTask = GetSelectedItemPointer();
+	chengine::TTaskPtr spTask = GetSelectedItemPointer();
 	if(!spTask)
 		return;
 
 	int iCurrentBufferIndex = 0;
-	chcore::TTaskStatsSnapshotPtr spTaskStats = m_spTaskMgrStats->GetTaskStatsForTaskID(boost::numeric_cast<chcore::taskid_t>(GetSelectedItemSessionUniqueID()));
+	chengine::TTaskStatsSnapshotPtr spTaskStats = m_spTaskMgrStats->GetTaskStatsForTaskID(boost::numeric_cast<chengine::taskid_t>(GetSelectedItemSessionUniqueID()));
 	if(spTaskStats)
 	{
-		chcore::TSubTaskStatsSnapshotPtr spSubTaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot();
+		chengine::TSubTaskStatsSnapshotPtr spSubTaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot();
 		if(spSubTaskStats)
 			iCurrentBufferIndex = spSubTaskStats->GetCurrentBufferIndex();
 	}
 
-	chcore::TBufferSizes tBufferSizes;
+	chengine::TBufferSizes tBufferSizes;
 	spTask->GetBufferSizes(tBufferSizes);
 
-	CBufferSizeDlg dlg(&tBufferSizes, (chcore::TBufferSizes::EBufferType)iCurrentBufferIndex);
+	CBufferSizeDlg dlg(&tBufferSizes, (chengine::TBufferSizes::EBufferType)iCurrentBufferIndex);
 	if(dlg.DoModal() == IDOK)
 		spTask->SetBufferSizes(dlg.GetBufferSizes());
 }
 
-chcore::TTaskPtr CStatusDlg::GetSelectedItemPointer()
+chengine::TTaskPtr CStatusDlg::GetSelectedItemPointer()
 {
 	// returns ptr to a TTask for a given element in listview
 	if(m_ctlStatusList.GetSelectedCount() == 1)
 	{
 		POSITION pos = m_ctlStatusList.GetFirstSelectedItemPosition();
 		int nPos = m_ctlStatusList.GetNextSelectedItem(pos);
-		return m_pTasks->GetTaskByTaskID(boost::numeric_cast<chcore::taskid_t>(m_ctlStatusList.GetItemData(nPos)));
+		return m_pTasks->GetTaskByTaskID(boost::numeric_cast<chengine::taskid_t>(m_ctlStatusList.GetItemData(nPos)));
 	}
 
-	return chcore::TTaskPtr();
+	return chengine::TTaskPtr();
 }
 
 size_t CStatusDlg::GetSelectedItemSessionUniqueID()
@@ -321,12 +318,12 @@
 void CStatusDlg::ApplyButtonsState()
 {
 	// remember ptr to TTask
-	chcore::TTaskPtr spSelectedTask = GetSelectedItemPointer();
+	chengine::TTaskPtr spSelectedTask = GetSelectedItemPointer();
 
 	// set status of buttons pause/resume/cancel
 	if (spSelectedTask != nullptr)
 	{
-		if(spSelectedTask->GetTaskState() == chcore::eTaskState_LoadError)
+		if(spSelectedTask->GetTaskState() == chengine::eTaskState_LoadError)
 		{
 			GetDlgItem(IDC_SHOW_LOG_BUTTON)->EnableWindow(true);
 			GetDlgItem(IDC_PAUSE_BUTTON)->EnableWindow(false);
@@ -341,7 +338,7 @@
 			GetDlgItem(IDC_SHOW_LOG_BUTTON)->EnableWindow(true);
 			GetDlgItem(IDC_DELETE_BUTTON)->EnableWindow(true);
 
-			if (spSelectedTask->GetTaskState() == chcore::eTaskState_Finished || spSelectedTask->GetTaskState() == chcore::eTaskState_Cancelled)
+			if (spSelectedTask->GetTaskState() == chengine::eTaskState_Finished || spSelectedTask->GetTaskState() == chengine::eTaskState_Cancelled)
 			{
 				GetDlgItem(IDC_CANCEL_BUTTON)->EnableWindow(false);
 				GetDlgItem(IDC_PAUSE_BUTTON)->EnableWindow(false);
@@ -350,15 +347,15 @@
 			else
 			{
 				// pause/resume
-				if (spSelectedTask->GetTaskState() == chcore::eTaskState_Paused)
+				if (spSelectedTask->GetTaskState() == chengine::eTaskState_Paused)
 				{
 					GetDlgItem(IDC_PAUSE_BUTTON)->EnableWindow(false);
 					GetDlgItem(IDC_RESUME_BUTTON)->EnableWindow(true);
 				}
 				else
 				{
 					GetDlgItem(IDC_PAUSE_BUTTON)->EnableWindow(true);
-					if (spSelectedTask->GetTaskState() == chcore::eTaskState_Waiting)
+					if (spSelectedTask->GetTaskState() == chengine::eTaskState_Waiting)
 						GetDlgItem(IDC_RESUME_BUTTON)->EnableWindow(true);
 					else
 						GetDlgItem(IDC_RESUME_BUTTON)->EnableWindow(false);
@@ -430,7 +427,7 @@
 		if (LOWORD(wParam) >= ID_POPUP_TIME_CRITICAL && LOWORD(wParam) <= ID_POPUP_IDLE)
 		{
 			// processing priority
-			chcore::TTaskPtr spSelectedTask = GetSelectedItemPointer();
+			chengine::TTaskPtr spSelectedTask = GetSelectedItemPointer();
 
 			if(spSelectedTask == nullptr)
 				return ictranslate::CLanguageDialog::OnCommand(wParam, lParam);
@@ -470,7 +467,7 @@
 		else if(LOWORD(wParam) == ID_POPUP_RESET_APPLY_TO_ALL)
 		{
 			// processing priority
-			chcore::TTaskPtr spSelectedTask = GetSelectedItemPointer();
+			chengine::TTaskPtr spSelectedTask = GetSelectedItemPointer();
 
 			if(spSelectedTask == nullptr)
 				return ictranslate::CLanguageDialog::OnCommand(wParam, lParam);
@@ -483,7 +480,7 @@
 
 void CStatusDlg::OnPauseButton() 
 {
-	chcore::TTaskPtr spTask = GetSelectedItemPointer();
+	chengine::TTaskPtr spTask = GetSelectedItemPointer();
 	if(spTask)
 	{
 		TRACE("PauseProcessing call...\n");
@@ -495,10 +492,10 @@
 
 void CStatusDlg::OnResumeButton() 
 {
-	chcore::TTaskPtr spTask = GetSelectedItemPointer();
+	chengine::TTaskPtr spTask = GetSelectedItemPointer();
 	if(spTask)
 	{
-		if(spTask->GetTaskState() == chcore::eTaskState_Waiting)
+		if(spTask->GetTaskState() == chengine::eTaskState_Waiting)
 			spTask->SetForceFlag();
 		else
 			spTask->ResumeProcessing();
@@ -509,7 +506,7 @@
 
 void CStatusDlg::OnCancelButton() 
 {
-	chcore::TTaskPtr spTask = GetSelectedItemPointer();
+	chengine::TTaskPtr spTask = GetSelectedItemPointer();
 	if(spTask)
 	{
 		spTask->CancelProcessing();
@@ -519,7 +516,7 @@
 
 void CStatusDlg::OnRestartButton() 
 {
-	chcore::TTaskPtr spTask = GetSelectedItemPointer();
+	chengine::TTaskPtr spTask = GetSelectedItemPointer();
 	if(spTask)
 	{
 		spTask->RestartProcessing();
@@ -529,15 +526,15 @@
 
 void CStatusDlg::OnDeleteButton() 
 {
-	chcore::TTaskPtr spTask = GetSelectedItemPointer();
+	chengine::TTaskPtr spTask = GetSelectedItemPointer();
 	if(spTask)
 	{
-		chcore::ETaskCurrentState eTaskState = spTask->GetTaskState();
+		chengine::ETaskCurrentState eTaskState = spTask->GetTaskState();
 		switch(eTaskState)
 		{
-		case chcore::eTaskState_Finished:
-		case chcore::eTaskState_Cancelled:
-		case chcore::eTaskState_LoadError:
+		case chengine::eTaskState_Finished:
+		case chengine::eTaskState_Cancelled:
+		case chengine::eTaskState_LoadError:
 			break;	// allow processing as-is
 
 		default:
@@ -597,11 +594,11 @@
 		break;
 	case VK_SPACE:
 		{
-			chcore::TTaskPtr spTask = GetSelectedItemPointer();
+			chengine::TTaskPtr spTask = GetSelectedItemPointer();
 			if (!spTask)
 				return;
 		
-			if(spTask->GetTaskState() == chcore::eTaskState_Paused)
+			if(spTask->GetTaskState() == chengine::eTaskState_Paused)
 				OnResumeButton();
 			else
 				OnPauseButton();
@@ -612,20 +609,20 @@
 	*pResult = 0;
 }
 
-int CStatusDlg::GetImageFromStatus(chcore::ETaskCurrentState eState)
+int CStatusDlg::GetImageFromStatus(chengine::ETaskCurrentState eState)
 {
 	switch(eState)
 	{
-	case chcore::eTaskState_Cancelled:
+	case chengine::eTaskState_Cancelled:
 		return 4;
-	case chcore::eTaskState_Finished:
+	case chengine::eTaskState_Finished:
 		return 3;
-	case chcore::eTaskState_Waiting:
+	case chengine::eTaskState_Waiting:
 		return 5;
-	case chcore::eTaskState_Paused:
+	case chengine::eTaskState_Paused:
 		return 2;
-	case chcore::eTaskState_Error:
-	case chcore::eTaskState_LoadError:
+	case chengine::eTaskState_Error:
+	case chengine::eTaskState_LoadError:
 		return 1;
 	default:
 		return 0;
@@ -678,7 +675,7 @@
 	// add task info
 	for(size_t stIndex = 0; stIndex < m_spTaskMgrStats->GetTaskStatsCount(); ++stIndex)
 	{
-		chcore::TTaskStatsSnapshotPtr spTaskStats = m_spTaskMgrStats->GetTaskStatsAt(stIndex);
+		chengine::TTaskStatsSnapshotPtr spTaskStats = m_spTaskMgrStats->GetTaskStatsAt(stIndex);
 		// set (update/add new) entry in the task list (on the left)
 		SetTaskListEntry(stIndex, spTaskStats);
 
@@ -732,7 +729,7 @@
 void CStatusDlg::OnShowLogButton() 
 {
 	// show log
-	chcore::TTaskPtr spTask = GetSelectedItemPointer();
+	chengine::TTaskPtr spTask = GetSelectedItemPointer();
 	if(!spTask)
 		return;
 
@@ -766,19 +763,19 @@
 	CString strResult;
 	switch(iIndex)
 	{
-	case chcore::TBufferSizes::eBuffer_Default:
+	case chengine::TBufferSizes::eBuffer_Default:
 		strResult = GetResManager().LoadString(IDS_BSDEFAULT_STRING);
 		break;
-	case chcore::TBufferSizes::eBuffer_OneDisk:
+	case chengine::TBufferSizes::eBuffer_OneDisk:
 		strResult = GetResManager().LoadString(IDS_BSONEDISK_STRING);
 		break;
-	case chcore::TBufferSizes::eBuffer_TwoDisks:
+	case chengine::TBufferSizes::eBuffer_TwoDisks:
 		strResult = GetResManager().LoadString(IDS_BSTWODISKS_STRING);
 		break;
-	case chcore::TBufferSizes::eBuffer_CD:
+	case chengine::TBufferSizes::eBuffer_CD:
 		strResult = GetResManager().LoadString(IDS_BSCD_STRING);
 		break;
-	case chcore::TBufferSizes::eBuffer_LAN:
+	case chengine::TBufferSizes::eBuffer_LAN:
 		strResult = GetResManager().LoadString(IDS_BSLAN_STRING);
 		break;
 	default:
@@ -950,76 +947,76 @@
 	InitializeResizableControls();
 }
 
-CString CStatusDlg::GetStatusString(const chcore::TTaskStatsSnapshotPtr& spTaskStats)
+CString CStatusDlg::GetStatusString(const chengine::TTaskStatsSnapshotPtr& spTaskStats)
 {
 	CString strStatusText;
 	// status string
 	// first
 	switch(spTaskStats->GetTaskState())
 	{
-	case chcore::eTaskState_Error:
+	case chengine::eTaskState_Error:
 		{
 			strStatusText = GetResManager().LoadString(IDS_STATUS_ERROR_STRING);
 			strStatusText += _T("/");
 			break;
 		}
-	case chcore::eTaskState_LoadError:
+	case chengine::eTaskState_LoadError:
 		{
 			strStatusText = GetResManager().LoadString(IDS_STATUS_LOADERROR_STRING);
 			strStatusText += _T("/");
 			break;
 		}
-	case chcore::eTaskState_Paused:
+	case chengine::eTaskState_Paused:
 		{
 			strStatusText = GetResManager().LoadString(IDS_STATUS_PAUSED_STRING);
 			strStatusText += _T("/");
 			break;
 		}
-	case chcore::eTaskState_Finished:
+	case chengine::eTaskState_Finished:
 		{
 			strStatusText = GetResManager().LoadString(IDS_STATUS_FINISHED_STRING);
 			strStatusText += _T("/");
 			break;
 		}
-	case chcore::eTaskState_Waiting:
+	case chengine::eTaskState_Waiting:
 		{
 			strStatusText = GetResManager().LoadString(IDS_STATUS_WAITING_STRING);
 			strStatusText += _T("/");
 			break;
 		}
-	case chcore::eTaskState_Cancelled:
+	case chengine::eTaskState_Cancelled:
 		{
 			strStatusText = GetResManager().LoadString(IDS_STATUS_CANCELLED_STRING);
 			strStatusText += _T("/");
 			break;
 		}
-	case chcore::eTaskState_None:
+	case chengine::eTaskState_None:
 		{
 			strStatusText = GetResManager().LoadString(IDS_STATUS_INITIALIZING_STRING);
 			strStatusText += _T("/");
 			break;
 		}
-	case chcore::eTaskState_Processing:
+	case chengine::eTaskState_Processing:
 		break;
 	default:
 		BOOST_ASSERT(false);		// not implemented state
 	}
 
 	// second part
-	chcore::ESubOperationType eSubOperationType = chcore::eSubOperation_None;
-	chcore::TSubTaskStatsSnapshotPtr spSubtaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot();
+	chengine::ESubOperationType eSubOperationType = chengine::eSubOperation_None;
+	chengine::TSubTaskStatsSnapshotPtr spSubtaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot();
 	if(spSubtaskStats)
 		eSubOperationType = spSubtaskStats->GetSubOperationType();
 
-	if(eSubOperationType == chcore::eSubOperation_Deleting)
+	if(eSubOperationType == chengine::eSubOperation_Deleting)
 		strStatusText += GetResManager().LoadString(IDS_STATUS_DELETING_STRING);
-	else if(eSubOperationType == chcore::eSubOperation_Scanning)
+	else if(eSubOperationType == chengine::eSubOperation_Scanning)
 		strStatusText += GetResManager().LoadString(IDS_STATUS_SEARCHING_STRING);
-	else if(eSubOperationType == chcore::eSubOperation_FastMove)
+	else if(eSubOperationType == chengine::eSubOperation_FastMove)
 		strStatusText += GetResManager().LoadString(IDS_STATUS_FASTMOVE_STRING);
-	else if(spTaskStats->GetOperationType() == chcore::eOperation_Copy)
+	else if(spTaskStats->GetOperationType() == chengine::eOperation_Copy)
 		strStatusText += GetResManager().LoadString(IDS_STATUS_COPYING_STRING);
-	else if(spTaskStats->GetOperationType() == chcore::eOperation_Move)
+	else if(spTaskStats->GetOperationType() == chengine::eOperation_Move)
 		strStatusText += GetResManager().LoadString(IDS_STATUS_MOVING_STRING);
 	else
 		strStatusText += GetResManager().LoadString(IDS_STATUS_UNKNOWN_STRING);
@@ -1042,21 +1039,21 @@
 	return strStatusText;
 }
 
-CString CStatusDlg::GetSubtaskName(chcore::ESubOperationType eSubtask) const
+CString CStatusDlg::GetSubtaskName(chengine::ESubOperationType eSubtask) const
 {
-	if(eSubtask == chcore::eSubOperation_Deleting)
+	if(eSubtask == chengine::eSubOperation_Deleting)
 		return GetResManager().LoadString(IDS_STATUS_DELETING_STRING);
-	else if(eSubtask == chcore::eSubOperation_Scanning)
+	else if(eSubtask == chengine::eSubOperation_Scanning)
 		return GetResManager().LoadString(IDS_STATUS_SEARCHING_STRING);
-	else if(eSubtask == chcore::eSubOperation_FastMove)
+	else if(eSubtask == chengine::eSubOperation_FastMove)
 		return GetResManager().LoadString(IDS_STATUS_FASTMOVE_STRING);
-	else if(eSubtask == chcore::eSubOperation_Copying)
+	else if(eSubtask == chengine::eSubOperation_Copying)
 		return GetResManager().LoadString(IDS_STATUS_COPYING_STRING);
 	else
 		return GetResManager().LoadString(IDS_STATUS_UNKNOWN_STRING);
 }
 
-void CStatusDlg::SetTaskListEntry(size_t stPos, const chcore::TTaskStatsSnapshotPtr& spTaskStats)
+void CStatusDlg::SetTaskListEntry(size_t stPos, const chengine::TTaskStatsSnapshotPtr& spTaskStats)
 {
 	// index subitem
 	CString strStatusText = GetStatusString(spTaskStats);
@@ -1073,7 +1070,7 @@
 	else
 		m_ctlStatusList.InsertItem(&lvi);
 
-	chcore::TString strCurrentPath = spTaskStats->GetSourcePath();
+	string::TString strCurrentPath = spTaskStats->GetSourcePath();
 
 	// input file
 	lvi.mask=LVIF_TEXT;
@@ -1087,7 +1084,7 @@
 
 	// destination path
 	lvi.iSubItem = 2;
-	chcore::TString strDestinationPath = spTaskStats->GetDestinationPath();
+	string::TString strDestinationPath = spTaskStats->GetDestinationPath();
 	lvi.pszText = (PTSTR)strDestinationPath.c_str();
 	lvi.cchTextMax = lstrlen(lvi.pszText);
 	m_ctlStatusList.SetItem(&lvi);
@@ -1129,13 +1126,13 @@
 	return strFmt;
 }
 
-void CStatusDlg::UpdateTaskStatsDetails(const chcore::TTaskStatsSnapshotPtr& spTaskStats)
+void CStatusDlg::UpdateTaskStatsDetails(const chengine::TTaskStatsSnapshotPtr& spTaskStats)
 {
 	unsigned long long timeTotalEstimated = 0;
 	unsigned long long timeElapsed = 0;
 	unsigned long long timeRemaining = 0;
 
-	chcore::TSubTaskStatsSnapshotPtr spSubTaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot();
+	chengine::TSubTaskStatsSnapshotPtr spSubTaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot();
 	if(spSubTaskStats)
 	{
 		// text progress
@@ -1165,12 +1162,12 @@
 		GetDlgItem(IDC_SUBTASKTRANSFER_STATIC)->SetWindowText(strSpeed);
 
 		// subtask name
-		chcore::ESubOperationType eSubOperationType = spSubTaskStats->GetSubOperationType();
+		chengine::ESubOperationType eSubOperationType = spSubTaskStats->GetSubOperationType();
 		CString strSubtaskName = GetSubtaskName(eSubOperationType);
 		GetDlgItem(IDC_SUBTASKNAME_STATIC)->SetWindowText(strSubtaskName);
 
 		// current path
-		chcore::TString strPath = spSubTaskStats->GetCurrentPath();
+		string::TString strPath = spSubTaskStats->GetCurrentPath();
 		if(strPath.IsEmpty())
 			strPath = GetResManager().LoadString(IDS_NONEINPUTFILE_STRING);
 
Index: src/ch/StatusDlg.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/StatusDlg.h	(.../StatusDlg.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/StatusDlg.h	(.../StatusDlg.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -22,11 +22,11 @@
 #include "FFListCtrl.h"
 #include "TProgressCtrlEx.h"
 #include "TExplorerTaskBarProgress.h"
+#include "../libchengine/TTask.h"
+#include "../libchengine/TTaskManager.h"
 
-namespace chcore
-{
+namespace chengine {
 	class TTaskManager;
-	class TTask;
 }
 
 #define WM_UPDATESTATUS WM_USER+6
@@ -38,17 +38,17 @@
 {
 // Construction
 public:
-	explicit CStatusDlg(chcore::TTaskManager* pTasks, CWnd* pParent = nullptr);   // standard constructor
+	explicit CStatusDlg(chengine::TTaskManager* pTasks, CWnd* pParent = nullptr);   // standard constructor
 	virtual ~CStatusDlg();
 
 	void PostCloseMessage();
 	void SetBufferSizesString(unsigned long long ullValue, int iIndex);
 	void RefreshStatus();
 
-	int GetImageFromStatus(chcore::ETaskCurrentState eState);
+	int GetImageFromStatus(chengine::ETaskCurrentState eState);
 
 	void ApplyButtonsState();
-	chcore::TTaskPtr GetSelectedItemPointer();
+	chengine::TTaskPtr GetSelectedItemPointer();
 	size_t GetSelectedItemSessionUniqueID();
 
 	void EnableControls(bool bEnable=true);
@@ -61,17 +61,17 @@
 	void OnLanguageChanged() override;
 
 	void PrepareResizableControls();
-	CString GetStatusString(const chcore::TTaskStatsSnapshotPtr& spTaskStats);
+	CString GetStatusString(const chengine::TTaskStatsSnapshotPtr& spTaskStats);
 
 	void StickDialogToScreenEdge();
 
 	CString FormatTime(unsigned long long timeSeconds);
 	CString FormatTimeMiliseconds(unsigned long long timeMiliSeconds);
 
 	CString GetProcessedText(unsigned long long ullProcessedCount, unsigned long long ullTotalCount, unsigned long long ullProcessedSize, unsigned long long ullTotalSize);
-	void UpdateTaskStatsDetails(const chcore::TTaskStatsSnapshotPtr& spTaskStats);
-	void SetTaskListEntry(size_t stPos, const chcore::TTaskStatsSnapshotPtr& spTaskStats);
-	CString GetSubtaskName(chcore::ESubOperationType eSubtask) const;
+	void UpdateTaskStatsDetails(const chengine::TTaskStatsSnapshotPtr& spTaskStats);
+	void SetTaskListEntry(size_t stPos, const chengine::TTaskStatsSnapshotPtr& spTaskStats);
+	CString GetSubtaskName(chengine::ESubOperationType eSubtask) const;
 
 	CString GetProgressWindowTitleText() const;
 	void UpdateTaskBarProgress() const;
@@ -106,12 +106,12 @@
 	DECLARE_MESSAGE_MAP()
 
 public:
-	chcore::TTaskPtr m_spInitialSelection;
+	chengine::TTaskPtr m_spInitialSelection;
 
 	static bool m_bLock;				// locker
 
 protected:
-	chcore::TTaskManager* m_pTasks;
+	chengine::TTaskManager* m_pTasks;
 
 	CImageList m_images;
 	CFFListCtrl m_ctlStatusList;
@@ -123,7 +123,7 @@
 	TProgressCtrlEx m_ctlSubTaskSizeProgress;
 	TProgressCtrlEx	m_ctlProgressAll;
 
-	chcore::TTaskManagerStatsSnapshotPtr m_spTaskMgrStats;
+	chengine::TTaskManagerStatsSnapshotPtr m_spTaskMgrStats;
 	TExplorerTaskBarProgress m_taskBarProgress;
 };
 
Index: src/ch/Stdafx.h
===================================================================
diff -u -r8a2ff3b2b71b45fb525e030167e62f316cb32869 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/Stdafx.h	(.../Stdafx.h)	(revision 8a2ff3b2b71b45fb525e030167e62f316cb32869)
+++ src/ch/Stdafx.h	(.../Stdafx.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -45,7 +45,6 @@
 
 #include "debug.h"
 #include "../libictranslate/LanguageDialog.h"
-#include "../libchcore/TConfigSerializers.h"
 
 #ifdef _UNICODE
 #if defined _M_IX86
Index: src/ch/TShellExtensionConfig.cpp
===================================================================
diff -u -r306fbe693c70290af9de9a5779084a697de22d75 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/TShellExtensionConfig.cpp	(.../TShellExtensionConfig.cpp)	(revision 306fbe693c70290af9de9a5779084a697de22d75)
+++ src/ch/TShellExtensionConfig.cpp	(.../TShellExtensionConfig.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -23,6 +23,7 @@
 #include "CfgProperties.h"
 #include "resource.h"
 #include "shortcuts.h"
+#include "../libchengine/TConfigSerializers.h"
 
 TShellExtensionConfig::TShellExtensionConfig(const logger::TLogFileDataPtr& spLogData) :
 	m_spLog(logger::MakeLogger(spLogData, L"ShellExtConfig"))
@@ -33,7 +34,7 @@
 {
 	try
 	{
-		chcore::TConfig& rConfig = GetConfig();
+		chengine::TConfig& rConfig = GetConfig();
 
 		TShellExtMenuConfig cfgShellExt;
 
@@ -57,8 +58,8 @@
 		PrepareDragAndDropMenuItems(cfgShellExt);
 		PrepareNormalMenuItems(cfgShellExt);
 
-		chcore::TConfig cfgStorage;
-		chcore::TString wstrData;
+		chengine::TConfig cfgStorage;
+		string::TString wstrData;
 
 		cfgShellExt.StoreInConfig(cfgStorage, _T("ShellExtCfg"));
 		cfgStorage.WriteToString(wstrData);
@@ -75,33 +76,33 @@
 
 void TShellExtensionConfig::PrepareDragAndDropMenuItems(TShellExtMenuConfig &cfgShellExt) const
 {
-	chcore::TConfig& rConfig = GetConfig();
+	chengine::TConfig& rConfig = GetConfig();
 	ictranslate::CResourceManager& rResManager = GetResManager();
 
 	TShellMenuItemPtr spDragAndDropRootItem = cfgShellExt.GetDragAndDropRoot();
 	bool bAddedAnyOption = false;
 	if(GetPropValue<PP_SHSHOWCOPY>(rConfig))
 	{
 		spDragAndDropRootItem->AddChild(std::make_shared<TShellMenuItem>(rResManager.LoadString(IDS_MENUCOPY_STRING), rResManager.LoadString(IDS_MENUTIPCOPY_STRING),
-			TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chcore::eOperation_Copy),
+			TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chengine::eOperation_Copy),
 			TSourcePathsInfo(TSourcePathsInfo::eSrcType_InitializeIDataObject),
-			TDestinationPathInfo(TDestinationPathInfo::eDstType_InitializePidlFolder, chcore::TSmartPath()), false, chcore::eOperation_Copy));
+			TDestinationPathInfo(TDestinationPathInfo::eDstType_InitializePidlFolder, chcore::TSmartPath()), false, chengine::eOperation_Copy));
 		bAddedAnyOption = true;
 	}
 
 	if(GetPropValue<PP_SHSHOWMOVE>(rConfig))
 	{
 		spDragAndDropRootItem->AddChild(std::make_shared<TShellMenuItem>(rResManager.LoadString(IDS_MENUMOVE_STRING), rResManager.LoadString(IDS_MENUTIPMOVE_STRING),
-			TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chcore::eOperation_Move),
+			TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chengine::eOperation_Move),
 			TSourcePathsInfo(TSourcePathsInfo::eSrcType_InitializeIDataObject),
-			TDestinationPathInfo(TDestinationPathInfo::eDstType_InitializePidlFolder, chcore::TSmartPath()), false, chcore::eOperation_Move));
+			TDestinationPathInfo(TDestinationPathInfo::eDstType_InitializePidlFolder, chcore::TSmartPath()), false, chengine::eOperation_Move));
 		bAddedAnyOption = true;
 	}
 
 	if(GetPropValue<PP_SHSHOWCOPYMOVE>(rConfig))
 	{
 		spDragAndDropRootItem->AddChild(std::make_shared<TShellMenuItem>(rResManager.LoadString(IDS_MENUCOPYMOVESPECIAL_STRING), rResManager.LoadString(IDS_MENUTIPCOPYMOVESPECIAL_STRING),
-			TOperationTypeInfo(TOperationTypeInfo::eOpType_Autodetect, chcore::eOperation_Copy),
+			TOperationTypeInfo(TOperationTypeInfo::eOpType_Autodetect, chengine::eOperation_Copy),
 			TSourcePathsInfo(TSourcePathsInfo::eSrcType_InitializeIDataObject),
 			TDestinationPathInfo(TDestinationPathInfo::eDstType_InitializePidlFolder, chcore::TSmartPath()), true));
 		bAddedAnyOption = true;
@@ -116,23 +117,23 @@
 
 void TShellExtensionConfig::PrepareNormalMenuItems(TShellExtMenuConfig &cfgShellExt) const
 {
-	chcore::TConfig& rConfig = GetConfig();
+	chengine::TConfig& rConfig = GetConfig();
 	ictranslate::CResourceManager& rResManager = GetResManager();
 
 	TShellMenuItemPtr spNormalRootItem = cfgShellExt.GetNormalRoot();
 
 	if(GetPropValue<PP_SHSHOWPASTE>(rConfig))
 	{
 		spNormalRootItem->AddChild(std::make_shared<TShellMenuItem>(rResManager.LoadString(IDS_MENUPASTE_STRING), rResManager.LoadString(IDS_MENUTIPPASTE_STRING),
-			TOperationTypeInfo(TOperationTypeInfo::eOpType_Autodetect, chcore::eOperation_Copy),
+			TOperationTypeInfo(TOperationTypeInfo::eOpType_Autodetect, chengine::eOperation_Copy),
 			TSourcePathsInfo(TSourcePathsInfo::eSrcType_Clipboard),
 			TDestinationPathInfo(TDestinationPathInfo::eDstType_InitializeAuto, chcore::TSmartPath()), false));
 	}
 
 	if(GetPropValue<PP_SHSHOWPASTESPECIAL>(rConfig))
 	{
 		spNormalRootItem->AddChild(std::make_shared<TShellMenuItem>(rResManager.LoadString(IDS_MENUPASTESPECIAL_STRING), rResManager.LoadString(IDS_MENUTIPPASTESPECIAL_STRING),
-			TOperationTypeInfo(TOperationTypeInfo::eOpType_Autodetect, chcore::eOperation_Copy),
+			TOperationTypeInfo(TOperationTypeInfo::eOpType_Autodetect, chengine::eOperation_Copy),
 			TSourcePathsInfo(TSourcePathsInfo::eSrcType_Clipboard),
 			TDestinationPathInfo(TDestinationPathInfo::eDstType_InitializeAuto, chcore::TSmartPath()), true));
 	}
@@ -160,7 +161,7 @@
 			for(const CShortcut& tShortcut : vShortcuts)
 			{
 				menuItem->AddChild(std::make_shared<TShellMenuItem>((PCTSTR)tShortcut.m_strName, (PCTSTR)tShortcut.m_strPath,
-					TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chcore::eOperation_Copy),
+					TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chengine::eOperation_Copy),
 					TSourcePathsInfo(TSourcePathsInfo::eSrcType_InitializeAuto),
 					TDestinationPathInfo(TDestinationPathInfo::eDstType_Specified, chcore::PathFromString((PCTSTR)tShortcut.m_strPath)), false));
 			}
@@ -173,7 +174,7 @@
 
 			// "Choose" menu option
 			menuItem->AddChild(std::make_shared<TShellMenuItem>(rResManager.LoadString(IDS_SHELLEXT_CHOOSE_DIR_STRING), rResManager.LoadString(IDS_SHELLEXT_CHOOSE_DIR_TOOLTIP_STRING),
-				TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chcore::eOperation_Copy),
+				TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chengine::eOperation_Copy),
 				TSourcePathsInfo(TSourcePathsInfo::eSrcType_InitializeAuto),
 				TDestinationPathInfo(TDestinationPathInfo::eDstType_Choose, chcore::TSmartPath()), false));
 		}
@@ -184,7 +185,7 @@
 			for(const CShortcut& tShortcut : vShortcuts)
 			{
 				menuItem->AddChild(std::make_shared<TShellMenuItem>((PCTSTR)tShortcut.m_strName, (PCTSTR)tShortcut.m_strPath,
-					TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chcore::eOperation_Move),
+					TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chengine::eOperation_Move),
 					TSourcePathsInfo(TSourcePathsInfo::eSrcType_InitializeAuto),
 					TDestinationPathInfo(TDestinationPathInfo::eDstType_Specified, chcore::PathFromString((PCTSTR)tShortcut.m_strPath)), false));
 			}
@@ -197,7 +198,7 @@
 
 			// "Choose" menu option
 			menuItem->AddChild(std::make_shared<TShellMenuItem>(rResManager.LoadString(IDS_SHELLEXT_CHOOSE_DIR_STRING), rResManager.LoadString(IDS_SHELLEXT_CHOOSE_DIR_TOOLTIP_STRING),
-				TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chcore::eOperation_Move),
+				TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chengine::eOperation_Move),
 				TSourcePathsInfo(TSourcePathsInfo::eSrcType_InitializeAuto),
 				TDestinationPathInfo(TDestinationPathInfo::eDstType_Choose, chcore::TSmartPath()), false));
 		}
@@ -208,7 +209,7 @@
 			for(const CShortcut& tShortcut : vShortcuts)
 			{
 				menuItem->AddChild(std::make_shared<TShellMenuItem>((PCTSTR)tShortcut.m_strName, (PCTSTR)tShortcut.m_strPath,
-					TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chcore::eOperation_Copy),
+					TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chengine::eOperation_Copy),
 					TSourcePathsInfo(TSourcePathsInfo::eSrcType_InitializeAuto),
 					TDestinationPathInfo(TDestinationPathInfo::eDstType_Specified, chcore::PathFromString((PCTSTR)tShortcut.m_strPath)), true));
 			}
@@ -221,7 +222,7 @@
 
 			// "Choose" menu option
 			menuItem->AddChild(std::make_shared<TShellMenuItem>(rResManager.LoadString(IDS_SHELLEXT_CHOOSE_DIR_STRING), rResManager.LoadString(IDS_SHELLEXT_CHOOSE_DIR_TOOLTIP_STRING),
-				TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chcore::eOperation_Copy),
+				TOperationTypeInfo(TOperationTypeInfo::eOpType_Specified, chengine::eOperation_Copy),
 				TSourcePathsInfo(TSourcePathsInfo::eSrcType_InitializeAuto),
 				TDestinationPathInfo(TDestinationPathInfo::eDstType_Choose, chcore::TSmartPath()), true));
 		}
Index: src/ch/TTaskManagerWrapper.cpp
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/TTaskManagerWrapper.cpp	(.../TTaskManagerWrapper.cpp)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/TTaskManagerWrapper.cpp	(.../TTaskManagerWrapper.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -20,27 +20,25 @@
 #include "TTaskManagerWrapper.h"
 #include "resource.h"
 #include "../libictranslate/ResourceManager.h"
-#include "../libchcore/TTaskConfiguration.h"
-#include "../libchcore/TTaskDefinition.h"
-#include "../libchcore/TTask.h"
 #include "../libchcore/TBaseException.h"
 #include "CfgProperties.h"
 #include "ch.h"
+#include "../libchengine/TConfigSerializers.h"
 
-TTaskManagerWrapper::TTaskManagerWrapper(const chcore::TTaskManagerPtr& spTaskManager) :
+TTaskManagerWrapper::TTaskManagerWrapper(const chengine::TTaskManagerPtr& spTaskManager) :
 	m_spTaskManager(spTaskManager)
 {
 }
 
-chcore::TTaskPtr TTaskManagerWrapper::CreateTask(chcore::TTaskDefinition& rTaskDefinition)
+chengine::TTaskPtr TTaskManagerWrapper::CreateTask(chengine::TTaskDefinition& rTaskDefinition)
 {
 	UpdateFileNamingFormat(rTaskDefinition.GetConfiguration());
 
 	CString strMessage;
 	try
 	{
 		// create task with the above definition
-		chcore::TTaskPtr spTask = m_spTaskManager->CreateTask(rTaskDefinition);
+		chengine::TTaskPtr spTask = m_spTaskManager->CreateTask(rTaskDefinition);
 
 		// add to task list and start processing
 		spTask->BeginProcessing();
@@ -70,7 +68,7 @@
 	return nullptr;
 }
 
-void TTaskManagerWrapper::UpdateFileNamingFormat(chcore::TConfig& rTaskConfig)
+void TTaskManagerWrapper::UpdateFileNamingFormat(chengine::TConfig& rTaskConfig)
 {
 	ictranslate::CResourceManager& rResourceManager = ictranslate::CResourceManager::Acquire();
 
@@ -89,6 +87,6 @@
 	}
 
 	// load resource strings
-	chcore::SetTaskPropValue<chcore::eTO_AlternateFilenameFormatString_First>(rTaskConfig, (PCTSTR)strFirstCopyFormat);
-	chcore::SetTaskPropValue<chcore::eTO_AlternateFilenameFormatString_AfterFirst>(rTaskConfig, (PCTSTR)strSubsequentCopyFormat);
+	chengine::SetTaskPropValue<chengine::eTO_AlternateFilenameFormatString_First>(rTaskConfig, (PCTSTR)strFirstCopyFormat);
+	chengine::SetTaskPropValue<chengine::eTO_AlternateFilenameFormatString_AfterFirst>(rTaskConfig, (PCTSTR)strSubsequentCopyFormat);
 }
Index: src/ch/TTaskManagerWrapper.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/TTaskManagerWrapper.h	(.../TTaskManagerWrapper.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/TTaskManagerWrapper.h	(.../TTaskManagerWrapper.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,20 +19,21 @@
 #ifndef __TTASKMANAGERWRAPPER_H__
 #define __TTASKMANAGERWRAPPER_H__
 
-#include "../libchcore/TTaskManager.h"
+#include "../libchengine/TTask.h"
+#include "../libchengine/TTaskManager.h"
 
 class TTaskManagerWrapper
 {
 public:
-	explicit TTaskManagerWrapper(const chcore::TTaskManagerPtr& spTaskManager);
+	explicit TTaskManagerWrapper(const chengine::TTaskManagerPtr& spTaskManager);
 
-	chcore::TTaskPtr CreateTask(chcore::TTaskDefinition& rTaskDefinition);
+	chengine::TTaskPtr CreateTask(chengine::TTaskDefinition& rTaskDefinition);
 
 private:
-	void UpdateFileNamingFormat(chcore::TConfig& rTaskConfig);
+	void UpdateFileNamingFormat(chengine::TConfig& rTaskConfig);
 
 private:
-	chcore::TTaskManagerPtr m_spTaskManager;
+	chengine::TTaskManagerPtr m_spTaskManager;
 };
 
 #endif
Index: src/ch/UpdateChecker.cpp
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/UpdateChecker.cpp	(.../UpdateChecker.cpp)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/UpdateChecker.cpp	(.../UpdateChecker.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -150,7 +150,7 @@
 // ============================================================================
 void CUpdateChecker::SetResult(ECheckResult eCheckResult, DWORD dwError)
 {
-	chcore::TString strError;
+	string::TString strError;
 	if(eCheckResult == eResult_Error && dwError != 0)
 		strError = chcore::TWin32ErrorFormatter::FormatWin32ErrorCodeWithFallback(dwError, _T("wininet.dll"), true);
 
Index: src/ch/UpdaterDlg.cpp
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/UpdaterDlg.cpp	(.../UpdaterDlg.cpp)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/ch/UpdaterDlg.cpp	(.../UpdaterDlg.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -13,6 +13,7 @@
 #include "resource.h"
 #include "CfgProperties.h"
 #include "../liblogger/TLogger.h"
+#include "../libchengine/TConfigSerializers.h"
 
 #define UPDATER_TIMER 639
 
Index: src/ch/ch.cpp
===================================================================
diff -u -re98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/ch.cpp	(.../ch.cpp)	(revision e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8)
+++ src/ch/ch.cpp	(.../ch.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -31,12 +31,13 @@
 #include "CrashDlg.h"
 #include "../common/version.h"
 #include "TCommandLineParser.h"
-#include "../libchcore/TStringSet.h"
+#include "../libstring/TStringSet.h"
 #include "TMsgBox.h"
 #include "resource.h"
 #include "../liblogger/TLogger.h"
 #include "../liblogger/TAsyncMultiLogger.h"
 #include "TWindowMessageFilterHelper.h"
+#include "../libchengine/TConfigSerializers.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -85,7 +86,7 @@
 	theApp.OnResManNotify(uiMsg);
 }
 
-void ConfigPropertyChangedCallback(const chcore::TStringSet& setPropNames, void* /*pParam*/)
+void ConfigPropertyChangedCallback(const string::TStringSet& setPropNames, void* /*pParam*/)
 {
 	theApp.OnConfigNotify(setPropNames);
 }
@@ -123,9 +124,9 @@
 	return ictranslate::CResourceManager::Acquire();
 }
 
-chcore::TConfig& CCopyHandlerApp::GetConfig()
+chengine::TConfig& CCopyHandlerApp::GetConfig()
 {
-	static chcore::TConfig tCfg;
+	static chengine::TConfig tCfg;
 	return tCfg;
 }
 
@@ -233,7 +234,7 @@
 	strCfgPath = strPath + _T("\\ch.xml");
 
 	// initialize configuration file
-	chcore::TConfig& rCfg = GetConfig();
+	chengine::TConfig& rCfg = GetConfig();
 	rCfg.ConnectToNotifier(ConfigPropertyChangedCallback, nullptr);
 
 	// read the configuration
@@ -475,7 +476,7 @@
 
 void CCopyHandlerApp::InitLoggers()
 {
-	chcore::TConfig& rConfig = GetConfig();
+	chengine::TConfig& rConfig = GetConfig();
 
 	logger::TAsyncMultiLogger::GetInstance()->SetMaxLogSize(GetPropValue<PP_LOGMAXSIZE>(rConfig));
 	logger::TAsyncMultiLogger::GetInstance()->SetMaxRotatedCount(GetPropValue<PP_LOGROTATECOUNT>(rConfig));
@@ -488,7 +489,7 @@
 	long lExtensionVersion = 0;
 	INT_PTR iDlgResult = IDNO;
 
-	chcore::TConfig& rConfig = GetConfig();
+	chengine::TConfig& rConfig = GetConfig();
 
 	int iDoNotShowAgain_Unregistered = GetPropValue<PP_HIDE_SHELLEXT_UNREGISTERED>(rConfig);
 	int iDoNotShowAgain_VersionMismatch = GetPropValue<PP_HIDE_SHELLEXT_VERSIONMISMATCH>(rConfig);
@@ -629,9 +630,9 @@
 	}
 }
 
-void CCopyHandlerApp::OnConfigNotify(const chcore::TStringSet& setPropNames)
+void CCopyHandlerApp::OnConfigNotify(const string::TStringSet& setPropNames)
 {
-	chcore::TConfig& rCfg = GetConfig();
+	chengine::TConfig& rCfg = GetConfig();
 
 	// is this language
 	if(setPropNames.HasValue(PropData<PP_PLANGUAGE>::GetPropertyName()))
Index: src/ch/ch.h
===================================================================
diff -u -r541304f4e098b4c7617b718287ab40646d5deb92 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/ch.h	(.../ch.h)	(revision 541304f4e098b4c7617b718287ab40646d5deb92)
+++ src/ch/ch.h	(.../ch.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -21,12 +21,12 @@
 
 #include "AppHelper.h"
 #include "../libictranslate/ResourceManager.h"
-#include "../libchcore/TConfig.h"
 #include "TShellExtensionClient.h"
 #include "TCommandLineParser.h"
 #include "../liblogger/TLogger.h"
-#include "../libchcore/TCoreEngine.h"
 #include "TShellExtensionConfig.h"
+#include "../libchengine/TConfig.h"
+#include "../libchengine/TCoreEngine.h"
 
 class CCopyHandlerApp : public CWinApp, public CAppHelper
 {
@@ -45,7 +45,7 @@
 
 	friend CCopyHandlerApp& GetApplication();
 	static ictranslate::CResourceManager& GetResManager();
-	static chcore::TConfig& GetConfig();
+	static chengine::TConfig& GetConfig();
 
 	logger::TLogFileDataPtr GetLogFileData() const;
 	logger::TMultiLoggerConfigPtr GetEngineLoggerConfig() const;
@@ -54,7 +54,7 @@
 	void RegisterShellExtension();
 	void UnregisterShellExtension();
 
-	void OnConfigNotify(const chcore::TStringSet& setPropNames);
+	void OnConfigNotify(const string::TStringSet& setPropNames);
 	void OnResManNotify(UINT uiType);
 
 	const TCommandLineParser& GetCommandLine() const { return m_cmdLineParser; }
@@ -74,7 +74,7 @@
 
 	TCommandLineParser m_cmdLineParser;
 
-	chcore::TCoreEngine m_chEngine;
+	chengine::TCoreEngine m_chEngine;
 
 	TShellExtensionConfigPtr m_shellExtConfig;
 	TShellExtensionClient m_tShellExtClient;
@@ -103,7 +103,7 @@
 	return CCopyHandlerApp::GetResManager();
 }
 
-inline chcore::TConfig& GetConfig()
+inline chengine::TConfig& GetConfig()
 {
 	return CCopyHandlerApp::GetConfig();
 }
Index: src/ch/ch.vc140.vcxproj
===================================================================
diff -u -rd04caed42cbc16ffd508f173ca5f92d9512cfc69 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/ch/ch.vc140.vcxproj	(.../ch.vc140.vcxproj)	(revision d04caed42cbc16ffd508f173ca5f92d9512cfc69)
+++ src/ch/ch.vc140.vcxproj	(.../ch.vc140.vcxproj)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -1,2011 +1,2020 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Testing Debug|Win32">
-      <Configuration>Testing Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Testing Debug|x64">
-      <Configuration>Testing Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Testing Release|Win32">
-      <Configuration>Testing Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Testing Release|x64">
-      <Configuration>Testing Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>ch</ProjectName>
-    <ProjectGuid>{4B215B9A-58CA-4987-AC95-7DFC3043E100}</ProjectGuid>
-    <RootNamespace>ch</RootNamespace>
-    <Keyword>MFCProj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>11.0.51106.1</_ProjectFileVersion>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <LinkIncremental>true</LinkIncremental>
-    <TargetName>$(ProjectName)64</TargetName>
-    <RunCodeAnalysis>false</RunCodeAnalysis>
-    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <LinkIncremental>true</LinkIncremental>
-    <TargetName>$(ProjectName)64</TargetName>
-    <RunCodeAnalysis>false</RunCodeAnalysis>
-    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <LinkIncremental>false</LinkIncremental>
-    <TargetName>$(ProjectName)64</TargetName>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <LinkIncremental>false</LinkIncremental>
-    <TargetName>$(ProjectName)64</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Debug/ch.tlb</TypeLibraryName>
-      <HeaderFileName />
-    </Midl>
-    <ClCompile>
-      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <MinimalRebuild>false</MinimalRebuild>
-      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
-      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent />
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Debug/ch.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;TESTING;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <MinimalRebuild>false</MinimalRebuild>
-      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
-      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;gmock32d.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent>
-      <Command>cd "$(TargetDir)"
-"$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <TypeLibraryName>.\Debug/ch.tlb</TypeLibraryName>
-      <HeaderFileName />
-    </Midl>
-    <ClCompile>
-      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
-      <EnablePREfast>false</EnablePREfast>
-      <SDLCheck>true</SDLCheck>
-      <MinimalRebuild>false</MinimalRebuild>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent />
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <TypeLibraryName>.\Debug/ch.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;TESTING;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
-      <EnablePREfast>false</EnablePREfast>
-      <SDLCheck>true</SDLCheck>
-      <MinimalRebuild>false</MinimalRebuild>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;gmock64d.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent>
-      <Command>cd "$(TargetDir)"
-"$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/ch.tlb</TypeLibraryName>
-      <HeaderFileName />
-    </Midl>
-    <ClCompile>
-      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>MaxSpeed</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
-      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent />
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/ch.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>MaxSpeed</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;TESTING;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
-      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;gmock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent>
-      <Command>cd "$(TargetDir)"
-"$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <TypeLibraryName>.\Release/ch.tlb</TypeLibraryName>
-      <HeaderFileName />
-    </Midl>
-    <ClCompile>
-      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent />
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <TypeLibraryName>.\Release/ch.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;TESTING;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;gmock64.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent>
-      <Command>cd "$(TargetDir)"
-"$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="..\Common\ipcstructs.h" />
-    <ClInclude Include="..\common\targetver.h" />
-    <ClInclude Include="..\common\TShellExtIpcConfigDataProvider.h" />
-    <ClInclude Include="..\common\TShellExtMenuConfig.h" />
-    <ClInclude Include="..\common\version.h" />
-    <ClInclude Include="AsyncHttpFile.h" />
-    <ClInclude Include="CDragDropComboEx.h" />
-    <ClInclude Include="CDragDropListCtrl.h" />
-    <ClInclude Include="DirectoryChooser.h" />
-    <ClInclude Include="FeedbackHandler.h" />
-    <ClInclude Include="FeedbackHandlerFactory.h" />
-    <ClInclude Include="structs.h" />
-    <ClInclude Include="AppHelper.h" />
-    <ClInclude Include="CfgProperties.h" />
-    <ClInclude Include="ClipboardMonitor.h" />
-    <ClInclude Include="shortcuts.h" />
-    <ClInclude Include="StringHelpers.h" />
-    <ClInclude Include="TExplorerTaskBarProgress.h" />
-    <ClInclude Include="TMsgBox.h" />
-    <ClInclude Include="TPathProcessor.h" />
-    <ClInclude Include="TProgressCtrlEx.h" />
-    <ClInclude Include="TRecentPathsTools.h" />
-    <ClInclude Include="TRegistry.h" />
-    <ClInclude Include="TShellExtensionConfig.h" />
-    <ClInclude Include="TTaskManagerWrapper.h" />
-    <ClInclude Include="TWindowMessageFilterHelper.h" />
-    <ClInclude Include="UpdateChecker.h" />
-    <ClInclude Include="ch.h" />
-    <ClInclude Include="stdafx.h" />
-    <ClInclude Include="TCommandLineParser.h" />
-    <ClInclude Include="MainWnd.h" />
-    <ClInclude Include="MemDC.h" />
-    <ClInclude Include="Theme Helpers.h" />
-    <ClInclude Include="TrayIcon.h" />
-    <ClInclude Include="DirTreeCtrl.h" />
-    <ClInclude Include="FFListCtrl.h" />
-    <ClInclude Include="ProgressListBox.h" />
-    <ClInclude Include="PropertyListCtrl.h" />
-    <ClInclude Include="StaticEx.h" />
-    <ClInclude Include="ThemedButton.h" />
-    <ClInclude Include="AboutDlg.h" />
-    <ClInclude Include="BufferSizeDlg.h" />
-    <ClInclude Include="CrashDlg.h" />
-    <ClInclude Include="CustomCopyDlg.h" />
-    <ClInclude Include="Dialogs.h" />
-    <ClInclude Include="FeedbackFileErrorDlg.h" />
-    <ClInclude Include="FeedbackNotEnoughSpaceDlg.h" />
-    <ClInclude Include="FeedbackReplaceDlg.h" />
-    <ClInclude Include="FilterDlg.h" />
-    <ClInclude Include="FolderDialog.h" />
-    <ClInclude Include="MiniViewDlg.h" />
-    <ClInclude Include="OptionsDlg.h" />
-    <ClInclude Include="RecentDlg.h" />
-    <ClInclude Include="ShortcutsDlg.h" />
-    <ClInclude Include="ShutdownDlg.h" />
-    <ClInclude Include="StatusDlg.h" />
-    <ClInclude Include="UpdateHeaders.h" />
-    <ClInclude Include="UpdateMultipleVersionInfo.h" />
-    <ClInclude Include="UpdaterDlg.h" />
-    <ClInclude Include="TShellExtensionClient.h" />
-    <ClInclude Include="UpdateResponse.h" />
-    <ClInclude Include="UpdateVersionInfo.h" />
-    <ClInclude Include="WindowsVersion.h" />
-    <CustomBuild Include="resource.h">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating map file for help compiler...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Generating map file for help compiler...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
-echo. &gt; "help\HTMLDefines.h"
-echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
-echo. &gt; "help\HTMLDefines.h"
-echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">help\HTMLDefines.h;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">help\HTMLDefines.h;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating map file for help compiler...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Generating map file for help compiler...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
-echo. &gt; "help\HTMLDefines.h"
-echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
-echo. &gt; "help\HTMLDefines.h"
-echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">help\HTMLDefines.h;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">help\HTMLDefines.h;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating map file for help compiler...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Generating map file for help compiler...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
-echo. &gt; "help\HTMLDefines.h"
-echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
-echo. &gt; "help\HTMLDefines.h"
-echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">help\HTMLDefines.h;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">help\HTMLDefines.h;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating map file for help compiler...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Generating map file for help compiler...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
-echo. &gt; "help\HTMLDefines.h"
-echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
-echo. &gt; "help\HTMLDefines.h"
-echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-echo. &gt;&gt; "help\HTMLDefines.h"
-echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
-makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">help\HTMLDefines.h;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">help\HTMLDefines.h;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">NotUsing</PrecompiledHeader>
-    </ClCompile>
-    <ClCompile Include="..\common\TShellExtIpcConfigDataProvider.cpp" />
-    <ClCompile Include="..\common\TShellExtMenuConfig.cpp" />
-    <ClCompile Include="AsyncHttpFile.cpp" />
-    <ClCompile Include="CDragDropComboEx.cpp" />
-    <ClCompile Include="CDragDropListCtrl.cpp" />
-    <ClCompile Include="DirectoryChooser.cpp" />
-    <ClCompile Include="FeedbackHandler.cpp" />
-    <ClCompile Include="FeedbackHandlerFactory.cpp" />
-    <ClCompile Include="structs.cpp" />
-    <ClCompile Include="AppHelper.cpp" />
-    <ClCompile Include="ClipboardMonitor.cpp" />
-    <ClCompile Include="shortcuts.cpp" />
-    <ClCompile Include="StringHelpers.cpp" />
-    <ClCompile Include="TExplorerTaskBarProgress.cpp" />
-    <ClCompile Include="TMsgBox.cpp" />
-    <ClCompile Include="TPathProcessor.cpp" />
-    <ClCompile Include="TProgressCtrlEx.cpp" />
-    <ClCompile Include="TRecentPathsTools.cpp" />
-    <ClCompile Include="TRegistry.cpp" />
-    <ClCompile Include="TShellExtensionConfig.cpp" />
-    <ClCompile Include="TTaskManagerWrapper.cpp" />
-    <ClCompile Include="TWindowMessageFilterHelper.cpp" />
-    <ClCompile Include="UpdateChecker.cpp" />
-    <ClCompile Include="ch.cpp" />
-    <ClCompile Include="stdafx.cpp">
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Create</PrecompiledHeader>
-    </ClCompile>
-    <ClCompile Include="TCommandLineParser.cpp" />
-    <ClCompile Include="MainWnd.cpp" />
-    <ClCompile Include="Theme Helpers.cpp" />
-    <ClCompile Include="TrayIcon.cpp" />
-    <ClCompile Include="DirTreeCtrl.cpp" />
-    <ClCompile Include="FFListCtrl.cpp" />
-    <ClCompile Include="ProgressListBox.cpp" />
-    <ClCompile Include="PropertyListCtrl.cpp" />
-    <ClCompile Include="StaticEx.cpp" />
-    <ClCompile Include="ThemedButton.cpp" />
-    <ClCompile Include="AboutDlg.cpp" />
-    <ClCompile Include="BufferSizeDlg.cpp" />
-    <ClCompile Include="CrashDlg.cpp" />
-    <ClCompile Include="CustomCopyDlg.cpp" />
-    <ClCompile Include="Dialogs.cpp" />
-    <ClCompile Include="FeedbackFileErrorDlg.cpp" />
-    <ClCompile Include="FeedbackNotEnoughSpaceDlg.cpp" />
-    <ClCompile Include="FeedbackReplaceDlg.cpp" />
-    <ClCompile Include="FilterDlg.cpp" />
-    <ClCompile Include="FolderDialog.cpp" />
-    <ClCompile Include="MiniViewDlg.cpp" />
-    <ClCompile Include="OptionsDlg.cpp" />
-    <ClCompile Include="RecentDlg.cpp" />
-    <ClCompile Include="ShortcutsDlg.cpp" />
-    <ClCompile Include="ShutdownDlg.cpp" />
-    <ClCompile Include="StatusDlg.cpp" />
-    <ClCompile Include="UpdateHeaders.cpp" />
-    <ClCompile Include="UpdateMultipleVersionInfo.cpp" />
-    <ClCompile Include="UpdaterDlg.cpp" />
-    <ClCompile Include="TShellExtensionClient.cpp" />
-    <ClCompile Include="..\chext\chext_i.c">
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
-      </PrecompiledHeader>
-    </ClCompile>
-    <ClCompile Include="UpdateResponse.cpp" />
-    <ClCompile Include="UpdateVersionInfo.cpp" />
-    <ClCompile Include="WindowsVersion.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="ch.rc">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Compiling resources %(FullPath)</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Compiling resources %(FullPath)</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
-rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
-rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">res/ch.rc2;version.h</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">res/ch.rc2;version.h</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling resources %(FullPath)</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Compiling resources %(FullPath)</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
-rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
-rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">res/ch.rc2;version.h</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">res/ch.rc2;version.h</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compiling resources %(FullPath)</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Compiling resources %(FullPath)</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
-rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
-rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">res/ch.rc2;version.h</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">res/ch.rc2;version.h</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling resources %(FullPath)</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Compiling resources %(FullPath)</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
-rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
-rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">res/ch.rc2;version.h</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">res/ch.rc2;version.h</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="res\ch.rc2" />
-    <None Include="resource.hm" />
-    <None Include="help\english\advmenu.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\buffersize.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\bugs.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\customcopy.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\explorermenu.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\faq.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\feeddstfile.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\feediwr.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\feednotenoughroom.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\feedreplacefiles.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\feedsmallreplace.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\filterdlg.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\folderdlg.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\headfoot.js" />
-    <None Include="help\english\help.hhc" />
-    <None Include="help\english\help.hhk" />
-    <CustomBuild Include="help\english\help.hhp">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Making help file...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Making help file...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">help\english\english.chm;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">help\english\english.chm;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Making help file...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Making help file...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">help\english\english.chm;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">help\english\english.chm;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Making help file...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Making help file...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">help\english\english.chm;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">help\english\english.chm;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Making help file...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Making help file...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">help\english\english.chm;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">help\english\english.chm;%(Outputs)</Outputs>
-    </CustomBuild>
-    <None Include="help\english\history.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\installation.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\license.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\mainmenu.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\miniview.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\options.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\recentdlg.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\replacepaths.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\reporting.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\requirements.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\shortcutsdlg.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\shutdowndlg.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\status.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\style.css" />
-    <None Include="help\english\support.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\template.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\thanks.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\using.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\english\welcome.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <CustomBuild Include="langs\bulgarian.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\chinese.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\czech.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\dutch.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\french.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\german.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\german2.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\italian.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\japanese.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\korean.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\polish.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\russian.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\spanish.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\TraditionalChinese.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\turkish.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="langs\valencian.lng">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <None Include="help\polish\advmenu.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\buffersize.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\bugs.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\customcopy.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\explorermenu.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\faq.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\feeddstfile.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\feediwr.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\feednotenoughroom.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\feedreplacefiles.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\feedsmallreplace.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\filterdlg.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\folderdlg.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\headfoot.js" />
-    <None Include="help\polish\help.hhc" />
-    <None Include="help\polish\help.hhk" />
-    <CustomBuild Include="help\polish\help.hhp">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Making help file...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Making help file...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">help\polish\polish.chm;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">help\polish\polish.chm;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Making help file...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Making help file...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">help\polish\polish.chm;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">help\polish\polish.chm;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Making help file...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Making help file...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">help\polish\polish.chm;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">help\polish\polish.chm;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Making help file...</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Making help file...</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
-SET PATH=%PATH%;$(VS_ExecutablePath)
-hhc "%(FullPath)"
-if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
-mkdir "$(OutDir)help" &gt;nul 2&gt;nul
-copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
-goto :HelpDone
-:HelpError
-echo %(FullPath)(1) : error:Problem encountered creating help file
-echo.
-exit 1
-:HelpDone
-echo.
-</Command>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">help\polish\polish.chm;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">help\polish\polish.chm;%(Outputs)</Outputs>
-    </CustomBuild>
-    <None Include="help\polish\history.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\installation.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\license.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\mainmenu.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\miniview.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\options.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\recentdlg.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\replacepaths.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\reporting.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\requirements.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\shortcutsdlg.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\shutdowndlg.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\status.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\style.css" />
-    <None Include="help\polish\support.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\template.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\thanks.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\using.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-    <None Include="help\polish\welcome.htm">
-      <DeploymentContent>true</DeploymentContent>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <Image Include="res\main_toolbar.bmp" />
-    <Image Include="res\addshort.ico" />
-    <Image Include="res\cancelled.ico" />
-    <Image Include="res\cd.ico" />
-    <Image Include="res\ch.ico" />
-    <Image Include="res\delshort.ico" />
-    <Image Include="res\err.ico" />
-    <Image Include="res\error.ico" />
-    <Image Include="res\finished.ico" />
-    <Image Include="res\folder.ico" />
-    <Image Include="res\hd.ico" />
-    <Image Include="res\hd2.ico" />
-    <Image Include="res\info.ico" />
-    <Image Include="res\large.ico" />
-    <Image Include="res\list.ico" />
-    <Image Include="res\net.ico" />
-    <Image Include="res\newdir.ico" />
-    <Image Include="res\paused.ico" />
-    <Image Include="res\question.ico" />
-    <Image Include="res\report.ico" />
-    <Image Include="res\shut.ico" />
-    <Image Include="res\small.ico" />
-    <Image Include="res\tribe.ico" />
-    <Image Include="res\waiting.ico" />
-    <Image Include="res\warning.ico" />
-    <Image Include="res\working.ico" />
-    <Image Include="help\english\ch.gif" />
-    <Image Include="help\polish\ch.gif" />
-  </ItemGroup>
-  <ItemGroup>
-    <Text Include="help\english\0.txt" />
-    <Text Include="help\english\100.txt" />
-    <Text Include="help\english\131.txt" />
-    <Text Include="help\english\137.txt" />
-    <Text Include="help\english\144.txt" />
-    <Text Include="help\english\145.txt" />
-    <Text Include="help\english\149.txt" />
-    <Text Include="help\english\161.txt" />
-    <Text Include="help\english\167.txt" />
-    <Text Include="help\english\173.txt" />
-    <Text Include="help\english\182.txt" />
-    <Text Include="help\english\195.txt" />
-    <Text Include="help\english\208.txt" />
-    <Text Include="help\english\209.txt" />
-    <Text Include="help\polish\0.txt" />
-    <Text Include="help\polish\100.txt" />
-    <Text Include="help\polish\131.txt" />
-    <Text Include="help\polish\137.txt" />
-    <Text Include="help\polish\144.txt" />
-    <Text Include="help\polish\145.txt" />
-    <Text Include="help\polish\149.txt" />
-    <Text Include="help\polish\161.txt" />
-    <Text Include="help\polish\167.txt" />
-    <Text Include="help\polish\173.txt" />
-    <Text Include="help\polish\182.txt" />
-    <Text Include="help\polish\195.txt" />
-    <Text Include="help\polish\208.txt" />
-    <Text Include="help\polish\209.txt" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\libchcore\libchcore.vc140.vcxproj">
-      <Project>{cbbf380b-7b16-4a1e-8194-758dad7d8011}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\libictranslate\libictranslate.vc140.vcxproj">
-      <Project>{dd1f3242-7ee4-4f41-8b8d-d833300c445f}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\liblogger\liblogger.vc140.vcxproj">
-      <Project>{df9957d4-3d95-4ac3-ad3f-dcbea058f79d}</Project>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-  <ProjectExtensions>
-    <VisualStudio>
-      <UserProperties RESOURCE_FILE="ch.rc" />
-    </VisualStudio>
-  </ProjectExtensions>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Debug|Win32">
+      <Configuration>Testing Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Debug|x64">
+      <Configuration>Testing Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Release|Win32">
+      <Configuration>Testing Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Release|x64">
+      <Configuration>Testing Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>ch</ProjectName>
+    <ProjectGuid>{4B215B9A-58CA-4987-AC95-7DFC3043E100}</ProjectGuid>
+    <RootNamespace>ch</RootNamespace>
+    <Keyword>MFCProj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>Dynamic</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>Dynamic</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>Dynamic</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>Dynamic</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>Dynamic</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>Dynamic</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>Dynamic</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>Dynamic</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>11.0.51106.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)64</TargetName>
+    <RunCodeAnalysis>false</RunCodeAnalysis>
+    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)64</TargetName>
+    <RunCodeAnalysis>false</RunCodeAnalysis>
+    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)64</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)64</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <TypeLibraryName>.\Debug/ch.tlb</TypeLibraryName>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <MinimalRebuild>false</MinimalRebuild>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent />
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <TypeLibraryName>.\Debug/ch.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;TESTING;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <MinimalRebuild>false</MinimalRebuild>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;gmock32d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+"$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <TypeLibraryName>.\Debug/ch.tlb</TypeLibraryName>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
+      <EnablePREfast>false</EnablePREfast>
+      <SDLCheck>true</SDLCheck>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent />
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <TypeLibraryName>.\Debug/ch.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;TESTING;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
+      <EnablePREfast>false</EnablePREfast>
+      <SDLCheck>true</SDLCheck>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;gmock64d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+"$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <TypeLibraryName>.\Release/ch.tlb</TypeLibraryName>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>MaxSpeed</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent />
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <TypeLibraryName>.\Release/ch.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>MaxSpeed</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;TESTING;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;gmock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+"$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <TypeLibraryName>.\Release/ch.tlb</TypeLibraryName>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent />
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <TypeLibraryName>.\Release/ch.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>/Zm150 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;_SCL_SECURE_NO_WARNINGS;TESTING;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <DisableSpecificWarnings>4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imagehlp.lib;version.lib;htmlhelp.lib;Dbghelp.lib;gmock64.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+"$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\Common\ipcstructs.h" />
+    <ClInclude Include="..\common\targetver.h" />
+    <ClInclude Include="..\common\TShellExtIpcConfigDataProvider.h" />
+    <ClInclude Include="..\common\TShellExtMenuConfig.h" />
+    <ClInclude Include="..\common\version.h" />
+    <ClInclude Include="AsyncHttpFile.h" />
+    <ClInclude Include="CDragDropComboEx.h" />
+    <ClInclude Include="CDragDropListCtrl.h" />
+    <ClInclude Include="DirectoryChooser.h" />
+    <ClInclude Include="FeedbackHandler.h" />
+    <ClInclude Include="FeedbackHandlerFactory.h" />
+    <ClInclude Include="structs.h" />
+    <ClInclude Include="AppHelper.h" />
+    <ClInclude Include="CfgProperties.h" />
+    <ClInclude Include="ClipboardMonitor.h" />
+    <ClInclude Include="shortcuts.h" />
+    <ClInclude Include="StringHelpers.h" />
+    <ClInclude Include="TExplorerTaskBarProgress.h" />
+    <ClInclude Include="TMsgBox.h" />
+    <ClInclude Include="TPathProcessor.h" />
+    <ClInclude Include="TProgressCtrlEx.h" />
+    <ClInclude Include="TRecentPathsTools.h" />
+    <ClInclude Include="TRegistry.h" />
+    <ClInclude Include="TShellExtensionConfig.h" />
+    <ClInclude Include="TTaskManagerWrapper.h" />
+    <ClInclude Include="TWindowMessageFilterHelper.h" />
+    <ClInclude Include="UpdateChecker.h" />
+    <ClInclude Include="ch.h" />
+    <ClInclude Include="stdafx.h" />
+    <ClInclude Include="TCommandLineParser.h" />
+    <ClInclude Include="MainWnd.h" />
+    <ClInclude Include="MemDC.h" />
+    <ClInclude Include="Theme Helpers.h" />
+    <ClInclude Include="TrayIcon.h" />
+    <ClInclude Include="DirTreeCtrl.h" />
+    <ClInclude Include="FFListCtrl.h" />
+    <ClInclude Include="ProgressListBox.h" />
+    <ClInclude Include="PropertyListCtrl.h" />
+    <ClInclude Include="StaticEx.h" />
+    <ClInclude Include="ThemedButton.h" />
+    <ClInclude Include="AboutDlg.h" />
+    <ClInclude Include="BufferSizeDlg.h" />
+    <ClInclude Include="CrashDlg.h" />
+    <ClInclude Include="CustomCopyDlg.h" />
+    <ClInclude Include="Dialogs.h" />
+    <ClInclude Include="FeedbackFileErrorDlg.h" />
+    <ClInclude Include="FeedbackNotEnoughSpaceDlg.h" />
+    <ClInclude Include="FeedbackReplaceDlg.h" />
+    <ClInclude Include="FilterDlg.h" />
+    <ClInclude Include="FolderDialog.h" />
+    <ClInclude Include="MiniViewDlg.h" />
+    <ClInclude Include="OptionsDlg.h" />
+    <ClInclude Include="RecentDlg.h" />
+    <ClInclude Include="ShortcutsDlg.h" />
+    <ClInclude Include="ShutdownDlg.h" />
+    <ClInclude Include="StatusDlg.h" />
+    <ClInclude Include="UpdateHeaders.h" />
+    <ClInclude Include="UpdateMultipleVersionInfo.h" />
+    <ClInclude Include="UpdaterDlg.h" />
+    <ClInclude Include="TShellExtensionClient.h" />
+    <ClInclude Include="UpdateResponse.h" />
+    <ClInclude Include="UpdateVersionInfo.h" />
+    <ClInclude Include="WindowsVersion.h" />
+    <CustomBuild Include="resource.h">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating map file for help compiler...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Generating map file for help compiler...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
+echo. &gt; "help\HTMLDefines.h"
+echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
+echo. &gt; "help\HTMLDefines.h"
+echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">help\HTMLDefines.h;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">help\HTMLDefines.h;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating map file for help compiler...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Generating map file for help compiler...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
+echo. &gt; "help\HTMLDefines.h"
+echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
+echo. &gt; "help\HTMLDefines.h"
+echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">help\HTMLDefines.h;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">help\HTMLDefines.h;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating map file for help compiler...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Generating map file for help compiler...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
+echo. &gt; "help\HTMLDefines.h"
+echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
+echo. &gt; "help\HTMLDefines.h"
+echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">help\HTMLDefines.h;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">help\HTMLDefines.h;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating map file for help compiler...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Generating map file for help compiler...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
+echo. &gt; "help\HTMLDefines.h"
+echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">echo // Generated Help Map file.  Used by Copy Handler help files. &gt; "help\HTMLDefines.h"
+echo. &gt; "help\HTMLDefines.h"
+echo // Commands (ID_* and IDM_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Prompts (IDP_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDP_,HIDP_,0x30000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Resources (IDR_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDR_,HIDR_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Dialogs (IDD_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDD_,HIDD_,0x20000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Frame Controls (IDW_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+echo. &gt;&gt; "help\HTMLDefines.h"
+echo // Controls (IDC_*) &gt;&gt; "help\HTMLDefines.h"
+makehm /h IDC_,IDH_,0x00000 "%(Filename)%(Extension)" &gt;&gt; "help\HTMLDefines.h"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">help\HTMLDefines.h;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">help\HTMLDefines.h;%(Outputs)</Outputs>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <ClCompile Include="..\common\TShellExtIpcConfigDataProvider.cpp" />
+    <ClCompile Include="..\common\TShellExtMenuConfig.cpp" />
+    <ClCompile Include="AsyncHttpFile.cpp" />
+    <ClCompile Include="CDragDropComboEx.cpp" />
+    <ClCompile Include="CDragDropListCtrl.cpp" />
+    <ClCompile Include="DirectoryChooser.cpp" />
+    <ClCompile Include="FeedbackHandler.cpp" />
+    <ClCompile Include="FeedbackHandlerFactory.cpp" />
+    <ClCompile Include="structs.cpp" />
+    <ClCompile Include="AppHelper.cpp" />
+    <ClCompile Include="ClipboardMonitor.cpp" />
+    <ClCompile Include="shortcuts.cpp" />
+    <ClCompile Include="StringHelpers.cpp" />
+    <ClCompile Include="TExplorerTaskBarProgress.cpp" />
+    <ClCompile Include="TMsgBox.cpp" />
+    <ClCompile Include="TPathProcessor.cpp" />
+    <ClCompile Include="TProgressCtrlEx.cpp" />
+    <ClCompile Include="TRecentPathsTools.cpp" />
+    <ClCompile Include="TRegistry.cpp" />
+    <ClCompile Include="TShellExtensionConfig.cpp" />
+    <ClCompile Include="TTaskManagerWrapper.cpp" />
+    <ClCompile Include="TWindowMessageFilterHelper.cpp" />
+    <ClCompile Include="UpdateChecker.cpp" />
+    <ClCompile Include="ch.cpp" />
+    <ClCompile Include="stdafx.cpp">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Create</PrecompiledHeader>
+    </ClCompile>
+    <ClCompile Include="TCommandLineParser.cpp" />
+    <ClCompile Include="MainWnd.cpp" />
+    <ClCompile Include="Theme Helpers.cpp" />
+    <ClCompile Include="TrayIcon.cpp" />
+    <ClCompile Include="DirTreeCtrl.cpp" />
+    <ClCompile Include="FFListCtrl.cpp" />
+    <ClCompile Include="ProgressListBox.cpp" />
+    <ClCompile Include="PropertyListCtrl.cpp" />
+    <ClCompile Include="StaticEx.cpp" />
+    <ClCompile Include="ThemedButton.cpp" />
+    <ClCompile Include="AboutDlg.cpp" />
+    <ClCompile Include="BufferSizeDlg.cpp" />
+    <ClCompile Include="CrashDlg.cpp" />
+    <ClCompile Include="CustomCopyDlg.cpp" />
+    <ClCompile Include="Dialogs.cpp" />
+    <ClCompile Include="FeedbackFileErrorDlg.cpp" />
+    <ClCompile Include="FeedbackNotEnoughSpaceDlg.cpp" />
+    <ClCompile Include="FeedbackReplaceDlg.cpp" />
+    <ClCompile Include="FilterDlg.cpp" />
+    <ClCompile Include="FolderDialog.cpp" />
+    <ClCompile Include="MiniViewDlg.cpp" />
+    <ClCompile Include="OptionsDlg.cpp" />
+    <ClCompile Include="RecentDlg.cpp" />
+    <ClCompile Include="ShortcutsDlg.cpp" />
+    <ClCompile Include="ShutdownDlg.cpp" />
+    <ClCompile Include="StatusDlg.cpp" />
+    <ClCompile Include="UpdateHeaders.cpp" />
+    <ClCompile Include="UpdateMultipleVersionInfo.cpp" />
+    <ClCompile Include="UpdaterDlg.cpp" />
+    <ClCompile Include="TShellExtensionClient.cpp" />
+    <ClCompile Include="..\chext\chext_i.c">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+      </PrecompiledHeader>
+    </ClCompile>
+    <ClCompile Include="UpdateResponse.cpp" />
+    <ClCompile Include="UpdateVersionInfo.cpp" />
+    <ClCompile Include="WindowsVersion.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="ch.rc">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Compiling resources %(FullPath)</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Compiling resources %(FullPath)</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
+rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
+rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">res/ch.rc2;version.h</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">res/ch.rc2;version.h</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling resources %(FullPath)</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Compiling resources %(FullPath)</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
+rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
+rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">res/ch.rc2;version.h</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">res/ch.rc2;version.h</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compiling resources %(FullPath)</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Compiling resources %(FullPath)</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
+rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
+rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">res/ch.rc2;version.h</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">res/ch.rc2;version.h</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling resources %(FullPath)</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Compiling resources %(FullPath)</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
+rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">"$(SolutionDir)\tools\rc2lng.exe" "%(FullPath)" "$(InputDir)scripts\header.lng" "$(IntDir)\chtmp.rc" "$(OutDir)langs\english.lng" "$(InputDir)resource.h" "$(VCInstallDir)atlmfc\include\afxres.h"
+rc.exe /l 0x409 /d "NDEBUG" /d "_AFXDLL" /fo"$(OutDir)\%(Filename).res" "$(IntDir)\chtmp.rc"
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">res/ch.rc2;version.h</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">res/ch.rc2;version.h</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)%(Filename).res;%(Outputs)</Outputs>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="res\ch.rc2" />
+    <None Include="resource.hm" />
+    <None Include="help\english\advmenu.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\buffersize.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\bugs.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\customcopy.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\explorermenu.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\faq.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\feeddstfile.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\feediwr.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\feednotenoughroom.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\feedreplacefiles.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\feedsmallreplace.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\filterdlg.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\folderdlg.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\headfoot.js" />
+    <None Include="help\english\help.hhc" />
+    <None Include="help\english\help.hhk" />
+    <CustomBuild Include="help\english\help.hhp">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Making help file...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Making help file...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">help\english\english.chm;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">help\english\english.chm;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Making help file...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Making help file...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">help\english\english.chm;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">help\english\english.chm;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Making help file...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Making help file...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">help\english\english.chm;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">help\english\english.chm;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Making help file...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Making help file...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)english.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)english.chm" "$(OutDir)help\english.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">help\english\english.chm;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">help\english\english.chm;%(Outputs)</Outputs>
+    </CustomBuild>
+    <None Include="help\english\history.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\installation.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\license.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\mainmenu.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\miniview.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\options.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\recentdlg.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\replacepaths.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\reporting.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\requirements.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\shortcutsdlg.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\shutdowndlg.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\status.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\style.css" />
+    <None Include="help\english\support.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\template.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\thanks.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\using.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\english\welcome.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <CustomBuild Include="langs\bulgarian.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\chinese.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\czech.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\dutch.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\french.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\german.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\german2.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\italian.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\japanese.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\korean.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\polish.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\russian.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\spanish.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\TraditionalChinese.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\turkish.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="langs\valencian.lng">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Copying language file %(Filename)%(Extension)...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "%(FullPath)" "$(OutDir)langs\%(Filename)%(Extension)"
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">$(OutDir)langs\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <None Include="help\polish\advmenu.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\buffersize.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\bugs.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\customcopy.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\explorermenu.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\faq.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\feeddstfile.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\feediwr.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\feednotenoughroom.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\feedreplacefiles.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\feedsmallreplace.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\filterdlg.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\folderdlg.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\headfoot.js" />
+    <None Include="help\polish\help.hhc" />
+    <None Include="help\polish\help.hhk" />
+    <CustomBuild Include="help\polish\help.hhp">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Making help file...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Making help file...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">help\polish\polish.chm;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">help\polish\polish.chm;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Making help file...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Making help file...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">help\polish\polish.chm;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">help\polish\polish.chm;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Making help file...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Making help file...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">help\polish\polish.chm;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">help\polish\polish.chm;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Making help file...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Making help file...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">copy "help\HTMLDefines.h" "%(RootDir)%(Directory)HTMLDefines.h"
+SET PATH=%PATH%;$(VS_ExecutablePath)
+hhc "%(FullPath)"
+if not exist "%(RootDir)%(Directory)polish.chm" goto :HelpError
+mkdir "$(OutDir)help" &gt;nul 2&gt;nul
+copy "%(RootDir)%(Directory)polish.chm" "$(OutDir)help\polish.chm"
+goto :HelpDone
+:HelpError
+echo %(FullPath)(1) : error:Problem encountered creating help file
+echo.
+exit 1
+:HelpDone
+echo.
+</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">help\HTMLDefines.h;%(AdditionalInputs)</AdditionalInputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">help\polish\polish.chm;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">help\polish\polish.chm;%(Outputs)</Outputs>
+    </CustomBuild>
+    <None Include="help\polish\history.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\installation.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\license.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\mainmenu.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\miniview.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\options.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\recentdlg.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\replacepaths.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\reporting.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\requirements.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\shortcutsdlg.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\shutdowndlg.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\status.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\style.css" />
+    <None Include="help\polish\support.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\template.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\thanks.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\using.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="help\polish\welcome.htm">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\main_toolbar.bmp" />
+    <Image Include="res\addshort.ico" />
+    <Image Include="res\cancelled.ico" />
+    <Image Include="res\cd.ico" />
+    <Image Include="res\ch.ico" />
+    <Image Include="res\delshort.ico" />
+    <Image Include="res\err.ico" />
+    <Image Include="res\error.ico" />
+    <Image Include="res\finished.ico" />
+    <Image Include="res\folder.ico" />
+    <Image Include="res\hd.ico" />
+    <Image Include="res\hd2.ico" />
+    <Image Include="res\info.ico" />
+    <Image Include="res\large.ico" />
+    <Image Include="res\list.ico" />
+    <Image Include="res\net.ico" />
+    <Image Include="res\newdir.ico" />
+    <Image Include="res\paused.ico" />
+    <Image Include="res\question.ico" />
+    <Image Include="res\report.ico" />
+    <Image Include="res\shut.ico" />
+    <Image Include="res\small.ico" />
+    <Image Include="res\tribe.ico" />
+    <Image Include="res\waiting.ico" />
+    <Image Include="res\warning.ico" />
+    <Image Include="res\working.ico" />
+    <Image Include="help\english\ch.gif" />
+    <Image Include="help\polish\ch.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="help\english\0.txt" />
+    <Text Include="help\english\100.txt" />
+    <Text Include="help\english\131.txt" />
+    <Text Include="help\english\137.txt" />
+    <Text Include="help\english\144.txt" />
+    <Text Include="help\english\145.txt" />
+    <Text Include="help\english\149.txt" />
+    <Text Include="help\english\161.txt" />
+    <Text Include="help\english\167.txt" />
+    <Text Include="help\english\173.txt" />
+    <Text Include="help\english\182.txt" />
+    <Text Include="help\english\195.txt" />
+    <Text Include="help\english\208.txt" />
+    <Text Include="help\english\209.txt" />
+    <Text Include="help\polish\0.txt" />
+    <Text Include="help\polish\100.txt" />
+    <Text Include="help\polish\131.txt" />
+    <Text Include="help\polish\137.txt" />
+    <Text Include="help\polish\144.txt" />
+    <Text Include="help\polish\145.txt" />
+    <Text Include="help\polish\149.txt" />
+    <Text Include="help\polish\161.txt" />
+    <Text Include="help\polish\167.txt" />
+    <Text Include="help\polish\173.txt" />
+    <Text Include="help\polish\182.txt" />
+    <Text Include="help\polish\195.txt" />
+    <Text Include="help\polish\208.txt" />
+    <Text Include="help\polish\209.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\libchcore\libchcore.vc140.vcxproj">
+      <Project>{cbbf380b-7b16-4a1e-8194-758dad7d8011}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\libchengine\libchengine.vcxproj">
+      <Project>{6840f785-917f-46ee-bd56-c296c7a5b9e9}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\libictranslate\libictranslate.vc140.vcxproj">
+      <Project>{dd1f3242-7ee4-4f41-8b8d-d833300c445f}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\liblogger\liblogger.vc140.vcxproj">
+      <Project>{df9957d4-3d95-4ac3-ad3f-dcbea058f79d}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\libserializer\libserializer.vcxproj">
+      <Project>{9490ec08-9cab-4f99-99d8-0297e5bf6ea7}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\libstring\libstring.vcxproj">
+      <Project>{5bd38175-9f48-417d-8e5b-7093b1873ce5}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+  <ProjectExtensions>
+    <VisualStudio>
+      <UserProperties RESOURCE_FILE="ch.rc" />
+    </VisualStudio>
+  </ProjectExtensions>
 </Project>
\ No newline at end of file
Index: src/chext/DropMenuExt.cpp
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/chext/DropMenuExt.cpp	(.../DropMenuExt.cpp)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/chext/DropMenuExt.cpp	(.../DropMenuExt.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -20,7 +20,7 @@
 #include "chext.h"
 #include "DropMenuExt.h"
 #include "../Common/ipcstructs.h"
-#include "../libchcore/TTaskDefinition.h"
+#include "../libchengine/TTaskDefinition.h"
 #include "../common/TShellExtMenuConfig.h"
 #include "../libchcore/TSharedMemory.h"
 #include "Logger.h"
@@ -174,7 +174,7 @@
 
 		chcore::TPathContainer vSourcePaths;
 		chcore::TSmartPath spDestinationPath;
-		chcore::EOperationType eOperationType = chcore::eOperation_None;
+		chengine::EOperationType eOperationType = chengine::eOperation_None;
 
 		if(!m_tShellExtData.GetSourcePathsByItem(spSelectedItem, vSourcePaths))
 			return E_FAIL;
@@ -183,13 +183,13 @@
 		if(!m_tShellExtData.GetOperationTypeByItem(spSelectedItem, eOperationType))
 			return E_FAIL;
 
-		chcore::TTaskDefinition tTaskDefinition;
+		chengine::TTaskDefinition tTaskDefinition;
 		tTaskDefinition.SetSourcePaths(vSourcePaths);
 		tTaskDefinition.SetDestinationPath(spDestinationPath);
 		tTaskDefinition.SetOperationType(eOperationType);
 
 		// get task data as xml
-		chcore::TString wstrData;
+		string::TString wstrData;
 		tTaskDefinition.StoreInString(wstrData);
 
 		// fill struct
Index: src/chext/HResultFormatter.cpp
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/chext/HResultFormatter.cpp	(.../HResultFormatter.cpp)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/chext/HResultFormatter.cpp	(.../HResultFormatter.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -40,7 +40,7 @@
 
 	default:
 		{
-			chcore::TString strDesc = chcore::TWin32ErrorFormatter::FormatWin32ErrorCodeWithFallback(hResult, nullptr, false);
+			string::TString strDesc = chcore::TWin32ErrorFormatter::FormatWin32ErrorCodeWithFallback(hResult, nullptr, false);
 			if(!strDesc.IsEmpty())
 				wstr << L" (" << strDesc.c_str() << ")";
 		}
Index: src/chext/MenuExt.cpp
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/chext/MenuExt.cpp	(.../MenuExt.cpp)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/chext/MenuExt.cpp	(.../MenuExt.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -25,10 +25,10 @@
 #include <boost/shared_array.hpp>
 #include "../common/TShellExtMenuConfig.h"
 #include "../libchcore/TSharedMemory.h"
-#include "../libchcore/TTaskDefinition.h"
 #include <boost/numeric/conversion/cast.hpp>
 #include "ShellExtensionVerifier.h"
 #include "Logger.h"
+#include "../libchengine/TTaskDefinition.h"
 
 // globals
 static void CutAmpersands(LPTSTR lpszString)
@@ -217,7 +217,7 @@
 
 		chcore::TPathContainer vSourcePaths;
 		chcore::TSmartPath spDestinationPath;
-		chcore::EOperationType eOperationType = chcore::eOperation_None;
+		chengine::EOperationType eOperationType = chengine::eOperation_None;
 
 		if(!m_tShellExtData.GetSourcePathsByItem(spSelectedItem, vSourcePaths))
 			return E_FAIL;
@@ -226,13 +226,13 @@
 		if(!m_tShellExtData.GetOperationTypeByItem(spSelectedItem, eOperationType))
 			return E_FAIL;
 
-		chcore::TTaskDefinition tTaskDefinition;
+		chengine::TTaskDefinition tTaskDefinition;
 		tTaskDefinition.SetSourcePaths(vSourcePaths);
 		tTaskDefinition.SetDestinationPath(spDestinationPath);
 		tTaskDefinition.SetOperationType(eOperationType);
 
 		// get task data as xml
-		chcore::TString wstrData;
+		string::TString wstrData;
 		tTaskDefinition.StoreInString(wstrData);
 
 		// fill struct
Index: src/chext/ShellExtensionVerifier.cpp
===================================================================
diff -u -r306fbe693c70290af9de9a5779084a697de22d75 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/chext/ShellExtensionVerifier.cpp	(.../ShellExtensionVerifier.cpp)	(revision 306fbe693c70290af9de9a5779084a697de22d75)
+++ src/chext/ShellExtensionVerifier.cpp	(.../ShellExtensionVerifier.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -1,92 +1,92 @@
-// ============================================================================
-//  Copyright (C) 2001-2015 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#include "stdafx.h"
-#include "ShellExtensionVerifier.h"
-#include "Logger.h"
-#include "../libchcore/TConfig.h"
-#include "../liblogger/TLogger.h"
-#include "../common/TShellExtMenuConfig.h"
-#include <stdlib.h>
-#include "../common/TShellExtIpcConfigDataConsumer.h"
-
-HWND ShellExtensionVerifier::VerifyShellExt(IShellExtControl* piShellExtControl)
-{
-	logger::TLoggerPtr spLogger = GetLogger(L"ShellExtVerifier");
-
-	HRESULT hResult = IsShellExtEnabled(piShellExtControl);
-	if(FAILED(hResult) || hResult == S_FALSE)
-	{
-		LOG_DEBUG(spLogger) << L"Shell extension is disabled.";
-		return nullptr;
-	}
-
-	// find CH's window
-	HWND hWnd = ::FindWindow(_T("Copy Handler Wnd Class"), _T("Copy handler"));
-	if(!hWnd)
-	{
-		LOG_DEBUG(spLogger) << L"Cannot find Copy Handler's window.";
-		return nullptr;
-	}
-
-	return hWnd;
-}
-
-HRESULT ShellExtensionVerifier::IsShellExtEnabled(IShellExtControl* piShellExtControl)
-{
-	if(!piShellExtControl)
-		return E_FAIL;
-
-	LONG lFlags = eShellExt_None;
-	HRESULT hResult = piShellExtControl->GetFlags(&lFlags);
-	if(FAILED(hResult))
-		return hResult;
-
-	if(lFlags & eShellExt_Enabled)
-		return S_OK;
-	
-	return S_FALSE;
-}
-
-HRESULT ShellExtensionVerifier::ReadShellConfig(IShellExtControl* piShellExtControl, TShellExtMenuConfig& tShellExtConfig)
-{
-	logger::TLoggerPtr spLogger = GetLogger(L"ShellExtVerifier");
-	try
-	{
-		HWND hWnd = ShellExtensionVerifier::VerifyShellExt(piShellExtControl);
-		if(hWnd == nullptr)
-			return E_FAIL;
-
-		LOG_DEBUG(spLogger) << L"Requesting CH configuration";
-
-		chcore::TString wstrData = TShellExtIpcConfigDataConsumer::GetConfigData();
-		chcore::TConfig cfgShellExtData;
-
-		LOG_TRACE(spLogger) << L"Retrieved shell ext config: " << wstrData;
-
-		cfgShellExtData.ReadFromString(wstrData);
-
-		tShellExtConfig.ReadFromConfig(cfgShellExtData, _T("ShellExtCfg"));
-
-		return S_OK;
-	}
-	catch(...)
-	{
-		return E_FAIL;
-	}
-}
+// ============================================================================
+//  Copyright (C) 2001-2015 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#include "stdafx.h"
+#include "ShellExtensionVerifier.h"
+#include "Logger.h"
+#include "../libchengine/TConfig.h"
+#include "../liblogger/TLogger.h"
+#include "../common/TShellExtMenuConfig.h"
+#include <stdlib.h>
+#include "../common/TShellExtIpcConfigDataConsumer.h"
+
+HWND ShellExtensionVerifier::VerifyShellExt(IShellExtControl* piShellExtControl)
+{
+	logger::TLoggerPtr spLogger = GetLogger(L"ShellExtVerifier");
+
+	HRESULT hResult = IsShellExtEnabled(piShellExtControl);
+	if(FAILED(hResult) || hResult == S_FALSE)
+	{
+		LOG_DEBUG(spLogger) << L"Shell extension is disabled.";
+		return nullptr;
+	}
+
+	// find CH's window
+	HWND hWnd = ::FindWindow(_T("Copy Handler Wnd Class"), _T("Copy handler"));
+	if(!hWnd)
+	{
+		LOG_DEBUG(spLogger) << L"Cannot find Copy Handler's window.";
+		return nullptr;
+	}
+
+	return hWnd;
+}
+
+HRESULT ShellExtensionVerifier::IsShellExtEnabled(IShellExtControl* piShellExtControl)
+{
+	if(!piShellExtControl)
+		return E_FAIL;
+
+	LONG lFlags = eShellExt_None;
+	HRESULT hResult = piShellExtControl->GetFlags(&lFlags);
+	if(FAILED(hResult))
+		return hResult;
+
+	if(lFlags & eShellExt_Enabled)
+		return S_OK;
+	
+	return S_FALSE;
+}
+
+HRESULT ShellExtensionVerifier::ReadShellConfig(IShellExtControl* piShellExtControl, TShellExtMenuConfig& tShellExtConfig)
+{
+	logger::TLoggerPtr spLogger = GetLogger(L"ShellExtVerifier");
+	try
+	{
+		HWND hWnd = ShellExtensionVerifier::VerifyShellExt(piShellExtControl);
+		if(hWnd == nullptr)
+			return E_FAIL;
+
+		LOG_DEBUG(spLogger) << L"Requesting CH configuration";
+
+		string::TString wstrData = TShellExtIpcConfigDataConsumer::GetConfigData();
+		chengine::TConfig cfgShellExtData;
+
+		LOG_TRACE(spLogger) << L"Retrieved shell ext config: " << wstrData;
+
+		cfgShellExtData.ReadFromString(wstrData);
+
+		tShellExtConfig.ReadFromConfig(cfgShellExtData, _T("ShellExtCfg"));
+
+		return S_OK;
+	}
+	catch(...)
+	{
+		return E_FAIL;
+	}
+}
Index: src/chext/TContextMenuHandler.cpp
===================================================================
diff -u -rd9527df01ee91b35d9a5fdccb80ded25a9c8265f -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/chext/TContextMenuHandler.cpp	(.../TContextMenuHandler.cpp)	(revision d9527df01ee91b35d9a5fdccb80ded25a9c8265f)
+++ src/chext/TContextMenuHandler.cpp	(.../TContextMenuHandler.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -39,7 +39,7 @@
 }
 
 void TContextMenuHandler::Init(const TShellMenuItemPtr& spRootMenuItem, HMENU hMenu, UINT uiFirstItemID, UINT uiFirstItemPosition, const TShellExtData& rShellExtData,
-	const chcore::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace, bool bEnableOwnerDrawnPaths, bool bOverrideDefaultItem)
+	const chengine::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace, bool bEnableOwnerDrawnPaths, bool bOverrideDefaultItem)
 {
 	Clear();
 
@@ -51,7 +51,7 @@
 }
 
 void TContextMenuHandler::UpdateMenuRecursive(const TShellMenuItemPtr& spRootMenuItem, HMENU hMenu, UINT uiFirstItemPosition,
-	const TShellExtData& rShellExtData, const chcore::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace, bool bOverrideDefaultItem)
+	const TShellExtData& rShellExtData, const chengine::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace, bool bOverrideDefaultItem)
 {
 	for(size_t stIndex = 0; stIndex < spRootMenuItem->GetChildrenCount(); ++stIndex)
 	{
@@ -105,7 +105,7 @@
 	}
 }
 
-std::wstring TContextMenuHandler::GetDisplayText(const TShellMenuItemPtr& spMenuItem, const chcore::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace)
+std::wstring TContextMenuHandler::GetDisplayText(const TShellMenuItemPtr& spMenuItem, const chengine::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace)
 {
 	std::wstring wstrItemName = spMenuItem->GetLocalName(false).c_str();
 
Index: src/chext/TContextMenuHandler.h
===================================================================
diff -u -r3c248d4f6d0fdb1e487cc868b2f0b219eec37ef4 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/chext/TContextMenuHandler.h	(.../TContextMenuHandler.h)	(revision 3c248d4f6d0fdb1e487cc868b2f0b219eec37ef4)
+++ src/chext/TContextMenuHandler.h	(.../TContextMenuHandler.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -1,64 +1,64 @@
-// ============================================================================
-//  Copyright (C) 2001-2011 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-/// @file  TContextMenuHandler.h
-/// @date  2011/05/28
-/// @brief Contains class which handles context menu.
-// ============================================================================
-#ifndef __TCONTEXTMENUHANDLER_H__
-#define __TCONTEXTMENUHANDLER_H__
-
-#include "TShellExtData.h"
-#include "../libchcore/TLocalFilesystem.h"
-#include "../libchcore/TSizeFormatter.h"
-
-class TShellMenuItem;
-
-typedef std::shared_ptr<TShellMenuItem> TShellMenuItemPtr;
-
-class TContextMenuHandler
-{
-public:
-	TContextMenuHandler();
-	~TContextMenuHandler();
-
-	void Init(const TShellMenuItemPtr& spRootMenuItem, HMENU hMenu, UINT uiFirstItemID, UINT uiFirstItemPosition, const TShellExtData& rShellExtData,
-		const chcore::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace,
-		bool bEnableOwnerDrawnPaths, bool bOverrideDefaultItem);
-	void Clear();
-
-	UINT GetLastCommandID() const { return m_uiNextMenuID; }
-	TShellMenuItemPtr GetCommandByMenuItemOffset(UINT uiOffset);
-	TShellMenuItemPtr GetCommandByItemID(UINT uiOffset);
-
-protected:
-	void UpdateMenuRecursive(const TShellMenuItemPtr& spRootMenuItem, HMENU hMenu, UINT uiFirstItemPosition, const TShellExtData& rShellExtData,
-		const chcore::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace, bool bOverrideDefaultItem);
-	std::wstring GetDisplayText(const TShellMenuItemPtr& spMenuItem, const chcore::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace);
-
-private:
-	std::map<UINT, TShellMenuItemPtr> m_mapMenuItems;
-	std::vector<HMENU> m_vHandlesToFree;
-
-	UINT m_uiFirstMenuID;		// menu ID from which the numbering started
-	UINT m_uiNextMenuID;		// next menu ID to be used
-
-	bool m_bEnableOwnerDrawnPaths;
-	chcore::TLocalFilesystem m_fsLocal;
-};
-#endif
+// ============================================================================
+//  Copyright (C) 2001-2011 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+/// @file  TContextMenuHandler.h
+/// @date  2011/05/28
+/// @brief Contains class which handles context menu.
+// ============================================================================
+#ifndef __TCONTEXTMENUHANDLER_H__
+#define __TCONTEXTMENUHANDLER_H__
+
+#include "TShellExtData.h"
+#include "../libchengine/TLocalFilesystem.h"
+#include "../libchengine/TSizeFormatter.h"
+
+class TShellMenuItem;
+
+typedef std::shared_ptr<TShellMenuItem> TShellMenuItemPtr;
+
+class TContextMenuHandler
+{
+public:
+	TContextMenuHandler();
+	~TContextMenuHandler();
+
+	void Init(const TShellMenuItemPtr& spRootMenuItem, HMENU hMenu, UINT uiFirstItemID, UINT uiFirstItemPosition, const TShellExtData& rShellExtData,
+		const chengine::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace,
+		bool bEnableOwnerDrawnPaths, bool bOverrideDefaultItem);
+	void Clear();
+
+	UINT GetLastCommandID() const { return m_uiNextMenuID; }
+	TShellMenuItemPtr GetCommandByMenuItemOffset(UINT uiOffset);
+	TShellMenuItemPtr GetCommandByItemID(UINT uiOffset);
+
+protected:
+	void UpdateMenuRecursive(const TShellMenuItemPtr& spRootMenuItem, HMENU hMenu, UINT uiFirstItemPosition, const TShellExtData& rShellExtData,
+		const chengine::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace, bool bOverrideDefaultItem);
+	std::wstring GetDisplayText(const TShellMenuItemPtr& spMenuItem, const chengine::TSizeFormatterPtr& spFormatter, bool bShowFreeSpace);
+
+private:
+	std::map<UINT, TShellMenuItemPtr> m_mapMenuItems;
+	std::vector<HMENU> m_vHandlesToFree;
+
+	UINT m_uiFirstMenuID;		// menu ID from which the numbering started
+	UINT m_uiNextMenuID;		// next menu ID to be used
+
+	bool m_bEnableOwnerDrawnPaths;
+	chengine::TLocalFilesystem m_fsLocal;
+};
+#endif
Index: src/chext/TShellExtData.cpp
===================================================================
diff -u -rbb6d02bb603d82784d53462f857a0535081497af -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/chext/TShellExtData.cpp	(.../TShellExtData.cpp)	(revision bb6d02bb603d82784d53462f857a0535081497af)
+++ src/chext/TShellExtData.cpp	(.../TShellExtData.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -1,601 +1,601 @@
-// ============================================================================
-//  Copyright (C) 2001-2011 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-/// @file  TShellExtData.cpp
-/// @date  2011/05/29
-/// @brief Implementation of class for handling data harvested with shell interfaces.
-// ============================================================================
-#include "stdafx.h"
-#include "TShellExtData.h"
-#include "ShellPathsHelpers.h"
-#include "../common/TShellExtMenuConfig.h"
-
-TShellExtData::TShellExtData() :
-	m_vPathsIDataObject(),
-	m_dwIDataObjectDropEffect(0),
-	m_pathPidlFolder(),
-	m_ulKeysState(eKey_None),
-	m_vPathsClipboard(),
-	m_dwClipboardDropEffect(0),
-	m_bFolderBackground(false),
-	m_eDefaultSystemMenuAction(eAction_None)
-{
-}
-
-TShellExtData::~TShellExtData()
-{
-}
-
-HRESULT TShellExtData::GatherDataFromInitialize(LPCITEMIDLIST pidlFolder, IDataObject* piDataObject)
-{
-	Clear();
-
-	HRESULT hResult = S_OK;
-
-	// read information from pidlFolder
-	if(pidlFolder)
-		hResult = ShellPathsHelpers::GetPathFromITEMIDLIST(pidlFolder, m_pathPidlFolder);
-
-	// process IDataObject
-	if(SUCCEEDED(hResult) && piDataObject)
-	{
-		hResult = ShellPathsHelpers::GetPathsFromIDataObject(piDataObject, m_vPathsIDataObject);
-		if(hResult != S_OK)
-			hResult = E_FAIL;
-		if(SUCCEEDED(hResult))
-			hResult = ReadPreferredDropEffectFromIDataObject(piDataObject);
-	}
-
-	// Read clipboard paths with preferred drop effects
-	if(SUCCEEDED(hResult))
-		hResult = ReadClipboard();
-
-	if(SUCCEEDED(hResult))
-	{
-		ReadKeyboardState();
-
-		// experimentally deduced condition
-		m_bFolderBackground = (piDataObject == nullptr) && (pidlFolder != nullptr);
-	}
-
-	return hResult;
-}
-
-void TShellExtData::Clear()
-{
-	m_vPathsIDataObject.Clear();
-	m_dwIDataObjectDropEffect = 0;
-
-	m_pathPidlFolder.Clear();
-
-	m_ulKeysState = eKey_None;
-
-	m_vPathsClipboard.Clear();
-	m_dwClipboardDropEffect = 0;
-
-	m_bFolderBackground = false;
-
-	m_eDefaultSystemMenuAction = eAction_None;
-}
-
-bool TShellExtData::CanServeAsSourcePaths(EDataSource eDataSource) const
-{
-	switch(eDataSource)
-	{
-	case eDS_Clipboard:
-		return !m_vPathsClipboard.IsEmpty();
-	case eDS_IDataObject:
-		return !m_vPathsIDataObject.IsEmpty();
-	case eDS_PidlFolder:
-		return !m_pathPidlFolder.IsEmpty();
-
-	default:
-		BOOST_ASSERT(false);
-		return false;
-	}
-}
-
-bool TShellExtData::CanServeAsDestinationPath(EDataSource eDataSource) const
-{
-	switch(eDataSource)
-	{
-	case eDS_Clipboard:
-		return m_vPathsClipboard.GetCount() == 1 && (::GetFileAttributes(m_vPathsClipboard.GetAt(0).ToString()) & FILE_ATTRIBUTE_DIRECTORY);
-	case eDS_IDataObject:
-		return m_vPathsIDataObject.GetCount() == 1 && (::GetFileAttributes(m_vPathsIDataObject.GetAt(0).ToString()) & FILE_ATTRIBUTE_DIRECTORY);
-	case eDS_PidlFolder:
-		return !m_pathPidlFolder.IsEmpty() && (::GetFileAttributes(m_pathPidlFolder.ToString()) & FILE_ATTRIBUTE_DIRECTORY);
-
-	default:
-		BOOST_ASSERT(false);
-		return false;
-	}
-}
-
-bool TShellExtData::VerifyItemCanBeExecuted(const TShellMenuItemPtr& spMenuItem) const
-{
-	if(!spMenuItem || spMenuItem->IsGroupItem())
-		return false;
-
-	// where do we expect source paths to get from
-	switch(spMenuItem->GetSourcePathsInfo().GetSrcPathsSource())
-	{
-	case TSourcePathsInfo::eSrcType_Clipboard:
-		{
-			if(!CanServeAsSourcePaths(eDS_Clipboard))
-				return false;
-			break;
-		}
-	case TSourcePathsInfo::eSrcType_InitializePidlFolder:
-		{
-			if(!CanServeAsSourcePaths(eDS_PidlFolder))
-				return false;
-			break;
-		}
-	case TSourcePathsInfo::eSrcType_InitializeIDataObject:
-		{
-			if(!CanServeAsSourcePaths(eDS_IDataObject))
-				return false;
-			break;
-		}
-	case TSourcePathsInfo::eSrcType_InitializeAuto:
-		{
-			if(!CanServeAsSourcePaths(eDS_IDataObject) && !CanServeAsSourcePaths(eDS_PidlFolder))
-				return false;
-			break;
-		}
-	default:
-		return false;
-	}
-
-	// destination path
-	switch(spMenuItem->GetDestinationPathInfo().GetDstPathSource())
-	{
-	case TDestinationPathInfo::eDstType_Clipboard:
-		{
-			if(!CanServeAsDestinationPath(eDS_Clipboard))
-				return false;
-			break;
-		}
-	case TDestinationPathInfo::eDstType_InitializePidlFolder:
-		{
-			if(!CanServeAsDestinationPath(eDS_PidlFolder))
-				return false;
-			break;
-		}
-	case TDestinationPathInfo::eDstType_InitializeIDataObject:
-		{
-			if(!CanServeAsDestinationPath(eDS_IDataObject))
-				return false;
-			break;
-		}
-	case TDestinationPathInfo::eDstType_InitializeAuto:
-		{
-			if(!CanServeAsDestinationPath(eDS_IDataObject) && !CanServeAsDestinationPath(eDS_PidlFolder))
-				return false;
-			break;
-		}
-	case TDestinationPathInfo::eDstType_Specified:
-		{
-			// here we don't check if this is a directory or if it exists - it's assumed that user knows what is he doing
-			if(spMenuItem->GetDestinationPathInfo().GetDefaultDestinationPath().IsEmpty())
-				return false;
-			break;
-		}
-	case TDestinationPathInfo::eDstType_Choose:
-		break;  // returns true
-
-	default:
-		return false;
-	}
-
-	// if it passed all checks, means that we can allow this combination of source and destination path(s) to be used for command
-	return true;
-}
-
-bool TShellExtData::IsDefaultItem(const TShellMenuItemPtr& spMenuItem) const
-{
-	if(!spMenuItem || spMenuItem->IsGroupItem() || spMenuItem->GetDefaultItemHint() == chcore::eOperation_None)
-		return false;
-
-	// check if there was a state defined by reading the current context menu
-	if(m_eDefaultSystemMenuAction != eAction_None)
-	{
-		switch(m_eDefaultSystemMenuAction)
-		{
-		case eAction_Copy:
-			return spMenuItem->GetDefaultItemHint() == chcore::eOperation_Copy;
-
-		case eAction_Move:
-			return spMenuItem->GetDefaultItemHint() == chcore::eOperation_Move;
-
-		default:
-			return false;
-		}
-	}
-
-	// check if there is preferred drop effect associated with the source path
-	switch(spMenuItem->GetSourcePathsInfo().GetSrcPathsSource())
-	{
-	case TSourcePathsInfo::eSrcType_Clipboard:
-		{
-			if(m_dwClipboardDropEffect == 0)
-				break;
-
-			if(m_dwClipboardDropEffect & DROPEFFECT_MOVE && spMenuItem->GetDefaultItemHint() == chcore::eOperation_Move ||
-				m_dwClipboardDropEffect & DROPEFFECT_COPY && spMenuItem->GetDefaultItemHint() == chcore::eOperation_Copy)
-				return true;
-
-			return false;
-		}
-
-	case TSourcePathsInfo::eSrcType_InitializePidlFolder:
-		{
-			break;		// no associated info about drop effect
-		}
-
-	case TSourcePathsInfo::eSrcType_InitializeIDataObject:
-	case TSourcePathsInfo::eSrcType_InitializeAuto:
-		{
-			if(m_dwIDataObjectDropEffect == 0)
-				break;
-
-			if(m_dwIDataObjectDropEffect & DROPEFFECT_MOVE && spMenuItem->GetDefaultItemHint() == chcore::eOperation_Move ||
-				m_dwIDataObjectDropEffect & DROPEFFECT_COPY && spMenuItem->GetDefaultItemHint() == chcore::eOperation_Copy)
-				return true;
-
-			return false;
-		}
-
-	default:
-		return false;
-	}
-	
-	// step 3 - fallback - if there is no other info available, then assume copying, unless something else comes up from source/destination paths analysis
-	// check keyboard buttons
-	if(m_ulKeysState & eKey_Ctrl || m_ulKeysState & eKey_Shift)
-	{
-		if(m_ulKeysState & eKey_Ctrl && spMenuItem->GetDefaultItemHint() == chcore::eOperation_Copy)
-			return true;
-		if(m_ulKeysState & eKey_Shift && spMenuItem->GetDefaultItemHint() == chcore::eOperation_Move)
-			return true;
-
-		return false;
-	}
-
-	chcore::TSmartPath pathDestination;
-	if(!GetDestinationPathByItem(spMenuItem, pathDestination))
-		return false;
-
-	bool bIsSameDriveOrServerName = false;
-	switch(spMenuItem->GetSourcePathsInfo().GetSrcPathsSource())
-	{
-	case TSourcePathsInfo::eSrcType_Clipboard:
-		{
-			if(!m_vPathsClipboard.IsEmpty())
-				bIsSameDriveOrServerName = IsSameDrive(pathDestination, m_vPathsClipboard.GetAt(m_vPathsClipboard.GetCount() - 1));
-
-			break;
-		}
-	case TSourcePathsInfo::eSrcType_InitializePidlFolder:
-		{
-			bIsSameDriveOrServerName = IsSameDrive(pathDestination, m_pathPidlFolder);
-
-			break;
-		}
-	case TSourcePathsInfo::eSrcType_InitializeIDataObject:
-		{
-			if(!m_vPathsIDataObject.IsEmpty())
-				bIsSameDriveOrServerName = IsSameDrive(pathDestination, m_vPathsIDataObject.GetAt(m_vPathsIDataObject.GetCount() - 1));
-
-			break;
-		}
-	case TSourcePathsInfo::eSrcType_InitializeAuto:
-		{
-			if(!m_vPathsIDataObject.IsEmpty())
-			{
-				if(!m_vPathsIDataObject.IsEmpty())
-					bIsSameDriveOrServerName = IsSameDrive(pathDestination, m_vPathsIDataObject.GetAt(m_vPathsIDataObject.GetCount() - 1));
-			}
-			else if(!m_pathPidlFolder.IsEmpty())
-				bIsSameDriveOrServerName = IsSameDrive(pathDestination, m_pathPidlFolder);
-			else
-				return false;
-			break;
-		}
-	}
-
-	// depending on bIsSameDriveOrServerName we either are operating inside single disk volume or within single server,
-	// and since there is no other definition of operation to be performed, we assume either copy or move as default
-	if(bIsSameDriveOrServerName)
-	{
-		if(spMenuItem->GetDefaultItemHint() == chcore::eOperation_Move)
-			return true;
-	}
-	else
-	{
-		if(spMenuItem->GetDefaultItemHint() == chcore::eOperation_Copy)
-			return true;
-	}
-
-	return false;
-}
-
-bool TShellExtData::GetSourcePathsByItem(const TShellMenuItemPtr& spMenuItem, chcore::TPathContainer& tSourcePaths) const
-{
-	if(!spMenuItem || spMenuItem->IsGroupItem())
-		return false;
-
-	tSourcePaths.Clear();
-
-	// where do we expect source paths to get from
-	switch(spMenuItem->GetSourcePathsInfo().GetSrcPathsSource())
-	{
-	case TSourcePathsInfo::eSrcType_Clipboard:
-		tSourcePaths = m_vPathsClipboard;
-		break;
-	case TSourcePathsInfo::eSrcType_InitializePidlFolder:
-		tSourcePaths.Add(m_pathPidlFolder);
-		break;
-	case TSourcePathsInfo::eSrcType_InitializeIDataObject:
-		tSourcePaths = m_vPathsIDataObject;
-		break;
-	case TSourcePathsInfo::eSrcType_InitializeAuto:
-		{
-			if(!m_vPathsIDataObject.IsEmpty())
-				tSourcePaths = m_vPathsIDataObject;
-			else if(!m_pathPidlFolder.IsEmpty())
-				tSourcePaths.Add(m_pathPidlFolder);
-			else
-				return false;
-			break;
-		}
-	default:
-		return false;
-	}
-
-	return true;
-}
-
-bool TShellExtData::GetDestinationPathByItem(const TShellMenuItemPtr& spMenuItem, chcore::TSmartPath& tDestinationPath) const
-{
-	if(!spMenuItem || spMenuItem->IsGroupItem())
-		return false;
-
-	tDestinationPath.Clear();
-
-	// destination path
-	switch(spMenuItem->GetDestinationPathInfo().GetDstPathSource())
-	{
-	case TDestinationPathInfo::eDstType_Clipboard:
-		{
-			if(m_vPathsClipboard.GetCount() != 1)
-				return false;
-			tDestinationPath = m_vPathsClipboard.GetAt(0);
-			break;
-		}
-	case TDestinationPathInfo::eDstType_InitializePidlFolder:
-		tDestinationPath = m_pathPidlFolder;
-		break;
-	case TDestinationPathInfo::eDstType_InitializeIDataObject:
-		{
-			if(m_vPathsIDataObject.GetCount() != 1)
-				return false;
-			tDestinationPath = m_vPathsIDataObject.GetAt(0);
-			break;
-		}
-	case TDestinationPathInfo::eDstType_InitializeAuto:
-		{
-			if(!m_vPathsIDataObject.IsEmpty())
-			{
-				if(m_vPathsIDataObject.GetCount() != 1)
-					return false;
-				tDestinationPath = m_vPathsIDataObject.GetAt(0);
-			}
-			else if(!m_pathPidlFolder.IsEmpty())
-				tDestinationPath = m_pathPidlFolder;
-			else
-				return false;
-
-			break;
-		}
-	case TDestinationPathInfo::eDstType_Specified:
-		{
-			// here we don't check if this is a directory or if it exists - it's assumed that user knows what is he doing
-			if(spMenuItem->GetDestinationPathInfo().GetDefaultDestinationPath().IsEmpty())
-				return false;
-			tDestinationPath = spMenuItem->GetDestinationPathInfo().GetDefaultDestinationPath();
-			break;
-		}
-	case TDestinationPathInfo::eDstType_Choose:
-		// tDestinationPath is already clear; returning true
-		break;
-
-	default:
-		return false;
-	}
-
-	return true;
-}
-
-bool TShellExtData::GetOperationTypeByItem(const TShellMenuItemPtr& spMenuItem, chcore::EOperationType& eOperationType) const
-{
-	if(!spMenuItem || spMenuItem->IsGroupItem())
-		return false;
-
-	eOperationType = chcore::eOperation_None;
-
-	switch(spMenuItem->GetOperationTypeInfo().GetOperationTypeSource())
-	{
-	case TOperationTypeInfo::eOpType_Autodetect:
-		{
-			// depending on the source and destination...
-			switch(spMenuItem->GetSourcePathsInfo().GetSrcPathsSource())
-			{
-			case TSourcePathsInfo::eSrcType_Clipboard:
-				eOperationType = (m_dwClipboardDropEffect & DROPEFFECT_MOVE) ? chcore::eOperation_Move : chcore::eOperation_Copy;
-				break;
-			case TSourcePathsInfo::eSrcType_InitializeIDataObject:
-			case TSourcePathsInfo::eSrcType_InitializeAuto:
-				eOperationType = (m_dwIDataObjectDropEffect & DROPEFFECT_MOVE) ? chcore::eOperation_Move : chcore::eOperation_Copy;
-				break;
-			case TSourcePathsInfo::eSrcType_InitializePidlFolder:
-				return false;
-
-			default:
-				return false;
-			}
-			break;
-		}
-	case TOperationTypeInfo::eOpType_Specified:
-		eOperationType = spMenuItem->GetOperationTypeInfo().GetDefaultOperationType();
-		break;
-	default:
-		return false;
-	}
-
-	return true;
-}
-
-void TShellExtData::ReadKeyboardState()
-{
-	m_ulKeysState = ((GetKeyState(VK_SHIFT) & 0x80) ? eKey_Shift : 0) |
-		((GetKeyState(VK_CONTROL) & 0x80) ? eKey_Ctrl : 0) |
-		((GetKeyState(VK_MENU) & 0x80) ? eKey_Alt : 0);
-}
-
-HRESULT TShellExtData::ReadPreferredDropEffectFromIDataObject(IDataObject* piDataObject)
-{
-	if(!piDataObject)
-		return E_INVALIDARG;
-
-	// try to retrieve the preferred drop effect from the input data object
-	UINT uiPreferredDropEffect = RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT);
-	if(!uiPreferredDropEffect)
-		return E_FAIL;
-
-	FORMATETC fe = { (CLIPFORMAT)uiPreferredDropEffect, nullptr, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
-
-	// if the drop effect does not exist - just report it
-	m_dwIDataObjectDropEffect = 0;
-	HRESULT hResult = piDataObject->QueryGetData(&fe);
-	if(hResult == S_OK)
-	{
-		STGMEDIUM medium;
-		hResult = piDataObject->GetData(&fe, &medium);
-		if(SUCCEEDED(hResult) && !medium.hGlobal)
-			hResult = E_FAIL;
-		if(SUCCEEDED(hResult))
-		{
-			// specify operation
-			DWORD* pdwData = (DWORD*)GlobalLock(medium.hGlobal);
-			if(pdwData)
-			{
-				m_dwIDataObjectDropEffect = *pdwData;
-				GlobalUnlock(medium.hGlobal);
-			}
-			else
-				hResult = E_FAIL;
-		}
-
-		ReleaseStgMedium(&medium);
-	}
-	else if(hResult == DV_E_CLIPFORMAT || hResult == DV_E_FORMATETC)
-		hResult = S_FALSE;	// no drop effect supplied
-
-	return hResult;
-}
-
-HRESULT TShellExtData::ReadClipboard()
-{
-	HRESULT hResult = S_FALSE;
-
-	if(IsClipboardFormatAvailable(CF_HDROP))
-	{
-		// read paths from clipboard
-		if(!OpenClipboard(nullptr))
-			return E_FAIL;
-
-		HANDLE hClipboardData = GetClipboardData(CF_HDROP);
-		if(!hClipboardData)
-			hResult = E_FAIL;
-
-		if(SUCCEEDED(hResult))
-		{
-			ShellPathsHelpers::GetPathsFromHDROP(static_cast<HDROP>(hClipboardData), m_vPathsClipboard);
-
-			// check if there is also a hint about operation type
-			UINT nFormat = RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT);
-			if(IsClipboardFormatAvailable(nFormat))
-			{
-				hClipboardData = GetClipboardData(nFormat);
-				if(!hClipboardData)
-					hResult = E_FAIL;
-				else
-				{
-					LPVOID pClipboardData = GlobalLock(hClipboardData);
-					if(!pClipboardData)
-						hResult = E_FAIL;
-					else
-						m_dwClipboardDropEffect = *((DWORD*)pClipboardData);
-
-					GlobalUnlock(hClipboardData);
-				}
-			}
-		}
-
-		CloseClipboard();
-
-		return hResult;
-	}
-
-	return S_FALSE;
-}
-
-bool TShellExtData::IsSameDrive(const chcore::TSmartPath& spPath1, const chcore::TSmartPath& spPath2) const
-{
-	// NOTE: see operator== in TSmartPath for comments on path case sensitivity and possible issues with it
-	return (spPath1.HasDrive() && spPath2.HasDrive() && spPath1.GetDrive() == spPath2.GetDrive()) 
-			|| (spPath1.IsNetworkPath() && spPath2.IsNetworkPath() && spPath1.GetServerName() == spPath2.GetServerName());
-}
-
-void TShellExtData::ReadDefaultSelectionStateFromMenu(HMENU hMenu)
-{
-	// it's none by default
-	m_eDefaultSystemMenuAction = eAction_None;
-
-	BOOST_ASSERT(hMenu != nullptr);
-	if(hMenu)
-	{
-		MENUITEMINFO mii;
-		mii.cbSize = sizeof(MENUITEMINFO);
-		mii.fMask = MIIM_STATE;
-
-		if(::GetMenuItemInfo(hMenu, 1, FALSE, &mii) && mii.fState & MFS_DEFAULT)
-			m_eDefaultSystemMenuAction = eAction_Copy;
-		if(::GetMenuItemInfo(hMenu, 2, FALSE, &mii) && mii.fState & MFS_DEFAULT)
-			m_eDefaultSystemMenuAction = eAction_Move;
-		if(::GetMenuItemInfo(hMenu, 3, FALSE, &mii) && mii.fState & MFS_DEFAULT)
-			m_eDefaultSystemMenuAction = eAction_Shortcut;
-	}
-}
-
-TShellExtData::EActionSource TShellExtData::GetActionSource() const
-{
-	return (m_dwIDataObjectDropEffect != 0) ? (m_ulKeysState != eKey_None ? eSrc_Keyboard : eSrc_CtxMenu) : eSrc_DropMenu;
+// ============================================================================
+//  Copyright (C) 2001-2011 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+/// @file  TShellExtData.cpp
+/// @date  2011/05/29
+/// @brief Implementation of class for handling data harvested with shell interfaces.
+// ============================================================================
+#include "stdafx.h"
+#include "TShellExtData.h"
+#include "ShellPathsHelpers.h"
+#include "../common/TShellExtMenuConfig.h"
+
+TShellExtData::TShellExtData() :
+	m_vPathsIDataObject(),
+	m_dwIDataObjectDropEffect(0),
+	m_pathPidlFolder(),
+	m_ulKeysState(eKey_None),
+	m_vPathsClipboard(),
+	m_dwClipboardDropEffect(0),
+	m_bFolderBackground(false),
+	m_eDefaultSystemMenuAction(eAction_None)
+{
+}
+
+TShellExtData::~TShellExtData()
+{
+}
+
+HRESULT TShellExtData::GatherDataFromInitialize(LPCITEMIDLIST pidlFolder, IDataObject* piDataObject)
+{
+	Clear();
+
+	HRESULT hResult = S_OK;
+
+	// read information from pidlFolder
+	if(pidlFolder)
+		hResult = ShellPathsHelpers::GetPathFromITEMIDLIST(pidlFolder, m_pathPidlFolder);
+
+	// process IDataObject
+	if(SUCCEEDED(hResult) && piDataObject)
+	{
+		hResult = ShellPathsHelpers::GetPathsFromIDataObject(piDataObject, m_vPathsIDataObject);
+		if(hResult != S_OK)
+			hResult = E_FAIL;
+		if(SUCCEEDED(hResult))
+			hResult = ReadPreferredDropEffectFromIDataObject(piDataObject);
+	}
+
+	// Read clipboard paths with preferred drop effects
+	if(SUCCEEDED(hResult))
+		hResult = ReadClipboard();
+
+	if(SUCCEEDED(hResult))
+	{
+		ReadKeyboardState();
+
+		// experimentally deduced condition
+		m_bFolderBackground = (piDataObject == nullptr) && (pidlFolder != nullptr);
+	}
+
+	return hResult;
+}
+
+void TShellExtData::Clear()
+{
+	m_vPathsIDataObject.Clear();
+	m_dwIDataObjectDropEffect = 0;
+
+	m_pathPidlFolder.Clear();
+
+	m_ulKeysState = eKey_None;
+
+	m_vPathsClipboard.Clear();
+	m_dwClipboardDropEffect = 0;
+
+	m_bFolderBackground = false;
+
+	m_eDefaultSystemMenuAction = eAction_None;
+}
+
+bool TShellExtData::CanServeAsSourcePaths(EDataSource eDataSource) const
+{
+	switch(eDataSource)
+	{
+	case eDS_Clipboard:
+		return !m_vPathsClipboard.IsEmpty();
+	case eDS_IDataObject:
+		return !m_vPathsIDataObject.IsEmpty();
+	case eDS_PidlFolder:
+		return !m_pathPidlFolder.IsEmpty();
+
+	default:
+		BOOST_ASSERT(false);
+		return false;
+	}
+}
+
+bool TShellExtData::CanServeAsDestinationPath(EDataSource eDataSource) const
+{
+	switch(eDataSource)
+	{
+	case eDS_Clipboard:
+		return m_vPathsClipboard.GetCount() == 1 && (::GetFileAttributes(m_vPathsClipboard.GetAt(0).ToString()) & FILE_ATTRIBUTE_DIRECTORY);
+	case eDS_IDataObject:
+		return m_vPathsIDataObject.GetCount() == 1 && (::GetFileAttributes(m_vPathsIDataObject.GetAt(0).ToString()) & FILE_ATTRIBUTE_DIRECTORY);
+	case eDS_PidlFolder:
+		return !m_pathPidlFolder.IsEmpty() && (::GetFileAttributes(m_pathPidlFolder.ToString()) & FILE_ATTRIBUTE_DIRECTORY);
+
+	default:
+		BOOST_ASSERT(false);
+		return false;
+	}
+}
+
+bool TShellExtData::VerifyItemCanBeExecuted(const TShellMenuItemPtr& spMenuItem) const
+{
+	if(!spMenuItem || spMenuItem->IsGroupItem())
+		return false;
+
+	// where do we expect source paths to get from
+	switch(spMenuItem->GetSourcePathsInfo().GetSrcPathsSource())
+	{
+	case TSourcePathsInfo::eSrcType_Clipboard:
+		{
+			if(!CanServeAsSourcePaths(eDS_Clipboard))
+				return false;
+			break;
+		}
+	case TSourcePathsInfo::eSrcType_InitializePidlFolder:
+		{
+			if(!CanServeAsSourcePaths(eDS_PidlFolder))
+				return false;
+			break;
+		}
+	case TSourcePathsInfo::eSrcType_InitializeIDataObject:
+		{
+			if(!CanServeAsSourcePaths(eDS_IDataObject))
+				return false;
+			break;
+		}
+	case TSourcePathsInfo::eSrcType_InitializeAuto:
+		{
+			if(!CanServeAsSourcePaths(eDS_IDataObject) && !CanServeAsSourcePaths(eDS_PidlFolder))
+				return false;
+			break;
+		}
+	default:
+		return false;
+	}
+
+	// destination path
+	switch(spMenuItem->GetDestinationPathInfo().GetDstPathSource())
+	{
+	case TDestinationPathInfo::eDstType_Clipboard:
+		{
+			if(!CanServeAsDestinationPath(eDS_Clipboard))
+				return false;
+			break;
+		}
+	case TDestinationPathInfo::eDstType_InitializePidlFolder:
+		{
+			if(!CanServeAsDestinationPath(eDS_PidlFolder))
+				return false;
+			break;
+		}
+	case TDestinationPathInfo::eDstType_InitializeIDataObject:
+		{
+			if(!CanServeAsDestinationPath(eDS_IDataObject))
+				return false;
+			break;
+		}
+	case TDestinationPathInfo::eDstType_InitializeAuto:
+		{
+			if(!CanServeAsDestinationPath(eDS_IDataObject) && !CanServeAsDestinationPath(eDS_PidlFolder))
+				return false;
+			break;
+		}
+	case TDestinationPathInfo::eDstType_Specified:
+		{
+			// here we don't check if this is a directory or if it exists - it's assumed that user knows what is he doing
+			if(spMenuItem->GetDestinationPathInfo().GetDefaultDestinationPath().IsEmpty())
+				return false;
+			break;
+		}
+	case TDestinationPathInfo::eDstType_Choose:
+		break;  // returns true
+
+	default:
+		return false;
+	}
+
+	// if it passed all checks, means that we can allow this combination of source and destination path(s) to be used for command
+	return true;
+}
+
+bool TShellExtData::IsDefaultItem(const TShellMenuItemPtr& spMenuItem) const
+{
+	if(!spMenuItem || spMenuItem->IsGroupItem() || spMenuItem->GetDefaultItemHint() == chengine::eOperation_None)
+		return false;
+
+	// check if there was a state defined by reading the current context menu
+	if(m_eDefaultSystemMenuAction != eAction_None)
+	{
+		switch(m_eDefaultSystemMenuAction)
+		{
+		case eAction_Copy:
+			return spMenuItem->GetDefaultItemHint() == chengine::eOperation_Copy;
+
+		case eAction_Move:
+			return spMenuItem->GetDefaultItemHint() == chengine::eOperation_Move;
+
+		default:
+			return false;
+		}
+	}
+
+	// check if there is preferred drop effect associated with the source path
+	switch(spMenuItem->GetSourcePathsInfo().GetSrcPathsSource())
+	{
+	case TSourcePathsInfo::eSrcType_Clipboard:
+		{
+			if(m_dwClipboardDropEffect == 0)
+				break;
+
+			if(m_dwClipboardDropEffect & DROPEFFECT_MOVE && spMenuItem->GetDefaultItemHint() == chengine::eOperation_Move ||
+				m_dwClipboardDropEffect & DROPEFFECT_COPY && spMenuItem->GetDefaultItemHint() == chengine::eOperation_Copy)
+				return true;
+
+			return false;
+		}
+
+	case TSourcePathsInfo::eSrcType_InitializePidlFolder:
+		{
+			break;		// no associated info about drop effect
+		}
+
+	case TSourcePathsInfo::eSrcType_InitializeIDataObject:
+	case TSourcePathsInfo::eSrcType_InitializeAuto:
+		{
+			if(m_dwIDataObjectDropEffect == 0)
+				break;
+
+			if(m_dwIDataObjectDropEffect & DROPEFFECT_MOVE && spMenuItem->GetDefaultItemHint() == chengine::eOperation_Move ||
+				m_dwIDataObjectDropEffect & DROPEFFECT_COPY && spMenuItem->GetDefaultItemHint() == chengine::eOperation_Copy)
+				return true;
+
+			return false;
+		}
+
+	default:
+		return false;
+	}
+	
+	// step 3 - fallback - if there is no other info available, then assume copying, unless something else comes up from source/destination paths analysis
+	// check keyboard buttons
+	if(m_ulKeysState & eKey_Ctrl || m_ulKeysState & eKey_Shift)
+	{
+		if(m_ulKeysState & eKey_Ctrl && spMenuItem->GetDefaultItemHint() == chengine::eOperation_Copy)
+			return true;
+		if(m_ulKeysState & eKey_Shift && spMenuItem->GetDefaultItemHint() == chengine::eOperation_Move)
+			return true;
+
+		return false;
+	}
+
+	chcore::TSmartPath pathDestination;
+	if(!GetDestinationPathByItem(spMenuItem, pathDestination))
+		return false;
+
+	bool bIsSameDriveOrServerName = false;
+	switch(spMenuItem->GetSourcePathsInfo().GetSrcPathsSource())
+	{
+	case TSourcePathsInfo::eSrcType_Clipboard:
+		{
+			if(!m_vPathsClipboard.IsEmpty())
+				bIsSameDriveOrServerName = IsSameDrive(pathDestination, m_vPathsClipboard.GetAt(m_vPathsClipboard.GetCount() - 1));
+
+			break;
+		}
+	case TSourcePathsInfo::eSrcType_InitializePidlFolder:
+		{
+			bIsSameDriveOrServerName = IsSameDrive(pathDestination, m_pathPidlFolder);
+
+			break;
+		}
+	case TSourcePathsInfo::eSrcType_InitializeIDataObject:
+		{
+			if(!m_vPathsIDataObject.IsEmpty())
+				bIsSameDriveOrServerName = IsSameDrive(pathDestination, m_vPathsIDataObject.GetAt(m_vPathsIDataObject.GetCount() - 1));
+
+			break;
+		}
+	case TSourcePathsInfo::eSrcType_InitializeAuto:
+		{
+			if(!m_vPathsIDataObject.IsEmpty())
+			{
+				if(!m_vPathsIDataObject.IsEmpty())
+					bIsSameDriveOrServerName = IsSameDrive(pathDestination, m_vPathsIDataObject.GetAt(m_vPathsIDataObject.GetCount() - 1));
+			}
+			else if(!m_pathPidlFolder.IsEmpty())
+				bIsSameDriveOrServerName = IsSameDrive(pathDestination, m_pathPidlFolder);
+			else
+				return false;
+			break;
+		}
+	}
+
+	// depending on bIsSameDriveOrServerName we either are operating inside single disk volume or within single server,
+	// and since there is no other definition of operation to be performed, we assume either copy or move as default
+	if(bIsSameDriveOrServerName)
+	{
+		if(spMenuItem->GetDefaultItemHint() == chengine::eOperation_Move)
+			return true;
+	}
+	else
+	{
+		if(spMenuItem->GetDefaultItemHint() == chengine::eOperation_Copy)
+			return true;
+	}
+
+	return false;
+}
+
+bool TShellExtData::GetSourcePathsByItem(const TShellMenuItemPtr& spMenuItem, chcore::TPathContainer& tSourcePaths) const
+{
+	if(!spMenuItem || spMenuItem->IsGroupItem())
+		return false;
+
+	tSourcePaths.Clear();
+
+	// where do we expect source paths to get from
+	switch(spMenuItem->GetSourcePathsInfo().GetSrcPathsSource())
+	{
+	case TSourcePathsInfo::eSrcType_Clipboard:
+		tSourcePaths = m_vPathsClipboard;
+		break;
+	case TSourcePathsInfo::eSrcType_InitializePidlFolder:
+		tSourcePaths.Add(m_pathPidlFolder);
+		break;
+	case TSourcePathsInfo::eSrcType_InitializeIDataObject:
+		tSourcePaths = m_vPathsIDataObject;
+		break;
+	case TSourcePathsInfo::eSrcType_InitializeAuto:
+		{
+			if(!m_vPathsIDataObject.IsEmpty())
+				tSourcePaths = m_vPathsIDataObject;
+			else if(!m_pathPidlFolder.IsEmpty())
+				tSourcePaths.Add(m_pathPidlFolder);
+			else
+				return false;
+			break;
+		}
+	default:
+		return false;
+	}
+
+	return true;
+}
+
+bool TShellExtData::GetDestinationPathByItem(const TShellMenuItemPtr& spMenuItem, chcore::TSmartPath& tDestinationPath) const
+{
+	if(!spMenuItem || spMenuItem->IsGroupItem())
+		return false;
+
+	tDestinationPath.Clear();
+
+	// destination path
+	switch(spMenuItem->GetDestinationPathInfo().GetDstPathSource())
+	{
+	case TDestinationPathInfo::eDstType_Clipboard:
+		{
+			if(m_vPathsClipboard.GetCount() != 1)
+				return false;
+			tDestinationPath = m_vPathsClipboard.GetAt(0);
+			break;
+		}
+	case TDestinationPathInfo::eDstType_InitializePidlFolder:
+		tDestinationPath = m_pathPidlFolder;
+		break;
+	case TDestinationPathInfo::eDstType_InitializeIDataObject:
+		{
+			if(m_vPathsIDataObject.GetCount() != 1)
+				return false;
+			tDestinationPath = m_vPathsIDataObject.GetAt(0);
+			break;
+		}
+	case TDestinationPathInfo::eDstType_InitializeAuto:
+		{
+			if(!m_vPathsIDataObject.IsEmpty())
+			{
+				if(m_vPathsIDataObject.GetCount() != 1)
+					return false;
+				tDestinationPath = m_vPathsIDataObject.GetAt(0);
+			}
+			else if(!m_pathPidlFolder.IsEmpty())
+				tDestinationPath = m_pathPidlFolder;
+			else
+				return false;
+
+			break;
+		}
+	case TDestinationPathInfo::eDstType_Specified:
+		{
+			// here we don't check if this is a directory or if it exists - it's assumed that user knows what is he doing
+			if(spMenuItem->GetDestinationPathInfo().GetDefaultDestinationPath().IsEmpty())
+				return false;
+			tDestinationPath = spMenuItem->GetDestinationPathInfo().GetDefaultDestinationPath();
+			break;
+		}
+	case TDestinationPathInfo::eDstType_Choose:
+		// tDestinationPath is already clear; returning true
+		break;
+
+	default:
+		return false;
+	}
+
+	return true;
+}
+
+bool TShellExtData::GetOperationTypeByItem(const TShellMenuItemPtr& spMenuItem, chengine::EOperationType& eOperationType) const
+{
+	if(!spMenuItem || spMenuItem->IsGroupItem())
+		return false;
+
+	eOperationType = chengine::eOperation_None;
+
+	switch(spMenuItem->GetOperationTypeInfo().GetOperationTypeSource())
+	{
+	case TOperationTypeInfo::eOpType_Autodetect:
+		{
+			// depending on the source and destination...
+			switch(spMenuItem->GetSourcePathsInfo().GetSrcPathsSource())
+			{
+			case TSourcePathsInfo::eSrcType_Clipboard:
+				eOperationType = (m_dwClipboardDropEffect & DROPEFFECT_MOVE) ? chengine::eOperation_Move : chengine::eOperation_Copy;
+				break;
+			case TSourcePathsInfo::eSrcType_InitializeIDataObject:
+			case TSourcePathsInfo::eSrcType_InitializeAuto:
+				eOperationType = (m_dwIDataObjectDropEffect & DROPEFFECT_MOVE) ? chengine::eOperation_Move : chengine::eOperation_Copy;
+				break;
+			case TSourcePathsInfo::eSrcType_InitializePidlFolder:
+				return false;
+
+			default:
+				return false;
+			}
+			break;
+		}
+	case TOperationTypeInfo::eOpType_Specified:
+		eOperationType = spMenuItem->GetOperationTypeInfo().GetDefaultOperationType();
+		break;
+	default:
+		return false;
+	}
+
+	return true;
+}
+
+void TShellExtData::ReadKeyboardState()
+{
+	m_ulKeysState = ((GetKeyState(VK_SHIFT) & 0x80) ? eKey_Shift : 0) |
+		((GetKeyState(VK_CONTROL) & 0x80) ? eKey_Ctrl : 0) |
+		((GetKeyState(VK_MENU) & 0x80) ? eKey_Alt : 0);
+}
+
+HRESULT TShellExtData::ReadPreferredDropEffectFromIDataObject(IDataObject* piDataObject)
+{
+	if(!piDataObject)
+		return E_INVALIDARG;
+
+	// try to retrieve the preferred drop effect from the input data object
+	UINT uiPreferredDropEffect = RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT);
+	if(!uiPreferredDropEffect)
+		return E_FAIL;
+
+	FORMATETC fe = { (CLIPFORMAT)uiPreferredDropEffect, nullptr, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
+
+	// if the drop effect does not exist - just report it
+	m_dwIDataObjectDropEffect = 0;
+	HRESULT hResult = piDataObject->QueryGetData(&fe);
+	if(hResult == S_OK)
+	{
+		STGMEDIUM medium;
+		hResult = piDataObject->GetData(&fe, &medium);
+		if(SUCCEEDED(hResult) && !medium.hGlobal)
+			hResult = E_FAIL;
+		if(SUCCEEDED(hResult))
+		{
+			// specify operation
+			DWORD* pdwData = (DWORD*)GlobalLock(medium.hGlobal);
+			if(pdwData)
+			{
+				m_dwIDataObjectDropEffect = *pdwData;
+				GlobalUnlock(medium.hGlobal);
+			}
+			else
+				hResult = E_FAIL;
+		}
+
+		ReleaseStgMedium(&medium);
+	}
+	else if(hResult == DV_E_CLIPFORMAT || hResult == DV_E_FORMATETC)
+		hResult = S_FALSE;	// no drop effect supplied
+
+	return hResult;
+}
+
+HRESULT TShellExtData::ReadClipboard()
+{
+	HRESULT hResult = S_FALSE;
+
+	if(IsClipboardFormatAvailable(CF_HDROP))
+	{
+		// read paths from clipboard
+		if(!OpenClipboard(nullptr))
+			return E_FAIL;
+
+		HANDLE hClipboardData = GetClipboardData(CF_HDROP);
+		if(!hClipboardData)
+			hResult = E_FAIL;
+
+		if(SUCCEEDED(hResult))
+		{
+			ShellPathsHelpers::GetPathsFromHDROP(static_cast<HDROP>(hClipboardData), m_vPathsClipboard);
+
+			// check if there is also a hint about operation type
+			UINT nFormat = RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT);
+			if(IsClipboardFormatAvailable(nFormat))
+			{
+				hClipboardData = GetClipboardData(nFormat);
+				if(!hClipboardData)
+					hResult = E_FAIL;
+				else
+				{
+					LPVOID pClipboardData = GlobalLock(hClipboardData);
+					if(!pClipboardData)
+						hResult = E_FAIL;
+					else
+						m_dwClipboardDropEffect = *((DWORD*)pClipboardData);
+
+					GlobalUnlock(hClipboardData);
+				}
+			}
+		}
+
+		CloseClipboard();
+
+		return hResult;
+	}
+
+	return S_FALSE;
+}
+
+bool TShellExtData::IsSameDrive(const chcore::TSmartPath& spPath1, const chcore::TSmartPath& spPath2) const
+{
+	// NOTE: see operator== in TSmartPath for comments on path case sensitivity and possible issues with it
+	return (spPath1.HasDrive() && spPath2.HasDrive() && spPath1.GetDrive() == spPath2.GetDrive()) 
+			|| (spPath1.IsNetworkPath() && spPath2.IsNetworkPath() && spPath1.GetServerName() == spPath2.GetServerName());
+}
+
+void TShellExtData::ReadDefaultSelectionStateFromMenu(HMENU hMenu)
+{
+	// it's none by default
+	m_eDefaultSystemMenuAction = eAction_None;
+
+	BOOST_ASSERT(hMenu != nullptr);
+	if(hMenu)
+	{
+		MENUITEMINFO mii;
+		mii.cbSize = sizeof(MENUITEMINFO);
+		mii.fMask = MIIM_STATE;
+
+		if(::GetMenuItemInfo(hMenu, 1, FALSE, &mii) && mii.fState & MFS_DEFAULT)
+			m_eDefaultSystemMenuAction = eAction_Copy;
+		if(::GetMenuItemInfo(hMenu, 2, FALSE, &mii) && mii.fState & MFS_DEFAULT)
+			m_eDefaultSystemMenuAction = eAction_Move;
+		if(::GetMenuItemInfo(hMenu, 3, FALSE, &mii) && mii.fState & MFS_DEFAULT)
+			m_eDefaultSystemMenuAction = eAction_Shortcut;
+	}
+}
+
+TShellExtData::EActionSource TShellExtData::GetActionSource() const
+{
+	return (m_dwIDataObjectDropEffect != 0) ? (m_ulKeysState != eKey_None ? eSrc_Keyboard : eSrc_CtxMenu) : eSrc_DropMenu;
 }
\ No newline at end of file
Index: src/chext/TShellExtData.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/chext/TShellExtData.h	(.../TShellExtData.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/chext/TShellExtData.h	(.../TShellExtData.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -24,7 +24,7 @@
 #define __TSHELLEXTDATA_H__
 
 #include "../libchcore/TPath.h"
-#include "../libchcore/EOperationTypes.h"
+#include "../libchengine/EOperationTypes.h"
 #include "../libchcore/TPathContainer.h"
 
 class TShellMenuItem;
@@ -86,7 +86,7 @@
 	bool GetSourcePathsByItem(const TShellMenuItemPtr& spMenuItem, chcore::TPathContainer& tSourcePaths) const;
 	bool GetDestinationPathByItem(const TShellMenuItemPtr& spMenuItem, chcore::TSmartPath& tDestinationPath) const;
 
-	bool GetOperationTypeByItem(const TShellMenuItemPtr& spMenuItem, chcore::EOperationType& eOperationType) const;
+	bool GetOperationTypeByItem(const TShellMenuItemPtr& spMenuItem, chengine::EOperationType& eOperationType) const;
 
 	EActionSource GetActionSource() const;
 
Index: src/chext/chext.vc140.vcxproj
===================================================================
diff -u -r306fbe693c70290af9de9a5779084a697de22d75 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/chext/chext.vc140.vcxproj	(.../chext.vc140.vcxproj)	(revision 306fbe693c70290af9de9a5779084a697de22d75)
+++ src/chext/chext.vc140.vcxproj	(.../chext.vc140.vcxproj)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -1,674 +1,680 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Testing Debug|Win32">
-      <Configuration>Testing Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Testing Debug|x64">
-      <Configuration>Testing Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Testing Release|Win32">
-      <Configuration>Testing Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Testing Release|x64">
-      <Configuration>Testing Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>chext</ProjectName>
-    <ProjectGuid>{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}</ProjectGuid>
-    <RootNamespace>chext</RootNamespace>
-    <Keyword>AtlProj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>false</UseOfMfc>
-    <UseOfAtl>false</UseOfAtl>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>false</UseOfMfc>
-    <UseOfAtl>false</UseOfAtl>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>false</UseOfMfc>
-    <UseOfAtl>false</UseOfAtl>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>false</UseOfMfc>
-    <UseOfAtl>false</UseOfAtl>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <PlatformToolset>v120_xp</PlatformToolset>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\common\Boost.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>11.0.51106.1</_ProjectFileVersion>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <IgnoreImportLibrary>true</IgnoreImportLibrary>
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <IgnoreImportLibrary>true</IgnoreImportLibrary>
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <IgnoreImportLibrary>true</IgnoreImportLibrary>
-    <LinkIncremental>true</LinkIncremental>
-    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <RunCodeAnalysis>false</RunCodeAnalysis>
-    <TargetName>$(ProjectName)64</TargetName>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <IgnoreImportLibrary>true</IgnoreImportLibrary>
-    <LinkIncremental>true</LinkIncremental>
-    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <RunCodeAnalysis>false</RunCodeAnalysis>
-    <TargetName>$(ProjectName)64</TargetName>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <IgnoreImportLibrary>true</IgnoreImportLibrary>
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <IgnoreImportLibrary>true</IgnoreImportLibrary>
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <IgnoreImportLibrary>true</IgnoreImportLibrary>
-    <LinkIncremental>false</LinkIncremental>
-    <TargetName>$(ProjectName)64</TargetName>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
-    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
-    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
-    <IgnoreImportLibrary>true</IgnoreImportLibrary>
-    <LinkIncremental>false</LinkIncremental>
-    <TargetName>$(ProjectName)64</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <HeaderFileName />
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
-      <MinimalRebuild>false</MinimalRebuild>
-      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <RegisterOutput>false</RegisterOutput>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>chext32.def</ModuleDefinitionFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
-    <Midl>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;</AdditionalIncludeDirectories>
-      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
-      <MinimalRebuild>false</MinimalRebuild>
-      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <RegisterOutput>false</RegisterOutput>
-      <AdditionalDependencies>comctl32.lib;gmock32d.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>chext32.def</ModuleDefinitionFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent>
-      <Command>cd "$(TargetDir)"
-
-if "$(PlatformName)" EQU "x64" goto x64
-
-:x32
-"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-goto end
-
-:x64
-"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-goto end
-
-:end
-</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <HeaderFileName />
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnablePREfast>false</EnablePREfast>
-      <SDLCheck>true</SDLCheck>
-      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
-      <MinimalRebuild>false</MinimalRebuild>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <RegisterOutput>false</RegisterOutput>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>chext64.def</ModuleDefinitionFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnablePREfast>false</EnablePREfast>
-      <SDLCheck>true</SDLCheck>
-      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;</AdditionalIncludeDirectories>
-      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
-      <MinimalRebuild>false</MinimalRebuild>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <RegisterOutput>false</RegisterOutput>
-      <AdditionalDependencies>comctl32.lib;gmock64d.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>chext64.def</ModuleDefinitionFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent>
-      <Command>cd "$(TargetDir)"
-
-if "$(PlatformName)" EQU "x64" goto x64
-
-:x32
-"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-goto end
-
-:x64
-"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-goto end
-
-:end
-</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <HeaderFileName />
-    </Midl>
-    <ClCompile>
-      <Optimization>MinSpace</Optimization>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
-      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <RegisterOutput>false</RegisterOutput>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>chext32.def</ModuleDefinitionFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
-    <Midl>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>MinSpace</Optimization>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;</AdditionalIncludeDirectories>
-      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
-      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <RegisterOutput>false</RegisterOutput>
-      <AdditionalDependencies>comctl32.lib;gmock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>chext32.def</ModuleDefinitionFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent>
-      <Command>cd "$(TargetDir)"
-
-if "$(PlatformName)" EQU "x64" goto x64
-
-:x32
-"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-goto end
-
-:x64
-"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-goto end
-
-:end
-</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <HeaderFileName />
-    </Midl>
-    <ClCompile>
-      <Optimization>MinSpace</Optimization>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <RegisterOutput>false</RegisterOutput>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>chext64.def</ModuleDefinitionFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>MinSpace</Optimization>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>Use</PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <SDLCheck>true</SDLCheck>
-      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;</AdditionalIncludeDirectories>
-      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <RegisterOutput>false</RegisterOutput>
-      <AdditionalDependencies>comctl32.lib;gmock64.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>chext64.def</ModuleDefinitionFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX64</TargetMachine>
-      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
-      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-    </Link>
-    <PostBuildEvent>
-      <Command>cd "$(TargetDir)"
-
-if "$(PlatformName)" EQU "x64" goto x64
-
-:x32
-"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-goto end
-
-:x64
-"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
-goto end
-
-:end
-</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">NotUsing</PrecompiledHeader>
-    </ClCompile>
-    <ClCompile Include="..\common\TShellExtIpcConfigDataConsumer.cpp" />
-    <ClCompile Include="DropMenuExt.cpp" />
-    <ClCompile Include="GuidFormatter.cpp" />
-    <ClCompile Include="HResultFormatter.cpp" />
-    <ClCompile Include="MenuExt.cpp" />
-    <ClCompile Include="ShellExtControl.cpp" />
-    <ClCompile Include="ShellExtensionVerifier.cpp" />
-    <ClCompile Include="ShellPathsHelpers.cpp" />
-    <ClCompile Include="TContextMenuHandler.cpp" />
-    <ClCompile Include="Logger.cpp" />
-    <ClCompile Include="TShellExtData.cpp" />
-    <ClCompile Include="..\common\TShellExtMenuConfig.cpp" />
-    <ClCompile Include="chext.cpp" />
-    <ClCompile Include="dllmain.cpp" />
-    <ClCompile Include="StdAfx.cpp">
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Create</PrecompiledHeader>
-    </ClCompile>
-    <ClCompile Include="chext_i.c">
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-      </PrecompiledHeader>
-      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
-      </PrecompiledHeader>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\common\TShellExtIpcConfigDataConsumer.h" />
-    <ClInclude Include="DropMenuExt.h" />
-    <ClInclude Include="GuidFormatter.h" />
-    <ClInclude Include="HResultFormatter.h" />
-    <ClInclude Include="MenuExt.h" />
-    <ClInclude Include="ShellExtControl.h" />
-    <ClInclude Include="ShellExtensionVerifier.h" />
-    <ClInclude Include="ShellPathsHelpers.h" />
-    <ClInclude Include="TContextMenuHandler.h" />
-    <ClInclude Include="Logger.h" />
-    <ClInclude Include="TShellExtData.h" />
-    <ClInclude Include="..\common\ipcstructs.h" />
-    <ClInclude Include="..\common\TShellExtMenuConfig.h" />
-    <ClInclude Include="dllmain.h" />
-    <ClInclude Include="StdAfx.h" />
-    <ClInclude Include="..\common\targetver.h" />
-    <ClInclude Include="resource.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="chext.def" />
-    <None Include="DropMenuExt.rgs" />
-    <None Include="MenuExt.rgs" />
-    <None Include="ShellExtControl.rgs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Midl Include="chext.idl">
-      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateStublessProxies>
-      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">true</GenerateStublessProxies>
-      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\chext.tlb</TypeLibraryName>
-      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">.\chext.tlb</TypeLibraryName>
-      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">chext.h</HeaderFileName>
-      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">chext.h</HeaderFileName>
-      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">chext_i.c</InterfaceIdentifierFileName>
-      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">chext_i.c</InterfaceIdentifierFileName>
-      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateStublessProxies>
-      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">true</GenerateStublessProxies>
-      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\chext.tlb</TypeLibraryName>
-      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">.\chext.tlb</TypeLibraryName>
-      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">chext.h</HeaderFileName>
-      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">chext.h</HeaderFileName>
-      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">chext_i.c</InterfaceIdentifierFileName>
-      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">chext_i.c</InterfaceIdentifierFileName>
-      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateStublessProxies>
-      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">true</GenerateStublessProxies>
-      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\chext.tlb</TypeLibraryName>
-      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">.\chext.tlb</TypeLibraryName>
-      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">chext.h</HeaderFileName>
-      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">chext.h</HeaderFileName>
-      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">chext_i.c</InterfaceIdentifierFileName>
-      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">chext_i.c</InterfaceIdentifierFileName>
-      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateStublessProxies>
-      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">true</GenerateStublessProxies>
-      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\chext.tlb</TypeLibraryName>
-      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">.\chext.tlb</TypeLibraryName>
-      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">chext.h</HeaderFileName>
-      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">chext.h</HeaderFileName>
-      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">chext_i.c</InterfaceIdentifierFileName>
-      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">chext_i.c</InterfaceIdentifierFileName>
-    </Midl>
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="chext.rc" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\libchcore\libchcore.vc140.vcxproj">
-      <Project>{cbbf380b-7b16-4a1e-8194-758dad7d8011}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\liblogger\liblogger.vc140.vcxproj">
-      <Project>{df9957d4-3d95-4ac3-ad3f-dcbea058f79d}</Project>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Debug|Win32">
+      <Configuration>Testing Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Debug|x64">
+      <Configuration>Testing Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Release|Win32">
+      <Configuration>Testing Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Release|x64">
+      <Configuration>Testing Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>chext</ProjectName>
+    <ProjectGuid>{7CE8B0C5-8CD4-4551-ACBF-EC4749E15E69}</ProjectGuid>
+    <RootNamespace>chext</RootNamespace>
+    <Keyword>AtlProj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <UseOfAtl>false</UseOfAtl>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <UseOfAtl>false</UseOfAtl>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <UseOfAtl>false</UseOfAtl>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <UseOfAtl>false</UseOfAtl>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>11.0.51106.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <IgnoreImportLibrary>true</IgnoreImportLibrary>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <IgnoreImportLibrary>true</IgnoreImportLibrary>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <IgnoreImportLibrary>true</IgnoreImportLibrary>
+    <LinkIncremental>true</LinkIncremental>
+    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <RunCodeAnalysis>false</RunCodeAnalysis>
+    <TargetName>$(ProjectName)64</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <IgnoreImportLibrary>true</IgnoreImportLibrary>
+    <LinkIncremental>true</LinkIncremental>
+    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <RunCodeAnalysis>false</RunCodeAnalysis>
+    <TargetName>$(ProjectName)64</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <IgnoreImportLibrary>true</IgnoreImportLibrary>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <IgnoreImportLibrary>true</IgnoreImportLibrary>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <IgnoreImportLibrary>true</IgnoreImportLibrary>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)64</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <IgnoreImportLibrary>true</IgnoreImportLibrary>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)64</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Midl>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
+      <MinimalRebuild>false</MinimalRebuild>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <RegisterOutput>false</RegisterOutput>
+      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ModuleDefinitionFile>chext32.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+    <Midl>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
+      <MinimalRebuild>false</MinimalRebuild>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <RegisterOutput>false</RegisterOutput>
+      <AdditionalDependencies>comctl32.lib;gmock32d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ModuleDefinitionFile>chext32.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <EnablePREfast>false</EnablePREfast>
+      <SDLCheck>true</SDLCheck>
+      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <RegisterOutput>false</RegisterOutput>
+      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ModuleDefinitionFile>chext64.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <EnablePREfast>false</EnablePREfast>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <RegisterOutput>false</RegisterOutput>
+      <AdditionalDependencies>comctl32.lib;gmock64d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ModuleDefinitionFile>chext64.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Midl>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <Optimization>MinSpace</Optimization>
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <RegisterOutput>false</RegisterOutput>
+      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ModuleDefinitionFile>chext32.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+    <Midl>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <Optimization>MinSpace</Optimization>
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <RegisterOutput>false</RegisterOutput>
+      <AdditionalDependencies>comctl32.lib;gmock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ModuleDefinitionFile>chext32.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <Optimization>MinSpace</Optimization>
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <RegisterOutput>false</RegisterOutput>
+      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ModuleDefinitionFile>chext64.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <Optimization>MinSpace</Optimization>
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4714;4503</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <RegisterOutput>false</RegisterOutput>
+      <AdditionalDependencies>comctl32.lib;gmock64.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ModuleDefinitionFile>chext64.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <ClCompile Include="..\common\TShellExtIpcConfigDataConsumer.cpp" />
+    <ClCompile Include="DropMenuExt.cpp" />
+    <ClCompile Include="GuidFormatter.cpp" />
+    <ClCompile Include="HResultFormatter.cpp" />
+    <ClCompile Include="MenuExt.cpp" />
+    <ClCompile Include="ShellExtControl.cpp" />
+    <ClCompile Include="ShellExtensionVerifier.cpp" />
+    <ClCompile Include="ShellPathsHelpers.cpp" />
+    <ClCompile Include="TContextMenuHandler.cpp" />
+    <ClCompile Include="Logger.cpp" />
+    <ClCompile Include="TShellExtData.cpp" />
+    <ClCompile Include="..\common\TShellExtMenuConfig.cpp" />
+    <ClCompile Include="chext.cpp" />
+    <ClCompile Include="dllmain.cpp" />
+    <ClCompile Include="StdAfx.cpp">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Create</PrecompiledHeader>
+    </ClCompile>
+    <ClCompile Include="chext_i.c">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+      </PrecompiledHeader>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\common\TShellExtIpcConfigDataConsumer.h" />
+    <ClInclude Include="DropMenuExt.h" />
+    <ClInclude Include="GuidFormatter.h" />
+    <ClInclude Include="HResultFormatter.h" />
+    <ClInclude Include="MenuExt.h" />
+    <ClInclude Include="ShellExtControl.h" />
+    <ClInclude Include="ShellExtensionVerifier.h" />
+    <ClInclude Include="ShellPathsHelpers.h" />
+    <ClInclude Include="TContextMenuHandler.h" />
+    <ClInclude Include="Logger.h" />
+    <ClInclude Include="TShellExtData.h" />
+    <ClInclude Include="..\common\ipcstructs.h" />
+    <ClInclude Include="..\common\TShellExtMenuConfig.h" />
+    <ClInclude Include="dllmain.h" />
+    <ClInclude Include="StdAfx.h" />
+    <ClInclude Include="..\common\targetver.h" />
+    <ClInclude Include="resource.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="chext.def" />
+    <None Include="DropMenuExt.rgs" />
+    <None Include="MenuExt.rgs" />
+    <None Include="ShellExtControl.rgs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Midl Include="chext.idl">
+      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateStublessProxies>
+      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">true</GenerateStublessProxies>
+      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\chext.tlb</TypeLibraryName>
+      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">.\chext.tlb</TypeLibraryName>
+      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">chext.h</HeaderFileName>
+      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">chext.h</HeaderFileName>
+      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">chext_i.c</InterfaceIdentifierFileName>
+      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">chext_i.c</InterfaceIdentifierFileName>
+      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateStublessProxies>
+      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">true</GenerateStublessProxies>
+      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\chext.tlb</TypeLibraryName>
+      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">.\chext.tlb</TypeLibraryName>
+      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">chext.h</HeaderFileName>
+      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">chext.h</HeaderFileName>
+      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">chext_i.c</InterfaceIdentifierFileName>
+      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">chext_i.c</InterfaceIdentifierFileName>
+      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateStublessProxies>
+      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">true</GenerateStublessProxies>
+      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\chext.tlb</TypeLibraryName>
+      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">.\chext.tlb</TypeLibraryName>
+      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">chext.h</HeaderFileName>
+      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">chext.h</HeaderFileName>
+      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">chext_i.c</InterfaceIdentifierFileName>
+      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">chext_i.c</InterfaceIdentifierFileName>
+      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateStublessProxies>
+      <GenerateStublessProxies Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">true</GenerateStublessProxies>
+      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\chext.tlb</TypeLibraryName>
+      <TypeLibraryName Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">.\chext.tlb</TypeLibraryName>
+      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">chext.h</HeaderFileName>
+      <HeaderFileName Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">chext.h</HeaderFileName>
+      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">chext_i.c</InterfaceIdentifierFileName>
+      <InterfaceIdentifierFileName Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">chext_i.c</InterfaceIdentifierFileName>
+    </Midl>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="chext.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\libchcore\libchcore.vc140.vcxproj">
+      <Project>{cbbf380b-7b16-4a1e-8194-758dad7d8011}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\libchengine\libchengine.vcxproj">
+      <Project>{6840f785-917f-46ee-bd56-c296c7a5b9e9}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\liblogger\liblogger.vc140.vcxproj">
+      <Project>{df9957d4-3d95-4ac3-ad3f-dcbea058f79d}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\libstring\libstring.vcxproj">
+      <Project>{5bd38175-9f48-417d-8e5b-7093b1873ce5}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>
\ No newline at end of file
Index: src/common/TShellExtIpcConfigDataConsumer.cpp
===================================================================
diff -u -r306fbe693c70290af9de9a5779084a697de22d75 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/common/TShellExtIpcConfigDataConsumer.cpp	(.../TShellExtIpcConfigDataConsumer.cpp)	(revision 306fbe693c70290af9de9a5779084a697de22d75)
+++ src/common/TShellExtIpcConfigDataConsumer.cpp	(.../TShellExtIpcConfigDataConsumer.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,11 +19,11 @@
 #include "stdafx.h"
 #include "TShellExtIpcConfigDataConsumer.h"
 
-chcore::TString TShellExtIpcConfigDataConsumer::GetConfigData()
+string::TString TShellExtIpcConfigDataConsumer::GetConfigData()
 {
 	chcore::TSharedMemory shmConfigData;
 
-	chcore::TString strData;
+	string::TString strData;
 	shmConfigData.Open(L"CHShellExtConfig");
 	shmConfigData.Read(strData);
 
Index: src/common/TShellExtIpcConfigDataConsumer.h
===================================================================
diff -u -r306fbe693c70290af9de9a5779084a697de22d75 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/common/TShellExtIpcConfigDataConsumer.h	(.../TShellExtIpcConfigDataConsumer.h)	(revision 306fbe693c70290af9de9a5779084a697de22d75)
+++ src/common/TShellExtIpcConfigDataConsumer.h	(.../TShellExtIpcConfigDataConsumer.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -24,7 +24,7 @@
 class TShellExtIpcConfigDataConsumer
 {
 public:
-	static chcore::TString GetConfigData();
+	static string::TString GetConfigData();
 };
 
 #endif
Index: src/common/TShellExtIpcConfigDataProvider.cpp
===================================================================
diff -u -r306fbe693c70290af9de9a5779084a697de22d75 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/common/TShellExtIpcConfigDataProvider.cpp	(.../TShellExtIpcConfigDataProvider.cpp)	(revision 306fbe693c70290af9de9a5779084a697de22d75)
+++ src/common/TShellExtIpcConfigDataProvider.cpp	(.../TShellExtIpcConfigDataProvider.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,7 +19,7 @@
 #include "stdafx.h"
 #include "TShellExtIpcConfigDataProvider.h"
 
-void TShellExtIpcConfigDataProvider::SetConfigData(const chcore::TString& strConfigData)
+void TShellExtIpcConfigDataProvider::SetConfigData(const string::TString& strConfigData)
 {
 	m_shmConfigData.Close();
 	m_shmConfigData.Create(L"CHShellExtConfig", strConfigData);
Index: src/common/TShellExtIpcConfigDataProvider.h
===================================================================
diff -u -r306fbe693c70290af9de9a5779084a697de22d75 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/common/TShellExtIpcConfigDataProvider.h	(.../TShellExtIpcConfigDataProvider.h)	(revision 306fbe693c70290af9de9a5779084a697de22d75)
+++ src/common/TShellExtIpcConfigDataProvider.h	(.../TShellExtIpcConfigDataProvider.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -24,7 +24,7 @@
 class TShellExtIpcConfigDataProvider
 {
 public:
-	void SetConfigData(const chcore::TString& pszConfigData);
+	void SetConfigData(const string::TString& pszConfigData);
 
 private:
 	chcore::TSharedMemory m_shmConfigData;
Index: src/common/TShellExtMenuConfig.cpp
===================================================================
diff -u -rd9527df01ee91b35d9a5fdccb80ded25a9c8265f -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/common/TShellExtMenuConfig.cpp	(.../TShellExtMenuConfig.cpp)	(revision d9527df01ee91b35d9a5fdccb80ded25a9c8265f)
+++ src/common/TShellExtMenuConfig.cpp	(.../TShellExtMenuConfig.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -22,12 +22,16 @@
 // ============================================================================
 #include "stdafx.h"
 #include "TShellExtMenuConfig.h"
-#include "../libchcore/TConfig.h"
-#include "../libchcore/TConfigArray.h"
+#include "../libchengine/TConfig.h"
 #include <memory>
 #include <boost/assert.hpp>
 #include <boost/lexical_cast.hpp>
+#include "../libchengine/TConfig.h"
+#include "../libchengine/TConfigArray.h"
 
+using namespace chcore;
+using namespace chengine;
+
 // helper method for concatenating strings
 namespace
 {
@@ -51,17 +55,17 @@
 
 TOperationTypeInfo::TOperationTypeInfo() :
 	m_eOperationTypeSource(eOpType_Autodetect),
-	m_eDefaultOperationType(chcore::eOperation_None)
+	m_eDefaultOperationType(eOperation_None)
 {
 }
 
-TOperationTypeInfo::TOperationTypeInfo(TOperationTypeInfo::EOperationTypeSource eType, chcore::EOperationType eDefaultOperationType) :
+TOperationTypeInfo::TOperationTypeInfo(TOperationTypeInfo::EOperationTypeSource eType, EOperationType eDefaultOperationType) :
 	m_eOperationTypeSource(eType),
 	m_eDefaultOperationType(eDefaultOperationType)
 {
 }
 
-void TOperationTypeInfo::SetOperationTypeInfo(TOperationTypeInfo::EOperationTypeSource eType, chcore::EOperationType eDefaultOperationType)
+void TOperationTypeInfo::SetOperationTypeInfo(TOperationTypeInfo::EOperationTypeSource eType, EOperationType eDefaultOperationType)
 {
 	m_eOperationTypeSource = eType;
 	m_eDefaultOperationType = eDefaultOperationType;
@@ -72,25 +76,25 @@
 	return m_eOperationTypeSource;
 }
 
-chcore::EOperationType TOperationTypeInfo::GetDefaultOperationType() const
+EOperationType TOperationTypeInfo::GetDefaultOperationType() const
 {
 	return m_eDefaultOperationType;
 }
 
 void TOperationTypeInfo::Clear()
 {
 	m_eOperationTypeSource = eOpType_Autodetect;
-	m_eDefaultOperationType = chcore::eOperation_None;
+	m_eDefaultOperationType = eOperation_None;
 }
 
-void TOperationTypeInfo::StoreInConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName) const
+void TOperationTypeInfo::StoreInConfig(TConfig& rConfig, PCTSTR pszNodeName) const
 {
 	std::wstring wstrBuffer;
 	SetConfigValue(rConfig, Concat(wstrBuffer, pszNodeName, _T("OperationTypeSource")), m_eOperationTypeSource);
 	SetConfigValue(rConfig, Concat(wstrBuffer, pszNodeName, _T("DefaultOperationType")), m_eDefaultOperationType);
 }
 
-bool TOperationTypeInfo::ReadFromConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName)
+bool TOperationTypeInfo::ReadFromConfig(TConfig& rConfig, PCTSTR pszNodeName)
 {
 	std::wstring wstrBuffer;
 	if(!GetConfigValue(rConfig, Concat(wstrBuffer, pszNodeName, _T("OperationTypeSource")), *(int*)&m_eOperationTypeSource))
@@ -126,13 +130,13 @@
 	m_eSrcPathsSource = eSrcType_InitializeAuto;
 }
 
-void TSourcePathsInfo::StoreInConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName) const
+void TSourcePathsInfo::StoreInConfig(TConfig& rConfig, PCTSTR pszNodeName) const
 {
 	std::wstring wstrBuffer;
 	SetConfigValue(rConfig, Concat(wstrBuffer, pszNodeName, _T("SrcPathsSource")), m_eSrcPathsSource);
 }
 
-bool TSourcePathsInfo::ReadFromConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName)
+bool TSourcePathsInfo::ReadFromConfig(TConfig& rConfig, PCTSTR pszNodeName)
 {
 	std::wstring wstrBuffer;
 	return GetConfigValue(rConfig, Concat(wstrBuffer, pszNodeName, _T("SrcPathsSource")), *(int*)&m_eSrcPathsSource);
@@ -176,14 +180,14 @@
 	m_pathDestination.Clear();
 }
 
-void TDestinationPathInfo::StoreInConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName) const
+void TDestinationPathInfo::StoreInConfig(TConfig& rConfig, PCTSTR pszNodeName) const
 {
 	std::wstring wstrBuffer;
 	SetConfigValue(rConfig, Concat(wstrBuffer, pszNodeName, _T("DstPathSource")), m_eDstPathSource);
 	SetConfigValue(rConfig, Concat(wstrBuffer, pszNodeName, _T("DefaultDestinationPath")), m_pathDestination);
 }
 
-bool TDestinationPathInfo::ReadFromConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName)
+bool TDestinationPathInfo::ReadFromConfig(TConfig& rConfig, PCTSTR pszNodeName)
 {
 	std::wstring wstrBuffer;
 	if(!GetConfigValue(rConfig, Concat(wstrBuffer, pszNodeName, _T("DstPathSource")), *(int*)&m_eDstPathSource))
@@ -200,11 +204,11 @@
 	m_tDestinationPath(),
 	m_tSourcePaths(),
 	m_bSpecialOperation(false),
-	m_eDefaultItemHint(chcore::eOperation_None)
+	m_eDefaultItemHint(eOperation_None)
 {
 }
 
-TShellMenuItem::TShellMenuItem(const chcore::TString& wstrName, const chcore::TString& wstrItemTip, const TOperationTypeInfo& rOperationType, const TSourcePathsInfo& rSourcePaths, const TDestinationPathInfo& rDestinationPath, bool bSpecialOperation, chcore::EOperationType eDefaultItemHint) :
+TShellMenuItem::TShellMenuItem(const string::TString& wstrName, const string::TString& wstrItemTip, const TOperationTypeInfo& rOperationType, const TSourcePathsInfo& rSourcePaths, const TDestinationPathInfo& rDestinationPath, bool bSpecialOperation, EOperationType eDefaultItemHint) :
 	m_eItemType(eStandardItem),
 	m_strName(wstrName),
 	m_strItemTip(wstrItemTip),
@@ -216,15 +220,15 @@
 {
 }
 
-TShellMenuItem::TShellMenuItem(const chcore::TString& wstrName, const chcore::TString& wstrItemTip) :
+TShellMenuItem::TShellMenuItem(const string::TString& wstrName, const string::TString& wstrItemTip) :
 	m_eItemType(eGroupItem),
 	m_strName(wstrName),
 	m_strItemTip(wstrItemTip),
 	m_tOperationType(),
 	m_tDestinationPath(),
 	m_tSourcePaths(),
 	m_bSpecialOperation(false),
-	m_eDefaultItemHint(chcore::eOperation_None)
+	m_eDefaultItemHint(eOperation_None)
 {
 }
 
@@ -244,25 +248,25 @@
 	m_tDestinationPath.Clear();
 
 	m_bSpecialOperation = false;
-	m_eDefaultItemHint = chcore::eOperation_None;
+	m_eDefaultItemHint = eOperation_None;
 
 	m_vChildItems.clear();
 }
 
-const chcore::TString& TShellMenuItem::GetName() const
+const string::TString& TShellMenuItem::GetName() const
 {
 	return m_strName;
 }
 
-const chcore::TString& TShellMenuItem::GetLocalName(bool bUseFallback) const
+const string::TString& TShellMenuItem::GetLocalName(bool bUseFallback) const
 {
 	if(bUseFallback && m_strLocalName.IsEmpty())
 		return m_strName;
 
 	return m_strLocalName;
 }
 
-void TShellMenuItem::SetLocalName(const chcore::TString& strLocalName)
+void TShellMenuItem::SetLocalName(const string::TString& strLocalName)
 {
 	m_strLocalName = strLocalName;
 }
@@ -274,7 +278,7 @@
 	m_eItemType = eSeparatorItem;
 }
 
-void TShellMenuItem::InitStandardItem(const chcore::TString& wstrName, const chcore::TString& wstrItemTip, const TOperationTypeInfo& rOperationType, const TSourcePathsInfo& rSourcePaths, const TDestinationPathInfo& rDestinationPath, bool bSpecialOperation, chcore::EOperationType eDefaultItemHint)
+void TShellMenuItem::InitStandardItem(const string::TString& wstrName, const string::TString& wstrItemTip, const TOperationTypeInfo& rOperationType, const TSourcePathsInfo& rSourcePaths, const TDestinationPathInfo& rDestinationPath, bool bSpecialOperation, EOperationType eDefaultItemHint)
 {
 	Clear();
 
@@ -290,7 +294,7 @@
 	m_eDefaultItemHint = eDefaultItemHint;
 }
 
-void TShellMenuItem::InitGroupItem(const chcore::TString& wstrName, const chcore::TString& wstrItemTip)
+void TShellMenuItem::InitGroupItem(const string::TString& wstrName, const string::TString& wstrItemTip)
 {
 	Clear();
 
@@ -344,7 +348,7 @@
 	m_vChildItems.clear();
 }
 
-void TShellMenuItem::StoreInConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName) const
+void TShellMenuItem::StoreInConfig(TConfig& rConfig, PCTSTR pszNodeName) const
 {
 	std::wstring wstrBuffer;
 
@@ -360,7 +364,7 @@
 
 			for(const TShellMenuItemPtr& rItem : m_vChildItems)
 			{
-				chcore::TConfig cfgItem;
+				TConfig cfgItem;
 				rItem->StoreInConfig(cfgItem, _T(""));
 				rConfig.AddSubConfig(Concat(wstrBuffer, pszNodeName, _T("Subitems.Subitem")), cfgItem);
 			}
@@ -385,7 +389,7 @@
 	}
 }
 
-bool TShellMenuItem::ReadFromConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName)
+bool TShellMenuItem::ReadFromConfig(TConfig& rConfig, PCTSTR pszNodeName)
 {
 	Clear();
 
@@ -403,12 +407,12 @@
 			if(!GetConfigValue(rConfig, Concat(wstrBuffer, pszNodeName, _T("ItemDescription")), m_strItemTip))
 				return false;
 
-			chcore::TConfigArray vCfgs;
+			TConfigArray vCfgs;
 			if(rConfig.ExtractMultiSubConfigs(Concat(wstrBuffer, pszNodeName, _T("Subitems.Subitem")), vCfgs))
 			{
 				for(size_t stIndex = 0; stIndex < vCfgs.GetCount(); ++stIndex)
 				{
-					chcore::TConfig& rCfg = vCfgs.GetAt(stIndex);
+					TConfig& rCfg = vCfgs.GetAt(stIndex);
 
 					TShellMenuItemPtr spItem(std::make_shared<TShellMenuItem>());
 					spItem->ReadFromConfig(rCfg, nullptr);
@@ -452,7 +456,7 @@
 TShellExtMenuConfig::TShellExtMenuConfig() :
 	m_spDragAndDropRoot(std::make_shared<TShellMenuItem>(_T(""), _T(""))),
 	m_spNormalRoot(std::make_shared<TShellMenuItem>(_T(""), _T(""))),
-	m_spFmtSize(std::make_shared<chcore::TSizeFormatter>()),
+	m_spFmtSize(std::make_shared<TSizeFormatter>()),
 	m_bInterceptDragAndDrop(false),
 	m_bInterceptKeyboardActions(false),
 	m_bInterceptCtxMenuActions(false),
@@ -485,12 +489,12 @@
 	return m_spNormalRoot;
 }
 
-chcore::TSizeFormatterPtr TShellExtMenuConfig::GetFormatter() const
+TSizeFormatterPtr TShellExtMenuConfig::GetFormatter() const
 {
 	return m_spFmtSize;
 }
 
-void TShellExtMenuConfig::StoreInConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName) const
+void TShellExtMenuConfig::StoreInConfig(TConfig& rConfig, PCTSTR pszNodeName) const
 {
 	std::wstring strBuffer;
 	SetConfigValue(rConfig, Concat(strBuffer, pszNodeName, _T("InterceptDragAndDrop")), m_bInterceptDragAndDrop);
@@ -505,7 +509,7 @@
 	m_spNormalRoot->StoreInConfig(rConfig, Concat(strBuffer, pszNodeName, _T("NormalRootItem")));
 }
 
-bool TShellExtMenuConfig::ReadFromConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName)
+bool TShellExtMenuConfig::ReadFromConfig(TConfig& rConfig, PCTSTR pszNodeName)
 {
 	Clear();
 
Index: src/common/TShellExtMenuConfig.h
===================================================================
diff -u -ra4635addad389b9e117679437a3e1b64a739ea96 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/common/TShellExtMenuConfig.h	(.../TShellExtMenuConfig.h)	(revision a4635addad389b9e117679437a3e1b64a739ea96)
+++ src/common/TShellExtMenuConfig.h	(.../TShellExtMenuConfig.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -23,13 +23,11 @@
 #ifndef __TSHELLEXTMENUCONFIG_H__
 #define __TSHELLEXTMENUCONFIG_H__
 
-#include "../libchcore/EOperationTypes.h"
+#include "../libchengine/EOperationTypes.h"
 #include "../libchcore/TPath.h"
 #include <memory>
-#include "../libchcore/TSizeFormatter.h"
+#include "../libchengine/TSizeFormatter.h"
 
-namespace chcore { class TConfig; }
-
 class TShellMenuItem;
 
 typedef std::shared_ptr<TShellMenuItem> TShellMenuItemPtr;
@@ -46,21 +44,21 @@
 
 public:
 	TOperationTypeInfo();
-	TOperationTypeInfo(EOperationTypeSource eType, chcore::EOperationType eDefaultOperationType);
+	TOperationTypeInfo(EOperationTypeSource eType, chengine::EOperationType eDefaultOperationType);
 
-	void SetOperationTypeInfo(EOperationTypeSource eType, chcore::EOperationType eDefaultOperationType);
+	void SetOperationTypeInfo(EOperationTypeSource eType, chengine::EOperationType eDefaultOperationType);
 
 	EOperationTypeSource GetOperationTypeSource() const;
-	chcore::EOperationType GetDefaultOperationType() const;
+	chengine::EOperationType GetDefaultOperationType() const;
 
 	void Clear();
 
-	void StoreInConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName) const;
-	bool ReadFromConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName);
+	void StoreInConfig(chengine::TConfig& rConfig, PCTSTR pszNodeName) const;
+	bool ReadFromConfig(chengine::TConfig& rConfig, PCTSTR pszNodeName);
 
 private:
 	EOperationTypeSource m_eOperationTypeSource;
-	chcore::EOperationType m_eDefaultOperationType;	// default operation type
+	chengine::EOperationType m_eDefaultOperationType;	// default operation type
 };
 
 // specifies information about source paths
@@ -84,8 +82,8 @@
 
 	void Clear();
 
-	void StoreInConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName) const;
-	bool ReadFromConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName);
+	void StoreInConfig(chengine::TConfig& rConfig, PCTSTR pszNodeName) const;
+	bool ReadFromConfig(chengine::TConfig& rConfig, PCTSTR pszNodeName);
 
 private:
 	ESrcPathsSource m_eSrcPathsSource;
@@ -115,8 +113,8 @@
 
 	void Clear();
 
-	void StoreInConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName) const;
-	bool ReadFromConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName);
+	void StoreInConfig(chengine::TConfig& rConfig, PCTSTR pszNodeName) const;
+	bool ReadFromConfig(chengine::TConfig& rConfig, PCTSTR pszNodeName);
 
 private:
 	EDstPathsSource m_eDstPathSource;
@@ -136,38 +134,38 @@
 
 public:
 	TShellMenuItem();
-	TShellMenuItem(const chcore::TString& wstrName, const chcore::TString& wstrItemTip, const TOperationTypeInfo& rOperationType, const TSourcePathsInfo& rSourcePaths, const TDestinationPathInfo& rDestinationPath,
-		bool bSpecialOperation, chcore::EOperationType eDefaultItemHint = chcore::eOperation_None);
-	TShellMenuItem(const chcore::TString& wstrName, const chcore::TString& wstrItemTip);
+	TShellMenuItem(const string::TString& wstrName, const string::TString& wstrItemTip, const TOperationTypeInfo& rOperationType, const TSourcePathsInfo& rSourcePaths, const TDestinationPathInfo& rDestinationPath,
+		bool bSpecialOperation, chengine::EOperationType eDefaultItemHint = chengine::eOperation_None);
+	TShellMenuItem(const string::TString& wstrName, const string::TString& wstrItemTip);
 
 	~TShellMenuItem();
 
 	// initializer for separator item
 	void InitSeparatorItem();
 	
 	// initializer for standard item
-	void InitStandardItem(const chcore::TString& wstrName, const chcore::TString& wstrItemTip, const TOperationTypeInfo& rOperationType, const TSourcePathsInfo& rSourcePaths, const TDestinationPathInfo& rDestinationPath,
-		bool bSpecialOperation, chcore::EOperationType eDefaultItemHint = chcore::eOperation_None);
+	void InitStandardItem(const string::TString& wstrName, const string::TString& wstrItemTip, const TOperationTypeInfo& rOperationType, const TSourcePathsInfo& rSourcePaths, const TDestinationPathInfo& rDestinationPath,
+		bool bSpecialOperation, chengine::EOperationType eDefaultItemHint = chengine::eOperation_None);
 
 	// initializer for group item
-	void InitGroupItem(const chcore::TString& wstrName, const chcore::TString& wstrItemTip);
+	void InitGroupItem(const string::TString& wstrName, const string::TString& wstrItemTip);
 
 	// clears everything
 	void Clear();
 
 	// retrieving attributes - common ones
-	const chcore::TString& GetName() const;
-	const chcore::TString& GetItemTip() const { return m_strItemTip; }
+	const string::TString& GetName() const;
+	const string::TString& GetItemTip() const { return m_strItemTip; }
 
-	const chcore::TString& GetLocalName(bool bUseFallback = true) const;
-	void SetLocalName(const chcore::TString& strLocalName);
+	const string::TString& GetLocalName(bool bUseFallback = true) const;
+	void SetLocalName(const string::TString& strLocalName);
 
 	// retrieving attributes - standard items only
 	const TOperationTypeInfo& GetOperationTypeInfo() const { return m_tOperationType; }
 	const TDestinationPathInfo& GetDestinationPathInfo() const { return m_tDestinationPath; }
 	const TSourcePathsInfo& GetSourcePathsInfo() const { return m_tSourcePaths; }
 
-	chcore::EOperationType GetDefaultItemHint() const { return m_eDefaultItemHint; }
+	chengine::EOperationType GetDefaultItemHint() const { return m_eDefaultItemHint; }
 
 	bool IsGroupItem() const { return m_eItemType == eGroupItem; }
 	bool IsSeparator() const { return m_eItemType == eSeparatorItem; }
@@ -193,15 +191,15 @@
 	void RemoveAllChildren();
 
 	// serialization
-	void StoreInConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName) const;
-	bool ReadFromConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName);
+	void StoreInConfig(chengine::TConfig& rConfig, PCTSTR pszNodeName) const;
+	bool ReadFromConfig(chengine::TConfig& rConfig, PCTSTR pszNodeName);
 
 private:
 	EItemType m_eItemType;
 
-	chcore::TString m_strName;
-	chcore::TString m_strLocalName;		// locally updated name; not serialized
-	chcore::TString m_strItemTip;
+	string::TString m_strName;
+	string::TString m_strLocalName;		// locally updated name; not serialized
+	string::TString m_strItemTip;
 
 	// where to get the operation type from? (specified here / autodetect (with fallback specified here))
 	TOperationTypeInfo m_tOperationType;
@@ -216,7 +214,7 @@
 	bool m_bSpecialOperation;
 
 	// hints that this item is to be made default (bold), when detected operation type is equal to this operation type
-	chcore::EOperationType m_eDefaultItemHint;
+	chengine::EOperationType m_eDefaultItemHint;
 
 	std::vector<TShellMenuItemPtr> m_vChildItems;
 };
@@ -234,7 +232,7 @@
 	TShellMenuItemPtr GetNormalRoot();
 
 	// formatter
-	chcore::TSizeFormatterPtr GetFormatter() const;
+	chengine::TSizeFormatterPtr GetFormatter() const;
 
 	// options
 	void SetInterceptDragAndDrop(bool bEnable) { m_bInterceptDragAndDrop = bEnable; }
@@ -253,14 +251,14 @@
 	bool GetShowFreeSpace() const { return m_bShowFreeSpace; }
 
 	// serialize/unserialize
-	void StoreInConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName) const;
-	bool ReadFromConfig(chcore::TConfig& rConfig, PCTSTR pszNodeName);
+	void StoreInConfig(chengine::TConfig& rConfig, PCTSTR pszNodeName) const;
+	bool ReadFromConfig(chengine::TConfig& rConfig, PCTSTR pszNodeName);
 
 private:
 	TShellMenuItemPtr m_spDragAndDropRoot;		// root under which there are commands placed
 	TShellMenuItemPtr m_spNormalRoot;		// root under which there are commands placed
 
-	chcore::TSizeFormatterPtr m_spFmtSize;
+	chengine::TSizeFormatterPtr m_spFmtSize;
 
 	bool m_bInterceptDragAndDrop = false;
 	bool m_bInterceptKeyboardActions = false;
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISerializerRowReader.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchcore/TPath.cpp
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/TPath.cpp	(.../TPath.cpp)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/libchcore/TPath.cpp	(.../TPath.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -26,8 +26,10 @@
 #include "TCoreException.h"
 #include "ErrorCodes.h"
 #include "TPathContainer.h"
-#include "TStringArray.h"
+#include "../libstring/TStringArray.h"
 
+using namespace string;
+
 namespace chcore
 {
 #define DEFAULT_PATH_SEPARATOR _T("\\")
Index: src/libchcore/TPath.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/TPath.h	(.../TPath.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/libchcore/TPath.h	(.../TPath.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,11 +19,11 @@
 #ifndef __TPATH_H__
 #define __TPATH_H__
 
-#include "TString.h"
+#include "../libstring/TString.h"
+#include "libchcore.h"
 
 namespace chcore
 {
-	class TSmartPath;
 	class TPathContainer;
 
 	class LIBCHCORE_API TSmartPath
@@ -46,10 +46,10 @@
 
 		// from/to string conversions
 		void FromString(const wchar_t* pszPath);
-		void FromString(const TString& strPath);
+		void FromString(const string::TString& strPath);
 
 		const wchar_t* ToString() const;
-		TString ToWString() const;
+		string::TString ToWString() const;
 
 		// other operations
 		void Clear() throw();
@@ -119,11 +119,11 @@
 		static bool IsSeparator(wchar_t wchSeparator);
 
 	protected:
-		TString m_strPath;
+		string::TString m_strPath;
 	};
 
 	LIBCHCORE_API TSmartPath PathFromString(const wchar_t* pszPath);
-	LIBCHCORE_API TSmartPath PathFromWString(const TString& strPath);
+	LIBCHCORE_API TSmartPath PathFromWString(const string::TString& strPath);
 
 	inline std::wostream& operator<<(std::wostream& os, const TSmartPath& rPath)
 	{
Index: src/libchcore/TPathContainer.cpp
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/TPathContainer.cpp	(.../TPathContainer.cpp)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/libchcore/TPathContainer.cpp	(.../TPathContainer.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -20,7 +20,7 @@
 #include "TPathContainer.h"
 #include "TCoreException.h"
 #include "ErrorCodes.h"
-#include "TStringArray.h"
+#include "../libstring/TStringArray.h"
 
 namespace chcore
 {
@@ -159,34 +159,4 @@
 	{
 		return m_vPaths.empty();
 	}
-
-	void TPathContainer::StoreInConfig(TConfig& rConfig, PCTSTR pszPropName) const
-	{
-		TStringArray vPaths;
-
-		// store as vector of strings (ineffective; should be done better)
-		for(const TSmartPath& spPath : m_vPaths)
-		{
-			vPaths.Add(spPath.ToWString());
-		}
-
-		rConfig.SetValue(pszPropName, vPaths);
-	}
-
-	bool TPathContainer::ReadFromConfig(const TConfig& rConfig, PCTSTR pszPropName)
-	{
-		m_vPaths.clear();
-
-		TStringArray vPaths;
-		if (rConfig.GetValue(pszPropName, vPaths))
-		{
-			for (size_t stIndex = 0; stIndex < vPaths.GetCount(); ++stIndex)
-			{
-				m_vPaths.push_back(PathFromWString(vPaths.GetAt(stIndex)));
-			}
-			return true;
-		}
-		else
-			return false;
-	}
 }
Index: src/libchcore/TPathContainer.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/TPathContainer.h	(.../TPathContainer.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/libchcore/TPathContainer.h	(.../TPathContainer.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -20,7 +20,6 @@
 #define __TPATHCONTAINER_H__
 
 #include "TPath.h"
-#include "TConfig.h"
 
 namespace chcore
 {
@@ -44,9 +43,6 @@
 		size_t GetCount() const;
 		bool IsEmpty() const;
 
-		void StoreInConfig(TConfig& rConfig, PCTSTR pszPropName) const;
-		bool ReadFromConfig(const TConfig& rConfig, PCTSTR pszPropName);
-
 	private:
 #pragma warning(push)
 #pragma warning(disable: 4251)
@@ -55,6 +51,4 @@
 	};
 }
 
-CONFIG_MEMBER_SERIALIZATION(TPathContainer)
-
 #endif
Index: src/libchcore/TSharedMemory.cpp
===================================================================
diff -u -rd9527df01ee91b35d9a5fdccb80ded25a9c8265f -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/TSharedMemory.cpp	(.../TSharedMemory.cpp)	(revision d9527df01ee91b35d9a5fdccb80ded25a9c8265f)
+++ src/libchcore/TSharedMemory.cpp	(.../TSharedMemory.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -27,6 +27,8 @@
 #include "TCoreException.h"
 #include "TIpcMutexLock.h"
 
+using namespace string;
+
 namespace chcore
 {
 	#define MUTEX_SUFFIX _T("_Mutex")
Index: src/libchcore/TSharedMemory.h
===================================================================
diff -u -rb26ced3298e3e7e51d91f3ac70b56746786da83b -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/TSharedMemory.h	(.../TSharedMemory.h)	(revision b26ced3298e3e7e51d91f3ac70b56746786da83b)
+++ src/libchcore/TSharedMemory.h	(.../TSharedMemory.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -23,7 +23,7 @@
 #ifndef __TSHAREDMEMORY_H__
 #define __TSHAREDMEMORY_H__
 
-#include "TString.h"
+#include "../libstring/TString.h"
 #include "TIpcMutex.h"
 
 namespace chcore
@@ -41,14 +41,14 @@
 		TSharedMemory& operator=(const TSharedMemory&) = delete;
 
 		void Create(const wchar_t* pszName, shm_size_t stSize);
-		void Create(const wchar_t* pszName, const TString& wstrData);
+		void Create(const wchar_t* pszName, const string::TString& wstrData);
 		void Create(const wchar_t* pszName, const BYTE* pbyData, shm_size_t stSize);
 
 		void Open(const wchar_t* pszName);
 		void Close() throw();
 
-		void Read(TString& wstrData) const;
-		void Write(const TString& wstrData);
+		void Read(string::TString& wstrData) const;
+		void Write(const string::TString& wstrData);
 		void Write(const BYTE* pbyData, shm_size_t stSize);
 
 		// below are the unsafe functions (i.e. not protected with mutex)
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TStringException.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchcore/TWin32ErrorFormatter.cpp
===================================================================
diff -u -ra4635addad389b9e117679437a3e1b64a739ea96 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/TWin32ErrorFormatter.cpp	(.../TWin32ErrorFormatter.cpp)	(revision a4635addad389b9e117679437a3e1b64a739ea96)
+++ src/libchcore/TWin32ErrorFormatter.cpp	(.../TWin32ErrorFormatter.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -21,6 +21,8 @@
 #include <algorithm>
 #include <atltrace.h>
 
+using namespace string;
+
 namespace chcore
 {
 	TString TWin32ErrorFormatter::FormatWin32ErrorCode(DWORD dwErrorCode, bool bUseNumberFallback)
Index: src/libchcore/TWin32ErrorFormatter.h
===================================================================
diff -u -rd9527df01ee91b35d9a5fdccb80ded25a9c8265f -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/TWin32ErrorFormatter.h	(.../TWin32ErrorFormatter.h)	(revision d9527df01ee91b35d9a5fdccb80ded25a9c8265f)
+++ src/libchcore/TWin32ErrorFormatter.h	(.../TWin32ErrorFormatter.h)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -19,18 +19,19 @@
 #ifndef __TWIN32ERRORFORMATTER_H__
 #define __TWIN32ERRORFORMATTER_H__
 
-#include "TString.h"
+#include "../libstring/TString.h"
+#include "libchcore.h"
 
 namespace chcore
 {
 	class LIBCHCORE_API TWin32ErrorFormatter
 	{
 	public:
-		static TString FormatWin32ErrorCode(DWORD dwErrorCode, bool bUseNumberFallback);
-		static TString FormatWin32ErrorCodeWithFallback(DWORD dwErrorCode, const wchar_t* pszModuleName, bool bUseNumberFallback);
+		static string::TString FormatWin32ErrorCode(DWORD dwErrorCode, bool bUseNumberFallback);
+		static string::TString FormatWin32ErrorCodeWithFallback(DWORD dwErrorCode, const wchar_t* pszModuleName, bool bUseNumberFallback);
 
 	private:
-		static TString FormatWin32ErrorCodeWithModule(DWORD dwErrorCode, HMODULE hModule, bool bUseNumberFallback);
+		static string::TString FormatWin32ErrorCodeWithModule(DWORD dwErrorCode, HMODULE hModule, bool bUseNumberFallback);
 	};
 }
 
Index: src/libchcore/Tests/TestsTSmartPath.cpp
===================================================================
diff -u -ra4635addad389b9e117679437a3e1b64a739ea96 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/Tests/TestsTSmartPath.cpp	(.../TestsTSmartPath.cpp)	(revision a4635addad389b9e117679437a3e1b64a739ea96)
+++ src/libchcore/Tests/TestsTSmartPath.cpp	(.../TestsTSmartPath.cpp)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -6,6 +6,7 @@
 #include "../TPathContainer.h"
 
 using namespace chcore;
+using namespace string;
 
 TEST(TSmartPathTests, EmptyPathToString)
 {
Index: src/libchcore/libchcore.vc140.vcxproj
===================================================================
diff -u -re98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/libchcore.vc140.vcxproj	(.../libchcore.vc140.vcxproj)	(revision e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8)
+++ src/libchcore/libchcore.vc140.vcxproj	(.../libchcore.vc140.vcxproj)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -471,152 +471,29 @@
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClInclude Include="CommonDataTypes.h" />
-    <ClInclude Include="ConfigNode.h" />
-    <ClInclude Include="ConfigNodeContainer.h" />
-    <ClInclude Include="EFeedbackResult.h" />
-    <ClInclude Include="EFileError.h" />
-    <ClInclude Include="EngineConstants.h" />
-    <ClInclude Include="EOperationTypes.h" />
-    <ClInclude Include="ESubTaskTypes.h" />
-    <ClInclude Include="ETaskCurrentState.h" />
     <ClInclude Include="GTestMacros.h" />
-    <ClInclude Include="IColumnsDefinition.h" />
-    <ClInclude Include="IFeedbackHandler.h" />
-    <ClInclude Include="IFeedbackHandlerFactory.h" />
-    <ClInclude Include="IFilesystem.h" />
-    <ClInclude Include="IFilesystemFile.h" />
-    <ClInclude Include="IFilesystemFind.h" />
-    <ClInclude Include="IRunningTimeControl.h" />
-    <ClInclude Include="ISerializer.h" />
-    <ClInclude Include="ISerializerContainer.h" />
-    <ClInclude Include="ISerializerFactory.h" />
-    <ClInclude Include="ISerializerRowData.h" />
-    <ClInclude Include="ISerializerRowReader.h" />
-    <ClInclude Include="ISQLiteSerializerSchema.h" />
     <ClInclude Include="ITimestampProvider.h" />
     <ClInclude Include="MathFunctions.h" />
-    <ClInclude Include="OverlappedCallbacks.h" />
     <ClInclude Include="resource.h" />
     <ClInclude Include="RoundingFunctions.h" />
-    <ClInclude Include="SerializerDataTypes.h" />
     <ClInclude Include="StreamingHelpers.h" />
-    <ClInclude Include="TaskID.h" />
     <ClInclude Include="TBaseException.h" />
-    <ClInclude Include="TBasePathDataFwd.h" />
-    <ClInclude Include="TConfigArray.h" />
-    <ClInclude Include="TConfigNotifier.h" />
-    <ClInclude Include="TCoreEngine.h" />
     <ClInclude Include="TCoreWin32Exception.h" />
-    <ClInclude Include="TDestinationPathProvider.h" />
-    <ClInclude Include="TEvent.h" />
-    <ClInclude Include="TEventCounter.h" />
-    <ClInclude Include="TEventGuard.h" />
-    <ClInclude Include="TFakeFileSerializer.h" />
-    <ClInclude Include="TFeedbackHandlerBase.h" />
-    <ClInclude Include="TFeedbackHandlerWrapper.h" />
-    <ClInclude Include="TFeedbackResult.h" />
-    <ClInclude Include="TFilesystemFeedbackWrapper.h" />
-    <ClInclude Include="TFileInfoFwd.h" />
-    <ClInclude Include="TFilesystemFileFeedbackWrapper.h" />
     <ClInclude Include="TFileTime.h" />
-    <ClInclude Include="TFileException.h" />
-    <ClInclude Include="TOverlappedThreadPool.h" />
-    <ClInclude Include="TSharedCount.h" />
-    <ClInclude Include="TSharedCountMT.h" />
-    <ClInclude Include="TThreadedQueueRunner.h" />
     <ClInclude Include="TIpcMutex.h" />
     <ClInclude Include="TIpcMutexLock.h" />
-    <ClInclude Include="TLocalFilesystemFile.h" />
-    <ClInclude Include="TLocalFilesystemFind.h" />
-    <ClInclude Include="TModificationTracker.h" />
-    <ClInclude Include="TObsoleteFiles.h" />
-    <ClInclude Include="TOrderedBufferQueue.h" />
-    <ClInclude Include="TOverlappedMemoryPool.h" />
-    <ClInclude Include="TOverlappedProcessorRange.h" />
-    <ClInclude Include="TOverlappedReader.h" />
-    <ClInclude Include="TOverlappedReaderFB.h" />
-    <ClInclude Include="TOverlappedReaderWriterFB.h" />
-    <ClInclude Include="TOverlappedWriter.h" />
-    <ClInclude Include="TOverlappedWriterFB.h" />
     <ClInclude Include="TPathContainer.h" />
-    <ClInclude Include="TPlainStringPool.h" />
-    <ClInclude Include="TRemovedObjects.h" />
-    <ClInclude Include="TScopedRunningTimeTracker.h" />
-    <ClInclude Include="TScopedRunningTimeTrackerPause.h" />
-    <ClInclude Include="TSerializerException.h" />
-    <ClInclude Include="TSerializerVersion.h" />
-    <ClInclude Include="TSharedModificationTracker.h" />
-    <ClInclude Include="TSimpleOrderedBufferQueue.h" />
     <ClInclude Include="TSimpleTimer.h" />
-    <ClInclude Include="TSizeFormatter.h" />
-    <ClInclude Include="TSpeedTracker.h" />
-    <ClInclude Include="TSQLiteColumnDefinition.h" />
-    <ClInclude Include="TSQLiteDatabase.h" />
-    <ClInclude Include="TSQLiteException.h" />
-    <ClInclude Include="TSQLiteSerializer.h" />
-    <ClInclude Include="TSQLiteSerializerContainer.h" />
-    <ClInclude Include="TSQLiteSerializerFactory.h" />
-    <ClInclude Include="TSQLiteSerializerRowData.h" />
-    <ClInclude Include="TSQLiteSerializerRowReader.h" />
-    <ClInclude Include="TSQLiteStatement.h" />
-    <ClInclude Include="TSQLiteTaskManagerSchema.h" />
-    <ClInclude Include="TSQLiteTaskSchema.h" />
-    <ClInclude Include="TSQLiteTransaction.h" />
-    <ClInclude Include="TStringException.h" />
-    <ClInclude Include="TStringPattern.h" />
-    <ClInclude Include="TStringPatternArray.h" />
-    <ClInclude Include="TSubTaskArray.h" />
-    <ClInclude Include="TSubTaskArrayStatsSnapshot.h" />
-    <ClInclude Include="TSubTaskBase.h" />
-    <ClInclude Include="TSubTaskCopyMove.h" />
-    <ClInclude Include="TSubTaskDelete.h" />
-    <ClInclude Include="TSubTaskFastMove.h" />
-    <ClInclude Include="TSubTaskScanDirectory.h" />
-    <ClInclude Include="TSubTaskStatsInfo.h" />
-    <ClInclude Include="TSubTaskStatsSnapshot.h" />
-    <ClInclude Include="TTask.h" />
-    <ClInclude Include="TTaskBaseData.h" />
-    <ClInclude Include="TTaskConfigBufferSizes.h" />
-    <ClInclude Include="TTaskConfigTracker.h" />
-    <ClInclude Include="TTaskConfiguration.h" />
-    <ClInclude Include="TTaskConfigVerifier.h" />
-    <ClInclude Include="TTaskInfo.h" />
-    <ClInclude Include="TTaskLocalStats.h" />
-    <ClInclude Include="TTaskStatsSnapshot.h" />
-    <ClInclude Include="TTaskManager.h" />
-    <ClInclude Include="TTaskManagerStatsSnapshot.h" />
-    <ClInclude Include="TBufferSizes.h" />
     <ClInclude Include="TAutoHandles.h" />
-    <ClInclude Include="TBasePathData.h" />
-    <ClInclude Include="TOverlappedDataBuffer.h" />
-    <ClInclude Include="TFileFilter.h" />
-    <ClInclude Include="TFileFiltersArray.h" />
-    <ClInclude Include="TFileInfo.h" />
-    <ClInclude Include="TFileInfoArray.h" />
-    <ClInclude Include="TLocalFilesystem.h" />
-    <ClInclude Include="TSubTaskContext.h" />
     <ClInclude Include="ErrorCodes.h" />
-    <ClInclude Include="TConfig.h" />
-    <ClInclude Include="TConfigSerializers.h" />
     <ClInclude Include="TCoreException.h" />
-    <ClInclude Include="TDateTime.h" />
     <ClInclude Include="TPath.h" />
     <ClInclude Include="TSharedMemory.h" />
-    <ClInclude Include="TString.h" />
-    <ClInclude Include="TStringArray.h" />
-    <ClInclude Include="TStringSet.h" />
-    <ClInclude Include="TTaskDefinition.h" />
-    <ClInclude Include="TTaskOperationPlan.h" />
     <ClInclude Include="TTimestampProviderTickCount.h" />
-    <ClInclude Include="TBufferList.h" />
-    <ClInclude Include="TReadBufferQueueWrapper.h" />
     <ClInclude Include="TWin32ErrorFormatter.h" />
     <ClInclude Include="TWorkerThreadController.h" />
     <ClInclude Include="libchcore.h" />
     <ClInclude Include="stdafx.h" />
-    <ClInclude Include="TWriteBufferQueueWrapper.h" />
-    <ClInclude Include="WaitableQueue.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
@@ -633,71 +510,9 @@
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">NotUsing</PrecompiledHeader>
     </ClCompile>
-    <ClCompile Include="ConfigNode.cpp" />
-    <ClCompile Include="ConfigNodeContainer.cpp" />
-    <ClCompile Include="IColumnsDefinition.cpp" />
-    <ClCompile Include="IFeedbackHandler.cpp" />
-    <ClCompile Include="IFeedbackHandlerFactory.cpp" />
-    <ClCompile Include="IFilesystem.cpp" />
-    <ClCompile Include="IFilesystemFile.cpp" />
-    <ClCompile Include="IFilesystemFind.cpp" />
-    <ClCompile Include="IRunningTimeControl.cpp" />
-    <ClCompile Include="ISerializer.cpp" />
-    <ClCompile Include="ISerializerContainer.cpp" />
-    <ClCompile Include="ISerializerFactory.cpp" />
-    <ClCompile Include="ISerializerRowData.cpp" />
-    <ClCompile Include="ISerializerRowReader.cpp" />
-    <ClCompile Include="ISQLiteSerializerSchema.cpp" />
     <ClCompile Include="MathFunctions.cpp" />
-    <ClCompile Include="OverlappedCallbacks.cpp" />
     <ClCompile Include="TBaseException.cpp" />
-    <ClCompile Include="TConfigArray.cpp" />
-    <ClCompile Include="TConfigNotifier.cpp" />
-    <ClCompile Include="TCoreEngine.cpp" />
     <ClCompile Include="TCoreWin32Exception.cpp" />
-    <ClCompile Include="TDestinationPathProvider.cpp" />
-    <ClCompile Include="Tests\TBufferListTests.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTDestinationPathProvider.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTBufferSizes.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTConfig.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTFileFilter.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTModificationTracker.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTSharedModificationTracker.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
     <ClCompile Include="Tests\TestsTSimpleTimer.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@@ -710,191 +525,15 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
-    <ClCompile Include="Tests\TestsTSpeedTracker.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTSQLiteDatabase.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTSQLiteStatement.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTSQLiteTransaction.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTString.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTStringPattern.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTStringPatternArray.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTTaskConfigVerifier.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TOrderedBufferQueueTests.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TOverlappedMemoryPoolTests.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TOverlappedReaderTests.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TOverlappedDataBufferTests.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TOverlappedWriterTests.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TReadBufferQueueWrapperTests.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TSimpleOrderedBufferQueueTests.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="Tests\TWriteBufferQueueWrapperTests.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
-    </ClCompile>
-    <ClCompile Include="TEvent.cpp" />
-    <ClCompile Include="TEventGuard.cpp" />
-    <ClCompile Include="TFakeFileSerializer.cpp" />
-    <ClCompile Include="TFeedbackResult.cpp" />
-    <ClCompile Include="TFilesystemFeedbackWrapper.cpp" />
-    <ClCompile Include="TFeedbackHandlerBase.cpp" />
-    <ClCompile Include="TFeedbackHandlerWrapper.cpp" />
-    <ClCompile Include="TFilesystemFileFeedbackWrapper.cpp" />
     <ClCompile Include="TFileTime.cpp" />
-    <ClCompile Include="TFileException.cpp" />
     <ClCompile Include="TIpcMutex.cpp" />
     <ClCompile Include="TIpcMutexLock.cpp" />
-    <ClCompile Include="TLocalFilesystemFile.cpp" />
-    <ClCompile Include="TLocalFilesystemFind.cpp" />
-    <ClCompile Include="TObsoleteFiles.cpp" />
-    <ClCompile Include="TOrderedBufferQueue.cpp" />
-    <ClCompile Include="TOverlappedMemoryPool.cpp" />
-    <ClCompile Include="TOverlappedProcessorRange.cpp" />
-    <ClCompile Include="TOverlappedReader.cpp" />
-    <ClCompile Include="TOverlappedReaderFB.cpp" />
-    <ClCompile Include="TOverlappedReaderWriterFB.cpp" />
-    <ClCompile Include="TOverlappedThreadPool.cpp" />
-    <ClCompile Include="TOverlappedWriter.cpp" />
-    <ClCompile Include="TOverlappedWriterFB.cpp" />
     <ClCompile Include="TPathContainer.cpp" />
-    <ClCompile Include="TPlainStringPool.cpp" />
-    <ClCompile Include="TRemovedObjects.cpp" />
-    <ClCompile Include="TScopedRunningTimeTracker.cpp" />
-    <ClCompile Include="TScopedRunningTimeTrackerPause.cpp" />
-    <ClCompile Include="TSerializerException.cpp" />
-    <ClCompile Include="TSerializerVersion.cpp" />
     <ClCompile Include="TSimpleTimer.cpp" />
-    <ClCompile Include="TSizeFormatter.cpp" />
-    <ClCompile Include="TSpeedTracker.cpp" />
-    <ClCompile Include="TSQLiteColumnDefinition.cpp" />
-    <ClCompile Include="TSQLiteDatabase.cpp" />
-    <ClCompile Include="TSQLiteException.cpp" />
-    <ClCompile Include="TSQLiteSerializer.cpp" />
-    <ClCompile Include="TSQLiteSerializerContainer.cpp" />
-    <ClCompile Include="TSQLiteSerializerFactory.cpp" />
-    <ClCompile Include="TSQLiteSerializerRowData.cpp" />
-    <ClCompile Include="TSQLiteSerializerRowReader.cpp" />
-    <ClCompile Include="TSQLiteStatement.cpp" />
-    <ClCompile Include="TSQLiteTaskManagerSchema.cpp" />
-    <ClCompile Include="TSQLiteTaskSchema.cpp" />
-    <ClCompile Include="TSQLiteTransaction.cpp" />
-    <ClCompile Include="TStringException.cpp" />
-    <ClCompile Include="TStringPattern.cpp" />
-    <ClCompile Include="TStringPatternArray.cpp" />
-    <ClCompile Include="TSubTaskArray.cpp" />
-    <ClCompile Include="TSubTaskArrayStatsSnapshot.cpp" />
-    <ClCompile Include="TSubTaskBase.cpp" />
-    <ClCompile Include="TSubTaskCopyMove.cpp" />
-    <ClCompile Include="TSubTaskDelete.cpp" />
-    <ClCompile Include="TSubTaskFastMove.cpp" />
-    <ClCompile Include="TSubTaskScanDirectory.cpp" />
-    <ClCompile Include="TSubTaskStatsInfo.cpp" />
-    <ClCompile Include="TSubTaskStatsSnapshot.cpp" />
-    <ClCompile Include="TTask.cpp" />
-    <ClCompile Include="TTaskBaseData.cpp" />
-    <ClCompile Include="TTaskConfigBufferSizes.cpp" />
-    <ClCompile Include="TTaskConfigTracker.cpp" />
-    <ClCompile Include="TTaskConfigVerifier.cpp" />
-    <ClCompile Include="TTaskInfo.cpp" />
-    <ClCompile Include="TTaskLocalStats.cpp" />
-    <ClCompile Include="TTaskStatsSnapshot.cpp" />
-    <ClCompile Include="TTaskManager.cpp" />
-    <ClCompile Include="TTaskManagerStatsSnapshot.cpp" />
-    <ClCompile Include="TBufferSizes.cpp" />
-    <ClCompile Include="TBasePathData.cpp" />
-    <ClCompile Include="TOverlappedDataBuffer.cpp" />
-    <ClCompile Include="TFileFilter.cpp" />
-    <ClCompile Include="TFileFiltersArray.cpp" />
-    <ClCompile Include="TFileInfo.cpp" />
-    <ClCompile Include="TFileInfoArray.cpp" />
-    <ClCompile Include="TLocalFilesystem.cpp" />
-    <ClCompile Include="TSubTaskContext.cpp" />
-    <ClCompile Include="TConfig.cpp" />
     <ClCompile Include="TCoreException.cpp" />
-    <ClCompile Include="TDateTime.cpp" />
     <ClCompile Include="TPath.cpp" />
     <ClCompile Include="TSharedMemory.cpp" />
-    <ClCompile Include="TString.cpp" />
-    <ClCompile Include="TStringArray.cpp" />
-    <ClCompile Include="TStringSet.cpp" />
-    <ClCompile Include="TTaskDefinition.cpp" />
-    <ClCompile Include="TTaskOperationPlan.cpp" />
     <ClCompile Include="TTimestampProviderTickCount.cpp" />
-    <ClCompile Include="TReadBufferQueueWrapper.cpp" />
     <ClCompile Include="TWin32ErrorFormatter.cpp" />
     <ClCompile Include="TWorkerThreadController.cpp" />
     <ClCompile Include="dllmain.cpp">
@@ -933,18 +572,14 @@
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Create</PrecompiledHeader>
     </ClCompile>
-    <ClCompile Include="TWriteBufferQueueWrapper.cpp" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\ext\sqlite3\sqlite3.vc140.vcxproj">
-      <Project>{d41831f5-b2a5-4c92-9f15-1d9ab04722cc}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\liblogger\liblogger.vc140.vcxproj">
-      <Project>{df9957d4-3d95-4ac3-ad3f-dcbea058f79d}</Project>
-    </ProjectReference>
+    <ResourceCompile Include="libchcore.rc" />
   </ItemGroup>
   <ItemGroup>
-    <ResourceCompile Include="libchcore.rc" />
+    <ProjectReference Include="..\libstring\libstring.vcxproj">
+      <Project>{5bd38175-9f48-417d-8e5b-7093b1873ce5}</Project>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
Index: src/libchcore/libchcore.vc140.vcxproj.filters
===================================================================
diff -u -re98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 -r0d5b67ee96b435d63f7bf075dc8e28603793b187
--- src/libchcore/libchcore.vc140.vcxproj.filters	(.../libchcore.vc140.vcxproj.filters)	(revision e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8)
+++ src/libchcore/libchcore.vc140.vcxproj.filters	(.../libchcore.vc140.vcxproj.filters)	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -12,173 +12,26 @@
       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
     </Filter>
-    <Filter Include="Source Files\Feedback">
-      <UniqueIdentifier>{fc917d04-8853-43b8-b72c-d3e79ede544c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\SubTasks">
-      <UniqueIdentifier>{291aa467-7b12-4be2-9740-45afb314fe7b}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Task">
-      <UniqueIdentifier>{0f791663-0a08-4f3f-89b5-7b5f40a467ee}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Task Manager">
-      <UniqueIdentifier>{76d85b5b-fa45-4693-9701-d6b5fce941df}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Source Files\Tools">
       <UniqueIdentifier>{1fddd996-c723-4b09-9c98-868df98fe204}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Source Files\Serialization">
-      <UniqueIdentifier>{2a642b1a-83b2-4643-ac85-d040e8904d4d}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Serialization\SQLite">
-      <UniqueIdentifier>{3ce71f46-ef32-4c71-9ac0-bcb36d6b6e99}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Serialization\SQLite\SQLite Schemas">
-      <UniqueIdentifier>{0b6550bf-a20b-4f12-9469-bd3e3bfa40fa}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Tools\SQLite">
-      <UniqueIdentifier>{e6da867d-b0bd-42d5-a0c8-43542984582f}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Tools\Config">
-      <UniqueIdentifier>{e4894f9f-1e1d-451a-9a02-60b9d682b60f}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Tools\Config\details">
-      <UniqueIdentifier>{0f10fd6b-7813-419a-a276-cedaa42bc7bc}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Tools\ModificationTrackers">
-      <UniqueIdentifier>{d920c603-b44c-47ce-89c3-ead84fc29116}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Tests">
       <UniqueIdentifier>{b7eef53f-fb70-4f50-aa6d-0a699bb20f25}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Source Files\Stats">
-      <UniqueIdentifier>{28670d3c-b5d8-4acb-91aa-c886efae641c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Serialization\Fake">
-      <UniqueIdentifier>{9d121063-367c-4424-8009-12b3635e0fed}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems">
-      <UniqueIdentifier>{30d60be9-a936-4191-a66d-64e127f3d258}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Task Config">
-      <UniqueIdentifier>{02c88ac8-15f7-4372-9f47-247ecbada7db}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\Local">
-      <UniqueIdentifier>{3de9b5f5-44fa-4e4b-9a63-f93d940d537a}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Source Files\Tools\Exceptions">
       <UniqueIdentifier>{a77c6575-b7b7-4683-9295-d5173da8c76b}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Source Files\Filesystems\Exceptions">
-      <UniqueIdentifier>{b5e932b3-5a5a-465b-8ade-3354c81e1996}</UniqueIdentifier>
+    <Filter Include="Source Files\Tools\Timers">
+      <UniqueIdentifier>{c0950b01-0c97-431a-9889-0f1bcfc49062}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Tests\TaskConfig">
-      <UniqueIdentifier>{953a12ea-2aa5-4c7a-a310-a461ce8b962f}</UniqueIdentifier>
+    <Filter Include="Source Files\Tools\IPC">
+      <UniqueIdentifier>{6c5d3d2d-292d-45f1-a74d-8b3047a68694}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Tests\DataBuffer">
-      <UniqueIdentifier>{64486dcc-0c2a-468c-9498-c4ff0c2183af}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Shared">
-      <UniqueIdentifier>{076cbf8f-0110-48a9-9cbe-9929534ba1d1}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Tools\Queues">
-      <UniqueIdentifier>{70510fff-69c9-4ba7-beb1-55024077e6b5}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Tools\Threading">
-      <UniqueIdentifier>{4d6af45e-ee39-4520-830b-1eff232b8f0a}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\OverlappedIO">
-      <UniqueIdentifier>{2bf8bd08-c6de-45fd-a047-8c90c07ac481}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\OverlappedIO\Data Buffer">
-      <UniqueIdentifier>{202d13d3-126b-4811-8c1c-a14b4f0476b7}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\OverlappedIO\Data Buffer\Buffers">
-      <UniqueIdentifier>{301c07b0-8112-4a01-9e47-9b32f6637be8}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\OverlappedIO\ReaderWriter">
-      <UniqueIdentifier>{2e089b8f-c085-4bce-a342-64c2611a717a}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues">
-      <UniqueIdentifier>{94659973-1dd0-4e22-83c6-2fc26d3bf56e}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues\Simple">
-      <UniqueIdentifier>{cc825cb7-bb97-45eb-86ed-ac031e1ca9e6}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues\Complex">
-      <UniqueIdentifier>{712c0e1a-c6e3-4aab-8322-a9eea42e6d81}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\OverlappedIO\Data Buffer\BufferConfig">
-      <UniqueIdentifier>{da2a09b3-c940-46ca-8161-a9f97fddf23e}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\OverlappedIO\Feedback Wrappers">
-      <UniqueIdentifier>{0015d34a-19cb-41da-a52d-1aedece5682c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\Filesystems\OverlappedIO\ThreadSupport">
-      <UniqueIdentifier>{1412ea6d-b28c-4a96-b076-3094c476ce45}</UniqueIdentifier>
-    </Filter>
   </ItemGroup>
   <ItemGroup>
-    <ClInclude Include="ESubTaskTypes.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TSubTaskArray.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TSubTaskBase.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TSubTaskCopyMove.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TSubTaskDelete.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TSubTaskFastMove.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TSubTaskScanDirectory.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TSubTaskStatsInfo.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TSubTaskStatsSnapshot.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TTask.h">
-      <Filter>Source Files\Task</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskLocalStats.h">
-      <Filter>Source Files\Task</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskStatsSnapshot.h">
-      <Filter>Source Files\Task</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskManager.h">
-      <Filter>Source Files\Task Manager</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskManagerStatsSnapshot.h">
-      <Filter>Source Files\Task Manager</Filter>
-    </ClInclude>
     <ClInclude Include="TAutoHandles.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
-    <ClInclude Include="TBasePathData.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TFileFilter.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TFileFiltersArray.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TFileInfo.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TFileInfoArray.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
     <ClInclude Include="libchcore.h">
       <Filter>Source Files\Library files</Filter>
     </ClInclude>
@@ -188,255 +41,27 @@
     <ClInclude Include="ErrorCodes.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
-    <ClInclude Include="TConfigSerializers.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TDateTime.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
     <ClInclude Include="TPath.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
-    <ClInclude Include="TSharedMemory.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TString.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TStringArray.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TStringSet.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskDefinition.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskOperationPlan.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
     <ClInclude Include="TWorkerThreadController.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
-    <ClInclude Include="IFeedbackHandler.h">
-      <Filter>Source Files\Feedback</Filter>
-    </ClInclude>
-    <ClInclude Include="IFeedbackHandlerFactory.h">
-      <Filter>Source Files\Feedback</Filter>
-    </ClInclude>
-    <ClInclude Include="ISQLiteSerializerSchema.h">
-      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteTaskManagerSchema.h">
-      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteTaskSchema.h">
-      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
-    </ClInclude>
-    <ClInclude Include="TSerializerVersion.h">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteColumnDefinition.h">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteSerializer.h">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteSerializerContainer.h">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteSerializerFactory.h">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteSerializerRowData.h">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteSerializerRowReader.h">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="IColumnsDefinition.h">
-      <Filter>Source Files\Serialization</Filter>
-    </ClInclude>
-    <ClInclude Include="ISerializer.h">
-      <Filter>Source Files\Serialization</Filter>
-    </ClInclude>
-    <ClInclude Include="ISerializerContainer.h">
-      <Filter>Source Files\Serialization</Filter>
-    </ClInclude>
-    <ClInclude Include="ISerializerFactory.h">
-      <Filter>Source Files\Serialization</Filter>
-    </ClInclude>
-    <ClInclude Include="ISerializerRowData.h">
-      <Filter>Source Files\Serialization</Filter>
-    </ClInclude>
-    <ClInclude Include="ISerializerRowReader.h">
-      <Filter>Source Files\Serialization</Filter>
-    </ClInclude>
-    <ClInclude Include="TSerializerException.h">
-      <Filter>Source Files\Serialization</Filter>
-    </ClInclude>
-    <ClInclude Include="TSubTaskArrayStatsSnapshot.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TSubTaskContext.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TaskID.h">
-      <Filter>Source Files\Task</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskInfo.h">
-      <Filter>Source Files\Task Manager</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteDatabase.h">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteException.h">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteStatement.h">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="TSQLiteTransaction.h">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClInclude>
-    <ClInclude Include="ITimestampProvider.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
     <ClInclude Include="MathFunctions.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
     <ClInclude Include="TPathContainer.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
-    <ClInclude Include="TSimpleTimer.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TSpeedTracker.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TStringException.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TTimestampProviderTickCount.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TConfig.h">
-      <Filter>Source Files\Tools\Config</Filter>
-    </ClInclude>
-    <ClInclude Include="ConfigNode.h">
-      <Filter>Source Files\Tools\Config\details</Filter>
-    </ClInclude>
-    <ClInclude Include="ConfigNodeContainer.h">
-      <Filter>Source Files\Tools\Config\details</Filter>
-    </ClInclude>
-    <ClInclude Include="TConfigArray.h">
-      <Filter>Source Files\Tools\Config</Filter>
-    </ClInclude>
-    <ClInclude Include="TConfigNotifier.h">
-      <Filter>Source Files\Tools\Config</Filter>
-    </ClInclude>
-    <ClInclude Include="TSharedModificationTracker.h">
-      <Filter>Source Files\Tools\ModificationTrackers</Filter>
-    </ClInclude>
-    <ClInclude Include="TModificationTracker.h">
-      <Filter>Source Files\Tools\ModificationTrackers</Filter>
-    </ClInclude>
-    <ClInclude Include="TRemovedObjects.h">
-      <Filter>Source Files\Serialization</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskBaseData.h">
-      <Filter>Source Files\Task</Filter>
-    </ClInclude>
     <ClInclude Include="TFileTime.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
-    <ClInclude Include="TPlainStringPool.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TObsoleteFiles.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TFeedbackHandlerWrapper.h">
-      <Filter>Source Files\Feedback</Filter>
-    </ClInclude>
-    <ClInclude Include="TScopedRunningTimeTracker.h">
-      <Filter>Source Files\Stats</Filter>
-    </ClInclude>
-    <ClInclude Include="TScopedRunningTimeTrackerPause.h">
-      <Filter>Source Files\Stats</Filter>
-    </ClInclude>
-    <ClInclude Include="IRunningTimeControl.h">
-      <Filter>Source Files\Stats</Filter>
-    </ClInclude>
-    <ClInclude Include="TFeedbackHandlerBase.h">
-      <Filter>Source Files\Feedback</Filter>
-    </ClInclude>
-    <ClInclude Include="EFeedbackResult.h">
-      <Filter>Source Files\Feedback</Filter>
-    </ClInclude>
-    <ClInclude Include="TFakeFileSerializer.h">
-      <Filter>Source Files\Serialization\Fake</Filter>
-    </ClInclude>
     <ClInclude Include="RoundingFunctions.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
     <ClInclude Include="TWin32ErrorFormatter.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
-    <ClInclude Include="TTaskConfigTracker.h">
-      <Filter>Source Files\Task Config</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskConfiguration.h">
-      <Filter>Source Files\Task Config</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskConfigBufferSizes.h">
-      <Filter>Source Files\Task Config</Filter>
-    </ClInclude>
-    <ClInclude Include="EFileError.h">
-      <Filter>Source Files\Feedback</Filter>
-    </ClInclude>
-    <ClInclude Include="TStringPattern.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TStringPatternArray.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="IFilesystem.h">
-      <Filter>Source Files\Filesystems</Filter>
-    </ClInclude>
-    <ClInclude Include="TFileInfoFwd.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="TBasePathDataFwd.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="IFilesystemFile.h">
-      <Filter>Source Files\Filesystems</Filter>
-    </ClInclude>
-    <ClInclude Include="IFilesystemFind.h">
-      <Filter>Source Files\Filesystems</Filter>
-    </ClInclude>
-    <ClInclude Include="TLocalFilesystem.h">
-      <Filter>Source Files\Filesystems\Local</Filter>
-    </ClInclude>
-    <ClInclude Include="TLocalFilesystemFile.h">
-      <Filter>Source Files\Filesystems\Local</Filter>
-    </ClInclude>
-    <ClInclude Include="TLocalFilesystemFind.h">
-      <Filter>Source Files\Filesystems\Local</Filter>
-    </ClInclude>
-    <ClInclude Include="SerializerDataTypes.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="CommonDataTypes.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="EOperationTypes.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
-    <ClInclude Include="ETaskCurrentState.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
     <ClInclude Include="TBaseException.h">
       <Filter>Source Files\Tools\Exceptions</Filter>
     </ClInclude>
@@ -446,321 +71,51 @@
     <ClInclude Include="TCoreWin32Exception.h">
       <Filter>Source Files\Tools\Exceptions</Filter>
     </ClInclude>
-    <ClInclude Include="TFileException.h">
-      <Filter>Source Files\Filesystems\Exceptions</Filter>
-    </ClInclude>
-    <ClInclude Include="TFeedbackResult.h">
-      <Filter>Source Files\Feedback</Filter>
-    </ClInclude>
-    <ClInclude Include="TDestinationPathProvider.h">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClInclude>
-    <ClInclude Include="TTaskConfigVerifier.h">
-      <Filter>Source Files\Task Config</Filter>
-    </ClInclude>
-    <ClInclude Include="TCoreEngine.h">
-      <Filter>Source Files\Library files</Filter>
-    </ClInclude>
     <ClInclude Include="StreamingHelpers.h">
       <Filter>Source Files\Tools</Filter>
     </ClInclude>
     <ClInclude Include="GTestMacros.h">
       <Filter>Tests</Filter>
     </ClInclude>
-    <ClInclude Include="TOverlappedWriter.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter</Filter>
+    <ClInclude Include="resource.h" />
+    <ClInclude Include="ITimestampProvider.h">
+      <Filter>Source Files\Tools\Timers</Filter>
     </ClInclude>
-    <ClInclude Include="TOverlappedReader.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter</Filter>
+    <ClInclude Include="TTimestampProviderTickCount.h">
+      <Filter>Source Files\Tools\Timers</Filter>
     </ClInclude>
-    <ClInclude Include="TOverlappedMemoryPool.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\Data Buffer\Buffers</Filter>
+    <ClInclude Include="TIpcMutexLock.h">
+      <Filter>Source Files\Tools\IPC</Filter>
     </ClInclude>
-    <ClInclude Include="TOverlappedDataBuffer.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\Data Buffer\Buffers</Filter>
-    </ClInclude>
-    <ClInclude Include="TBufferList.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues\Simple</Filter>
-    </ClInclude>
-    <ClInclude Include="TOrderedBufferQueue.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues\Simple</Filter>
-    </ClInclude>
-    <ClInclude Include="TSimpleOrderedBufferQueue.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues\Simple</Filter>
-    </ClInclude>
-    <ClInclude Include="TReadBufferQueueWrapper.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues\Complex</Filter>
-    </ClInclude>
-    <ClInclude Include="TWriteBufferQueueWrapper.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues\Complex</Filter>
-    </ClInclude>
-    <ClInclude Include="TSizeFormatter.h">
-      <Filter>Source Files\Tools</Filter>
-    </ClInclude>
     <ClInclude Include="TIpcMutex.h">
-      <Filter>Source Files\Tools</Filter>
+      <Filter>Source Files\Tools\IPC</Filter>
     </ClInclude>
-    <ClInclude Include="TIpcMutexLock.h">
-      <Filter>Source Files\Tools</Filter>
+    <ClInclude Include="TSimpleTimer.h">
+      <Filter>Source Files\Tools\Timers</Filter>
     </ClInclude>
-    <ClInclude Include="resource.h" />
-    <ClInclude Include="EngineConstants.h">
-      <Filter>Source Files\Shared</Filter>
+    <ClInclude Include="TSharedMemory.h">
+      <Filter>Source Files\Tools\IPC</Filter>
     </ClInclude>
-    <ClInclude Include="TFilesystemFeedbackWrapper.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\Feedback Wrappers</Filter>
-    </ClInclude>
-    <ClInclude Include="TFilesystemFileFeedbackWrapper.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\Feedback Wrappers</Filter>
-    </ClInclude>
-    <ClInclude Include="TOverlappedReaderFB.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\Feedback Wrappers</Filter>
-    </ClInclude>
-    <ClInclude Include="TOverlappedReaderWriterFB.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\Feedback Wrappers</Filter>
-    </ClInclude>
-    <ClInclude Include="TOverlappedWriterFB.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\Feedback Wrappers</Filter>
-    </ClInclude>
-    <ClInclude Include="TOverlappedProcessorRange.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter</Filter>
-    </ClInclude>
-    <ClInclude Include="WaitableQueue.h">
-      <Filter>Source Files\Tools\Queues</Filter>
-    </ClInclude>
-    <ClInclude Include="TThreadedQueueRunner.h">
-      <Filter>Source Files\Tools\Threading</Filter>
-    </ClInclude>
-    <ClInclude Include="TBufferSizes.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\Data Buffer\BufferConfig</Filter>
-    </ClInclude>
-    <ClInclude Include="OverlappedCallbacks.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter</Filter>
-    </ClInclude>
-    <ClInclude Include="TOverlappedThreadPool.h">
-      <Filter>Source Files\Filesystems\OverlappedIO\ThreadSupport</Filter>
-    </ClInclude>
-    <ClInclude Include="TEvent.h">
-      <Filter>Source Files\Tools\Threading</Filter>
-    </ClInclude>
-    <ClInclude Include="TEventGuard.h">
-      <Filter>Source Files\Tools\Threading</Filter>
-    </ClInclude>
-    <ClInclude Include="TEventCounter.h">
-      <Filter>Source Files\Tools\Threading</Filter>
-    </ClInclude>
-    <ClInclude Include="TSharedCount.h">
-      <Filter>Source Files\Tools\Threading</Filter>
-    </ClInclude>
-    <ClInclude Include="TSharedCountMT.h">
-      <Filter>Source Files\Tools\Threading</Filter>
-    </ClInclude>
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="TSubTaskArray.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="TSubTaskBase.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="TSubTaskCopyMove.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="TSubTaskDelete.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="TSubTaskFastMove.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="TSubTaskScanDirectory.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="TSubTaskStatsInfo.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="TSubTaskStatsSnapshot.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="TTask.cpp">
-      <Filter>Source Files\Task</Filter>
-    </ClCompile>
-    <ClCompile Include="TTaskLocalStats.cpp">
-      <Filter>Source Files\Task</Filter>
-    </ClCompile>
-    <ClCompile Include="TTaskStatsSnapshot.cpp">
-      <Filter>Source Files\Task</Filter>
-    </ClCompile>
-    <ClCompile Include="TTaskManager.cpp">
-      <Filter>Source Files\Task Manager</Filter>
-    </ClCompile>
-    <ClCompile Include="TTaskManagerStatsSnapshot.cpp">
-      <Filter>Source Files\Task Manager</Filter>
-    </ClCompile>
-    <ClCompile Include="TBasePathData.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TFileFilter.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TFileFiltersArray.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TFileInfo.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TFileInfoArray.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
     <ClCompile Include="dllmain.cpp">
       <Filter>Source Files\Library files</Filter>
     </ClCompile>
     <ClCompile Include="stdafx.cpp">
       <Filter>Source Files\Library files</Filter>
     </ClCompile>
-    <ClCompile Include="TDateTime.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
     <ClCompile Include="TPath.cpp">
       <Filter>Source Files\Tools</Filter>
     </ClCompile>
-    <ClCompile Include="TSharedMemory.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TString.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TStringArray.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TStringSet.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TTaskDefinition.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TTaskOperationPlan.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
     <ClCompile Include="TWorkerThreadController.cpp">
       <Filter>Source Files\Tools</Filter>
     </ClCompile>
-    <ClCompile Include="IFeedbackHandler.cpp">
-      <Filter>Source Files\Feedback</Filter>
-    </ClCompile>
-    <ClCompile Include="IFeedbackHandlerFactory.cpp">
-      <Filter>Source Files\Feedback</Filter>
-    </ClCompile>
-    <ClCompile Include="ISQLiteSerializerSchema.cpp">
-      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteTaskManagerSchema.cpp">
-      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteTaskSchema.cpp">
-      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
-    </ClCompile>
-    <ClCompile Include="TSerializerVersion.cpp">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteColumnDefinition.cpp">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteSerializer.cpp">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteSerializerContainer.cpp">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteSerializerFactory.cpp">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteSerializerRowData.cpp">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteSerializerRowReader.cpp">
-      <Filter>Source Files\Serialization\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="IColumnsDefinition.cpp">
-      <Filter>Source Files\Serialization</Filter>
-    </ClCompile>
-    <ClCompile Include="ISerializer.cpp">
-      <Filter>Source Files\Serialization</Filter>
-    </ClCompile>
-    <ClCompile Include="ISerializerContainer.cpp">
-      <Filter>Source Files\Serialization</Filter>
-    </ClCompile>
-    <ClCompile Include="ISerializerFactory.cpp">
-      <Filter>Source Files\Serialization</Filter>
-    </ClCompile>
-    <ClCompile Include="ISerializerRowData.cpp">
-      <Filter>Source Files\Serialization</Filter>
-    </ClCompile>
-    <ClCompile Include="ISerializerRowReader.cpp">
-      <Filter>Source Files\Serialization</Filter>
-    </ClCompile>
-    <ClCompile Include="TSerializerException.cpp">
-      <Filter>Source Files\Serialization</Filter>
-    </ClCompile>
-    <ClCompile Include="TSubTaskArrayStatsSnapshot.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="TSubTaskContext.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="TTaskInfo.cpp">
-      <Filter>Source Files\Task Manager</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteDatabase.cpp">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteException.cpp">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteStatement.cpp">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClCompile>
-    <ClCompile Include="TSQLiteTransaction.cpp">
-      <Filter>Source Files\Tools\SQLite</Filter>
-    </ClCompile>
     <ClCompile Include="MathFunctions.cpp">
       <Filter>Source Files\Tools</Filter>
     </ClCompile>
     <ClCompile Include="TPathContainer.cpp">
       <Filter>Source Files\Tools</Filter>
     </ClCompile>
-    <ClCompile Include="TSimpleTimer.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TSpeedTracker.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TStringException.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TTimestampProviderTickCount.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TConfig.cpp">
-      <Filter>Source Files\Tools\Config</Filter>
-    </ClCompile>
-    <ClCompile Include="ConfigNode.cpp">
-      <Filter>Source Files\Tools\Config\details</Filter>
-    </ClCompile>
-    <ClCompile Include="ConfigNodeContainer.cpp">
-      <Filter>Source Files\Tools\Config\details</Filter>
-    </ClCompile>
-    <ClCompile Include="TConfigArray.cpp">
-      <Filter>Source Files\Tools\Config</Filter>
-    </ClCompile>
-    <ClCompile Include="TConfigNotifier.cpp">
-      <Filter>Source Files\Tools\Config</Filter>
-    </ClCompile>
-    <ClCompile Include="TRemovedObjects.cpp">
-      <Filter>Source Files\Serialization</Filter>
-    </ClCompile>
-    <ClCompile Include="TTaskBaseData.cpp">
-      <Filter>Source Files\Task</Filter>
-    </ClCompile>
     <ClCompile Include="TFileTime.cpp">
       <Filter>Source Files\Tools</Filter>
     </ClCompile>
@@ -770,99 +125,12 @@
     <ClCompile Include="Tests\TestsTSmartPath.cpp">
       <Filter>Tests</Filter>
     </ClCompile>
-    <ClCompile Include="Tests\TestsTSpeedTracker.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTSQLiteDatabase.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTSQLiteStatement.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTSQLiteTransaction.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTString.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
       <Filter>Tests</Filter>
     </ClCompile>
-    <ClCompile Include="TPlainStringPool.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTConfig.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="TObsoleteFiles.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TFeedbackHandlerWrapper.cpp">
-      <Filter>Source Files\Feedback</Filter>
-    </ClCompile>
-    <ClCompile Include="TScopedRunningTimeTracker.cpp">
-      <Filter>Source Files\Stats</Filter>
-    </ClCompile>
-    <ClCompile Include="TScopedRunningTimeTrackerPause.cpp">
-      <Filter>Source Files\Stats</Filter>
-    </ClCompile>
-    <ClCompile Include="IRunningTimeControl.cpp">
-      <Filter>Source Files\Stats</Filter>
-    </ClCompile>
-    <ClCompile Include="TFeedbackHandlerBase.cpp">
-      <Filter>Source Files\Feedback</Filter>
-    </ClCompile>
-    <ClCompile Include="TFakeFileSerializer.cpp">
-      <Filter>Source Files\Serialization\Fake</Filter>
-    </ClCompile>
     <ClCompile Include="TWin32ErrorFormatter.cpp">
       <Filter>Source Files\Tools</Filter>
     </ClCompile>
-    <ClCompile Include="TTaskConfigTracker.cpp">
-      <Filter>Source Files\Task Config</Filter>
-    </ClCompile>
-    <ClCompile Include="TTaskConfigBufferSizes.cpp">
-      <Filter>Source Files\Task Config</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTModificationTracker.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTSharedModificationTracker.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="TStringPattern.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="TStringPatternArray.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTStringPatternArray.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTFileFilter.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTStringPattern.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="IFilesystem.cpp">
-      <Filter>Source Files\Filesystems</Filter>
-    </ClCompile>
-    <ClCompile Include="IFilesystemFile.cpp">
-      <Filter>Source Files\Filesystems</Filter>
-    </ClCompile>
-    <ClCompile Include="IFilesystemFind.cpp">
-      <Filter>Source Files\Filesystems</Filter>
-    </ClCompile>
-    <ClCompile Include="TLocalFilesystem.cpp">
-      <Filter>Source Files\Filesystems\Local</Filter>
-    </ClCompile>
-    <ClCompile Include="TLocalFilesystemFile.cpp">
-      <Filter>Source Files\Filesystems\Local</Filter>
-    </ClCompile>
-    <ClCompile Include="TLocalFilesystemFind.cpp">
-      <Filter>Source Files\Filesystems\Local</Filter>
-    </ClCompile>
     <ClCompile Include="TBaseException.cpp">
       <Filter>Source Files\Tools\Exceptions</Filter>
     </ClCompile>
@@ -872,120 +140,21 @@
     <ClCompile Include="TCoreWin32Exception.cpp">
       <Filter>Source Files\Tools\Exceptions</Filter>
     </ClCompile>
-    <ClCompile Include="TFileException.cpp">
-      <Filter>Source Files\Filesystems\Exceptions</Filter>
+    <ClCompile Include="TTimestampProviderTickCount.cpp">
+      <Filter>Source Files\Tools\Timers</Filter>
     </ClCompile>
-    <ClCompile Include="TFeedbackResult.cpp">
-      <Filter>Source Files\Feedback</Filter>
+    <ClCompile Include="TIpcMutexLock.cpp">
+      <Filter>Source Files\Tools\IPC</Filter>
     </ClCompile>
-    <ClCompile Include="TDestinationPathProvider.cpp">
-      <Filter>Source Files\SubTasks</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTDestinationPathProvider.cpp">
-      <Filter>Tests</Filter>
-    </ClCompile>
-    <ClCompile Include="TTaskConfigVerifier.cpp">
-      <Filter>Source Files\Task Config</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTTaskConfigVerifier.cpp">
-      <Filter>Tests\TaskConfig</Filter>
-    </ClCompile>
-    <ClCompile Include="TCoreEngine.cpp">
-      <Filter>Source Files\Library files</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TOverlappedDataBufferTests.cpp">
-      <Filter>Tests\DataBuffer</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TestsTBufferSizes.cpp">
-      <Filter>Tests\DataBuffer</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TBufferListTests.cpp">
-      <Filter>Tests\DataBuffer</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TOverlappedMemoryPoolTests.cpp">
-      <Filter>Tests\DataBuffer</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TOrderedBufferQueueTests.cpp">
-      <Filter>Tests\DataBuffer</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TOverlappedReaderTests.cpp">
-      <Filter>Tests\DataBuffer</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TOverlappedWriterTests.cpp">
-      <Filter>Tests\DataBuffer</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TReadBufferQueueWrapperTests.cpp">
-      <Filter>Tests\DataBuffer</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TWriteBufferQueueWrapperTests.cpp">
-      <Filter>Tests\DataBuffer</Filter>
-    </ClCompile>
-    <ClCompile Include="Tests\TSimpleOrderedBufferQueueTests.cpp">
-      <Filter>Tests\DataBuffer</Filter>
-    </ClCompile>
-    <ClCompile Include="TOverlappedWriter.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter</Filter>
-    </ClCompile>
-    <ClCompile Include="TOverlappedReader.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter</Filter>
-    </ClCompile>
-    <ClCompile Include="TOverlappedMemoryPool.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\Data Buffer\Buffers</Filter>
-    </ClCompile>
-    <ClCompile Include="TOverlappedDataBuffer.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\Data Buffer\Buffers</Filter>
-    </ClCompile>
-    <ClCompile Include="TOrderedBufferQueue.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues\Simple</Filter>
-    </ClCompile>
-    <ClCompile Include="TReadBufferQueueWrapper.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues\Complex</Filter>
-    </ClCompile>
-    <ClCompile Include="TWriteBufferQueueWrapper.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter\Queues\Complex</Filter>
-    </ClCompile>
-    <ClCompile Include="TSizeFormatter.cpp">
-      <Filter>Source Files\Tools</Filter>
-    </ClCompile>
     <ClCompile Include="TIpcMutex.cpp">
-      <Filter>Source Files\Tools</Filter>
+      <Filter>Source Files\Tools\IPC</Filter>
     </ClCompile>
-    <ClCompile Include="TIpcMutexLock.cpp">
-      <Filter>Source Files\Tools</Filter>
+    <ClCompile Include="TSimpleTimer.cpp">
+      <Filter>Source Files\Tools\Timers</Filter>
     </ClCompile>
-    <ClCompile Include="TFilesystemFeedbackWrapper.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\Feedback Wrappers</Filter>
+    <ClCompile Include="TSharedMemory.cpp">
+      <Filter>Source Files\Tools\IPC</Filter>
     </ClCompile>
-    <ClCompile Include="TFilesystemFileFeedbackWrapper.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\Feedback Wrappers</Filter>
-    </ClCompile>
-    <ClCompile Include="TOverlappedReaderFB.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\Feedback Wrappers</Filter>
-    </ClCompile>
-    <ClCompile Include="TOverlappedReaderWriterFB.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\Feedback Wrappers</Filter>
-    </ClCompile>
-    <ClCompile Include="TOverlappedWriterFB.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\Feedback Wrappers</Filter>
-    </ClCompile>
-    <ClCompile Include="TOverlappedProcessorRange.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter</Filter>
-    </ClCompile>
-    <ClCompile Include="TBufferSizes.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\Data Buffer\BufferConfig</Filter>
-    </ClCompile>
-    <ClCompile Include="OverlappedCallbacks.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\ReaderWriter</Filter>
-    </ClCompile>
-    <ClCompile Include="TOverlappedThreadPool.cpp">
-      <Filter>Source Files\Filesystems\OverlappedIO\ThreadSupport</Filter>
-    </ClCompile>
-    <ClCompile Include="TEvent.cpp">
-      <Filter>Source Files\Tools\Threading</Filter>
-    </ClCompile>
-    <ClCompile Include="TEventGuard.cpp">
-      <Filter>Source Files\Tools\Threading</Filter>
-    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="libchcore.rc">
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/CommonDataTypes.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/CommonDataTypes.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/ConfigNode.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ConfigNode.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/ConfigNode.h
===================================================================
diff -u
--- src/libchengine/ConfigNode.h	(revision 0)
+++ src/libchengine/ConfigNode.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,65 @@
+// ============================================================================
+//  Copyright (C) 2001-2014 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#ifndef __TCONFIGNODE_H__
+#define __TCONFIGNODE_H__
+
+#include "../libstring/TString.h"
+#include <bitset>
+#include "../libserializer/SerializerDataTypes.h"
+#include "../libserializer/TSharedModificationTracker.h"
+
+namespace chengine
+{
+	namespace details
+	{
+		class ConfigNode
+		{
+		public:
+			ConfigNode(serializer::object_id_t oidObjectID, const string::TString& strNodeName, int iOrder, const string::TString& strValue);
+			ConfigNode(const ConfigNode& rSrc);
+
+			ConfigNode& operator=(const ConfigNode& rSrc);
+
+			string::TString GetNodeName() const;
+			int GetOrder() const;
+
+		public:
+			enum EModifications
+			{
+				eMod_None = 0,
+				eMod_Added = 1,
+				eMod_NodeName,
+				eMod_Value,
+				eMod_Order,
+
+				eMod_Last
+			};
+
+			typedef std::bitset<eMod_Last> Bitset;
+			mutable Bitset m_setModifications;
+
+			serializer::object_id_t m_oidObjectID;
+			serializer::TSharedModificationTracker<int, Bitset, eMod_Order> m_iOrder;
+			serializer::TSharedModificationTracker<string::TString, Bitset, eMod_NodeName> m_strNodeName;
+			serializer::TSharedModificationTracker<string::TString, Bitset, eMod_Value> m_strValue;
+		};
+	}
+}
+
+#endif
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/ConfigNodeContainer.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ConfigNodeContainer.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/ConfigNodeContainer.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ConfigNodeContainer.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/EFeedbackResult.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/EFeedbackResult.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/EFileError.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/EFileError.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/EOperationTypes.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/EOperationTypes.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/ESubTaskTypes.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ESubTaskTypes.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/ETaskCurrentState.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ETaskCurrentState.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/EngineConstants.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/EngineConstants.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/GTestMacros.h
===================================================================
diff -u
--- src/libchengine/GTestMacros.h	(revision 0)
+++ src/libchengine/GTestMacros.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,16 @@
+#ifndef __GTESTMACROS_H__
+#define __GTESTMACROS_H__
+
+#define EXPECT_TIMEOUT(handle)\
+	{\
+		DWORD dwResult = WaitForSingleObject(handle, 0); \
+		EXPECT_EQ(WAIT_TIMEOUT, dwResult); \
+	}
+
+#define EXPECT_SIGNALED(handle)\
+	{\
+		DWORD dwResult = WaitForSingleObject(handle, 0); \
+		EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); \
+	}
+
+#endif
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/IFeedbackHandler.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IFeedbackHandler.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/IFeedbackHandler.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IFeedbackHandler.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/IFeedbackHandlerFactory.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IFeedbackHandlerFactory.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/IFeedbackHandlerFactory.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IFeedbackHandlerFactory.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/IFilesystem.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IFilesystem.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/IFilesystem.h
===================================================================
diff -u
--- src/libchengine/IFilesystem.h	(revision 0)
+++ src/libchengine/IFilesystem.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,71 @@
+// ============================================================================
+//  Copyright (C) 2001-2015 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#ifndef __IFILESYSTEM_H__
+#define __IFILESYSTEM_H__
+
+#include "TFileInfoFwd.h"
+#include "TBasePathDataFwd.h"
+#include "IFilesystemFind.h"
+#include "IFilesystemFile.h"
+
+namespace chcore {
+	class TSmartPath;
+}
+
+namespace chengine
+{
+	class LIBCHENGINE_API IFilesystem
+	{
+	public:
+		enum EPathsRelation
+		{
+			eRelation_Network,				// at least one of the paths is network one
+			eRelation_CDRom,				// at least one of the paths relates to cd/dvd drive
+			eRelation_TwoPhysicalDisks,		// paths lies on two separate physical disks
+			eRelation_SinglePhysicalDisk,	// paths lies on the same physical disk
+			eRelation_Other					// other type of relation
+		};
+
+	public:
+		virtual ~IFilesystem();
+
+		virtual bool PathExist(const chcore::TSmartPath& strPath) = 0;
+
+		virtual void SetFileDirBasicInfo(const chcore::TSmartPath& pathFileDir, DWORD dwAttributes, const chcore::TFileTime& ftCreationTime, const chcore::TFileTime& ftLastAccessTime, const chcore::TFileTime& ftLastWriteTime) = 0;
+		virtual void SetAttributes(const chcore::TSmartPath& pathFileDir, DWORD dwAttributes) = 0;
+
+		virtual void CreateDirectory(const chcore::TSmartPath& pathDirectory, bool bCreateFullPath) = 0;
+		virtual void RemoveDirectory(const chcore::TSmartPath& pathFile) = 0;
+		virtual void DeleteFile(const chcore::TSmartPath& pathFile) = 0;
+
+		virtual void GetFileInfo(const chcore::TSmartPath& pathFile, TFileInfoPtr& rFileInfo, const TBasePathDataPtr& spBasePathData = TBasePathDataPtr()) = 0;
+		virtual void FastMove(const chcore::TSmartPath& pathSource, const chcore::TSmartPath& pathDestination) = 0;
+
+		virtual IFilesystemFindPtr CreateFinderObject(const chcore::TSmartPath& pathDir, const chcore::TSmartPath& pathMask) = 0;
+		virtual IFilesystemFilePtr CreateFileObject(IFilesystemFile::EOpenMode eMode, const chcore::TSmartPath& pathFile, bool bNoBuffering, bool bProtectReadOnlyFiles) = 0;
+
+		virtual EPathsRelation GetPathsRelation(const chcore::TSmartPath& pathFirst, const chcore::TSmartPath& pathSecond) = 0;
+
+		virtual void GetDynamicFreeSpace(const chcore::TSmartPath& path, unsigned long long& rullFree, unsigned long long& rullTotal) = 0;
+	};
+
+	typedef std::shared_ptr<IFilesystem> IFilesystemPtr;
+}
+
+#endif
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/IFilesystemFile.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IFilesystemFile.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/IFilesystemFile.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IFilesystemFile.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/IFilesystemFind.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IFilesystemFind.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/IFilesystemFind.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IFilesystemFind.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/IRunningTimeControl.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IRunningTimeControl.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/IRunningTimeControl.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IRunningTimeControl.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/OverlappedCallbacks.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/OverlappedCallbacks.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d23ed007b8142c6faf6d8cad4a421ac243ef0146 is not in file src/libchengine/OverlappedCallbacks.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/OverlappedCallbacks.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TBasePathData.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TBasePathData.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/TBasePathData.h
===================================================================
diff -u
--- src/libchengine/TBasePathData.h	(revision 0)
+++ src/libchengine/TBasePathData.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,149 @@
+// ============================================================================
+//  Copyright (C) 2001-2010 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+/// @file  TBasePathData.h
+/// @date  2010/10/13
+/// @brief Contains declarations of classes related to keeping additional path data.
+// ============================================================================
+#ifndef __TBASEPATHDATA_H__
+#define __TBASEPATHDATA_H__
+
+#include "../libchcore/TPath.h"
+#include <bitset>
+#include "../libserializer/TRemovedObjects.h"
+#include "../libserializer/ISerializerRowData.h"
+#include "../libserializer/ISerializerRowReader.h"
+#include "CommonDataTypes.h"
+#include "libchengine.h"
+#include "../libserializer/TSharedModificationTracker.h"
+
+namespace serializer
+{
+	class IColumnsDefinition;
+}
+
+namespace chengine
+{
+	/////////////////////////////////////////////////////////////////////////////
+	// TBasePathData
+	class LIBCHENGINE_API TBasePathData
+	{
+	private:
+		enum EModifications
+		{
+			eMod_Added,
+			eMod_SrcPath,
+			eMod_SkipProcessing,
+			eMod_DstPath,
+
+			eMod_Last
+		};
+
+	public:
+		TBasePathData();
+		TBasePathData(serializer::object_id_t oidObjectID, const chcore::TSmartPath& spSrcPath);
+		TBasePathData(const TBasePathData& rEntry);
+
+		serializer::object_id_t GetObjectID() const;
+		void SetObjectID(serializer::object_id_t oidObjectID);
+
+		chcore::TSmartPath GetSrcPath() const;
+		void SetSrcPath(const chcore::TSmartPath& pathSrc);
+
+		bool GetSkipFurtherProcessing() const;
+		void SetSkipFurtherProcessing(bool bSkipFurtherProcessing);
+
+		void SetDestinationPath(const chcore::TSmartPath& strPath);
+		chcore::TSmartPath GetDestinationPath() const;
+		bool IsDestinationPathSet() const;
+
+		void Store(const serializer::ISerializerContainerPtr& spContainer) const;
+		static void InitColumns(serializer::IColumnsDefinition& rColumnDefs);
+		void Load(const serializer::ISerializerRowReaderPtr& spRowReader);
+
+	private:
+#pragma warning(push)
+#pragma warning(disable: 4251)
+		// modification management
+		typedef std::bitset<eMod_Last> BitSet;
+		mutable BitSet m_setModifications;
+
+		// attributes
+		serializer::object_id_t m_oidObjectID;
+		serializer::TSharedModificationTracker<chcore::TSmartPath, BitSet, eMod_SrcPath> m_pathSrc;
+		serializer::TSharedModificationTracker<bool, BitSet, eMod_SkipProcessing> m_bSkipFurtherProcessing;		// specifies if the path should be (or not) processed further
+		serializer::TSharedModificationTracker<chcore::TSmartPath, BitSet, eMod_DstPath> m_pathDst;
+#pragma warning(pop)
+	};
+
+	typedef std::shared_ptr<TBasePathData> TBasePathDataPtr;
+
+	//////////////////////////////////////////////////////////////////////////
+	// TBasePathDataContainer
+
+	class LIBCHENGINE_API TBasePathDataContainer
+	{
+	public:
+		// constructors/destructor
+		TBasePathDataContainer();
+		TBasePathDataContainer(const TBasePathDataContainer& rSrc) = delete;
+		~TBasePathDataContainer();
+
+		TBasePathDataContainer& operator=(const TBasePathDataContainer& rSrc) = delete;
+
+		TBasePathDataContainer& operator=(const chcore::TPathContainer& tPaths);
+
+		// standard access to data
+		void Add(const TBasePathDataPtr& spEntry);
+		void RemoveAt(file_count_t fcIndex);
+		TBasePathDataPtr GetAt(file_count_t fcIndex) const;
+		TBasePathDataPtr FindByID(size_t fcObjectID) const;
+
+		void Clear();
+
+		bool IsEmpty() const;
+		file_count_t GetCount() const;
+
+		// processing flags
+		bool AllMarkedAsSkipFurtherProcessing() const;
+		void ResetProcessingFlags();
+
+		void Store(const serializer::ISerializerContainerPtr& spContainer) const;
+		void Load(const serializer::ISerializerContainerPtr& spContainer);
+
+		void InitColumns(const serializer::ISerializerContainerPtr& spContainer) const;
+
+	private:
+		void ClearNL();
+
+	protected:
+#pragma warning(push)
+#pragma warning(disable: 4251)
+		typedef std::vector<TBasePathDataPtr> VecEntries;
+		VecEntries m_vEntries;
+		mutable serializer::TRemovedObjects m_setRemovedObjects;
+
+		mutable boost::shared_mutex m_lock;
+#pragma warning(pop)
+		serializer::object_id_t m_oidLastObjectID;
+	};
+
+	typedef std::shared_ptr<TBasePathDataContainer> TBasePathDataContainerPtr;
+}
+
+#endif // __TBASEPATHDATA_H__
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TBasePathDataFwd.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TBasePathDataFwd.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/TBufferList.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TBufferList.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 5aac942a83e4a308ff401cca43be501b1bbdfb6a is not in file src/libchengine/TBufferSizes.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TBufferSizes.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 5aac942a83e4a308ff401cca43be501b1bbdfb6a is not in file src/libchengine/TBufferSizes.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TBufferSizes.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TConfig.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TConfig.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 847d6d10ae5b9a694b9b54d3b66051239d5cbea9 is not in file src/libchengine/TConfig.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TConfig.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TConfigArray.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TConfigArray.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TConfigArray.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TConfigArray.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TConfigNotifier.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TConfigNotifier.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TConfigNotifier.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TConfigNotifier.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TConfigSerializers.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TConfigSerializers.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 12b36349f6214befeace08efa9acc7e03be0d847 is not in file src/libchengine/TCoreEngine.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TCoreEngine.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 12b36349f6214befeace08efa9acc7e03be0d847 is not in file src/libchengine/TCoreEngine.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TCoreEngine.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TDateTime.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TDateTime.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TDateTime.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TDateTime.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TDestinationPathProvider.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TDestinationPathProvider.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/TDestinationPathProvider.h
===================================================================
diff -u
--- src/libchengine/TDestinationPathProvider.h	(revision 0)
+++ src/libchengine/TDestinationPathProvider.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,51 @@
+// ============================================================================
+//  Copyright (C) 2001-2009 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#ifndef __TDESTINATIONPATHPROVIDER_H__
+#define __TDESTINATIONPATHPROVIDER_H__
+
+#include "../libchcore/TPath.h"
+#include "TFileInfo.h"
+#include "IFilesystem.h"
+
+namespace chengine
+{
+	class TDestinationPathProvider
+	{
+	public:
+		TDestinationPathProvider(const IFilesystemPtr& spFilesystem, const chcore::TSmartPath& pathDestinationBase, bool bIgnoreFolders, bool bForceDirectories,
+			const string::TString& strFirstAltName, const string::TString& strNextAltName);
+
+		chcore::TSmartPath CalculateDestinationPath(const TFileInfoPtr& spFileInfo);
+
+	private:
+		chcore::TSmartPath CalculateForceDirectories(const TFileInfoPtr& spFileInfo);
+		chcore::TSmartPath CalculateIgnoreDirectories(const TFileInfoPtr& spFileInfo);
+		chcore::TSmartPath FindFreeSubstituteName(chcore::TSmartPath pathSrcPath) const;
+
+	private:
+		IFilesystemPtr m_spFilesystem;
+		chcore::TSmartPath m_pathDestinationBase;
+		bool m_bIgnoreFolders;
+		bool m_bForceDirectories;
+		string::TString m_strFirstAltName;
+		string::TString m_strNextAltName;
+	};
+}
+
+#endif
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TEvent.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TEvent.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b051cbac8dac8c448507aa7c64753af9cf793af5 is not in file src/libchengine/TEvent.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TEvent.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d99302fce795dbb5139659016a5da7948f141fb4 is not in file src/libchengine/TEventCounter.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TEventCounter.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 7892d3d5ca43da7dca4d9e8e0c321c21c3e13ea0 is not in file src/libchengine/TEventGuard.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TEventGuard.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TEventGuard.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TEventGuard.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TFeedbackHandlerBase.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFeedbackHandlerBase.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TFeedbackHandlerBase.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFeedbackHandlerBase.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TFeedbackHandlerWrapper.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFeedbackHandlerWrapper.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag c085b65f1de24f25feab2bac2d5882abf04aabcf is not in file src/libchengine/TFeedbackHandlerWrapper.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFeedbackHandlerWrapper.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TFeedbackResult.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFeedbackResult.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TFeedbackResult.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFeedbackResult.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TFileException.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFileException.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TFileException.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFileException.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TFileFilter.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFileFilter.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/TFileFilter.h
===================================================================
diff -u
--- src/libchengine/TFileFilter.h	(revision 0)
+++ src/libchengine/TFileFilter.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,260 @@
+/***************************************************************************
+ *   Copyright (C) 2001-2008 by Jozef Starosczyk                           *
+ *   ixen@copyhandler.com                                                  *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU Library General Public License          *
+ *   (version 2) as published by the Free Software Foundation;             *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU Library General Public     *
+ *   License along with this program; if not, write to the                 *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+#ifndef __TFILEFILTER_H__
+#define __TFILEFILTER_H__
+
+#include <atltime.h>
+#include "TDateTime.h"
+#include <bitset>
+#include "../libstring/TStringPatternArray.h"
+#include "../libserializer/TSharedModificationTracker.h"
+
+namespace chengine
+{
+	class TConfig;
+	class TFileInfo;
+	typedef std::shared_ptr<TFileInfo> TFileInfoPtr;
+
+	class LIBCHENGINE_API TFileFilter
+	{
+	public:
+		enum ESizeCompareType
+		{
+			eSizeCmp_Less = 0,
+			eSizeCmp_LessOrEqual = 1,
+			eSizeCmp_Equal = 2,
+			eSizeCmp_GreaterOrEqual = 3,
+			eSizeCmp_Greater = 4
+		};
+
+		enum EDateCompareType
+		{
+			eDateCmp_Less = 0,
+			eDateCmp_LessOrEqual = 1,
+			eDateCmp_Equal = 2,
+			eDateCmp_GreaterOrEqual = 3,
+			eDateCmp_Greater = 4
+		};
+
+		enum EDateType
+		{
+			eDateType_Created = 0,
+			eDateType_Modified = 1,
+			eDateType_LastAccessed = 2
+		};
+
+	public:
+		TFileFilter();
+		TFileFilter(const TFileFilter& rFilter);
+		TFileFilter& operator=(const TFileFilter& rFilter);
+
+		void SetData(const TFileFilter& rSrc);
+
+		// matching
+		bool Match(const TFileInfoPtr& spInfo) const;
+
+		// serialization
+		void StoreInConfig(TConfig& rConfig) const;
+		void ReadFromConfig(const TConfig& rConfig);
+
+		void Store(const serializer::ISerializerContainerPtr& spContainer) const;
+		void Load(const serializer::ISerializerRowReaderPtr& spRowReader);
+		static void InitColumns(serializer::IColumnsDefinition& rColumns);
+
+		// other
+		serializer::object_id_t GetObjectID() const;
+		void SetObjectID(serializer::object_id_t oidObjectID);
+		void ResetModifications();
+
+		// atrributes access
+		bool GetUseMask() const;
+		void SetUseMask(bool bUseMask);
+
+		string::TString GetCombinedMask() const;
+		void SetCombinedMask(const string::TString& pMask);
+
+		bool GetUseExcludeMask() const;
+		void SetUseExcludeMask(bool bUseExcludeMask);
+
+		string::TString GetCombinedExcludeMask() const;
+		void SetCombinedExcludeMask(const string::TString& pMask);
+
+		bool GetUseSize1() const;
+		void SetUseSize1(bool bUseSize1);
+
+		ESizeCompareType GetSizeType1() const;
+		void SetSizeType1(ESizeCompareType eSizeType1);
+
+		unsigned long long GetSize1() const;
+		void SetSize1(unsigned long long ullSize1);
+
+		bool GetUseSize2() const;
+		void SetUseSize2(bool bUseSize2);
+
+		ESizeCompareType GetSizeType2() const;
+		void SetSizeType2(ESizeCompareType eSizeType2);
+
+		unsigned long long GetSize2() const;
+		void SetSize2(unsigned long long ullSize2);
+
+		// dates
+		TFileFilter::EDateType GetDateType() const;
+		void SetDateType(TFileFilter::EDateType eDateType);
+
+		// date 1
+		bool GetUseDateTime1() const;
+		void SetUseDateTime1(bool bUseDateTime1);
+
+		TFileFilter::EDateCompareType GetDateCmpType1() const;
+		void SetDateCmpType1(TFileFilter::EDateCompareType eCmpType1);
+
+		bool GetUseDate1() const;
+		void SetUseDate1(bool tDate1);
+
+		bool GetUseTime1() const;
+		void SetUseTime1(bool tTime1);
+
+		const TDateTime& GetDateTime1() const;
+		void SetDateTime1(const TDateTime& tDateTime1);
+
+		// date 2
+		bool GetUseDateTime2() const;
+		void SetUseDateTime2(bool bUseDateTime2);
+
+		TFileFilter::EDateCompareType GetDateCmpType2() const;
+		void SetDateCmpType2(TFileFilter::EDateCompareType eCmpType2);
+
+		bool GetUseDate2() const;
+		void SetUseDate2(bool tDate2);
+
+		bool GetUseTime2() const;
+		void SetUseTime2(bool tTime2);
+
+		const TDateTime& GetDateTime2() const;
+		void SetDateTime2(const TDateTime& tDateTime2);
+
+		// attributes
+		bool GetUseAttributes() const;
+		void SetUseAttributes(bool bUseAttributes);
+
+		int GetArchive() const;
+		void SetArchive(int iArchive);
+
+		int GetReadOnly() const;
+		void SetReadOnly(int iReadOnly);
+
+		int GetHidden() const;
+		void SetHidden(int iHidden);
+
+		int GetSystem() const { return m_iSystem; }
+		void SetSystem(int iSystem) { m_iSystem = iSystem; }
+
+		int GetDirectory() const { return m_iDirectory; }
+		void SetDirectory(int iDirectory) { m_iDirectory = iDirectory; }
+
+	private:
+		enum EModifications
+		{
+			eMod_Added,
+			eMod_UseMask,
+			eMod_Mask,
+			eMod_UseExcludeMask,
+			eMod_ExcludeMask,
+			eMod_UseSize1,
+			eMod_SizeCmpType1,
+			eMod_Size1,
+			eMod_UseSize2,
+			eMod_SizeCmpType2,
+			eMod_Size2,
+			eMod_DateType,
+			eMod_UseDateTime1,
+			eMod_DateCmpType1,
+			eMod_UseDate1,
+			eMod_UseTime1,
+			eMod_DateTime1,
+			eMod_UseDateTime2,
+			eMod_DateCmpType2,
+			eMod_UseDate2,
+			eMod_UseTime2,
+			eMod_DateTime2,
+			eMod_UseAttributes,
+			eMod_AttrArchive,
+			eMod_AttrReadOnly,
+			eMod_AttrHidden,
+			eMod_AttrSystem,
+			eMod_AttrDirectory,
+
+			eMod_Last
+		};
+
+		// object identification
+		serializer::object_id_t m_oidObjectID;
+
+		// modification management
+#pragma warning(push)
+#pragma warning(disable: 4251)
+		typedef std::bitset<eMod_Last> Bitset;
+		mutable Bitset m_setModifications;
+
+		// files mask
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseMask> m_bUseMask;
+		serializer::TSharedModificationTracker<string::TStringPatternArray, Bitset, eMod_Mask> m_astrMask;
+
+		// files mask-
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseExcludeMask> m_bUseExcludeMask;
+		serializer::TSharedModificationTracker<string::TStringPatternArray, Bitset, eMod_ExcludeMask> m_astrExcludeMask;
+
+		// size filtering
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseSize1> m_bUseSize1;
+		serializer::TSharedModificationTracker<ESizeCompareType, Bitset, eMod_SizeCmpType1> m_eSizeCmpType1;
+		serializer::TSharedModificationTracker<unsigned long long, Bitset, eMod_Size1> m_ullSize1;
+
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseSize2> m_bUseSize2;
+		serializer::TSharedModificationTracker<ESizeCompareType, Bitset, eMod_SizeCmpType2> m_eSizeCmpType2;
+		serializer::TSharedModificationTracker<unsigned long long, Bitset, eMod_Size2> m_ullSize2;
+
+		// date filtering
+		serializer::TSharedModificationTracker<EDateType, Bitset, eMod_DateType> m_eDateType;	// created/last modified/last accessed
+
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseDateTime1> m_bUseDateTime1;
+
+		serializer::TSharedModificationTracker<EDateCompareType, Bitset, eMod_DateCmpType1> m_eDateCmpType1;	// before/after
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseDate1> m_bUseDate1;
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseTime1> m_bUseTime1;
+		serializer::TSharedModificationTracker<TDateTime, Bitset, eMod_DateTime1> m_tDateTime1;
+
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseDateTime2> m_bUseDateTime2;
+
+		serializer::TSharedModificationTracker<EDateCompareType, Bitset, eMod_DateCmpType2> m_eDateCmpType2;
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseDate2> m_bUseDate2;
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseTime2> m_bUseTime2;
+		serializer::TSharedModificationTracker<TDateTime, Bitset, eMod_DateTime2> m_tDateTime2;
+
+		// attribute filtering
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_UseAttributes> m_bUseAttributes;
+		serializer::TSharedModificationTracker<int, Bitset, eMod_AttrArchive> m_iArchive;
+		serializer::TSharedModificationTracker<int, Bitset, eMod_AttrReadOnly> m_iReadOnly;
+		serializer::TSharedModificationTracker<int, Bitset, eMod_AttrHidden> m_iHidden;
+		serializer::TSharedModificationTracker<int, Bitset, eMod_AttrSystem> m_iSystem;
+		serializer::TSharedModificationTracker<int, Bitset, eMod_AttrDirectory> m_iDirectory;
+#pragma warning(pop)
+	};
+}
+
+#endif
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TFileFiltersArray.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFileFiltersArray.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TFileFiltersArray.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFileFiltersArray.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TFileInfo.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFileInfo.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/TFileInfo.h
===================================================================
diff -u
--- src/libchengine/TFileInfo.h	(revision 0)
+++ src/libchengine/TFileInfo.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,143 @@
+/***************************************************************************
+*   Copyright (C) 2001-2008 by Jozef Starosczyk                           *
+*   ixen@copyhandler.com                                                  *
+*                                                                         *
+*   This program is free software; you can redistribute it and/or modify  *
+*   it under the terms of the GNU Library General Public License          *
+*   (version 2) as published by the Free Software Foundation;             *
+*                                                                         *
+*   This program is distributed in the hope that it will be useful,       *
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+*   GNU General Public License for more details.                          *
+*                                                                         *
+*   You should have received a copy of the GNU Library General Public     *
+*   License along with this program; if not, write to the                 *
+*   Free Software Foundation, Inc.,                                       *
+*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+***************************************************************************/
+// File was originally based on FileInfo.h by Antonio Tejada Lacaci.
+// Almost everything has changed since then.
+
+#ifndef __TFILEINFO_H__
+#define __TFILEINFO_H__
+
+#include "../libchcore/TPath.h"
+#include "TBasePathData.h"
+#include <bitset>
+#include "../libchcore/TFileTime.h"
+
+namespace chengine
+{
+	class LIBCHENGINE_API TFileInfo
+	{
+	public:
+		enum EFlags
+		{
+			// flag stating that file has been processed (used to determine if file can be deleted at the end of copying)
+			eFlag_Processed = 1,
+		};
+
+	public:
+		TFileInfo();
+		TFileInfo(const TBasePathDataPtr& spBasePathData, const chcore::TSmartPath& rpathFile,
+			DWORD dwAttributes, ULONGLONG uhFileSize, const chcore::TFileTime& ftCreation, const chcore::TFileTime& ftLastAccess, const chcore::TFileTime& ftLastWrite,
+			unsigned int uiFlags);
+		~TFileInfo();
+
+		// operators
+		bool operator==(const TFileInfo& rInfo) const;
+
+		// with base path
+		void Init(const TBasePathDataPtr& spBasePathData, const chcore::TSmartPath& rpathFile,
+			DWORD dwAttributes, ULONGLONG uhFileSize, const chcore::TFileTime& ftCreation, const chcore::TFileTime& ftLastAccess, const chcore::TFileTime& ftLastWrite,
+			unsigned int uiFlags);
+
+		// without base path
+		void Init(const chcore::TSmartPath& rpathFile, DWORD dwAttributes, ULONGLONG uhFileSize, const chcore::TFileTime& ftCreation,
+			const chcore::TFileTime& ftLastAccess, const chcore::TFileTime& ftLastWrite, unsigned int uiFlags);
+
+		// unique object id
+		serializer::object_id_t GetObjectID() const;
+		void SetObjectID(serializer::object_id_t oidObjectID);
+
+		// parent object
+		TBasePathDataPtr GetBasePathData() const;
+		void SetParentObject(const TBasePathDataPtr& spBasePathData);
+		serializer::object_id_t GetSrcObjectID() const;
+
+		// file path
+		const chcore::TSmartPath& GetFilePath() const;	// returns path with m_pathFile (probably not full)
+		chcore::TSmartPath GetFullFilePath() const;		// returns full path
+		void SetFilePath(const chcore::TSmartPath& tPath);
+
+		// file size
+		ULONGLONG GetLength64() const;
+		void SetLength64(ULONGLONG uhSize);
+
+		// file times
+		void SetFileTimes(const chcore::TFileTime& rCreation, const chcore::TFileTime& rLastAccess, const chcore::TFileTime& rLastWrite);
+		const chcore::TFileTime& GetCreationTime() const;
+		const chcore::TFileTime& GetLastAccessTime() const;
+		const chcore::TFileTime& GetLastWriteTime() const;
+
+		// attributes
+		DWORD GetAttributes() const;
+		void SetAttributes(DWORD dwAttributes);
+		bool IsDirectory() const;
+		bool IsArchived() const;
+		bool IsReadOnly() const;
+		bool IsCompressed() const;
+		bool IsSystem() const;
+		bool IsHidden() const;
+		bool IsTemporary() const;
+		bool IsNormal() const;
+
+		void MarkAsProcessed(bool bProcessed);
+		bool IsProcessed() const;
+		bool IsBasePathProcessed() const;
+
+		void Store(const serializer::ISerializerContainerPtr& spContainer) const;
+		static void InitColumns(serializer::IColumnsDefinition& rColumns);
+		void Load(const serializer::ISerializerRowReaderPtr& spRowReader, const TBasePathDataContainerPtr& spSrcContainer);
+
+	private:
+		enum EModifications
+		{
+			eMod_None = 0,
+			eMod_Added,
+			eMod_Path,
+			eMod_BasePath,
+			eMod_Attributes,
+			eMod_FileSize,
+			eMod_TimeCreated,
+			eMod_TimeLastAccess,
+			eMod_TimeLastWrite,
+			eMod_Flags,
+
+			// do not use - must be the last value in this enum
+			eMod_Last
+		};
+
+#pragma warning(push)
+#pragma warning(disable: 4251)
+		typedef std::bitset<eMod_Last> Bitset;
+		mutable Bitset m_setModifications;
+
+		serializer::object_id_t m_oidObjectID;
+
+		serializer::TSharedModificationTracker<chcore::TSmartPath, Bitset, eMod_Path> m_pathFile;
+		serializer::TSharedModificationTracker<TBasePathDataPtr, Bitset, eMod_BasePath> m_spBasePathData;
+		serializer::TSharedModificationTracker<DWORD, Bitset, eMod_Attributes> m_dwAttributes;	// attributes
+		serializer::TSharedModificationTracker<ULONGLONG, Bitset, eMod_FileSize> m_uhFileSize;
+		serializer::TSharedModificationTracker<chcore::TFileTime, Bitset, eMod_TimeCreated> m_ftCreation;
+		serializer::TSharedModificationTracker<chcore::TFileTime, Bitset, eMod_TimeLastAccess> m_ftLastAccess;
+		serializer::TSharedModificationTracker<chcore::TFileTime, Bitset, eMod_TimeLastWrite> m_ftLastWrite;
+		serializer::TSharedModificationTracker<unsigned int, Bitset, eMod_Flags> m_uiFlags;
+#pragma warning(pop)
+	};
+
+	typedef std::shared_ptr<TFileInfo> TFileInfoPtr;
+}
+
+#endif
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TFileInfoArray.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFileInfoArray.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TFileInfoArray.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFileInfoArray.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TFileInfoFwd.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFileInfoFwd.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TFilesystemFeedbackWrapper.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFilesystemFeedbackWrapper.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag baad6054459abaaf69cbfd1ebad8783085160d99 is not in file src/libchengine/TFilesystemFeedbackWrapper.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFilesystemFeedbackWrapper.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TFilesystemFileFeedbackWrapper.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFilesystemFileFeedbackWrapper.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag baad6054459abaaf69cbfd1ebad8783085160d99 is not in file src/libchengine/TFilesystemFileFeedbackWrapper.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFilesystemFileFeedbackWrapper.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TLocalFilesystem.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TLocalFilesystem.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/TLocalFilesystem.h
===================================================================
diff -u
--- src/libchengine/TLocalFilesystem.h	(revision 0)
+++ src/libchengine/TLocalFilesystem.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,91 @@
+// ============================================================================
+//  Copyright (C) 2001-2010 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+/// @file  TLocalFilesystem.h
+/// @date  2011/03/24
+/// @brief Contains class responsible for accessing local filesystem.
+// ============================================================================
+#ifndef __TLOCALFILESYSTEM_H__
+#define __TLOCALFILESYSTEM_H__
+
+#include "../libchcore/TPath.h"
+#include "TBasePathData.h"
+#include "TFileInfoFwd.h"
+#include "IFilesystem.h"
+#include "../liblogger/TLogger.h"
+
+namespace chcore
+{
+	class TFileTime;
+}
+
+namespace chengine
+{
+	class TLocalFilesystemFind;
+	class TLocalFilesystemFile;
+	class TSimpleDataBuffer;
+	class TOverlappedDataBuffer;
+
+	class LIBCHENGINE_API TLocalFilesystem : public IFilesystem
+	{
+	public:
+		explicit TLocalFilesystem(const logger::TLogFileDataPtr& spLogFileData);
+		TLocalFilesystem(const TLocalFilesystem&) = delete;
+
+		virtual ~TLocalFilesystem();
+
+		TLocalFilesystem& operator=(const TLocalFilesystem&) = delete;
+
+		bool PathExist(const chcore::TSmartPath& strPath) override;	// check for file or folder existence
+
+		void SetFileDirBasicInfo(const chcore::TSmartPath& pathFileDir, DWORD dwAttributes, const chcore::TFileTime& ftCreationTime, const chcore::TFileTime& ftLastAccessTime, const chcore::TFileTime& ftLastWriteTime) override;
+		void SetAttributes(const chcore::TSmartPath& pathFileDir, DWORD dwAttributes) override;
+
+		void CreateDirectory(const chcore::TSmartPath& pathDirectory, bool bCreateFullPath) override;
+		void RemoveDirectory(const chcore::TSmartPath& pathFile) override;
+		void DeleteFile(const chcore::TSmartPath& pathFile) override;
+
+		void GetFileInfo(const chcore::TSmartPath& pathFile, TFileInfoPtr& rFileInfo, const TBasePathDataPtr& spBasePathData = TBasePathDataPtr()) override;
+		void FastMove(const chcore::TSmartPath& pathSource, const chcore::TSmartPath& pathDestination) override;
+
+		IFilesystemFindPtr CreateFinderObject(const chcore::TSmartPath& pathDir, const chcore::TSmartPath& pathMask) override;
+		IFilesystemFilePtr CreateFileObject(IFilesystemFile::EOpenMode eMode, const chcore::TSmartPath& pathFile, bool bNoBuffering, bool bProtectReadOnlyFiles) override;
+
+		EPathsRelation GetPathsRelation(const chcore::TSmartPath& pathFirst, const chcore::TSmartPath& pathSecond) override;
+
+		void GetDynamicFreeSpace(const chcore::TSmartPath& path, unsigned long long& rullFree, unsigned long long& rullTotal) override;
+
+	private:
+		static chcore::TSmartPath PrependPathExtensionIfNeeded(const chcore::TSmartPath& pathInput);
+		static UINT GetDriveData(const chcore::TSmartPath& spPath);
+		DWORD GetPhysicalDiskNumber(wchar_t wchDrive);
+
+	private:
+#pragma warning(push)
+#pragma warning(disable: 4251)
+		std::map<wchar_t, DWORD> m_mapDriveLetterToPhysicalDisk;	// caches drive letter -> physical disk number
+		boost::shared_mutex m_lockDriveLetterToPhysicalDisk;
+		logger::TLoggerPtr m_spLog;
+#pragma warning(pop)
+
+		friend class TLocalFilesystemFind;
+		friend class TLocalFilesystemFile;
+	};
+}
+
+#endif
Fisheye: tag baad6054459abaaf69cbfd1ebad8783085160d99 is not in file src/libchengine/TLocalFilesystemFile.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TLocalFilesystemFile.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45 is not in file src/libchengine/TLocalFilesystemFile.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TLocalFilesystemFile.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TLocalFilesystemFind.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TLocalFilesystemFind.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TLocalFilesystemFind.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TLocalFilesystemFind.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TObsoleteFiles.cpp
Index: src/libchengine/TObsoleteFiles.h
===================================================================
diff -u
--- src/libchengine/TObsoleteFiles.h	(revision 0)
+++ src/libchengine/TObsoleteFiles.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,67 @@
+// ============================================================================
+//  Copyright (C) 2001-2014 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#ifndef __TOBSOLETEFILES_H__
+#define __TOBSOLETEFILES_H__
+
+#include <map>
+#include "../libchcore/TPath.h"
+#include "libchengine.h"
+#include "../libserializer/ISerializerContainer.h"
+#include "../libserializer/TRemovedObjects.h"
+
+namespace chengine
+{
+	struct ObsoleteFileInfo
+	{
+		ObsoleteFileInfo();
+		ObsoleteFileInfo(const chcore::TSmartPath& path, bool bAdded);
+
+		chcore::TSmartPath m_path;
+		mutable bool m_bAdded;
+	};
+
+	class LIBCHENGINE_API TObsoleteFiles
+	{
+	public:
+		TObsoleteFiles();
+		TObsoleteFiles(const TObsoleteFiles&) = delete;
+		virtual ~TObsoleteFiles();
+
+		TObsoleteFiles& operator=(const TObsoleteFiles&) = delete;
+
+		void DeleteObsoleteFile(const chcore::TSmartPath& pathToDelete);
+
+		void Store(const serializer::ISerializerContainerPtr& spContainer) const;
+		void Load(const serializer::ISerializerContainerPtr& spContainer);
+
+		void InitColumns(const serializer::ISerializerContainerPtr& spContainer) const;
+
+	private:
+#pragma warning(push)
+#pragma warning(disable: 4251)
+		typedef std::map<serializer::object_id_t, ObsoleteFileInfo> MapPaths;
+		MapPaths m_mapPaths;
+#pragma warning(pop)
+
+		mutable serializer::TRemovedObjects m_setRemovedObjects;
+		serializer::object_id_t m_oidLast;
+	};
+}
+
+#endif
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TOrderedBufferQueue.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOrderedBufferQueue.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TOrderedBufferQueue.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOrderedBufferQueue.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TOverlappedDataBuffer.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedDataBuffer.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TOverlappedDataBuffer.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedDataBuffer.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b941384e121190b6107f1c99b3233667e3daf4ce is not in file src/libchengine/TOverlappedMemoryPool.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedMemoryPool.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 541304f4e098b4c7617b718287ab40646d5deb92 is not in file src/libchengine/TOverlappedMemoryPool.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedMemoryPool.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag f1d25f23712f5de7459f690ab51b2640d0f81b91 is not in file src/libchengine/TOverlappedProcessorRange.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedProcessorRange.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 5127141ac49a45db27f748dfb659d31f2e4983c4 is not in file src/libchengine/TOverlappedProcessorRange.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedProcessorRange.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d99302fce795dbb5139659016a5da7948f141fb4 is not in file src/libchengine/TOverlappedReader.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedReader.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d99302fce795dbb5139659016a5da7948f141fb4 is not in file src/libchengine/TOverlappedReader.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedReader.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/TOverlappedReaderFB.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedReaderFB.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d99302fce795dbb5139659016a5da7948f141fb4 is not in file src/libchengine/TOverlappedReaderFB.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedReaderFB.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 5aac942a83e4a308ff401cca43be501b1bbdfb6a is not in file src/libchengine/TOverlappedReaderWriterFB.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedReaderWriterFB.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 5aac942a83e4a308ff401cca43be501b1bbdfb6a is not in file src/libchengine/TOverlappedReaderWriterFB.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedReaderWriterFB.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 7892d3d5ca43da7dca4d9e8e0c321c21c3e13ea0 is not in file src/libchengine/TOverlappedThreadPool.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedThreadPool.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 5127141ac49a45db27f748dfb659d31f2e4983c4 is not in file src/libchengine/TOverlappedThreadPool.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedThreadPool.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d99302fce795dbb5139659016a5da7948f141fb4 is not in file src/libchengine/TOverlappedWriter.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedWriter.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d99302fce795dbb5139659016a5da7948f141fb4 is not in file src/libchengine/TOverlappedWriter.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedWriter.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/TOverlappedWriterFB.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedWriterFB.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d99302fce795dbb5139659016a5da7948f141fb4 is not in file src/libchengine/TOverlappedWriterFB.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TOverlappedWriterFB.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TPlainStringPool.cpp
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TPlainStringPool.h
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/TReadBufferQueueWrapper.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TReadBufferQueueWrapper.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/TReadBufferQueueWrapper.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TReadBufferQueueWrapper.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TSQLiteDatabase.cpp
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSQLiteDatabase.h
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSQLiteException.cpp
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSQLiteException.h
Fisheye: tag f12e631659a91c301d9c860dd411b3cb9fcaf6a9 is not in file src/libchengine/TSQLiteStatement.cpp
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSQLiteStatement.h
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TSQLiteTransaction.cpp
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSQLiteTransaction.h
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TScopedRunningTimeTracker.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TScopedRunningTimeTracker.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TScopedRunningTimeTracker.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TScopedRunningTimeTracker.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TScopedRunningTimeTrackerPause.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TScopedRunningTimeTrackerPause.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TScopedRunningTimeTrackerPause.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TScopedRunningTimeTrackerPause.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d99302fce795dbb5139659016a5da7948f141fb4 is not in file src/libchengine/TSharedCount.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSharedCount.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d99302fce795dbb5139659016a5da7948f141fb4 is not in file src/libchengine/TSharedCountMT.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSharedCountMT.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSimpleOrderedBufferQueue.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSimpleOrderedBufferQueue.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 3c248d4f6d0fdb1e487cc868b2f0b219eec37ef4 is not in file src/libchengine/TSizeFormatter.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSizeFormatter.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSizeFormatter.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSizeFormatter.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TSpeedTracker.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSpeedTracker.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSpeedTracker.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSpeedTracker.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TSubTaskArray.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskArray.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSubTaskArray.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskArray.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSubTaskArrayStatsSnapshot.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskArrayStatsSnapshot.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TSubTaskArrayStatsSnapshot.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskArrayStatsSnapshot.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TSubTaskBase.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskBase.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSubTaskBase.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskBase.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TSubTaskContext.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskContext.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSubTaskContext.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskContext.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 5aac942a83e4a308ff401cca43be501b1bbdfb6a is not in file src/libchengine/TSubTaskCopyMove.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskCopyMove.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag c085b65f1de24f25feab2bac2d5882abf04aabcf is not in file src/libchengine/TSubTaskCopyMove.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskCopyMove.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSubTaskDelete.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskDelete.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag c085b65f1de24f25feab2bac2d5882abf04aabcf is not in file src/libchengine/TSubTaskDelete.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskDelete.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSubTaskFastMove.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskFastMove.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag c085b65f1de24f25feab2bac2d5882abf04aabcf is not in file src/libchengine/TSubTaskFastMove.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskFastMove.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TSubTaskScanDirectory.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskScanDirectory.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag c085b65f1de24f25feab2bac2d5882abf04aabcf is not in file src/libchengine/TSubTaskScanDirectory.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskScanDirectory.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TSubTaskStatsInfo.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskStatsInfo.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/TSubTaskStatsInfo.h
===================================================================
diff -u
--- src/libchengine/TSubTaskStatsInfo.h	(revision 0)
+++ src/libchengine/TSubTaskStatsInfo.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,194 @@
+// ============================================================================
+//  Copyright (C) 2001-2012 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+/// @file  TSubTaskStatsInfo.h
+/// @date  2012/02/22
+/// @brief Contains declaration of class responsible for tracking stats for subtasks.
+// ============================================================================
+#ifndef __TSUBTASKSTATSINFO_H__
+#define __TSUBTASKSTATSINFO_H__
+
+#include "../libstring/TString.h"
+#include "../libchcore/TSimpleTimer.h"
+#include "TSpeedTracker.h"
+#include "ESubTaskTypes.h"
+#include "TSubTaskStatsSnapshot.h"
+#include <bitset>
+#include "CommonDataTypes.h"
+#include "IRunningTimeControl.h"
+#include "../libserializer/ISerializer.h"
+#include "../libserializer/TSharedModificationTracker.h"
+
+namespace serializer {
+	class IColumnsDefinition;
+	class ISerializerRowData;
+}
+
+namespace boost
+{
+	template<class T> class upgrade_lock;
+}
+
+namespace chengine
+{
+	class TSubTaskStatsInfo;
+	class TSubTaskStatsSnapshot;
+
+	class TSubTaskStatsInfo : public IRunningTimeControl
+	{
+	private:
+		static const unsigned long long DefaultSpeedTrackTime = 1000;	// in miliseconds
+		static const unsigned long long DefaultSpeedSampleTime = 100;	// in miliseconds
+
+	public:
+		explicit TSubTaskStatsInfo(ESubOperationType eSubTaskType);
+		TSubTaskStatsInfo(const TSubTaskStatsInfo&) = delete;
+
+		TSubTaskStatsInfo& operator=(const TSubTaskStatsInfo&) = delete;
+
+		void Init(int iCurrentBufferIndex, file_count_t fcTotalCount, file_count_t fcProcessedCount, unsigned long long ullTotalSize, unsigned long long ullProcessedSize, const string::TString& strCurrentPath);
+		void Clear();
+		bool WasAdded() const;
+
+		bool IsInitialized() const;
+
+		void GetSnapshot(TSubTaskStatsSnapshotPtr& spStatsSnapshot) const;
+
+		void IncreaseProcessedCount(file_count_t fcIncreaseBy);
+		void SetProcessedCount(file_count_t fcIndex);
+
+		void SetTotalCount(file_count_t fcCount);
+		file_count_t GetTotalCount() const;
+
+		// size stats
+		void IncreaseProcessedSize(unsigned long long ullIncreaseBy);
+		void DecreaseProcessedSize(unsigned long long ullDecreaseBy);
+		void SetProcessedSize(unsigned long long ullProcessedSize);
+
+		void IncreaseTotalSize(unsigned long long ullIncreaseBy);
+		void DecreaseTotalSize(unsigned long long ullDecreaseBy);
+		void SetTotalSize(unsigned long long ullTotalSize);
+
+		// current item
+		void SetCurrentItemSizes(unsigned long long ullProcessedSize, unsigned long long ullTotalSize);
+		void ResetCurrentItemProcessedSize();
+		unsigned long long GetCurrentItemProcessedSize() const;
+		unsigned long long GetCurrentItemTotalSize() const;
+
+		// current item processed and overall processed
+		bool WillAdjustProcessedSizeExceedTotalSize(file_size_t fsIncludedProcessedSize, file_size_t fsNewProcessedSize);
+		void AdjustProcessedSize(file_size_t fsIncludedProcessedSize, file_size_t fsNewProcessedSize);
+		void AdjustTotalSize(file_size_t fsIncludedSize, file_size_t fsNewSize);
+
+		bool CanCurrentItemSilentResume() const;
+		void SetCurrentItemSilentResume(bool bEnableSilentResume);
+
+		// current index
+		void SetCurrentIndex(file_count_t fcIndex);
+		file_count_t GetCurrentIndex() const;
+
+		// buffer index
+		void SetCurrentBufferIndex(int iCurrentIndex);
+
+		// current path
+		void SetCurrentPath(const string::TString& strPath);
+
+		ESubOperationType GetSubOperationType() const { return m_eSubOperationType; }
+
+		// serialization
+		void Store(serializer::ISerializerRowData& rRowData) const;
+		static void InitColumns(serializer::IColumnsDefinition& rColumnDefs);
+		void Load(const serializer::ISerializerRowReaderPtr& spRowReader);
+
+	private:
+		// is running?
+		void MarkAsRunning() override;
+		void MarkAsNotRunning() override;
+
+		// time tracking
+		void EnableTimeTracking() override;
+		void DisableTimeTracking() override;
+
+		void UpdateTime(boost::upgrade_lock<boost::shared_mutex>& lock) const;
+
+		void VerifyProcessedVsTotal();
+
+	private:
+		enum EModifications
+		{
+			eMod_Added = 0,
+			eMod_IsRunning,
+			eMod_TotalSize,
+			eMod_ProcessedSize,
+			eMod_SizeSpeed,
+			eMod_TotalCount,
+			eMod_ProcessedCount,
+			eMod_CountSpeed,
+			eMod_CurrentItemProcessedSize,
+			eMod_CurrentItemTotalSize,
+			eMod_Timer,
+			eMod_CurrentBufferIndex,
+			eMod_CurrentPath,
+			eMod_IsInitialized,
+			eMod_CurrentItemIndex,
+			eMod_CurrentItemCanResumeSilently,
+
+			// last item
+			eMod_Last
+		};
+
+		typedef std::bitset<eMod_Last> Bitset;
+		mutable Bitset m_setModifications;
+
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_IsRunning> m_bSubTaskIsRunning;
+
+		serializer::TSharedModificationTracker<unsigned long long, Bitset, eMod_TotalSize> m_ullTotalSize;
+		serializer::TSharedModificationTracker<unsigned long long, Bitset, eMod_ProcessedSize> m_ullProcessedSize;
+		mutable serializer::TSharedModificationTracker<TSpeedTracker, Bitset, eMod_SizeSpeed> m_tSizeSpeed;
+
+		serializer::TSharedModificationTracker<file_count_t, Bitset, eMod_TotalCount> m_fcTotalCount;
+		serializer::TSharedModificationTracker<file_count_t, Bitset, eMod_ProcessedCount> m_fcProcessedCount;
+		mutable serializer::TSharedModificationTracker<TSpeedTracker, Bitset, eMod_CountSpeed> m_tCountSpeed;
+
+		serializer::TSharedModificationTracker<file_count_t, Bitset, eMod_CurrentItemIndex> m_fcCurrentIndex;	//??
+
+		serializer::TSharedModificationTracker<unsigned long long, Bitset, eMod_CurrentItemProcessedSize> m_ullCurrentItemProcessedSize;	//??
+		serializer::TSharedModificationTracker<unsigned long long, Bitset, eMod_CurrentItemTotalSize> m_ullCurrentItemTotalSize;			//??
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_CurrentItemCanResumeSilently> m_bCurrentItemSilentResume;					//??
+
+		mutable serializer::TSharedModificationTracker<chcore::TSimpleTimer, Bitset, eMod_Timer> m_tTimer;
+
+		serializer::TSharedModificationTracker<int, Bitset, eMod_CurrentBufferIndex> m_iCurrentBufferIndex;	//??
+		serializer::TSharedModificationTracker<string::TString, Bitset, eMod_CurrentPath> m_strCurrentPath;		//??
+
+		serializer::TSharedModificationTracker<bool, Bitset, eMod_IsInitialized> m_bIsInitialized;
+
+		const ESubOperationType m_eSubOperationType;
+
+#pragma warning(push)
+#pragma warning(disable: 4251)
+		mutable boost::shared_mutex m_lock;
+#pragma warning(pop)
+
+		friend class TSubTaskProcessingGuard;
+	};
+
+	using TSubTaskStatsInfoPtr = std::shared_ptr<TSubTaskStatsInfo>;
+}
+
+#endif
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TSubTaskStatsSnapshot.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskStatsSnapshot.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TSubTaskStatsSnapshot.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSubTaskStatsSnapshot.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libchengine/TTask.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTask.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libchengine/TTask.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTask.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libchengine/TTaskBaseData.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskBaseData.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/TTaskBaseData.h
===================================================================
diff -u
--- src/libchengine/TTaskBaseData.h	(revision 0)
+++ src/libchengine/TTaskBaseData.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,75 @@
+// ============================================================================
+//  Copyright (C) 2001-2014 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#ifndef __TTASKBASEDATA_H__
+#define __TTASKBASEDATA_H__
+
+#include <bitset>
+#include "ETaskCurrentState.h"
+#include "../libstring/TString.h"
+#include "../libchcore/TPath.h"
+#include "libchengine.h"
+#include "../libserializer/ISerializerContainer.h"
+#include "../libserializer/TSharedModificationTracker.h"
+
+namespace chengine
+{
+	class LIBCHENGINE_API TTaskBaseData
+	{
+	public:
+		TTaskBaseData();
+		~TTaskBaseData();
+
+		string::TString GetTaskName() const;
+		void SetTaskName(const string::TString& strTaskName);
+
+		ETaskCurrentState GetCurrentState() const;
+		void SetCurrentState(ETaskCurrentState eCurrentState);
+
+		chcore::TSmartPath GetDestinationPath() const;
+		void SetDestinationPath(const chcore::TSmartPath& pathDst);
+
+		void Store(const serializer::ISerializerContainerPtr& spContainer) const;
+		void Load(const serializer::ISerializerContainerPtr& spContainer);
+
+		void InitColumns(const serializer::ISerializerContainerPtr& spContainer) const;
+
+	private:
+		enum EModifications
+		{
+			eMod_Added,
+			eMod_TaskName,
+			eMod_CurrentState,
+			eMod_DstPath,
+
+			eMod_Last
+		};
+
+#pragma warning(push)
+#pragma warning(disable: 4251)
+		typedef std::bitset<eMod_Last> ModBitSet;
+		mutable ModBitSet m_setChanges;
+
+		serializer::TSharedModificationTracker<string::TString, ModBitSet, eMod_TaskName> m_strTaskName;
+		serializer::TSharedModificationTracker<volatile ETaskCurrentState, ModBitSet, eMod_CurrentState> m_eCurrentState;     // current state of processing this task represents
+		serializer::TSharedModificationTracker<chcore::TSmartPath, ModBitSet, eMod_DstPath> m_pathDestinationPath;
+#pragma warning(pop)
+	};
+}
+
+#endif
Fisheye: tag 5aac942a83e4a308ff401cca43be501b1bbdfb6a is not in file src/libchengine/TTaskConfigBufferSizes.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskConfigBufferSizes.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TTaskConfigBufferSizes.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskConfigBufferSizes.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag baad6054459abaaf69cbfd1ebad8783085160d99 is not in file src/libchengine/TTaskConfigTracker.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskConfigTracker.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TTaskConfigTracker.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskConfigTracker.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TTaskConfigVerifier.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskConfigVerifier.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TTaskConfigVerifier.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskConfigVerifier.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 5aac942a83e4a308ff401cca43be501b1bbdfb6a is not in file src/libchengine/TTaskConfiguration.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskConfiguration.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TTaskDefinition.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskDefinition.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TTaskDefinition.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskDefinition.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libchengine/TTaskInfo.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskInfo.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/TTaskInfo.h
===================================================================
diff -u
--- src/libchengine/TTaskInfo.h	(revision 0)
+++ src/libchengine/TTaskInfo.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,130 @@
+// ============================================================================
+//  Copyright (C) 2001-2013 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#ifndef __TTASKINFO_H__
+#define __TTASKINFO_H__
+
+#include "TaskID.h"
+#include <bitset>
+#include "libchengine.h"
+#include "../libserializer/TRemovedObjects.h"
+#include "../libserializer/ISerializerContainer.h"
+#include "../libserializer/TSharedModificationTracker.h"
+
+namespace chengine
+{
+	class TTask;
+	typedef std::shared_ptr<TTask> TTaskPtr;
+
+	class LIBCHENGINE_API TTaskInfoEntry
+	{
+	public:
+		enum EModifications
+		{
+			eMod_None = 0,
+			eMod_Added,
+			eMod_TaskPath,
+			eMod_Order,
+			eMod_LogPath,
+
+			eMod_Last
+		};
+
+	public:
+		TTaskInfoEntry();
+		TTaskInfoEntry(serializer::object_id_t oidTaskID, const chcore::TSmartPath& pathTask, const chcore::TSmartPath& pathLog, int iOrder, const TTaskPtr& spTask);
+		TTaskInfoEntry(const TTaskInfoEntry& rSrc);
+
+		TTaskInfoEntry& operator=(const TTaskInfoEntry& rSrc);
+
+		serializer::object_id_t GetObjectID() const;
+
+		chcore::TSmartPath GetTaskSerializeLocation() const;
+		void SetTaskSerializeLocation(const chcore::TSmartPath& pathTask);
+
+		chcore::TSmartPath GetTaskLogPath() const;
+		void SetTaskLogPath(const chcore::TSmartPath& pathLog);
+
+		TTaskPtr GetTask() const;
+		void SetTask(const TTaskPtr& spTask);
+
+		int GetOrder() const;
+		void SetOrder(int iOrder);
+
+		void Store(const serializer::ISerializerContainerPtr& spContainer) const;
+		static void InitColumns(serializer::IColumnsDefinition& rColumnDefs);
+		void Load(const serializer::ISerializerRowReaderPtr& spRowReader);
+
+		void ResetModifications();
+
+	private:
+#pragma warning(push)
+#pragma warning(disable:4251)
+		serializer::object_id_t m_oidObjectID;
+		typedef std::bitset<eMod_Last> Bitset;
+		mutable std::bitset<eMod_Last> m_setModifications;
+		serializer::TSharedModificationTracker<chcore::TSmartPath, Bitset, eMod_TaskPath> m_pathSerializeLocation;
+		serializer::TSharedModificationTracker<chcore::TSmartPath, Bitset, eMod_LogPath> m_pathLogPath;
+		serializer::TSharedModificationTracker<int, Bitset, eMod_Order> m_iOrder;
+
+		TTaskPtr m_spTask;
+#pragma warning(pop)
+	};
+
+	class LIBCHENGINE_API TTaskInfoContainer
+	{
+	public:
+		TTaskInfoContainer();
+		TTaskInfoContainer(const TTaskInfoContainer&) = delete;
+
+		TTaskInfoContainer& operator=(const TTaskInfoContainer&) = delete;
+
+		void Add(const chcore::TSmartPath& strPath, const chcore::TSmartPath& pathLog, int iOrder, const TTaskPtr& spTask);
+		void RemoveAt(size_t stIndex);
+
+		TTaskInfoEntry& GetAt(size_t stIndex);
+		const TTaskInfoEntry& GetAt(size_t stIndex) const;
+
+		TTaskInfoEntry& GetAtOid(serializer::object_id_t oidObjectID);
+
+		bool GetByTaskID(taskid_t tTaskID, TTaskInfoEntry& rInfo) const;
+
+		size_t GetCount() const;
+		bool IsEmpty() const;
+
+		void Clear();
+
+		// modifications management
+		void Store(const serializer::ISerializerContainerPtr& spContainer) const;
+		void Load(const serializer::ISerializerContainerPtr& spContainer);
+
+		void InitColumns(const serializer::ISerializerContainerPtr& spContainer) const;
+
+		void ClearModifications();
+
+	private:
+#pragma warning(push)
+#pragma warning(disable:4251)
+		std::vector<TTaskInfoEntry> m_vTaskInfos;
+		mutable serializer::TRemovedObjects m_setRemovedTasks;
+#pragma warning(pop)
+		serializer::object_id_t m_oidLastObjectID;
+	};
+}
+
+#endif
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TTaskLocalStats.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskLocalStats.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/TTaskLocalStats.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskLocalStats.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libchengine/TTaskManager.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskManager.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libchengine/TTaskManager.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskManager.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TTaskManagerStatsSnapshot.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskManagerStatsSnapshot.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TTaskManagerStatsSnapshot.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskManagerStatsSnapshot.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TTaskOperationPlan.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskOperationPlan.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TTaskOperationPlan.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskOperationPlan.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TTaskStatsSnapshot.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskStatsSnapshot.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/TTaskStatsSnapshot.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TTaskStatsSnapshot.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag baad6054459abaaf69cbfd1ebad8783085160d99 is not in file src/libchengine/TThreadedQueueRunner.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TThreadedQueueRunner.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/TWriteBufferQueueWrapper.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TWriteBufferQueueWrapper.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/TWriteBufferQueueWrapper.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TWriteBufferQueueWrapper.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/TaskID.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TaskID.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag bef894e38e5c1486824787cf8c47a87a0828b228 is not in file src/libchengine/Tests/TBufferListTests.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TBufferListTests.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 518d1a3484cde91ff17c071211df5e40cb3487e3 is not in file src/libchengine/Tests/TOrderedBufferQueueTests.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TOrderedBufferQueueTests.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libchengine/Tests/TOverlappedDataBufferTests.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TOverlappedDataBufferTests.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag dcbfdc95eedacd24d8b1d78fa507029ce12a5a63 is not in file src/libchengine/Tests/TOverlappedMemoryPoolTests.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TOverlappedMemoryPoolTests.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/Tests/TOverlappedReaderTests.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TOverlappedReaderTests.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/Tests/TOverlappedWriterTests.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TOverlappedWriterTests.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/Tests/TReadBufferQueueWrapperTests.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TReadBufferQueueWrapperTests.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 518d1a3484cde91ff17c071211df5e40cb3487e3 is not in file src/libchengine/Tests/TSimpleOrderedBufferQueueTests.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TSimpleOrderedBufferQueueTests.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag cb1a7688ad1ac1081a219c170754776e986ccc8c is not in file src/libchengine/Tests/TWriteBufferQueueWrapperTests.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TWriteBufferQueueWrapperTests.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 5aac942a83e4a308ff401cca43be501b1bbdfb6a is not in file src/libchengine/Tests/TestsTBufferSizes.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTBufferSizes.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libchengine/Tests/TestsTConfig.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTConfig.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag baad6054459abaaf69cbfd1ebad8783085160d99 is not in file src/libchengine/Tests/TestsTDestinationPathProvider.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTDestinationPathProvider.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/Tests/TestsTFileFilter.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTFileFilter.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/Tests/TestsTModificationTracker.cpp
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/Tests/TestsTSQLiteDatabase.cpp
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/Tests/TestsTSQLiteStatement.cpp
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/Tests/TestsTSharedModificationTracker.cpp
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libchengine/Tests/TestsTSpeedTracker.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTSpeedTracker.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 545098ae76e9ce23598d37d2bee4020d6cb59f3c is not in file src/libchengine/Tests/TestsTTaskConfigVerifier.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTTaskConfigVerifier.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b0a003dc39e6d21e34779cf1cf5d8a07318c1f5f is not in file src/libchengine/WaitableQueue.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/WaitableQueue.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libchengine/dllmain.cpp
===================================================================
diff -u
--- src/libchengine/dllmain.cpp	(revision 0)
+++ src/libchengine/dllmain.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,16 @@
+// dllmain.cpp : Defines the entry point for the DLL application.
+#include "stdafx.h"
+
+BOOL APIENTRY DllMain(HMODULE /*hModule*/, DWORD ulReasonForCall, LPVOID /*lpReserved*/)
+{
+	switch (ulReasonForCall)
+	{
+	case DLL_PROCESS_ATTACH:
+	case DLL_THREAD_ATTACH:
+	case DLL_THREAD_DETACH:
+	case DLL_PROCESS_DETACH:
+		break;
+	}
+	return TRUE;
+}
+
Index: src/libchengine/libchengine.h
===================================================================
diff -u
--- src/libchengine/libchengine.h	(revision 0)
+++ src/libchengine/libchengine.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,21 @@
+// The following ifdef block is the standard way of creating macros which make exporting 
+// from a DLL simpler. All files within this DLL are compiled with the LIBCHENGINE_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see 
+// LIBCHENGINE_API functions as being imported from a DLL, whereas this DLL sees symbols
+// defined with this macro as being exported.
+#if defined(_WIN32) || defined(_WIN64)
+	#ifdef LIBCHENGINE_EXPORTS
+		#define LIBCHENGINE_API __declspec(dllexport)
+	#else
+		#define LIBCHENGINE_API __declspec(dllimport)
+	#endif
+#else
+	/** \brief Import/export macros
+	*
+	*  These macros are being used throughout the whole code. They are meant to
+	*  export symbols (if the LIBCHENGINE_EXPORTS is defined) from this library
+	*  (also for importing (when LIBCHENGINE_EXPORTS macro is undefined) in other apps).
+	*/
+	#define LIBCHENGINE_API
+#endif
Index: src/libchengine/libchengine.rc
===================================================================
diff -u
Binary files differ
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libchengine/libchengine.vcxproj
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libchengine/libchengine.vcxproj.filters
Index: src/libchengine/res/libchengine.rc2
===================================================================
diff -u
--- src/libchengine/res/libchengine.rc2	(revision 0)
+++ src/libchengine/res/libchengine.rc2	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,52 @@
+//
+// ch.rc2 - resources Microsoft Visual C++ does not edit directly
+//
+
+#ifdef APSTUDIO_INVOKED
+	#error this file is not editable by Microsoft Visual C++
+#endif //APSTUDIO_INVOKED
+
+#include "../common/version.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// Add manually edited resources here...
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION PRODUCT_VERSION1, PRODUCT_VERSION2, PRODUCT_VERSION3, PRODUCT_VERSION4
+ PRODUCTVERSION PRODUCT_VERSION1, PRODUCT_VERSION2, PRODUCT_VERSION3, PRODUCT_VERSION4
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x29L
+#else
+ FILEFLAGS 0x28L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "Comments", "Core Copy Handler functionalities"
+            VALUE "CompanyName", " "
+            VALUE "FileDescription", "Copy Handler Core"
+            VALUE "FileVersion", PRODUCT_VERSION
+            VALUE "LegalCopyright", COPYRIGHT_INFO
+            VALUE "LegalTrademarks", " "
+            VALUE "OriginalFilename", "libchengine.dll"
+            VALUE "ProductName", "Copy Handler"
+            VALUE "ProductVersion", PRODUCT_VERSION
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+/////////////////////////////////////////////////////////////////////////////
Index: src/libchengine/resource.h
===================================================================
diff -u
Binary files differ
Index: src/libchengine/stdafx.cpp
===================================================================
diff -u
--- src/libchengine/stdafx.cpp	(revision 0)
+++ src/libchengine/stdafx.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+// libchengine.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
Index: src/libchengine/stdafx.h
===================================================================
diff -u
--- src/libchengine/stdafx.h	(revision 0)
+++ src/libchengine/stdafx.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,26 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#pragma once
+
+#include "../common/targetver.h"
+
+#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
+// Windows Header Files:
+#include <windows.h>
+
+#include <boost/bind.hpp>
+
+#pragma warning(push)
+#pragma warning(disable: 4985)
+
+#include <boost/thread/shared_mutex.hpp>
+
+#pragma warning(pop)
+
+#include <list>
+#include <set>
+#include <vector>
+#include <tchar.h>
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/IColumnsDefinition.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IColumnsDefinition.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libserializer/IColumnsDefinition.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/IColumnsDefinition.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/ISQLiteSerializerSchema.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISQLiteSerializerSchema.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libserializer/ISQLiteSerializerSchema.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISQLiteSerializerSchema.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/ISerializer.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISerializer.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libserializer/ISerializer.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISerializer.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/ISerializerContainer.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISerializerContainer.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libserializer/ISerializerContainer.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISerializerContainer.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/ISerializerFactory.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISerializerFactory.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/ISerializerFactory.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISerializerFactory.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/ISerializerRowData.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISerializerRowData.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libserializer/ISerializerRowData.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISerializerRowData.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/ISerializerRowReader.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/ISerializerRowReader.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libserializer/ISerializerRowReader.h
===================================================================
diff -u
--- src/libserializer/ISerializerRowReader.h	(revision 0)
+++ src/libserializer/ISerializerRowReader.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,52 @@
+// ============================================================================
+//  Copyright (C) 2001-2014 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#ifndef __ISERIALIZERROWREADER_H__
+#define __ISERIALIZERROWREADER_H__
+
+#include "../libstring/TString.h"
+#include "../libchcore/TPath.h"
+#include "libserializer.h"
+
+namespace serializer
+{
+	class LIBSERIALIZER_API ISerializerRowReader
+	{
+	public:
+		virtual ~ISerializerRowReader();
+
+		virtual bool Next() = 0;
+
+		virtual void GetValue(const string::TString& strColName, bool& bValue) = 0;
+		virtual void GetValue(const string::TString& strColName, short& iValue) = 0;
+		virtual void GetValue(const string::TString& strColName, unsigned short& uiValue) = 0;
+		virtual void GetValue(const string::TString& strColName, int& iValue) = 0;
+		virtual void GetValue(const string::TString& strColName, unsigned int& uiValue) = 0;
+		virtual void GetValue(const string::TString& strColName, long& lValue) = 0;
+		virtual void GetValue(const string::TString& strColName, unsigned long& ulValue) = 0;
+		virtual void GetValue(const string::TString& strColName, long long& llValue) = 0;
+		virtual void GetValue(const string::TString& strColName, unsigned long long& llValue) = 0;
+		virtual void GetValue(const string::TString& strColName, double& dValue) = 0;
+		virtual void GetValue(const string::TString& strColName, string::TString& strValue) = 0;
+		virtual void GetValue(const string::TString& strColName, chcore::TSmartPath& pathValue) = 0;
+	};
+
+	typedef std::shared_ptr<ISerializerRowReader> ISerializerRowReaderPtr;
+}
+
+#endif
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/SerializerDataTypes.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/SerializerDataTypes.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/TFakeFileSerializer.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFakeFileSerializer.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag c085b65f1de24f25feab2bac2d5882abf04aabcf is not in file src/libserializer/TFakeFileSerializer.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TFakeFileSerializer.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libserializer/TModificationTracker.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TModificationTracker.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/TObsoleteFiles.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TObsoleteFiles.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libserializer/TObsoleteFiles.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TObsoleteFiles.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/TPlainStringPool.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TPlainStringPool.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libserializer/TPlainStringPool.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TPlainStringPool.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/TRemovedObjects.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TRemovedObjects.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/TRemovedObjects.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TRemovedObjects.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/TSQLiteColumnDefinition.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteColumnDefinition.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45 is not in file src/libserializer/TSQLiteColumnDefinition.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteColumnDefinition.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libserializer/TSQLiteDatabase.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteDatabase.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libserializer/TSQLiteDatabase.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteDatabase.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libserializer/TSQLiteException.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteException.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libserializer/TSQLiteException.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteException.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteSerializer.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteSerializer.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteSerializer.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteSerializer.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteSerializerContainer.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteSerializerContainer.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteSerializerContainer.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteSerializerContainer.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteSerializerFactory.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteSerializerFactory.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteSerializerFactory.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteSerializerFactory.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteSerializerRowData.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteSerializerRowData.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteSerializerRowData.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteSerializerRowData.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteSerializerRowReader.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteSerializerRowReader.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libserializer/TSQLiteSerializerRowReader.h
===================================================================
diff -u
--- src/libserializer/TSQLiteSerializerRowReader.h	(revision 0)
+++ src/libserializer/TSQLiteSerializerRowReader.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,70 @@
+// ============================================================================
+//  Copyright (C) 2001-2014 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#ifndef __TSQLITESERIALIZERROWREADER_H__
+#define __TSQLITESERIALIZERROWREADER_H__
+
+#include "ISerializerRowReader.h"
+#include "TSQLiteStatement.h"
+#include "TSQLiteColumnDefinition.h"
+#include "../liblogger/TLogger.h"
+
+namespace serializer
+{
+	class LIBSERIALIZER_API TSQLiteSerializerRowReader : public ISerializerRowReader
+	{
+	public:
+		TSQLiteSerializerRowReader(const sqlite::TSQLiteDatabasePtr& spDatabase, TSQLiteColumnsDefinition& rColumns, const string::TString& strContainerName, const logger::TLogFileDataPtr& spLogFileData);
+		TSQLiteSerializerRowReader(const TSQLiteSerializerRowReader&) = delete;
+		virtual ~TSQLiteSerializerRowReader();
+
+		TSQLiteSerializerRowReader& operator=(const TSQLiteSerializerRowReader&) = delete;
+
+		bool Next() override;
+
+		void GetValue(const string::TString& strColName, bool& bValue) override;
+		void GetValue(const string::TString& strColName, short& iValue) override;
+		void GetValue(const string::TString& strColName, unsigned short& uiValue) override;
+		void GetValue(const string::TString& strColName, int& iValue) override;
+		void GetValue(const string::TString& strColName, unsigned int& uiValue) override;
+		void GetValue(const string::TString& strColName, long& lValue) override;
+		void GetValue(const string::TString& strColName, unsigned long& ulValue) override;
+		void GetValue(const string::TString& strColName, long long& llValue) override;
+		void GetValue(const string::TString& strColName, unsigned long long& ullValue) override;
+		void GetValue(const string::TString& strColName, double& dValue) override;
+		void GetValue(const string::TString& strColName, string::TString& strValue) override;
+		void GetValue(const string::TString& strColName, chcore::TSmartPath& pathValue) override;
+
+	private:
+		int GetColumnIndex(const string::TString& strColName) const;
+
+	private:
+#pragma warning(push)
+#pragma warning(disable: 4251)
+		bool m_bInitialized;
+		sqlite::TSQLiteStatementPtr m_spStatement;
+		TSQLiteColumnsDefinition& m_rColumns;
+		string::TString m_strContainerName;
+		logger::TLoggerPtr m_spLog;
+#pragma warning(pop)
+	};
+
+	typedef std::shared_ptr<TSQLiteSerializerRowReader> TSQLiteSerializerRowReaderPtr;
+}
+
+#endif
Fisheye: tag f12e631659a91c301d9c860dd411b3cb9fcaf6a9 is not in file src/libserializer/TSQLiteStatement.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteStatement.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libserializer/TSQLiteStatement.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteStatement.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteTaskManagerSchema.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteTaskManagerSchema.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 12ee49f6bf1f8921500ee2078e0a8c2d7b6d2a45 is not in file src/libserializer/TSQLiteTaskManagerSchema.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteTaskManagerSchema.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteTaskSchema.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteTaskSchema.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag e98c03b108baad889dfd7c7fbb1a49f5ea5a55d8 is not in file src/libserializer/TSQLiteTaskSchema.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteTaskSchema.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/TSQLiteTransaction.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteTransaction.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libserializer/TSQLiteTransaction.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSQLiteTransaction.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libserializer/TSerializerException.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSerializerException.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libserializer/TSerializerException.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSerializerException.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libserializer/TSerializerVersion.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSerializerVersion.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libserializer/TSerializerVersion.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSerializerVersion.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/TSharedModificationTracker.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TSharedModificationTracker.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/Tests/TestsTModificationTracker.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTModificationTracker.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/Tests/TestsTSQLiteDatabase.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTSQLiteDatabase.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/Tests/TestsTSQLiteStatement.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTSQLiteStatement.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/Tests/TestsTSQLiteTransaction.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTSQLiteTransaction.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libserializer/Tests/TestsTSharedModificationTracker.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTSharedModificationTracker.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libserializer/dllmain.cpp
===================================================================
diff -u
--- src/libserializer/dllmain.cpp	(revision 0)
+++ src/libserializer/dllmain.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,16 @@
+// dllmain.cpp : Defines the entry point for the DLL application.
+#include "stdafx.h"
+
+BOOL APIENTRY DllMain(HMODULE /*hModule*/, DWORD ulReasonForCall, LPVOID /*lpReserved*/)
+{
+	switch (ulReasonForCall)
+	{
+	case DLL_PROCESS_ATTACH:
+	case DLL_THREAD_ATTACH:
+	case DLL_THREAD_DETACH:
+	case DLL_PROCESS_DETACH:
+		break;
+	}
+	return TRUE;
+}
+
Index: src/libserializer/libserializer.h
===================================================================
diff -u
--- src/libserializer/libserializer.h	(revision 0)
+++ src/libserializer/libserializer.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,21 @@
+// The following ifdef block is the standard way of creating macros which make exporting 
+// from a DLL simpler. All files within this DLL are compiled with the LIBSERIALIZER_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see 
+// LIBSERIALIZER_API functions as being imported from a DLL, whereas this DLL sees symbols
+// defined with this macro as being exported.
+#if defined(_WIN32) || defined(_WIN64)
+	#ifdef LIBSERIALIZER_EXPORTS
+		#define LIBSERIALIZER_API __declspec(dllexport)
+	#else
+		#define LIBSERIALIZER_API __declspec(dllimport)
+	#endif
+#else
+	/** \brief Import/export macros
+	*
+	*  These macros are being used throughout the whole code. They are meant to
+	*  export symbols (if the LIBSERIALIZER_EXPORTS is defined) from this library
+	*  (also for importing (when LIBSERIALIZER_EXPORTS macro is undefined) in other apps).
+	*/
+	#define LIBSERIALIZER_API
+#endif
Index: src/libserializer/libserializer.rc
===================================================================
diff -u
Binary files differ
Index: src/libserializer/libserializer.vcxproj
===================================================================
diff -u
--- src/libserializer/libserializer.vcxproj	(revision 0)
+++ src/libserializer/libserializer.vcxproj	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,634 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Debug|Win32">
+      <Configuration>Testing Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Debug|x64">
+      <Configuration>Testing Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Release|Win32">
+      <Configuration>Testing Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Release|x64">
+      <Configuration>Testing Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>libserializer</ProjectName>
+    <ProjectGuid>{9490EC08-9CAB-4F99-99D8-0297E5BF6EA7}</ProjectGuid>
+    <RootNamespace>libserializer</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v120_xp</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v120_xp</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120_xp</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120_xp</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd32.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd32.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd32.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd32.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd64.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd64.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd64.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd64.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>11.0.51106.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)32ud</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)32ud</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)64ud</TargetName>
+    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <RunCodeAnalysis>false</RunCodeAnalysis>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)64ud</TargetName>
+    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <RunCodeAnalysis>false</RunCodeAnalysis>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)32u</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)32u</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)64u</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)64u</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBSERIALIZER_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>../../ext</AdditionalIncludeDirectories>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBSERIALIZER_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;../../ext</AdditionalIncludeDirectories>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalDependencies>gmock32d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBSERIALIZER_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>false</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <EnablePREfast>false</EnablePREfast>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>../../ext</AdditionalIncludeDirectories>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBSERIALIZER_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>false</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <EnablePREfast>false</EnablePREfast>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;../../ext</AdditionalIncludeDirectories>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalDependencies>gmock64d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBSERIALIZER_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>../../ext</AdditionalIncludeDirectories>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBSERIALIZER_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;../../ext</AdditionalIncludeDirectories>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalDependencies>gmock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBSERIALIZER_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>../../ext</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBSERIALIZER_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;../../ext</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalDependencies>gmock64.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="GTestMacros.h" />
+    <ClInclude Include="IColumnsDefinition.h" />
+    <ClInclude Include="ISerializer.h" />
+    <ClInclude Include="ISerializerContainer.h" />
+    <ClInclude Include="ISerializerFactory.h" />
+    <ClInclude Include="ISerializerRowData.h" />
+    <ClInclude Include="ISerializerRowReader.h" />
+    <ClInclude Include="ISQLiteSerializerSchema.h" />
+    <ClInclude Include="resource.h" />
+    <ClInclude Include="SerializerDataTypes.h" />
+    <ClInclude Include="TFakeFileSerializer.h" />
+    <ClInclude Include="TModificationTracker.h" />
+    <ClInclude Include="TObsoleteFiles.h" />
+    <ClInclude Include="TPlainStringPool.h" />
+    <ClInclude Include="TRemovedObjects.h" />
+    <ClInclude Include="TSerializerException.h" />
+    <ClInclude Include="TSerializerVersion.h" />
+    <ClInclude Include="TSharedModificationTracker.h" />
+    <ClInclude Include="TSQLiteColumnDefinition.h" />
+    <ClInclude Include="TSQLiteDatabase.h" />
+    <ClInclude Include="TSQLiteException.h" />
+    <ClInclude Include="TSQLiteSerializer.h" />
+    <ClInclude Include="TSQLiteSerializerContainer.h" />
+    <ClInclude Include="TSQLiteSerializerFactory.h" />
+    <ClInclude Include="TSQLiteSerializerRowData.h" />
+    <ClInclude Include="TSQLiteSerializerRowReader.h" />
+    <ClInclude Include="TSQLiteStatement.h" />
+    <ClInclude Include="TSQLiteTaskManagerSchema.h" />
+    <ClInclude Include="TSQLiteTaskSchema.h" />
+    <ClInclude Include="TSQLiteTransaction.h" />
+    <ClInclude Include="libserializer.h" />
+    <ClInclude Include="stdafx.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <ClCompile Include="IColumnsDefinition.cpp" />
+    <ClCompile Include="ISerializer.cpp" />
+    <ClCompile Include="ISerializerContainer.cpp" />
+    <ClCompile Include="ISerializerFactory.cpp" />
+    <ClCompile Include="ISerializerRowData.cpp" />
+    <ClCompile Include="ISerializerRowReader.cpp" />
+    <ClCompile Include="ISQLiteSerializerSchema.cpp" />
+    <ClCompile Include="Tests\TestsTModificationTracker.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTSharedModificationTracker.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTSQLiteDatabase.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTSQLiteStatement.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTSQLiteTransaction.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="TFakeFileSerializer.cpp" />
+    <ClCompile Include="TObsoleteFiles.cpp" />
+    <ClCompile Include="TPlainStringPool.cpp" />
+    <ClCompile Include="TRemovedObjects.cpp" />
+    <ClCompile Include="TSerializerException.cpp" />
+    <ClCompile Include="TSerializerVersion.cpp" />
+    <ClCompile Include="TSQLiteColumnDefinition.cpp" />
+    <ClCompile Include="TSQLiteDatabase.cpp" />
+    <ClCompile Include="TSQLiteException.cpp" />
+    <ClCompile Include="TSQLiteSerializer.cpp" />
+    <ClCompile Include="TSQLiteSerializerContainer.cpp" />
+    <ClCompile Include="TSQLiteSerializerFactory.cpp" />
+    <ClCompile Include="TSQLiteSerializerRowData.cpp" />
+    <ClCompile Include="TSQLiteSerializerRowReader.cpp" />
+    <ClCompile Include="TSQLiteStatement.cpp" />
+    <ClCompile Include="TSQLiteTaskManagerSchema.cpp" />
+    <ClCompile Include="TSQLiteTaskSchema.cpp" />
+    <ClCompile Include="TSQLiteTransaction.cpp" />
+    <ClCompile Include="dllmain.cpp">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+      </PrecompiledHeader>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">false</CompileAsManaged>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+      </PrecompiledHeader>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</CompileAsManaged>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">false</CompileAsManaged>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+      </PrecompiledHeader>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">false</CompileAsManaged>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+      </PrecompiledHeader>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">false</CompileAsManaged>
+    </ClCompile>
+    <ClCompile Include="stdafx.cpp">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Create</PrecompiledHeader>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\ext\sqlite3\sqlite3.vc140.vcxproj">
+      <Project>{d41831f5-b2a5-4c92-9f15-1d9ab04722cc}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\libchcore\libchcore.vc140.vcxproj">
+      <Project>{cbbf380b-7b16-4a1e-8194-758dad7d8011}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\liblogger\liblogger.vc140.vcxproj">
+      <Project>{df9957d4-3d95-4ac3-ad3f-dcbea058f79d}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\libstring\libstring.vcxproj">
+      <Project>{5bd38175-9f48-417d-8e5b-7093b1873ce5}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="libserializer.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
Index: src/libserializer/libserializer.vcxproj.filters
===================================================================
diff -u
--- src/libserializer/libserializer.vcxproj.filters	(revision 0)
+++ src/libserializer/libserializer.vcxproj.filters	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Source Files\Library files">
+      <UniqueIdentifier>{e160d2cd-2a88-40ef-97b4-6b7d3b7ed6b1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+    </Filter>
+    <Filter Include="Source Files\Tools">
+      <UniqueIdentifier>{1fddd996-c723-4b09-9c98-868df98fe204}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Serialization">
+      <UniqueIdentifier>{2a642b1a-83b2-4643-ac85-d040e8904d4d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Serialization\SQLite">
+      <UniqueIdentifier>{3ce71f46-ef32-4c71-9ac0-bcb36d6b6e99}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Serialization\SQLite\SQLite Schemas">
+      <UniqueIdentifier>{0b6550bf-a20b-4f12-9469-bd3e3bfa40fa}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Tools\SQLite">
+      <UniqueIdentifier>{e6da867d-b0bd-42d5-a0c8-43542984582f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Tests">
+      <UniqueIdentifier>{b7eef53f-fb70-4f50-aa6d-0a699bb20f25}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Serialization\Fake">
+      <UniqueIdentifier>{9d121063-367c-4424-8009-12b3635e0fed}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Tools\ModificationTrackers">
+      <UniqueIdentifier>{5e2ee854-6783-4e6e-b8a9-65ee8b6dec5c}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="libserializer.h">
+      <Filter>Source Files\Library files</Filter>
+    </ClInclude>
+    <ClInclude Include="stdafx.h">
+      <Filter>Source Files\Library files</Filter>
+    </ClInclude>
+    <ClInclude Include="ISQLiteSerializerSchema.h">
+      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteTaskManagerSchema.h">
+      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteTaskSchema.h">
+      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
+    </ClInclude>
+    <ClInclude Include="TSerializerVersion.h">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteColumnDefinition.h">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteSerializer.h">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteSerializerContainer.h">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteSerializerFactory.h">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteSerializerRowData.h">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteSerializerRowReader.h">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="IColumnsDefinition.h">
+      <Filter>Source Files\Serialization</Filter>
+    </ClInclude>
+    <ClInclude Include="ISerializer.h">
+      <Filter>Source Files\Serialization</Filter>
+    </ClInclude>
+    <ClInclude Include="ISerializerContainer.h">
+      <Filter>Source Files\Serialization</Filter>
+    </ClInclude>
+    <ClInclude Include="ISerializerFactory.h">
+      <Filter>Source Files\Serialization</Filter>
+    </ClInclude>
+    <ClInclude Include="ISerializerRowData.h">
+      <Filter>Source Files\Serialization</Filter>
+    </ClInclude>
+    <ClInclude Include="ISerializerRowReader.h">
+      <Filter>Source Files\Serialization</Filter>
+    </ClInclude>
+    <ClInclude Include="TSerializerException.h">
+      <Filter>Source Files\Serialization</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteDatabase.h">
+      <Filter>Source Files\Tools\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteException.h">
+      <Filter>Source Files\Tools\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteStatement.h">
+      <Filter>Source Files\Tools\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="TSQLiteTransaction.h">
+      <Filter>Source Files\Tools\SQLite</Filter>
+    </ClInclude>
+    <ClInclude Include="TPlainStringPool.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
+    <ClInclude Include="TObsoleteFiles.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
+    <ClInclude Include="TFakeFileSerializer.h">
+      <Filter>Source Files\Serialization\Fake</Filter>
+    </ClInclude>
+    <ClInclude Include="SerializerDataTypes.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
+    <ClInclude Include="GTestMacros.h">
+      <Filter>Tests</Filter>
+    </ClInclude>
+    <ClInclude Include="resource.h" />
+    <ClInclude Include="TRemovedObjects.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
+    <ClInclude Include="TModificationTracker.h">
+      <Filter>Source Files\Tools\ModificationTrackers</Filter>
+    </ClInclude>
+    <ClInclude Include="TSharedModificationTracker.h">
+      <Filter>Source Files\Tools\ModificationTrackers</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="dllmain.cpp">
+      <Filter>Source Files\Library files</Filter>
+    </ClCompile>
+    <ClCompile Include="stdafx.cpp">
+      <Filter>Source Files\Library files</Filter>
+    </ClCompile>
+    <ClCompile Include="ISQLiteSerializerSchema.cpp">
+      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteTaskManagerSchema.cpp">
+      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteTaskSchema.cpp">
+      <Filter>Source Files\Serialization\SQLite\SQLite Schemas</Filter>
+    </ClCompile>
+    <ClCompile Include="TSerializerVersion.cpp">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteColumnDefinition.cpp">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteSerializer.cpp">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteSerializerContainer.cpp">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteSerializerFactory.cpp">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteSerializerRowData.cpp">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteSerializerRowReader.cpp">
+      <Filter>Source Files\Serialization\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="IColumnsDefinition.cpp">
+      <Filter>Source Files\Serialization</Filter>
+    </ClCompile>
+    <ClCompile Include="ISerializer.cpp">
+      <Filter>Source Files\Serialization</Filter>
+    </ClCompile>
+    <ClCompile Include="ISerializerContainer.cpp">
+      <Filter>Source Files\Serialization</Filter>
+    </ClCompile>
+    <ClCompile Include="ISerializerFactory.cpp">
+      <Filter>Source Files\Serialization</Filter>
+    </ClCompile>
+    <ClCompile Include="ISerializerRowData.cpp">
+      <Filter>Source Files\Serialization</Filter>
+    </ClCompile>
+    <ClCompile Include="ISerializerRowReader.cpp">
+      <Filter>Source Files\Serialization</Filter>
+    </ClCompile>
+    <ClCompile Include="TSerializerException.cpp">
+      <Filter>Source Files\Serialization</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteDatabase.cpp">
+      <Filter>Source Files\Tools\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteException.cpp">
+      <Filter>Source Files\Tools\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteStatement.cpp">
+      <Filter>Source Files\Tools\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="TSQLiteTransaction.cpp">
+      <Filter>Source Files\Tools\SQLite</Filter>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTSQLiteDatabase.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTSQLiteStatement.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTSQLiteTransaction.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="TPlainStringPool.cpp">
+      <Filter>Source Files\Tools</Filter>
+    </ClCompile>
+    <ClCompile Include="TObsoleteFiles.cpp">
+      <Filter>Source Files\Tools</Filter>
+    </ClCompile>
+    <ClCompile Include="TFakeFileSerializer.cpp">
+      <Filter>Source Files\Serialization\Fake</Filter>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTModificationTracker.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTSharedModificationTracker.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="TRemovedObjects.cpp">
+      <Filter>Source Files\Tools</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="libserializer.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
Index: src/libserializer/res/libserializer.rc2
===================================================================
diff -u
--- src/libserializer/res/libserializer.rc2	(revision 0)
+++ src/libserializer/res/libserializer.rc2	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,52 @@
+//
+// ch.rc2 - resources Microsoft Visual C++ does not edit directly
+//
+
+#ifdef APSTUDIO_INVOKED
+	#error this file is not editable by Microsoft Visual C++
+#endif //APSTUDIO_INVOKED
+
+#include "../common/version.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// Add manually edited resources here...
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION PRODUCT_VERSION1, PRODUCT_VERSION2, PRODUCT_VERSION3, PRODUCT_VERSION4
+ PRODUCTVERSION PRODUCT_VERSION1, PRODUCT_VERSION2, PRODUCT_VERSION3, PRODUCT_VERSION4
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x29L
+#else
+ FILEFLAGS 0x28L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "Comments", "Core Copy Handler functionalities"
+            VALUE "CompanyName", " "
+            VALUE "FileDescription", "Copy Handler Core"
+            VALUE "FileVersion", PRODUCT_VERSION
+            VALUE "LegalCopyright", COPYRIGHT_INFO
+            VALUE "LegalTrademarks", " "
+            VALUE "OriginalFilename", "libserializer.dll"
+            VALUE "ProductName", "Copy Handler"
+            VALUE "ProductVersion", PRODUCT_VERSION
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+/////////////////////////////////////////////////////////////////////////////
Index: src/libserializer/resource.h
===================================================================
diff -u
Binary files differ
Index: src/libserializer/stdafx.cpp
===================================================================
diff -u
--- src/libserializer/stdafx.cpp	(revision 0)
+++ src/libserializer/stdafx.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+// libserializer.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
Index: src/libserializer/stdafx.h
===================================================================
diff -u
--- src/libserializer/stdafx.h	(revision 0)
+++ src/libserializer/stdafx.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,26 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#pragma once
+
+#include "../common/targetver.h"
+
+#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
+// Windows Header Files:
+#include <windows.h>
+
+#include <boost/bind.hpp>
+
+#pragma warning(push)
+#pragma warning(disable: 4985)
+
+#include <boost/thread/shared_mutex.hpp>
+
+#pragma warning(pop)
+
+#include <list>
+#include <set>
+#include <vector>
+#include <tchar.h>
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libstring/TString.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TString.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag 541304f4e098b4c7617b718287ab40646d5deb92 is not in file src/libstring/TString.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TString.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libstring/TStringArray.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TStringArray.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libstring/TStringArray.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TStringArray.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libstring/TStringException.cpp
===================================================================
diff -u
--- src/libstring/TStringException.cpp	(revision 0)
+++ src/libstring/TStringException.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,10 @@
+#include "stdafx.h"
+#include "TStringException.h"
+
+namespace string
+{
+	TStringException::TStringException(const char* pszMsg) :
+		std::exception(pszMsg)
+	{
+	}
+}
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libstring/TStringException.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TStringException.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag d9527df01ee91b35d9a5fdccb80ded25a9c8265f is not in file src/libstring/TStringPattern.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TStringPattern.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libstring/TStringPattern.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TStringPattern.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libstring/TStringPatternArray.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TStringPatternArray.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libstring/TStringPatternArray.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TStringPatternArray.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libstring/TStringSet.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TStringSet.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag b26ced3298e3e7e51d91f3ac70b56746786da83b is not in file src/libstring/TStringSet.h
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/TStringSet.h'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libstring/Tests/TestsTString.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTString.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libstring/Tests/TestsTStringPattern.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTStringPattern.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: tag a4635addad389b9e117679437a3e1b64a739ea96 is not in file src/libstring/Tests/TestsTStringPatternArray.cpp
Fisheye: Tag 0d5b67ee96b435d63f7bf075dc8e28603793b187 refers to a dead (removed) revision in file `src/libchcore/Tests/TestsTStringPatternArray.cpp'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: src/libstring/dllmain.cpp
===================================================================
diff -u
--- src/libstring/dllmain.cpp	(revision 0)
+++ src/libstring/dllmain.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,16 @@
+// dllmain.cpp : Defines the entry point for the DLL application.
+#include "stdafx.h"
+
+BOOL APIENTRY DllMain(HMODULE /*hModule*/, DWORD ulReasonForCall, LPVOID /*lpReserved*/)
+{
+	switch (ulReasonForCall)
+	{
+	case DLL_PROCESS_ATTACH:
+	case DLL_THREAD_ATTACH:
+	case DLL_THREAD_DETACH:
+	case DLL_PROCESS_DETACH:
+		break;
+	}
+	return TRUE;
+}
+
Index: src/libstring/libstring.h
===================================================================
diff -u
--- src/libstring/libstring.h	(revision 0)
+++ src/libstring/libstring.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,21 @@
+// The following ifdef block is the standard way of creating macros which make exporting 
+// from a DLL simpler. All files within this DLL are compiled with the LIBSTRING_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see 
+// LIBSTRING_API functions as being imported from a DLL, whereas this DLL sees symbols
+// defined with this macro as being exported.
+#if defined(_WIN32) || defined(_WIN64)
+	#ifdef LIBSTRING_EXPORTS
+		#define LIBSTRING_API __declspec(dllexport)
+	#else
+		#define LIBSTRING_API __declspec(dllimport)
+	#endif
+#else
+	/** \brief Import/export macros
+	*
+	*  These macros are being used throughout the whole code. They are meant to
+	*  export symbols (if the LIBSTRING_EXPORTS is defined) from this library
+	*  (also for importing (when LIBSTRING_EXPORTS macro is undefined) in other apps).
+	*/
+	#define LIBSTRING_API
+#endif
Index: src/libstring/libstring.rc
===================================================================
diff -u
Binary files differ
Index: src/libstring/libstring.vcxproj
===================================================================
diff -u
--- src/libstring/libstring.vcxproj	(revision 0)
+++ src/libstring/libstring.vcxproj	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,566 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Debug|Win32">
+      <Configuration>Testing Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Debug|x64">
+      <Configuration>Testing Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Release|Win32">
+      <Configuration>Testing Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Testing Release|x64">
+      <Configuration>Testing Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>libstring</ProjectName>
+    <ProjectGuid>{5BD38175-9F48-417D-8E5B-7093B1873CE5}</ProjectGuid>
+    <RootNamespace>libstring</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v120_xp</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v120_xp</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120_xp</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120_xp</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd32.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd32.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd32.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd32.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd64.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd64.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd64.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\common\Boost.props" />
+    <Import Project="..\common\FileExtd64.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>11.0.51106.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)32ud</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)32ud</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)64ud</TargetName>
+    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <RunCodeAnalysis>false</RunCodeAnalysis>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)64ud</TargetName>
+    <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <RunCodeAnalysis>false</RunCodeAnalysis>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)32u</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)32u</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)64u</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+    <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)intermediate\$(PlatformToolset)\$(Platform)\$(ProjectName)_$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <TargetName>$(ProjectName)64u</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBSTRING_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>../../ext</AdditionalIncludeDirectories>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBSTRING_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;../../ext</AdditionalIncludeDirectories>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalDependencies>gmock32d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBSTRING_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>false</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <EnablePREfast>false</EnablePREfast>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>../../ext</AdditionalIncludeDirectories>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBSTRING_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>false</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <EnablePREfast>false</EnablePREfast>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;../../ext</AdditionalIncludeDirectories>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalDependencies>gmock64d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBSTRING_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>../../ext</AdditionalIncludeDirectories>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBSTRING_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;../../ext</AdditionalIncludeDirectories>
+      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalDependencies>gmock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBSTRING_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>../../ext</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBSTRING_EXPORTS;_BIND_TO_CURRENT_VCLIBS_VERSION=1;NOMINMAX;TESTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\ext\googletest\googletest\include;..\..\ext\googletest\googlemock\include;../../ext</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4512;4714</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX64</TargetMachine>
+      <AdditionalDependencies>gmock64.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>"$(OutDir)"</AdditionalLibraryDirectories>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <PostBuildEvent>
+      <Command>cd "$(TargetDir)"
+
+if "$(PlatformName)" EQU "x64" goto x64
+
+:x32
+"$(SolutionDir)tools\test_runner32.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:x64
+"$(SolutionDir)tools\test_runner64.exe" "$(TargetPath)" --gtest_shuffle --gtest_output="xml:$(TargetPath).UnitTests.xml"
+goto end
+
+:end
+</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="resource.h" />
+    <ClInclude Include="TStringException.h" />
+    <ClInclude Include="TStringPattern.h" />
+    <ClInclude Include="TStringPatternArray.h" />
+    <ClInclude Include="TString.h" />
+    <ClInclude Include="TStringArray.h" />
+    <ClInclude Include="TStringSet.h" />
+    <ClInclude Include="libstring.h" />
+    <ClInclude Include="stdafx.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTString.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTStringPattern.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTStringPatternArray.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="TStringException.cpp" />
+    <ClCompile Include="TStringPattern.cpp" />
+    <ClCompile Include="TStringPatternArray.cpp" />
+    <ClCompile Include="TString.cpp" />
+    <ClCompile Include="TStringArray.cpp" />
+    <ClCompile Include="TStringSet.cpp" />
+    <ClCompile Include="dllmain.cpp">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">
+      </PrecompiledHeader>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">false</CompileAsManaged>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">
+      </PrecompiledHeader>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</CompileAsManaged>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">false</CompileAsManaged>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">
+      </PrecompiledHeader>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">false</CompileAsManaged>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+      </PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">
+      </PrecompiledHeader>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
+      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">false</CompileAsManaged>
+    </ClCompile>
+    <ClCompile Include="stdafx.cpp">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Testing Release|x64'">Create</PrecompiledHeader>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="libstring.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
Index: src/libstring/libstring.vcxproj.filters
===================================================================
diff -u
--- src/libstring/libstring.vcxproj.filters	(revision 0)
+++ src/libstring/libstring.vcxproj.filters	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Source Files\Library files">
+      <UniqueIdentifier>{e160d2cd-2a88-40ef-97b4-6b7d3b7ed6b1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+    </Filter>
+    <Filter Include="Source Files\Tools">
+      <UniqueIdentifier>{1fddd996-c723-4b09-9c98-868df98fe204}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Tests">
+      <UniqueIdentifier>{b7eef53f-fb70-4f50-aa6d-0a699bb20f25}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="libstring.h">
+      <Filter>Source Files\Library files</Filter>
+    </ClInclude>
+    <ClInclude Include="stdafx.h">
+      <Filter>Source Files\Library files</Filter>
+    </ClInclude>
+    <ClInclude Include="TString.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
+    <ClInclude Include="TStringArray.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
+    <ClInclude Include="TStringSet.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
+    <ClInclude Include="TStringException.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
+    <ClInclude Include="TStringPattern.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
+    <ClInclude Include="TStringPatternArray.h">
+      <Filter>Source Files\Tools</Filter>
+    </ClInclude>
+    <ClInclude Include="resource.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="dllmain.cpp">
+      <Filter>Source Files\Library files</Filter>
+    </ClCompile>
+    <ClCompile Include="stdafx.cpp">
+      <Filter>Source Files\Library files</Filter>
+    </ClCompile>
+    <ClCompile Include="TString.cpp">
+      <Filter>Source Files\Tools</Filter>
+    </ClCompile>
+    <ClCompile Include="TStringArray.cpp">
+      <Filter>Source Files\Tools</Filter>
+    </ClCompile>
+    <ClCompile Include="TStringSet.cpp">
+      <Filter>Source Files\Tools</Filter>
+    </ClCompile>
+    <ClCompile Include="TStringException.cpp">
+      <Filter>Source Files\Tools</Filter>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTString.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\tests\tests_shared\TestsExports.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="TStringPattern.cpp">
+      <Filter>Source Files\Tools</Filter>
+    </ClCompile>
+    <ClCompile Include="TStringPatternArray.cpp">
+      <Filter>Source Files\Tools</Filter>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTStringPatternArray.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+    <ClCompile Include="Tests\TestsTStringPattern.cpp">
+      <Filter>Tests</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="libstring.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
Index: src/libstring/res/libstring.rc2
===================================================================
diff -u
--- src/libstring/res/libstring.rc2	(revision 0)
+++ src/libstring/res/libstring.rc2	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,52 @@
+//
+// ch.rc2 - resources Microsoft Visual C++ does not edit directly
+//
+
+#ifdef APSTUDIO_INVOKED
+	#error this file is not editable by Microsoft Visual C++
+#endif //APSTUDIO_INVOKED
+
+#include "../common/version.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// Add manually edited resources here...
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION PRODUCT_VERSION1, PRODUCT_VERSION2, PRODUCT_VERSION3, PRODUCT_VERSION4
+ PRODUCTVERSION PRODUCT_VERSION1, PRODUCT_VERSION2, PRODUCT_VERSION3, PRODUCT_VERSION4
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x29L
+#else
+ FILEFLAGS 0x28L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "Comments", "Core Copy Handler functionalities"
+            VALUE "CompanyName", " "
+            VALUE "FileDescription", "Copy Handler Core"
+            VALUE "FileVersion", PRODUCT_VERSION
+            VALUE "LegalCopyright", COPYRIGHT_INFO
+            VALUE "LegalTrademarks", " "
+            VALUE "OriginalFilename", "libstring.dll"
+            VALUE "ProductName", "Copy Handler"
+            VALUE "ProductVersion", PRODUCT_VERSION
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+/////////////////////////////////////////////////////////////////////////////
Index: src/libstring/resource.h
===================================================================
diff -u
Binary files differ
Index: src/libstring/stdafx.cpp
===================================================================
diff -u
--- src/libstring/stdafx.cpp	(revision 0)
+++ src/libstring/stdafx.cpp	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+// libstring.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
Index: src/libstring/stdafx.h
===================================================================
diff -u
--- src/libstring/stdafx.h	(revision 0)
+++ src/libstring/stdafx.h	(revision 0d5b67ee96b435d63f7bf075dc8e28603793b187)
@@ -0,0 +1,26 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#pragma once
+
+#include "../common/targetver.h"
+
+#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
+// Windows Header Files:
+#include <windows.h>
+
+#include <boost/bind.hpp>
+
+#pragma warning(push)
+#pragma warning(disable: 4985)
+
+#include <boost/thread/shared_mutex.hpp>
+
+#pragma warning(pop)
+
+#include <list>
+#include <set>
+#include <vector>
+#include <tchar.h>