24 Commits

Author SHA1 Message Date
Bruce
880a834296 Change build configure. 2026-03-28 22:41:43 +08:00
Bruce
e47813765a Fix bugs. 2026-03-28 19:13:15 +08:00
Bruce
2f0d1dc27f Update build for ARM. 2026-03-28 19:11:29 +08:00
modernw
3c35a8acaa Merge pull request #1 from bingtangxh/master
Add ARM support and remove symbol links
2026-03-28 12:20:47 +08:00
冰糖XH
27e604892d Remove hardcoded pugixml include path
Clear absolute AdditionalIncludeDirectories entries referencing D:\GitHub\App-Installer-For-Windows-8.x-Reset\packages\pugixml.1.15.0\build\native\include\ in pkgread/pkgread.vcxproj across multiple build configurations. This removes a machine-specific include path to improve portability and avoid build failures on other systems; include dirs should be provided via package restore or configured with relative paths or project properties.
2026-03-28 11:31:43 +08:00
冰糖XH
1c05d8a379 Remove unused mmsyscom include from appxinfo.h
Drop the #include <mmsyscom.h> line from appinstaller/appxinfo.h to eliminate an unnecessary dependency and reduce potential compilation issues. No functional changes to code behavior.
2026-03-28 11:22:43 +08:00
Bruce
43983a2c87 Update builder for ARM. 2026-03-28 10:55:13 +08:00
冰糖XH
df0d14e282 Merge branch 'modernw:master' into master 2026-03-28 10:44:10 +08:00
Bruce
419498bef8 Update readme for ARM. 2026-03-28 10:39:28 +08:00
Bruce
4118efa4b6 Remove build files. 2026-03-28 10:38:20 +08:00
Bruce
300b1ba55a Added new features and the setup scripts for ARM users. 2026-03-27 23:46:42 +08:00
冰糖XH
ecde1c8d80 Remove minwindef include; docs and whitespace cleanup
Remove an unnecessary #include <minwindef.h> from pkgread/typestrans.h and perform minor whitespace cleanups in desktopini/main.cpp and pkgread/dllmain.cpp. Update notes/symlinks.md to explain that appxinfo.h and main.cpp now use #include "../<ProjectName>/<ProjectName>.h", so the previous symbolic links are no longer required. These are non-functional cleanup and documentation updates.
2026-03-26 22:13:08 +08:00
冰糖XH
79674b639b Use external headers; remove local header links
Replace local header placeholders in appinstaller with direct references to upstream headers. Deleted the gitlink/header stubs (certmgr.h, notice.h, pkgmgr.h, pkgread.h, priformatcli.h) from appinstaller, updated main.cpp and appxinfo.h to include the ../path to those headers, and adjusted appinstaller.vcxproj.filters to point to the new locations. Cleans up redundant local links and ensures the project references the original header files.
2026-03-26 22:01:12 +08:00
冰糖XH
0073da9c8e Add ARM Desktop SDK props; remove x64 configs
Add ArmDesktopSdk.props and a Directory.Build.props to force-import ARM desktop SDK settings (WindowsSDKDesktopARMSupport and centralized handling of the ARM desktop preprocessor define). Remove x64-specific configurations, property sheets and duplicated ARM preprocessor definitions from multiple .vcxproj files to simplify supported platforms. Update pkgread to use package-based pugixml library paths and set TreatWChar_tAsBuiltInType, and tweak solution configuration entries in AppInstallerReset.sln.
2026-03-26 21:54:42 +08:00
冰糖XH
a472ddba73 Set PlatformTarget to AnyCPU and add publish
Change PlatformTarget from x86 to AnyCPU across solution and projects (Launch, Manager, ModernNotice, Reader) so builds target AnyCPU. Add ClickOnce/publishing properties to Manager.csproj (PublishUrl, Install, Update settings, ApplicationVersion/Revision, BootstrapperEnabled, etc.) and include a BootstrapperPackage entry for .NET Framework 3.5 SP1. These changes prepare the projects for AnyCPU builds and configure Manager for deployment/publishing.
2026-03-26 20:11:24 +08:00
冰糖XH
b2633b37e5 Add pugixml project and reference
Add a new pugixml static library project and include it in the solution to support ARM builds. pkgread now references the new pugixml project (removed direct pugixml file/includes) and its Release|ARM PrecompiledHeader is set to NotUsing. Update solution configurations to include pugixml and add appropriate build platform mappings. Update notes/symlinks.md with instructions for the new project and manual copying of generated pugixml.lib; also clear an AdditionalLibraryDirectories entry in priformatcli.
2026-03-26 15:46:37 +08:00
冰糖XH
fe6a9a186b Enable ARM desktop SDK macro in projects
Add _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1 to PreprocessorDefinitions in multiple .vcxproj files so ARM desktop SDK partition is available at project level. Remove per-file #ifdef _M_ARM defines from several headers and source files (Stdafx.h, targetver.h, main.cpp across various modules) to avoid duplication. Also add ShowIncludes=false in pkgread.vcxproj. This centralizes the ARM macro for consistent ARM builds across modules.
2026-03-26 14:46:26 +08:00
冰糖XH
2e45bb1cd9 Add symlink notes and fix pugixml path
Add notes/symlinks.md documenting required symbolic links for the appinstaller and shared directories, plus guidance for creating symlinks in Debug/Release and including shared subdirs in releases. Update pkgread project and its filters to use a relative path for pugixml.cpp (..\packages\pugixml.1.15.0\...) instead of an absolute user-specific NuGet path so the project is portable and includes pugixml.cpp needed to resolve linker errors for non-x86 builds (e.g. ARM).
2026-03-26 14:27:03 +08:00
冰糖XH
ccf6cfd66c Remove useless pugixml_arm 2026-03-26 13:58:29 +08:00
冰糖XH
34895b9edd Merge branch 'master' of https://github.com/bingtangxh/App-Installer-For-Windows-8.x-Reset 2026-03-26 13:54:51 +08:00
冰糖XH
745a89fa9c Add ARM platform & pugixml_arm, update VS solution
Upgrade solution to Visual Studio 17 and add ARM build configurations across projects. Several .vcxproj files were updated to include Debug/Release|ARM property groups, property sheet imports and LinkIncremental settings; platform toolset set for ARM configs where appropriate. A new pugixml_arm project and its sources/filters were added. Also added ExtensibilityGlobals (SolutionGuid) to the .sln.
2026-03-26 13:54:29 +08:00
Bruce
a3ff273405 Update and fix bugs. 2026-03-25 23:34:36 +08:00
Bruce
ca0b7dbcbb Update something. 2026-02-07 17:52:36 +08:00
Bruce
e49f9db426 Update setup build file. 2026-02-06 22:10:45 +08:00
142 changed files with 183692 additions and 7910 deletions

6
.gitignore vendored
View File

@@ -245,4 +245,8 @@ ModelManifest.xml
[Gg]enerated/
# Setup Build Files
[Oo]thers/
[Oo]thers/
# Arm Build Files
package.zip
ArmPackage.zip

View File

@@ -15,10 +15,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "certmgr", "certmgr\certmgr.
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appinstaller", "appinstaller\appinstaller.vcxproj", "{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}"
ProjectSection(ProjectDependencies) = postProject
{8EAC0230-4990-4E41-8E0F-D641D1561396} = {8EAC0230-4990-4E41-8E0F-D641D1561396}
{33D91B58-1981-4A3C-B4D1-86EE406CDE12} = {33D91B58-1981-4A3C-B4D1-86EE406CDE12}
{A7753282-AA16-43D9-8ACA-7065239DD702} = {A7753282-AA16-43D9-8ACA-7065239DD702}
{798ED492-EECE-457D-8FD8-129DA93CE126} = {798ED492-EECE-457D-8FD8-129DA93CE126}
{8EAC0230-4990-4E41-8E0F-D641D1561396} = {8EAC0230-4990-4E41-8E0F-D641D1561396}
{A7753282-AA16-43D9-8ACA-7065239DD702} = {A7753282-AA16-43D9-8ACA-7065239DD702}
{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C} = {B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}
{E04CCAB9-35DB-495C-A279-5B483C707CD0} = {E04CCAB9-35DB-495C-A279-5B483C707CD0}
{EF4012D4-EF08-499C-B803-177739350B2D} = {EF4012D4-EF08-499C-B803-177739350B2D}
EndProjectSection
@@ -26,6 +27,7 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings\settings.vcxproj", "{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}"
ProjectSection(ProjectDependencies) = postProject
{3AE2A022-ED83-41F1-948A-12A7593CBD00} = {3AE2A022-ED83-41F1-948A-12A7593CBD00}
{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C} = {B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reslib", "reslib\reslib.vcxproj", "{3AE2A022-ED83-41F1-948A-12A7593CBD00}"
@@ -48,8 +50,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrivateInit", "PrivateInit\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppxPackage", "AppxPackage\AppxPackage.csproj", "{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}"
ProjectSection(ProjectDependencies) = postProject
{8EAC0230-4990-4E41-8E0F-D641D1561396} = {8EAC0230-4990-4E41-8E0F-D641D1561396}
{33D91B58-1981-4A3C-B4D1-86EE406CDE12} = {33D91B58-1981-4A3C-B4D1-86EE406CDE12}
{8EAC0230-4990-4E41-8E0F-D641D1561396} = {8EAC0230-4990-4E41-8E0F-D641D1561396}
{A7753282-AA16-43D9-8ACA-7065239DD702} = {A7753282-AA16-43D9-8ACA-7065239DD702}
{EF4012D4-EF08-499C-B803-177739350B2D} = {EF4012D4-EF08-499C-B803-177739350B2D}
EndProjectSection
@@ -71,244 +73,206 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModernNotice", "ModernNotic
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launch", "Launch\Launch.csproj", "{F0288B24-7B84-42A5-9A92-2E16A012E4DE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reader", "Reader\Reader.csproj", "{26B3C19D-6182-4DB5-8B69-EE098A0FD3BB}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pugixml", "pugixml\pugixml.vcxproj", "{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|ARM = Debug|ARM
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|ARM = Release|ARM
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A7753282-AA16-43D9-8ACA-7065239DD702}.Debug|Any CPU.ActiveCfg = Debug|Win32
{A7753282-AA16-43D9-8ACA-7065239DD702}.Debug|x64.ActiveCfg = Debug|x64
{A7753282-AA16-43D9-8ACA-7065239DD702}.Debug|x64.Build.0 = Debug|x64
{A7753282-AA16-43D9-8ACA-7065239DD702}.Debug|ARM.ActiveCfg = Debug|ARM
{A7753282-AA16-43D9-8ACA-7065239DD702}.Debug|ARM.Build.0 = Debug|ARM
{A7753282-AA16-43D9-8ACA-7065239DD702}.Debug|x86.ActiveCfg = Debug|Win32
{A7753282-AA16-43D9-8ACA-7065239DD702}.Debug|x86.Build.0 = Debug|Win32
{A7753282-AA16-43D9-8ACA-7065239DD702}.Release|Any CPU.ActiveCfg = Release|Win32
{A7753282-AA16-43D9-8ACA-7065239DD702}.Release|x64.ActiveCfg = Release|x64
{A7753282-AA16-43D9-8ACA-7065239DD702}.Release|x64.Build.0 = Release|x64
{A7753282-AA16-43D9-8ACA-7065239DD702}.Release|ARM.ActiveCfg = Release|ARM
{A7753282-AA16-43D9-8ACA-7065239DD702}.Release|ARM.Build.0 = Release|ARM
{A7753282-AA16-43D9-8ACA-7065239DD702}.Release|x86.ActiveCfg = Release|Win32
{A7753282-AA16-43D9-8ACA-7065239DD702}.Release|x86.Build.0 = Release|Win32
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Debug|Any CPU.ActiveCfg = Debug|Win32
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Debug|x64.ActiveCfg = Debug|Win32
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Debug|ARM.ActiveCfg = Debug|ARM
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Debug|ARM.Build.0 = Debug|ARM
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Debug|x86.ActiveCfg = Debug|Win32
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Debug|x86.Build.0 = Debug|Win32
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Release|Any CPU.ActiveCfg = Release|Win32
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Release|x64.ActiveCfg = Release|Win32
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Release|ARM.ActiveCfg = Release|ARM
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Release|ARM.Build.0 = Release|ARM
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Release|x86.ActiveCfg = Release|Win32
{8EAC0230-4990-4E41-8E0F-D641D1561396}.Release|x86.Build.0 = Release|Win32
{798ED492-EECE-457D-8FD8-129DA93CE126}.Debug|Any CPU.ActiveCfg = Debug|Win32
{798ED492-EECE-457D-8FD8-129DA93CE126}.Debug|x64.ActiveCfg = Debug|Win32
{798ED492-EECE-457D-8FD8-129DA93CE126}.Debug|ARM.ActiveCfg = Debug|ARM
{798ED492-EECE-457D-8FD8-129DA93CE126}.Debug|ARM.Build.0 = Debug|ARM
{798ED492-EECE-457D-8FD8-129DA93CE126}.Debug|x86.ActiveCfg = Debug|Win32
{798ED492-EECE-457D-8FD8-129DA93CE126}.Debug|x86.Build.0 = Debug|Win32
{798ED492-EECE-457D-8FD8-129DA93CE126}.Release|Any CPU.ActiveCfg = Release|Win32
{798ED492-EECE-457D-8FD8-129DA93CE126}.Release|x64.ActiveCfg = Release|Win32
{798ED492-EECE-457D-8FD8-129DA93CE126}.Release|ARM.ActiveCfg = Release|ARM
{798ED492-EECE-457D-8FD8-129DA93CE126}.Release|ARM.Build.0 = Release|ARM
{798ED492-EECE-457D-8FD8-129DA93CE126}.Release|x86.ActiveCfg = Release|Win32
{798ED492-EECE-457D-8FD8-129DA93CE126}.Release|x86.Build.0 = Release|Win32
{EF4012D4-EF08-499C-B803-177739350B2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Debug|x64.ActiveCfg = Debug|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Debug|x64.Build.0 = Debug|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Debug|ARM.ActiveCfg = Debug|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Debug|ARM.Build.0 = Debug|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Debug|x86.ActiveCfg = Debug|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Debug|x86.Build.0 = Debug|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Release|Any CPU.Build.0 = Release|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Release|x64.ActiveCfg = Release|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Release|x64.Build.0 = Release|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Release|ARM.ActiveCfg = Release|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Release|ARM.Build.0 = Release|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Release|x86.ActiveCfg = Release|Any CPU
{EF4012D4-EF08-499C-B803-177739350B2D}.Release|x86.Build.0 = Release|Any CPU
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Debug|Any CPU.ActiveCfg = Debug|Win32
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Debug|x64.ActiveCfg = Debug|x64
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Debug|x64.Build.0 = Debug|x64
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Debug|ARM.ActiveCfg = Debug|ARM
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Debug|ARM.Build.0 = Debug|ARM
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Debug|x86.ActiveCfg = Debug|Win32
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Debug|x86.Build.0 = Debug|Win32
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Release|Any CPU.ActiveCfg = Release|Win32
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Release|x64.ActiveCfg = Release|x64
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Release|x64.Build.0 = Release|x64
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Release|ARM.ActiveCfg = Release|ARM
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Release|ARM.Build.0 = Release|ARM
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Release|x86.ActiveCfg = Release|Win32
{E04CCAB9-35DB-495C-A279-5B483C707CD0}.Release|x86.Build.0 = Release|Win32
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Debug|Any CPU.ActiveCfg = Debug|Win32
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Debug|x64.ActiveCfg = Debug|x64
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Debug|x64.Build.0 = Debug|x64
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Debug|ARM.ActiveCfg = Debug|ARM
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Debug|ARM.Build.0 = Debug|ARM
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Debug|x86.ActiveCfg = Debug|Win32
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Debug|x86.Build.0 = Debug|Win32
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Release|Any CPU.ActiveCfg = Release|Win32
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Release|x64.ActiveCfg = Release|x64
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Release|x64.Build.0 = Release|x64
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Release|ARM.ActiveCfg = Release|ARM
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Release|ARM.Build.0 = Release|ARM
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Release|x86.ActiveCfg = Release|Win32
{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}.Release|x86.Build.0 = Release|Win32
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Debug|Any CPU.ActiveCfg = Debug|Win32
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Debug|x64.ActiveCfg = Debug|x64
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Debug|x64.Build.0 = Debug|x64
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Debug|ARM.ActiveCfg = Debug|ARM
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Debug|ARM.Build.0 = Debug|ARM
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Debug|x86.ActiveCfg = Debug|Win32
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Debug|x86.Build.0 = Debug|Win32
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Release|Any CPU.ActiveCfg = Release|Win32
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Release|x64.ActiveCfg = Release|x64
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Release|x64.Build.0 = Release|x64
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Release|ARM.ActiveCfg = Release|ARM
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Release|ARM.Build.0 = Release|ARM
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Release|x86.ActiveCfg = Release|Win32
{AD25497F-A15F-4DFF-AC7A-B8ABF5F411D6}.Release|x86.Build.0 = Release|Win32
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Debug|Any CPU.ActiveCfg = Debug|Win32
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Debug|x64.ActiveCfg = Debug|x64
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Debug|x64.Build.0 = Debug|x64
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Debug|ARM.ActiveCfg = Debug|ARM
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Debug|ARM.Build.0 = Debug|ARM
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Debug|x86.ActiveCfg = Debug|Win32
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Debug|x86.Build.0 = Debug|Win32
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Release|Any CPU.ActiveCfg = Release|Win32
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Release|x64.ActiveCfg = Release|x64
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Release|x64.Build.0 = Release|x64
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Release|ARM.ActiveCfg = Release|ARM
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Release|ARM.Build.0 = Release|ARM
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Release|x86.ActiveCfg = Release|Win32
{3AE2A022-ED83-41F1-948A-12A7593CBD00}.Release|x86.Build.0 = Release|Win32
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Debug|Any CPU.ActiveCfg = Debug|Win32
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Debug|x64.ActiveCfg = Debug|x64
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Debug|x64.Build.0 = Debug|x64
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Debug|ARM.ActiveCfg = Debug|ARM
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Debug|ARM.Build.0 = Debug|ARM
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Debug|x86.ActiveCfg = Debug|Win32
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Debug|x86.Build.0 = Debug|Win32
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Release|Any CPU.ActiveCfg = Release|Win32
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Release|x64.ActiveCfg = Release|x64
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Release|x64.Build.0 = Release|x64
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Release|ARM.ActiveCfg = Release|ARM
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Release|ARM.Build.0 = Release|ARM
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Release|x86.ActiveCfg = Release|Win32
{18E0189B-F3F1-4CB2-A3AF-5606ADD5E279}.Release|x86.Build.0 = Release|Win32
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Debug|Any CPU.ActiveCfg = Debug|Win32
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Debug|x64.ActiveCfg = Debug|x64
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Debug|x64.Build.0 = Debug|x64
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Debug|ARM.ActiveCfg = Debug|ARM
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Debug|ARM.Build.0 = Debug|ARM
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Debug|x86.ActiveCfg = Debug|Win32
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Debug|x86.Build.0 = Debug|Win32
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Release|Any CPU.ActiveCfg = Release|Win32
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Release|x64.ActiveCfg = Release|x64
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Release|x64.Build.0 = Release|x64
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Release|ARM.ActiveCfg = Release|ARM
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Release|ARM.Build.0 = Release|ARM
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Release|x86.ActiveCfg = Release|Win32
{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}.Release|x86.Build.0 = Release|Win32
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Debug|Any CPU.ActiveCfg = Debug|Win32
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Debug|x64.ActiveCfg = Debug|x64
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Debug|x64.Build.0 = Debug|x64
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Debug|ARM.ActiveCfg = Debug|ARM
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Debug|ARM.Build.0 = Debug|ARM
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Debug|x86.ActiveCfg = Debug|Win32
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Debug|x86.Build.0 = Debug|Win32
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Release|Any CPU.ActiveCfg = Release|Win32
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Release|x64.ActiveCfg = Release|x64
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Release|x64.Build.0 = Release|x64
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Release|ARM.ActiveCfg = Release|ARM
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Release|ARM.Build.0 = Release|ARM
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Release|x86.ActiveCfg = Release|Win32
{33D91B58-1981-4A3C-B4D1-86EE406CDE12}.Release|x86.Build.0 = Release|Win32
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Debug|x64.ActiveCfg = Debug|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Debug|x64.Build.0 = Debug|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Debug|ARM.ActiveCfg = Debug|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Debug|ARM.Build.0 = Debug|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Debug|x86.ActiveCfg = Debug|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Debug|x86.Build.0 = Debug|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Release|Any CPU.Build.0 = Release|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Release|x64.ActiveCfg = Release|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Release|x64.Build.0 = Release|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Release|ARM.ActiveCfg = Release|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Release|ARM.Build.0 = Release|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Release|x86.ActiveCfg = Release|Any CPU
{512BF866-1AA0-4169-A7D6-D2776B5D731E}.Release|x86.Build.0 = Release|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Debug|x64.ActiveCfg = Debug|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Debug|x64.Build.0 = Debug|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Debug|ARM.ActiveCfg = Debug|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Debug|ARM.Build.0 = Debug|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Debug|x86.ActiveCfg = Debug|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Debug|x86.Build.0 = Debug|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Release|Any CPU.Build.0 = Release|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Release|x64.ActiveCfg = Release|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Release|x64.Build.0 = Release|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Release|ARM.ActiveCfg = Release|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Release|ARM.Build.0 = Release|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Release|x86.ActiveCfg = Release|Any CPU
{8E708D9A-6325-4AA9-B5A5-D1B5ECA8EEF7}.Release|x86.Build.0 = Release|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Debug|x64.ActiveCfg = Debug|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Debug|x64.Build.0 = Debug|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Debug|x86.ActiveCfg = Debug|x86
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Debug|x86.Build.0 = Debug|x86
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Release|Any CPU.Build.0 = Release|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Release|x64.ActiveCfg = Release|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Release|x64.Build.0 = Release|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Release|x86.ActiveCfg = Release|x86
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Release|x86.Build.0 = Release|x86
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Debug|x64.ActiveCfg = Debug|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Debug|x64.Build.0 = Debug|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Debug|ARM.ActiveCfg = Debug|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Debug|ARM.Build.0 = Debug|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Debug|x86.ActiveCfg = Debug|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Debug|x86.Build.0 = Debug|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Release|ARM.ActiveCfg = Release|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Release|ARM.Build.0 = Release|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Release|x86.ActiveCfg = Release|Any CPU
{BD681A4F-EB60-4BB8-90B5-65968FC7DA59}.Release|x86.Build.0 = Release|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Debug|ARM.ActiveCfg = Debug|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Debug|ARM.Build.0 = Debug|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Debug|x86.ActiveCfg = Debug|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Debug|x86.Build.0 = Debug|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Release|Any CPU.Build.0 = Release|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Release|x64.ActiveCfg = Release|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Release|x64.Build.0 = Release|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Release|ARM.ActiveCfg = Release|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Release|ARM.Build.0 = Release|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Release|x86.ActiveCfg = Release|Any CPU
{FFD3FD52-37A8-4F43-883C-DE8D996CB0E0}.Release|x86.Build.0 = Release|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Debug|x64.ActiveCfg = Debug|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Debug|x64.Build.0 = Debug|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Debug|ARM.ActiveCfg = Debug|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Debug|ARM.Build.0 = Debug|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Debug|x86.ActiveCfg = Debug|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Debug|x86.Build.0 = Debug|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Release|Any CPU.Build.0 = Release|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Release|x64.ActiveCfg = Release|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Release|x64.Build.0 = Release|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Release|ARM.ActiveCfg = Release|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Release|ARM.Build.0 = Release|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Release|x86.ActiveCfg = Release|Any CPU
{3C2F5446-33F0-41D5-813A-64A94AA474AF}.Release|x86.Build.0 = Release|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Debug|x64.ActiveCfg = Debug|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Debug|x64.Build.0 = Debug|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Debug|ARM.ActiveCfg = Debug|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Debug|ARM.Build.0 = Debug|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Debug|x86.ActiveCfg = Debug|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Debug|x86.Build.0 = Debug|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Release|Any CPU.Build.0 = Release|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Release|x64.ActiveCfg = Release|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Release|x64.Build.0 = Release|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Release|ARM.ActiveCfg = Release|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Release|ARM.Build.0 = Release|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Release|x86.ActiveCfg = Release|Any CPU
{4EC16578-EFBF-41E6-8D7F-976E3646DD1D}.Release|x86.Build.0 = Release|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Debug|x64.ActiveCfg = Debug|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Debug|x64.Build.0 = Debug|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Debug|x86.ActiveCfg = Debug|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Debug|x86.Build.0 = Debug|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Release|Any CPU.Build.0 = Release|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Release|x64.ActiveCfg = Release|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Release|x64.Build.0 = Release|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Release|x86.ActiveCfg = Release|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Release|x86.Build.0 = Release|Any CPU
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Debug|Any CPU.ActiveCfg = Debug|Win32
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Debug|x64.ActiveCfg = Debug|x64
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Debug|x64.Build.0 = Debug|x64
{DC074727-72E4-43C5-BAAF-E0D548104797}.Debug|ARM.ActiveCfg = Debug|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Debug|ARM.Build.0 = Debug|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Debug|x86.ActiveCfg = Debug|x86
{DC074727-72E4-43C5-BAAF-E0D548104797}.Debug|x86.Build.0 = Debug|x86
{DC074727-72E4-43C5-BAAF-E0D548104797}.Release|ARM.ActiveCfg = Release|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Release|ARM.Build.0 = Release|Any CPU
{DC074727-72E4-43C5-BAAF-E0D548104797}.Release|x86.ActiveCfg = Release|x86
{DC074727-72E4-43C5-BAAF-E0D548104797}.Release|x86.Build.0 = Release|x86
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Debug|ARM.ActiveCfg = Debug|ARM
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Debug|ARM.Build.0 = Debug|ARM
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Debug|x86.ActiveCfg = Debug|Win32
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Debug|x86.Build.0 = Debug|Win32
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Release|Any CPU.ActiveCfg = Release|Win32
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Release|x64.ActiveCfg = Release|x64
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Release|x64.Build.0 = Release|x64
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Release|ARM.ActiveCfg = Release|ARM
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Release|ARM.Build.0 = Release|ARM
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Release|x86.ActiveCfg = Release|Win32
{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}.Release|x86.Build.0 = Release|Win32
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Debug|x64.ActiveCfg = Debug|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Debug|x64.Build.0 = Debug|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Debug|ARM.ActiveCfg = Debug|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Debug|ARM.Build.0 = Debug|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Debug|x86.ActiveCfg = Debug|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Debug|x86.Build.0 = Debug|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Release|Any CPU.Build.0 = Release|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Release|x64.ActiveCfg = Release|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Release|x64.Build.0 = Release|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Release|ARM.ActiveCfg = Release|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Release|ARM.Build.0 = Release|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Release|x86.ActiveCfg = Release|Any CPU
{C5587B6E-19C4-4484-AA97-5C20FBB07E43}.Release|x86.Build.0 = Release|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Debug|x64.ActiveCfg = Debug|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Debug|x64.Build.0 = Debug|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Debug|ARM.ActiveCfg = Debug|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Debug|ARM.Build.0 = Debug|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Debug|x86.ActiveCfg = Debug|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Debug|x86.Build.0 = Debug|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Release|Any CPU.Build.0 = Release|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Release|x64.ActiveCfg = Release|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Release|x64.Build.0 = Release|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Release|ARM.ActiveCfg = Release|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Release|ARM.Build.0 = Release|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Release|x86.ActiveCfg = Release|Any CPU
{F0288B24-7B84-42A5-9A92-2E16A012E4DE}.Release|x86.Build.0 = Release|Any CPU
{26B3C19D-6182-4DB5-8B69-EE098A0FD3BB}.Debug|ARM.ActiveCfg = Debug|Any CPU
{26B3C19D-6182-4DB5-8B69-EE098A0FD3BB}.Debug|ARM.Build.0 = Debug|Any CPU
{26B3C19D-6182-4DB5-8B69-EE098A0FD3BB}.Debug|x86.ActiveCfg = Debug|x86
{26B3C19D-6182-4DB5-8B69-EE098A0FD3BB}.Debug|x86.Build.0 = Debug|x86
{26B3C19D-6182-4DB5-8B69-EE098A0FD3BB}.Release|ARM.ActiveCfg = Release|Any CPU
{26B3C19D-6182-4DB5-8B69-EE098A0FD3BB}.Release|ARM.Build.0 = Release|Any CPU
{26B3C19D-6182-4DB5-8B69-EE098A0FD3BB}.Release|x86.ActiveCfg = Release|x86
{26B3C19D-6182-4DB5-8B69-EE098A0FD3BB}.Release|x86.Build.0 = Release|x86
{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}.Debug|ARM.ActiveCfg = Debug|ARM
{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}.Debug|ARM.Build.0 = Debug|ARM
{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}.Debug|x86.ActiveCfg = Debug|Win32
{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}.Debug|x86.Build.0 = Debug|Win32
{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}.Release|ARM.ActiveCfg = Release|ARM
{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}.Release|ARM.Build.0 = Release|ARM
{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}.Release|x86.ActiveCfg = Release|Win32
{B1DF139F-CEF1-404F-8255-31EF4BF0EC4C}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {5FAD9D1A-D291-492A-956A-94422761AA8E}
EndGlobalSection
EndGlobal

View File

@@ -795,7 +795,7 @@ namespace AppxPackage
{
capabilities_name = Capabilities,
device_capabilities = DeviceCapabilities,
scales = CapabilityDisplayNames
display_capabilities_name = CapabilityDisplayNames
};
}
}
@@ -917,7 +917,7 @@ namespace AppxPackage
{
var ret = new List<int> ();
if (!IsValid) return ret;
IntPtr hList = PackageReadHelper.GetResourcesLanguagesToLcid (m_hReader.Value);
IntPtr hList = PackageReadHelper.GetResourcesScales (m_hReader.Value);
if (hList == IntPtr.Zero) return ret;
try
{

View File

@@ -168,6 +168,46 @@ namespace AppxPackage
return result;
}
[StructLayout (LayoutKind.Sequential)]
internal struct WSTRWSTRPAIR
{
public IntPtr lpKey; // LPWSTR
public IntPtr lpValue; // LPWSTR
}
[DllImport (DLL, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr GetPriLocaleResourceAllValuesList (
PCSPRIFILE pFilePri,
[MarshalAs (UnmanagedType.LPWStr)] string lpResName);
[DllImport (DLL, CallingConvention = CallingConvention.Cdecl)]
public static extern void DestroyLocaleResourceAllValuesList (IntPtr list);
[DllImport (DLL, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr GetPriFileResourceAllValuesList (
PCSPRIFILE pFilePri,
[MarshalAs (UnmanagedType.LPWStr)] string lpResName);
/// <summary>
/// 将 HWSWSPAIRLIST 解析为 Dictionary&lt;string, string&gt;(语言代码 → 字符串值)
/// </summary>
public static Dictionary<string, string> ParseWSWSPAIRLIST (IntPtr ptr)
{
if (ptr == IntPtr.Zero) return null;
uint count = (uint)Marshal.ReadInt32 (ptr); // dwLength
IntPtr pFirst = IntPtr.Add (ptr, sizeof (uint)); // 跳过 dwLength
int elementSize = Marshal.SizeOf (typeof (WSTRWSTRPAIR));
var dict = new Dictionary<string, string> ((int)count);
for (int i = 0; i < count; i++)
{
IntPtr pItem = IntPtr.Add (pFirst, i * elementSize);
var item = (WSTRWSTRPAIR)Marshal.PtrToStructure (pItem, typeof (WSTRWSTRPAIR));
string key = item.lpKey != IntPtr.Zero ? Marshal.PtrToStringUni (item.lpKey) : null;
string value = item.lpValue != IntPtr.Zero ? Marshal.PtrToStringUni (item.lpValue) : null;
if (key != null)
dict [key] = value;
}
return dict;
}
}
public static class LpcwstrListHelper
{

View File

@@ -239,6 +239,69 @@ namespace AppxPackage
return task.Result;
}
/// <summary>
/// 获取指定字符串资源的所有语言变体(语言代码 → 字符串值)
/// </summary>
public Dictionary<string, string> LocaleResourceAllValue (string resName)
{
var task = Task.Factory.StartNew (() =>
{
IntPtr ptr = IntPtr.Zero;
try
{
// 修正:第一个参数应为 m_hPriFile而不是 ptr
ptr = PriFileHelper.GetPriLocaleResourceAllValuesList (m_hPriFile, resName);
if (ptr == IntPtr.Zero)
return new Dictionary<string, string> ();
// 解析 HWSWSPAIRLIST 为 Dictionary<string, string>
var raw = PriFileHelper.ParseWSWSPAIRLIST (ptr);
return raw ?? new Dictionary<string, string> ();
}
finally
{
if (ptr != IntPtr.Zero)
PriFileHelper.DestroyLocaleResourceAllValuesList (ptr);
}
});
return task.Result;
}
/// <summary>
/// 获取指定文件资源的所有缩放/对比度/目标大小变体PriResourceKey → 文件路径)
/// </summary>
public Dictionary<PriResourceKey, string> PathResourceAllValue (string resName)
{
var task = Task.Factory.StartNew (() =>
{
IntPtr ptr = IntPtr.Zero;
try
{
ptr = PriFileHelper.GetPriFileResourceAllValuesList (m_hPriFile, resName);
if (ptr == IntPtr.Zero)
return new Dictionary<PriResourceKey, string> ();
// 解析 HDWSPAIRLIST 为 Dictionary<uint, string>
var raw = PriFileHelper.ParseDWSPAIRLIST (ptr);
if (raw == null)
return new Dictionary<PriResourceKey, string> ();
// 将 uint 键转换为 PriResourceKey
var result = new Dictionary<PriResourceKey, string> ();
foreach (var kv in raw)
{
var key = new PriResourceKey (kv.Key);
result [key] = kv.Value;
}
return result;
}
finally
{
if (ptr != IntPtr.Zero)
PriFileHelper.DestroyPriResourceAllValueList (ptr); // 注意:使用对应的释放函数
}
});
return task.Result;
}
}
public class PriReaderBundle: IDisposable
{

62
ArmBuild.ps1 Normal file
View File

@@ -0,0 +1,62 @@
# ArmBuild.ps1
$ErrorActionPreference = "Stop"
$root = Split-Path -Parent $MyInvocation.MyCommand.Path
$staging = Join-Path $root "_staging"
$outZip = Join-Path $root "ArmPackage.zip"
$packageFolderName = "Desktop App Installer"
$destRoot = Join-Path $staging $packageFolderName
function Copy-Binaries-ToDest($src, $dest)
{
if (!(Test-Path $src)) { return }
Get-ChildItem $src -File | Where-Object {
$_.Extension -in ".exe", ".dll"
} | ForEach-Object {
Copy-Item -Path $_.FullName -Destination $dest -Force
}
}
Write-Host "Preparing staging..."
# 清理旧的 staging
if (Test-Path $staging) { Remove-Item $staging -Recurse -Force }
New-Item $destRoot -ItemType Directory | Out-Null
# ① 先放 Release
Copy-Binaries-ToDest (Join-Path $root "Release") $destRoot
# ② 再放 ARM\Release覆盖同名
Copy-Binaries-ToDest (Join-Path $root "ARM\Release") $destRoot
# ③ shared 全部铺到 Desktop App Installer 里
$shared = Join-Path $root "shared"
if (Test-Path $shared) {
Get-ChildItem $shared -Recurse | ForEach-Object {
$relativePath = $_.FullName.Substring($shared.Length).TrimStart('\')
$destinationPath = Join-Path $destRoot $relativePath
if ($_.PSIsContainer) {
if (!(Test-Path $destinationPath)) {
New-Item -Path $destinationPath -ItemType Directory | Out-Null
}
} else {
$parentDir = Split-Path $destinationPath -Parent
if (!(Test-Path $parentDir)) {
New-Item -Path $parentDir -ItemType Directory | Out-Null
}
Copy-Item -Path $_.FullName -Destination $destinationPath -Force
}
}
}
Write-Host "Creating ZIP..."
if (Test-Path $outZip) { Remove-Item $outZip -Force }
# 压缩 _staging 下的 Desktop App Installer 文件夹
Compress-Archive -Path $destRoot -DestinationPath $outZip -CompressionLevel Optimal
# 清理 staging
Remove-Item $staging -Recurse -Force
Write-Host "Done: $outZip"

10
ArmDesktopSdk.props Normal file
View File

@@ -0,0 +1,10 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemDefinitionGroup Condition="'$(Platform)'=='ARM'">
<ClCompile>
<PreprocessorDefinitions>_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM'">
<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
</PropertyGroup>
</Project>

5
Directory.Build.props Normal file
View File

@@ -0,0 +1,5 @@
<Project>
<PropertyGroup Condition="'$(MSBuildProjectExtension)'=='.vcxproj'">
<ForceImportAfterCppProps>$(MSBuildThisFileDirectory)ArmDesktopSdk.props</ForceImportAfterCppProps>
</PropertyGroup>
</Project>

Binary file not shown.

View File

@@ -1,22 +1,22 @@
<?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|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{E4CA78A9-9408-4F5F-ADD6-730FD501FF8E}</ProjectGuid>
@@ -33,6 +33,13 @@
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
@@ -40,14 +47,7 @@
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
@@ -62,26 +62,26 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -95,15 +95,16 @@
<AdditionalDependencies />
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>Use</PrecompiledHeader>
</ClCompile>
<Link>
<AdditionalDependencies />
<AdditionalDependencies>
</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -116,14 +117,15 @@
<AdditionalDependencies />
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>Use</PrecompiledHeader>
</ClCompile>
<Link>
<AdditionalDependencies />
<AdditionalDependencies>
</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
@@ -142,9 +144,9 @@
<ClCompile Include="IEHelper.cpp" />
<ClCompile Include="Stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>

View File

@@ -23,7 +23,7 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\Release\</OutputPath>

View File

@@ -11,6 +11,21 @@
<AssemblyName>Manager</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
@@ -23,7 +38,7 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\Release\</OutputPath>
@@ -36,7 +51,7 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
@@ -44,7 +59,7 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<OutputPath>..\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
@@ -55,6 +70,9 @@
<PropertyGroup>
<ApplicationIcon>Project1.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.4\lib\net40\Newtonsoft.Json.dll</HintPath>
@@ -169,6 +187,15 @@
</ItemGroup>
<ItemGroup>
<Content Include="Project1.ico" />
<None Include="Resources\32_manager.ico" />
<None Include="Resources\IconMetro.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@@ -35,12 +35,13 @@
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(661, 416);
this.ClientSize = new System.Drawing.Size(657, 414);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Location = new System.Drawing.Point(0, 0);
this.Name = "ManagerShell";
this.PageScale = 125;
this.Text = "Form1";
this.WindowIcon = ((System.Drawing.Icon)(resources.GetObject("$this.WindowIcon")));
this.Load += new System.EventHandler(this.ManagerShell_Load);
this.Resize += new System.EventHandler(this.ManagerShell_Resize);
this.ResumeLayout(false);

View File

@@ -2,6 +2,8 @@
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
namespace Manager
{
public partial class ManagerShell: WAShell.WebAppForm
@@ -25,6 +27,7 @@ namespace Manager
catch { }
InitSize ();
Text = Bridge.ResXmlStore.StringRes.Get ("MANAGER_APPTITLE");
this.Load += Form_Load;
}
private void InitSize ()
{
@@ -58,6 +61,17 @@ namespace Manager
);
WindowState = (FormWindowState)lasts.ReadInt ((int)FormWindowState.Normal);
}
private void Form_Load (object sender, EventArgs e)
{
var current = Process.GetCurrentProcess ();
var processes = Process.GetProcessesByName (current.ProcessName);
int count = processes.Length;
int offset = 30; // 每个窗口偏移
int x = 20 + (count - 1) * offset;
int y = 20 + (count - 1) * offset;
this.StartPosition = FormStartPosition.Manual;
this.Location = new Point (x, y);
}
private void ManagerShell_Load (object sender, EventArgs e)
{
var root = Path.GetDirectoryName (DataUtils.Utilities.GetCurrentProgramPath ());

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,7 @@
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace Manager
@@ -12,7 +14,7 @@ namespace Manager
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main ()
static void Main (string [] args)
{
Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);
//System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo ("en-US");

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -29,7 +29,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />

213
PriFileFormat/DataTree.cs Normal file
View File

@@ -0,0 +1,213 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Serialization;
namespace PriFileFormat
{
/// <summary>
/// 树节点接口
/// </summary>
public interface ITreeNode: IDisposable, IEnumerable<ITreeNode>
{
string Name { get; set; }
string Value { get; set; }
ITreeNode Parent { get; set; }
IList<ITreeNode> Children { get; }
ITreeNode AddChild (string name, string value);
IEnumerable<ITreeNode> DescendantsAndSelf ();
ITreeNode Find (string name);
IEnumerable<ITreeNode> FindAll (string name);
}
/// <summary>
/// 树节点实现
/// </summary>
[Serializable]
public class TreeNode: ITreeNode
{
// 节点基本属性
public string Name { get; set; }
public string Value { get; set; }
// 父节点引用
[XmlIgnore]
public TreeNode Parent { get; set; }
ITreeNode ITreeNode.Parent
{
get { return Parent; }
set { Parent = (TreeNode)value; }
}
// 子节点列表
[XmlArray ("Children")]
[XmlArrayItem ("Node")]
public IList<TreeNode> Children { get; set; }
IList<ITreeNode> ITreeNode.Children
{
get
{
List<ITreeNode> list = new List<ITreeNode> ();
foreach (TreeNode node in Children)
{
list.Add (node);
}
return list;
}
}
public TreeNode ()
{
Name = "";
Value = "";
Children = new List<TreeNode> ();
Parent = null;
}
public TreeNode (string name, string value)
{
Name = name;
Value = value;
Children = new List<TreeNode> ();
Parent = null;
}
/// <summary>
/// 添加子节点
/// </summary>
public TreeNode AddChild (string name, string value)
{
TreeNode child = new TreeNode (name, value);
child.Parent = this;
Children.Add (child);
return child;
}
ITreeNode ITreeNode.AddChild (string name, string value)
{
return AddChild (name, value);
}
/// <summary>
/// 深度优先遍历节点,包括自身
/// </summary>
public IEnumerable<TreeNode> DescendantsAndSelf ()
{
yield return this;
foreach (TreeNode child in Children)
{
foreach (TreeNode desc in child.DescendantsAndSelf ())
{
yield return desc;
}
}
}
IEnumerable<ITreeNode> ITreeNode.DescendantsAndSelf ()
{
foreach (TreeNode n in DescendantsAndSelf ())
{
yield return n;
}
}
/// <summary>
/// 查找第一个匹配节点
/// </summary>
public TreeNode Find (string name)
{
foreach (TreeNode n in DescendantsAndSelf ())
{
if (n.Name == name)
return n;
}
return null;
}
ITreeNode ITreeNode.Find (string name)
{
return Find (name);
}
/// <summary>
/// 查找所有匹配节点
/// </summary>
public IEnumerable<TreeNode> FindAll (string name)
{
foreach (TreeNode n in DescendantsAndSelf ())
{
if (n.Name == name)
yield return n;
}
}
IEnumerable<ITreeNode> ITreeNode.FindAll (string name)
{
foreach (TreeNode n in FindAll (name))
{
yield return n;
}
}
#region IEnumerable<TreeNode>
public IEnumerator<TreeNode> GetEnumerator ()
{
return Children.GetEnumerator ();
}
IEnumerator IEnumerable.GetEnumerator ()
{
return GetEnumerator ();
}
#endregion
#region IEnumerable<ITreeNode>
IEnumerator<ITreeNode> IEnumerable<ITreeNode>.GetEnumerator ()
{
foreach (TreeNode child in Children)
{
yield return child;
}
}
#endregion
#region XML
public void SaveToXml (string filePath)
{
XmlSerializer serializer = new XmlSerializer (typeof (TreeNode));
using (StreamWriter writer = new StreamWriter (filePath, false, System.Text.Encoding.UTF8))
{
serializer.Serialize (writer, this);
}
}
public static TreeNode LoadFromXml (string filePath)
{
XmlSerializer serializer = new XmlSerializer (typeof (TreeNode));
using (StreamReader reader = new StreamReader (filePath, System.Text.Encoding.UTF8))
{
TreeNode root = (TreeNode)serializer.Deserialize (reader);
SetParentRecursive (root, null);
return root;
}
}
private static void SetParentRecursive (TreeNode node, TreeNode parent)
{
node.Parent = parent;
foreach (TreeNode child in node.Children)
{
SetParentRecursive (child, node);
}
}
#endregion
#region IDisposable
public virtual void Dispose ()
{
foreach (TreeNode child in Children)
{
child.Dispose ();
}
Children.Clear ();
Parent = null;
Children = null;
}
#endregion
}
/// <summary>
/// 树根节点
/// </summary>
[Serializable]
public class TreeRoot: TreeNode
{
public TreeRoot ()
: base ("Root", "")
{
}
}
}

View File

@@ -48,6 +48,7 @@
<Compile Include="ByteSpan.cs" />
<Compile Include="ComStreamWrapper.cs" />
<Compile Include="DataItemSection.cs" />
<Compile Include="DataTree.cs" />
<Compile Include="DecisionInfoSection.cs" />
<Compile Include="HierarchicalSchemaSection.cs" />
<Compile Include="PriDescriptorSection.cs" />

View File

@@ -14,7 +14,7 @@
<p>Note: There is no official release yet, but the test version still does not have the Pre-released label; this is for testing upgrade functionality. Once the official release is complete, previous versions will be marked as Pre-released.</p>
<h2>Attention</h2>
<ul>
<li>This program is an x86 program, not an ARM application, not cross-platform, and cannot be used on Windows RT.</li>
<li><del>This program is an x86 program, not an ARM application, not cross-platform, and cannot be used on Windows RT.</del></li>
<li>This program uses some third-party libraries and other Github projects, and is completed using AI (ChatGTP). This project can be used for learning and communication purposes.</li>
<li>(Important) Internet Explorer must support TLS 1.2 (requiring the use of IE's XMLHttpRequest to retrieve update information), especially IE10. You can do this by opening the "Advanced" tab in Control Panel/Internet Explorer's "Internet Options," finding "Use TLS 1.2" and checking the box, then clicking "OK" and saving. The settings will take effect the next time you open the browser.<br><img width="300" height="395" alt="屏幕截图 2025-12-08 103450" src="https://github.com/user-attachments/assets/69ee21ca-7f47-4d56-8dde-37e5704776c1" /></li>
</ul>

6
Reader/App.config Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

40
Reader/Polyfill.cs Normal file
View File

@@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
namespace Reader
{
public static class Polyfill
{
public static T ParseTo <T> (this string src, T dflt = default (T))
{
if (string.IsNullOrWhiteSpace (src)) return dflt;
try
{
Type targetType = typeof (T);
Type underlying = Nullable.GetUnderlyingType (targetType);
if (underlying != null)
{
object v = Convert.ChangeType (src, underlying, CultureInfo.InvariantCulture);
return (T)v;
}
if (targetType.IsEnum)
{
object enumValue = Enum.Parse (targetType, src, true);
return (T)enumValue;
}
TypeConverter converter = TypeDescriptor.GetConverter (targetType);
if (converter != null && converter.CanConvertFrom (typeof (string)))
{
object v = converter.ConvertFrom (null, CultureInfo.InvariantCulture, src);
return (T)v;
}
}
catch { }
return dflt;
}
}
}

31
Reader/Program.cs Normal file
View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Reader
{
static class Program
{
static public readonly string g_appUserId = "WindowsModern.PracticalToolsProject!Reader";
static public readonly string g_appId = "Reader";
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main ()
{
Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);
AppxPackage.PackageReader.AddApplicationItem ("SmallLogo");
AppxPackage.PackageReader.AddApplicationItem ("Square30x30Logo");
AppxPackage.PackageReader.AddApplicationItem ("Logo");
AppxPackage.PackageReader.AddApplicationItem ("Square44x44Logo");
DataUtils.BrowserEmulation.SetWebBrowserEmulation ();
Application.EnableVisualStyles ();
Application.SetCompatibleTextRenderingDefault (false);
Application.Run (new ReaderShell ());
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle ("Reader")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("Reader")]
[assembly: AssemblyCopyright ("Copyright © 2026")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
//将 ComVisible 设置为 false 将使此程序集中的类型
//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible (false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid ("26b3c19d-6182-4db5-8b69-ee098a0fd3bb")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion ("1.0.0.0")]
[assembly: AssemblyFileVersion ("1.0.0.0")]

99
Reader/Properties/Resources.Designer.cs generated Normal file
View File

@@ -0,0 +1,99 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace Reader.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Reader.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 使用此强类型资源类,为所有资源查找
/// 重写当前线程的 CurrentUICulture 属性。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// 查找类似 600 的本地化字符串。
/// </summary>
internal static string IDS_DEFAULTHEIGHT {
get {
return ResourceManager.GetString("IDS_DEFAULTHEIGHT", resourceCulture);
}
}
/// <summary>
/// 查找类似 800 的本地化字符串。
/// </summary>
internal static string IDS_DEFAULTWIDTH {
get {
return ResourceManager.GetString("IDS_DEFAULTWIDTH", resourceCulture);
}
}
/// <summary>
/// 查找类似 412 的本地化字符串。
/// </summary>
internal static string IDS_MINHEIGHT {
get {
return ResourceManager.GetString("IDS_MINHEIGHT", resourceCulture);
}
}
/// <summary>
/// 查找类似 504 的本地化字符串。
/// </summary>
internal static string IDS_MINWIDTH {
get {
return ResourceManager.GetString("IDS_MINWIDTH", resourceCulture);
}
}
}
}

View File

@@ -0,0 +1,136 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="IDS_DEFAULTHEIGHT" xml:space="preserve">
<value>600</value>
<comment>默认窗口高度</comment>
</data>
<data name="IDS_DEFAULTWIDTH" xml:space="preserve">
<value>800</value>
<comment>默认窗口宽度</comment>
</data>
<data name="IDS_MINHEIGHT" xml:space="preserve">
<value>412</value>
<comment>默认最小窗口高度</comment>
</data>
<data name="IDS_MINWIDTH" xml:space="preserve">
<value>504</value>
<comment>默认最小窗口宽度</comment>
</data>
</root>

26
Reader/Properties/Settings.Designer.cs generated Normal file
View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace Reader.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

181
Reader/Reader.csproj Normal file
View File

@@ -0,0 +1,181 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{26B3C19D-6182-4DB5-8B69-EE098A0FD3BB}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Reader</RootNamespace>
<AssemblyName>Reader</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup />
<PropertyGroup />
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>..\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Polyfill.cs" />
<Compile Include="ReaderShell.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ReaderShell.Designer.cs">
<DependentUpon>ReaderShell.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="ReaderShell.resx">
<DependentUpon>ReaderShell.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="app.manifest">
<SubType>Designer</SubType>
</None>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AppxPackage\AppxPackage.csproj">
<Project>{bd681a4f-eb60-4bb8-90b5-65968fc7da59}</Project>
<Name>AppxPackage</Name>
</ProjectReference>
<ProjectReference Include="..\Bridge\Bridge.csproj">
<Project>{3c2f5446-33f0-41d5-813a-64a94aa474af}</Project>
<Name>Bridge</Name>
</ProjectReference>
<ProjectReference Include="..\DataUtils\DataUtils.csproj">
<Project>{ffd3fd52-37a8-4f43-883c-de8d996cb0e0}</Project>
<Name>DataUtils</Name>
</ProjectReference>
<ProjectReference Include="..\IEHelper\IEHelper.vcxproj">
<Project>{e4ca78a9-9408-4f5f-add6-730fd501ff8e}</Project>
<Name>IEHelper</Name>
</ProjectReference>
<ProjectReference Include="..\ModernNotice\ModernNotice.csproj">
<Project>{c5587b6e-19c4-4484-aa97-5c20fbb07e43}</Project>
<Name>ModernNotice</Name>
</ProjectReference>
<ProjectReference Include="..\PrivateInit\PrivateInit.csproj">
<Project>{8e708d9a-6325-4aa9-b5a5-d1b5eca8eef7}</Project>
<Name>PrivateInit</Name>
</ProjectReference>
<ProjectReference Include="..\WAShell\WAShell.csproj">
<Project>{4ec16578-efbf-41e6-8d7f-976e3646dd1d}</Project>
<Name>WAShell</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.5.2 %28x86 和 x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

54
Reader/ReaderShell.Designer.cs generated Normal file
View File

@@ -0,0 +1,54 @@
namespace Reader
{
partial class ReaderShell
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose (bool disposing)
{
if (disposing && (components != null))
{
components.Dispose ();
}
base.Dispose (disposing);
}
#region Windows
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent ()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ReaderShell));
this.SuspendLayout();
//
// ManagerShell
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(657, 414);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Location = new System.Drawing.Point(0, 0);
this.Name = "ManagerShell";
this.PageScale = 125;
this.Text = "Form1";
this.WindowIcon = ((System.Drawing.Icon)(resources.GetObject("$this.WindowIcon")));
this.Load += new System.EventHandler(this.ManagerShell_Load);
this.Resize += new System.EventHandler(this.ManagerShell_Resize);
this.ResumeLayout(false);
}
#endregion
}
}

102
Reader/ReaderShell.cs Normal file
View File

@@ -0,0 +1,102 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
namespace Reader
{
public partial class ReaderShell: WAShell.WebAppForm
{
public ReaderShell ()
{
InitializeComponent ();
//this.PublicObjectForScripting = new BridgeExt (this, this, this, this);
try
{
var relativePath = DataUtils.VisualElementsStore.Vemanifest.SplashScreenImage (Program.g_appId);
var img = Image.FromFile (relativePath);
SplashScreen.SplashImage = img;
} catch (Exception e) {
var ex = e;
}
try
{
SplashScreen.SplashBackgroundColor = DataUtils.UITheme.StringToColor (DataUtils.VisualElementsStore.Vemanifest.SplashScreenBackgroundColor (Program.g_appId));
}
catch { }
InitSize ();
Text = Bridge.ResXmlStore.StringRes.Get ("MANAGER_APPTITLE");
this.Load += Form_Load;
}
private void InitSize ()
{
uint ww = 0, wh = 0;
var ini = Bridge.InitFileStore.Config;
var setsect = ini ["Settings"];
var savepos = setsect.GetKey ("PackageReader:SavePosAndSizeBeforeCancel");
var lastw = setsect.GetKey ("PackageReader:LastWidth");
var lasth = setsect.GetKey ("PackageReader:LastHeight");
var defw = setsect.GetKey ("PackageReader:DefaultWidth");
var defh = setsect.GetKey ("PackageReader:DefaultHeight");
var minw = setsect.GetKey ("PackageReader:MinimumWidth");
var minh = setsect.GetKey ("PackageReader:MinimumHeight");
var lasts = setsect.GetKey ("PackageReader:LastWndState");
if (savepos.ReadBool ())
{
ww = lastw.ReadUInt (defw.ReadUInt (Properties.Resources.IDS_DEFAULTWIDTH.ParseTo <uint> ()));
wh = lasth.ReadUInt (defh.ReadUInt (Properties.Resources.IDS_DEFAULTHEIGHT.ParseTo <uint> ()));
}
else
{
ww = defw.ReadUInt (Properties.Resources.IDS_DEFAULTWIDTH.ParseTo<uint> ());
wh = defh.ReadUInt (Properties.Resources.IDS_DEFAULTHEIGHT.ParseTo<uint> ());
}
ClientSize = new Size ((int)(ww * DataUtils.UITheme.DPIDouble), (int)(wh * DataUtils.UITheme.DPIDouble));
int hborder = Size.Width - ClientSize.Width,
vborder = Size.Height - ClientSize.Height;
MinimumSize = new Size (
(int)(minw.ReadUInt (Properties.Resources.IDS_MINWIDTH.ParseTo <uint> ()) * DataUtils.UITheme.DPIDouble) + hborder,
(int)(minh.ReadUInt (Properties.Resources.IDS_MINHEIGHT.ParseTo <uint> ()) * DataUtils.UITheme.DPIDouble) + vborder
);
WindowState = (FormWindowState)lasts.ReadInt ((int)FormWindowState.Normal);
}
private void Form_Load (object sender, EventArgs e)
{
var current = Process.GetCurrentProcess ();
var processes = Process.GetProcessesByName (current.ProcessName);
int count = processes.Length;
int offset = 30; // 每个窗口偏移
int x = 20 + (count - 1) * offset;
int y = 20 + (count - 1) * offset;
this.StartPosition = FormStartPosition.Manual;
this.Location = new Point (x, y);
}
private void ManagerShell_Load (object sender, EventArgs e)
{
var root = Path.GetDirectoryName (DataUtils.Utilities.GetCurrentProgramPath ());
WebUI.Navigate (Path.Combine (root, "html\\reader.html"));
}
private void ManagerShell_Resize (object sender, EventArgs e)
{
var ini = Bridge.InitFileStore.Config;
var setsect = ini ["Settings"];
var savepos = setsect.GetKey ("PackageReader:SavePosAndSizeBeforeCancel");
var lastw = setsect.GetKey ("PackageReader:LastWidth");
var lasth = setsect.GetKey ("PackageReader:LastHeight");
var lasts = setsect.GetKey ("PackageReader:LastWndState");
switch (WindowState)
{
case FormWindowState.Normal:
case FormWindowState.Maximized:
lasts.Write ((int)WindowState);
break;
}
if (WindowState == FormWindowState.Normal && savepos.ReadBool ())
{
lastw.Write ((int)(ClientSize.Width / DataUtils.UITheme.DPIDouble));
lasth.Write ((int)(ClientSize.Height / DataUtils.UITheme.DPIDouble));
}
}
}
}

9224
Reader/ReaderShell.resx Normal file

File diff suppressed because it is too large Load Diff

75
Reader/app.manifest Normal file
View File

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC 清单选项
如果想要更改 Windows 用户帐户控制级别,请使用
以下节点之一替换 requestedExecutionLevel 节点。n
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> -->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<!-- <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。
如果你的应用程序需要此虚拟化来实现向后兼容性,则删除此
元素。
-->
<!-- <requestedExecutionLevel level="asInvoker" uiAccess="false" /> -->
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的
Windows 版本的列表。取消评论适当的元素Windows 将
自动选择最兼容的环境。 -->
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<!-- 指示该应用程序可以感知 DPI 且 Windows 在 DPI 较高时将不会对其进行
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI无需
选择加入。选择加入此设置的 Windows 窗体应用程序(目标设定为 .NET Framework 4.6 )还应
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。-->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
<!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

4
Reader/packages.config Normal file
View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net40" />
</packages>

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace WAShell
{
interface IMetroIconSupport
{
Icon WindowIcon { get; set; }
}
}

40
WAShell/ModenForm.Designer.cs generated Normal file
View File

@@ -0,0 +1,40 @@
using System.Drawing;
using System.Windows.Forms;
namespace WAShell
{
partial class ModernForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method by the code editor.
/// </summary>
private void InitializeComponent ()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ModernForm));
this.SuspendLayout();
//
// ModernForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 600);
this.DoubleBuffered = false;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "ModernForm";
this.Text = "Modern Custom Form";
this.ResumeLayout(false);
this.Padding = new Padding (0); // 边框交给系统管理
this.BackColor = Color.White;
}
#endregion
}
}

1001
WAShell/ModenForm.cs Normal file

File diff suppressed because it is too large Load Diff

819
WAShell/ModenForm.resx Normal file
View File

@@ -0,0 +1,819 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAgAAAAAAAEAGAAOCwAAhgAAAEBAAAABABgAKDIAAJQLAAAwMAAAAQAYAKgcAAC8PQAAKCgAAAEA
GAAoFAAAZFoAACAgAAABABgAqAwAAIxuAAAYGAAAAQAYAEgHAAA0ewAAFBQAAAEAGAAoBQAAfIIAABAQ
AAABABgAaAMAAKSHAACJUE5HDQoaCgAAAA1JSERSAAABAAAAAQAIBgAAAFxyqGYAAAAJcEhZcwAADsMA
AA7DAcdvqGQAAArASURBVHic7d2/b5XXHcfxDyRWrSymiMUdAglS1a0UxnbwwB+QSmTGLFGGDu3SpFO9
VRmzVSw4YiwDkTIykCFDB0ewkC4BjJLeqkLiWkXIyEroQJ9yfLm+P89zvt9zvu/XihQfRc/nzXNt/DzH
9PE3LwQgpOPWBwBghwAAgREAIDACAARGAIDACAAQGAEAAiMAQGAEAAiMAACBEQAgMAIABEYAgMAIABAY
AQACIwCBnFtf1fDPP9f2++s689MV6+PAgWM8ECSGc+uruv3B21pbfdX8z77e09atx3r45MDwZLBEAAIY
N/4UIYgr/EeAzQtrOre+an2M3kwbvyRdPr+mB388y0eDgMLeAWxeWNPWxVM6fWJFe/s/auPqI90Z7Fsf
K6tZxj8OdwRxhAtAOvxUaxFYdPwpQtC+MAE4avipViKQY/wpQtCu5gMwy/BTtUcg9/hThKA9zQZg3uGn
ao1An+NPEYJ2NBeAZYafqi0CpcafIgT1ayYAuYafqiUCFuNPEYJ6VR+APoaf8h4B6/GnCEF9qg1A38NP
eY2Ap/GnCEE9qgtAyeGnvEXA6/hThMC/agJgNfyUlwjUMP4UIfDLfQA8DD9lHYHaxp8iBP64DYC34aes
IlDz+FOEwA93AfA8/FTpCLQy/hQhsOcmALUMP1UqAi2OP0UI7JgHoMbhp/qOQOvjTxGC8swCUPvwU31F
INL4U4SgnOIBaGn4qdwRiDr+FCHoX7EAtDr8VK4IMP7DCEF/eg9AhOGnlo0A4z8aIcivtwBEG35q0Qgw
/tkQgnyyByDy8FPzRoDxz48QLC9bABj+62aNAONfDiFY3NIBYPiTTYsA48+HEMxv6atu4923GP8Ea6vH
dfuDt8e+fITx58ULTuaX5SPA9vvrunx+Lcd5mjV6J8D4+8cdwXTZvgdABKbrIiCJ8RdECI6W9acARGC6
u4PnkqRfrv/E+CTxEILXvaHf/G4r13/s5r2neufkStMv21zU7vBAf/ji3/rw5r/0178PtTs80K9+tqoT
q29YHy2Mc+ur+v2vT+qdkyu6M3iu4f6P1kcy18s/BOJO4JXd4YG2bj3W9s7e2D/npyh2uCPo8V8CRo/A
tOGPIgR2Ioeg198FiBiBeYc/ihDYiRiC3n8ZKEoElh3+KEJgJ1IIivw6cMsRyD38UYTAToQQFHseQGsR
6Hv4owiBnZZDUPSJQC1EoPTwRxECOy2GoPgjwWqNgPXwRxECOy2FwOShoDVFwNvwRxECOy2EwOypwN4j
4H34owiBnZpDYPpeAI8RqG34owiBnRpDYP5iEC8RqH34owiBnZpCYB4AyTYCrQ1/FCGwU0MIXARAKh+B
1oc/ihDY8RwCNwGQykQg2vBHEQI7HkPgKgBSfxGIPvxRhMCOpxC4C4CUNwIMfzJCYMdDCFwGQFo+Agx/
PoTAjmUI3AZAWiwCDH85hMCORQhcB0CaPQIMPy9CYOe317/XzXv/KfK13AdAmhwBht8vQlDWZ1/vafNv
g2Jfr4oASK9HgOGXRQj6V3r8UkUBkF5GYOPdtxi+IULQD4vxSxneDViSxf8gHLa9s6czn3yrKzcG2h3a
/xy7BVbjlyq7A5CkF3/5hSQ+AnjBHcFyLMcvVRyADiHwgRDMz3r8UgMB6BACHwjBbDyMX2ooAB1C4AMh
OJqX8UsNBqBDCHwgBId5Gr/UcAA6hMAHQuBv/FKAAHQIgQ9RQ+Bx/FKgAHQIgQ+RQuB1/FLAAHQIgQ+t
h8Dz+KXAAegQAh9aDIH38UsE4P8IgQ+thKCG8UsE4DWEwIeaQ1DL+CUCcCRC4ENtIahp/BIBmIoQ+FBD
CGobv0QAZkYIfPAaghrHLxGAuRECHzyFoNbxSwRgYYTAB+sQ1Dx+iQAsjRD4YBGC2scvEYBsCIEPpULQ
wvglApAdIfChzxC0Mn6JAPSGEPiQOwQtjV8iAL0jBD7kCEFr45cIQDGEwIdFQ9Di+CUCUBwh8GGeELQ6
fokAmCEEPkwLQcvjlwiAOULgw7gQtD5+iQC4QQh86EJw+/6z5scvSW9aHwAvnT6xomuX1rV18RQhcODy
+bUjX0nvQa6/MLgDcIo7grKsf6dgVrmvCwLgHCHoV9ThdwhAJQhBXtGH3yEAlSEEy2H4hxGAShGC+TD8
8QhA5QjBZAx/MgLQCEJwGMOfDQFojPUFZY3hz4cANMrLBVYKw18MAWictwsuN4a/HAIQhNcLcFEMPw8C
EIz3C3Iahp8XAQiqlgu0w/D7QQCC837BMvx+EQBI8ncBM/wyCAAOsb6gGX5ZBABjlb7AGb4NAoCJ+r7g
Gb4tAoCZ5B4Aw/eBAGAuyw6C4fvCQ0Exl+7hpYsO49ql9cwnyivK8DsEAFC84XcIAEKLOvwOAUBI0Yff
IQAIheEfRgAQAsMfjwCgaQx/MgKAoo796R/WR0DiuPUBANghAEBgBAAIjAAAgREAIDACAARGAFDUw4/O
avPCmvUx8D8EAEV1v05MCHwgADBBCHwgADBFCGwRALhACGwQALhCCMoiAHCJEJRBAOBa6RBsXljTw4/O
9v51vCAAqELfIeiGf+3SuvtHludEAFCV3CGIOvwOAUCVlg1B9OF3CACqNm8IGP5hBABNmBYChj8ezwRE
U7oQbF08pa1bjyWpincRWiEAaFIXAkzGRwAgMAIABEYAgMAIABAYAQACIwBAYAQACIwAAIERACAwAgAE
RgCAwAgAEBgBAAIjAEBgBAAIjAAAgREAIDACAARGAIDACAAQGAEAAiMAQGAEAAiMAACBEQAgMAIABEYA
gMAIABAYAQACIwBAYAQACIwAAIERACAwAgAERgCAwKoLwJcPnlkfAWhGdQG488/n1kcAmlFdALZ39qyP
ADSjugDcGezzMQDIpLoASNLWrcfWRwCaUGUAbt9/pk+/emJ9DKB6VQZAenkXcHfANwSBZVQbgOH+D9q4
+ogIAEuoNgDSqwh8fu+p9VGAKlUdAOllBN67/p2u3Bhod3hgfRygKtUHoLO9s6czn3xLCIA5NBOADiEA
ZtdcADqEAJiu2QB0CAFwtOYD0CEEwOvCBKBDCIBXwgWgQwiAwAHoEAJEFj4AHUKAiAjACEKASAjAEQgB
IiAAUxACtIwAzIgQoEUEYE6EAC0hAAsiBGgBAVgSIUDNCEAmhAA1IgCZEQLUhAD0hBDUK9KLZwhAzwhB
fSK9f5IAFEII6hHp/ZMEoDBC4NuXD57pzmDf+hjFEAAjhMCnaO+dJADGCIEfn371RLfvx/kGoEQA3CAE
tu4Onof7218iAO4QgvLuDp5r4+ojDfd/sD5KcQTAKUJQxuf3noYdv0QA3CME/dgdHujKjYHeu/5d2PFL
0pvWB8Bstnf2tL2zp80La9q6eEqnT6xYH6lKu8MDbd16HOpn/ZMQgMoQgsUw/PEIQKUIwWwY/mQEoHKE
YDyGPxsC0AhC8BLDnw8BaEzUEDD8xRCARkUJAcNfDgFoXKshYPh5EIAgWgkBw8+LAARTawgYfj8IQFC1
hIDh94sABOc1BAy/DAIASX5CwPDLIgA4xCoEDN8GAcBYpULA8G0RAEzUVwgYvg8EADMZDcGiGL4vx/Tx
Ny+sDwHABo8EAwIjAEBgBAAIjAAAgREAIDACAARGAIDACAAQGAEAAiMAQGAEAAiMAACBEQAgMAIABEYA
gMD+Cwb3Zd+SyYtKAAAAAElFTkSuQmCCKAAAAEAAAACAAAAAAQAYAAAAAAAAMAAAAAAAAAAAAAAAAAAA
AAAAANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4Nd4ANd4ANd4
APrv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//
/////9d4ANd4ANd4AP////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOar
YPrv4P///////////////9d4ANd4ANd4AP////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4AOarYPrv4P///////////////////////9d4ANd4ANd4AP////////////////////////rv4Oar
YNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4AOarYPrv4P///////////////////////////////9d4ANd4ANd4AP//////////////
//////////////////rv4N+RMNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4AOarYPrv4P///////////////////////////////////////9d4ANd4ANd4
AP////////////////////////////////////XewNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////////////////////////////
/////9d4ANd4ANd4AP///////////////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////////////////////
/////////////////////9d4ANd4ANd4AP///////////////////////////////////////9d4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////////////
/////////////////////////////////////9d4ANd4ANd4AP//////////////////////////////
/////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////
/////////////////////////////////////////////////////9d4ANd4ANd4AP//////////////
/////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////
/////////////////////////////////////////////////////////////////////9d4ANd4ANd4
AP///////////////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AN+RMPrv4P//
////////////////////////////////////////////////////////////////////////////////
/////9d4ANd4ANd4AP///////////////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4APXewP//////////////////////////////////////////////////////////////////////
/////////////////////9d4ANd4ANd4AP///////////////////////////////////////9d4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////////////////////
/////////////////////////////////////9d4ANd4ANd4AP//////////////////////////////
/////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////
/////////////////////////////////////////////////////9d4ANd4ANd4AP//////////////
/////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////
/////////////////////////////////////////////////////////////////////9d4ANd4ANd4
AP///////////////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////
////////////////////////////////////////////////////////////////////////////////
/////9d4ANd4ANd4AP///////////////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4AP//////////////////////////////////////////////////////////////////////////
/////////////////////9d4ANd4ANd4AP///////////////////////////////////////9d4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////////////////////
/////////////////////////////////////9d4ANd4ANd4AP//////////////////////////////
/////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////
/////////////////////////////////////////////////////9d4ANd4ANd4AP//////////////
/////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////
/////////////////////////////////////////////////////////////////////9d4ANd4ANd4
AP///////////////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////
////////////////////////////////////////////////////////////////////////////////
/////9d4ANd4ANd4AP///////////////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4AP//////////////////////////////////////////////////////////////////////////
/////////////////////9d4ANd4ANd4AP///////////////////////////////////////9d4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////////////////////
/////////////////////////////////////9d4ANd4ANd4AP////////////////////////rv4Prv
4P///////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////
/////////////////////////////////////////////////////9d4ANd4ANd4AP//////////////
//rv4OarYNd4ANd4AOarYPrv4Nd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////
/////////////////////////////////////////////////////////////////////9d4ANd4ANd4
AP////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////
////////////////////////////////////////////////////////////////////////////////
/////9d4ANd4ANd4APrv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4AP//////////////////////////////////////////////////////////////////////////
/////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////////////////////
/////////////////////////////////////9d4ANd4ANd4AP//////////////////////////////
//rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////
//////////////////////////////////////////////rv4OarYNd4ANd4ANd4AOarYPrv4P//////
//////////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////
//////////////////////////////////////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4
ANd4ANd4AOarYPrv4P////////////////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////
//////////////////////////////////////////////////////////////rv4OarYNd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P////////////////////////////////rv4Oar
YNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4AP////////////////////////////////////////////////////////////////rv4OarYNd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////
//////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4AP////////////////////////////////////////////////////////rv
4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
AOarYPrv4P////////////////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////
//////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4AOarYPrv4PDNoNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////
//////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P////////////DNoNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////
//////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P////////////////////////DNoNd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4AP////////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////////////////
//////DNoNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4AP////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////////
//////////////////////////DNoNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////
//////////////////////////////////////////////DNoNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4APrv4OarYNd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////
//////////////////////////////////////////////////////////////////DNoNd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4APDNoPrv4OarYNd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv
4P//////////////////////////////////////////////////////////////////////////////
//XewNyJINd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4APDN
oP////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
AOarYPrv4P//////////////////////////////////////////////////////////////////////
//////////XewOGaQNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4APDNoP////////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4AOarYPrv4P//////////////////////////////////////////////////////////////
//////////////////XewOGaQNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4APDNoP////////////////////////////////////rv4OarYNd4ANd4ANd4
ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////////////////////////////////////////
//////////////////////////XewOGaQNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4APDNoP//////////////////////////////////////////
//////rv4OarYNd4ANd4ANd4AOarYPrv4P//////////////////////////////////////////////
//////////////////////////////////XewOGaQNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4APDNoP//////////////////////////////
//////////////////////////////rv4OmzcPrv4P//////////////////////////////////////
//////////////////////////////////////////XewOGaQNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANyJIPXewP//////////////
//////////////////////////////////////////////jm0NyIH/jm0P//////////////////////
//////////////////////////////////////////////////XewOGaQNd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
AOGaQPXewP////////////////////////////////////////////////jm0NqAENd4ANqAEPjm0P//
//////////////////////////////////////////////////////////XewOGaQNd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4AOGaQPXewP////////////////////////////////////jm0NqAENd4
ANd4ANd4ANqAEPjm0P////////////////////////////////////////////////XewOGaQNd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOGaQPXewP//////////////////////
//jm0NqAENd4ANd4ANd4ANd4ANd4ANqAEPjm0P////////////////////////////////////XewOGa
QNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOGaQPXe
wP////////////jm0NqAENd4ANd4ANd4ANd4ANd4ANd4ANd4ANqAEPjm0P//////////////////////
//XewOGaQNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4AOGaQPXewPjm0NqAENd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANqAEPjm0P//
//////////XewOGaQNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANqAEPjm0PXewOGaQNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAYAAAAAAAAGwAAAAAAAAAAAAAAAAAA
AAAAANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv
4Nd4ANd4APrv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4AOarYPrv4P///////9d4ANd4AP////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P///////////////9d4ANd4AP//////
//////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////
/////////////////9d4ANd4AP////////////////////////jm0NqAENd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4AOarYPrv4P///////////////////////////////9d4ANd4AP//////////////////////
/////+7EkNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////////////////////////
/9d4ANd4AP///////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////
/////////////////////////////////9d4ANd4AP///////////////////////////////9d4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
AOarYPrv4P///////////////////////////////////////////////////////9d4ANd4AP//////
/////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANqAEPjm0P//////////////////////////////////////////////
/////////////////9d4ANd4AP///////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AO7EkP//////////////////
/////////////////////////////////////////////////9d4ANd4AP//////////////////////
/////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4AP//////////////////////////////////////////////////////////////////////
/9d4ANd4AP///////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////
/////////////////////////////////9d4ANd4AP///////////////////////////////9d4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////
/////////////////////////////////////////////////////////////////9d4ANd4AP//////
/////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////////////////
/////////////////9d4ANd4AP///////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////
/////////////////////////////////////////////////9d4ANd4AP//////////////////////
/////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4AP//////////////////////////////////////////////////////////////////////
/9d4ANd4AP///////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////
/////////////////////////////////9d4ANd4AP////////////////rv4Ou8gPrv4P///9d4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////
/////////////////////////////////////////////////////////////////9d4ANd4AP//////
//rv4OarYNd4ANd4ANd4AOarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////////////////////
/////////////////9d4ANd4APrv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////
/////////////////////////////////////////////////9d4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4AP//////////////////////////////////////////////////////////////////////
/9d4ANd4AP////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////////////////////
//////////////////////////rv4OarYNd4ANd4AOarYPrv4P////////////////////rv4OarYNd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////
//////////////////////////////////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4
AOarYPrv4P////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4AP////////////////////////////////////////////////rv4Oar
YNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P////////////////////rv4OarYNd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////////////////////
//////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
AOarYPrv4P////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4AP////////////////////////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4PDNoNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP////////////////////////rv4OarYNd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P////////////DN
oNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AP//////
//////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
AOarYPrv4P////////////////////////DNoNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4AP////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P////////////////////////////////////DNoNd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4APrv4OarYNd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////////
//////////////////////////DNoNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4APDNoPrv4OarYNd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOarYPrv
4P///////////////////////////////////////////////////////////+SiUNd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4APDNoP////////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////////////////////////////////////////
//////DNoNyJINd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4APDNoP//////////////
//////////rv4OarYNd4ANd4ANd4ANd4ANd4ANd4AOarYPrv4P//////////////////////////////
//////////////////////////////DNoNyJINd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4APDNoP////////////////////////////////////rv4OarYNd4ANd4AOarYPrv4P//////
//////////////////////////////////////////////////////DNoNyJINd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4AOSiUP//////////////////////////////////////
//////////jm0Pjm0P////////////////////////////////////////////////////////////DN
oNyJINd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANyJIPDN
oP////////////////////////////////////338N+RMN+RMP338P//////////////////////////
//////////////////////DNoNyJINd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANyJIPDNoP////////////////////////338N+RMNd4ANd4
AN+RMP338P////////////////////////////////////DNoNyJINd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANyJIPDN
oP////////////338N+RMNd4ANd4ANd4ANd4AN+RMP338P////////////////////////DNoNyJINd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANyJIPDNoP338N+RMNd4ANd4ANd4ANd4ANd4ANd4AN+RMP33
8P////////////DNoNyJINd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4AN+RMP338PDNoNyJINd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4ANd4
ANd4ANd4ANd4ANd4ANd4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAoAAAAUAAAAAEAGAAAAAAA
wBIAAAAAAAAAAAAAAAAAAAAAAADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADmq2D67+DXeADXeAD67+Dmq2DXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADmq2D67+D////////XeADXeAD////////67+Dmq2DXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADmq2D67+D////////////////XeADXeAD////////////////67+DciSDXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADmq2D67+D////////////////////////XeADXeAD////////////////////13sDXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D6
7+D////////////////////////////////XeADXeAD////////////////////////XeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D/////
///////////////////////////////////XeADXeAD////////////////////////XeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADciSD67+D/////////////
///////////////////////////////////XeADXeAD////////////////////////XeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD13sD/////////////////
///////////////////////////////////XeADXeAD////////////////////////XeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////////////////////XeADXeAD////////////////////////XeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////////////////////XeADXeAD////////////////////////XeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////////////////////XeADXeAD////////////////////////XeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////////////////////XeADXeAD////////////////////////XeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////////////////////XeADXeAD////////////////////////XeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////////////////////XeADXeAD////////67+Dmq2Dmq2D67+DXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////////////////////XeADXeAD67+Dmq2DXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////////////////////XeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////////////////////XeADXeAD////////////////67+Dmq2DXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////////////67+Dmq2DXeADXeADmq2D67+D////////////////67+Dmq2DXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////////////67+Dmq2DXeADXeADXeADXeADXeADXeADmq2D67+D////////////////67+Dm
q2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///////////67+Dmq2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D/////////////
///67+Dmq2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////
///67+Dmq2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+DwzaDXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD////////////////67+Dm
q2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D////////////wzaDXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD////////67+Dmq2DXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D////////////////////////wzaDX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD67+Dmq2DXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D////////////////////////////////////w
zaDXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADwzaD67+Dmq2DXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADmq2D67+D/////////////////////////////////////////////
///kolDXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADwzaD////////////67+Dmq2DXeADX
eADXeADXeADXeADXeADmq2D67+D////////////////////////////////////////////////wzaDc
iSDXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADwzaD////////////////////////67+Dm
q2DXeADXeADmq2D67+D////////////////////////////////////////////////wzaDciSDXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADwzaD/////////////////////////////////
///45tD45tD////////////////////////////////////////////////wzaDciSDXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D////////////////////////////9
9/DfkTDfkTD99/D////////////////////////////////////wzaDciSDXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D////////////////99/Df
kTDXeADXeADfkTD99/D////////////////////////wzaDciSDXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D////99/DfkTDX
eADXeADXeADXeADfkTD99/D////////////wzaDciSDXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2DfkTDXeADX
eADXeADXeADXeADXeADfkTD99/DwzaDciSDXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEAGAAAAAAA
AAwAAAAAAAAAAAAAAAAAAAAAAADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+DXeAD67+Dmq2DXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADmq2D67+D////////XeAD////////67+Dmq2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D////////////////XeAD/////////
///////wzaDXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADmq2D67+D////////////////////////XeAD////////////////////XeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D/////////////////////////////
///XeAD////////////////////XeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADwzaD////////////////////////////////////////XeAD////////////////////XeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////////
///////////////////XeAD////////////////////XeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeAD////////////////////////////////////////////XeAD/////////
///////////XeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////
///////////////////////////////////XeAD////////////////////XeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////////////////////////
///XeAD////////////////////XeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeAD////////////////////////////////////////////XeAD////67+Dmq2DXeADmq2DXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////////
///////////////////XeADmq2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeAD////////////////////////////////////////67+DXeAD67+D/////
///////wzaDciSDXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////
///////////////////////67+Dmq2DXeADXeADXeADmq2D67+D////////////wzaDciSDXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeAD////////////////////////67+Dmq2DXeADXeADX
eADXeADXeADXeADXeADmq2D67+D////////////wzaDciSDXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeAD////////////////67+Dmq2DXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+DwzaDX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD////////67+Dmq2DXeADXeADX
eADXeADXeADXeADXeADXeADXeADmq2D67+D////////////wzaDXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeAD67+Dmq2DXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D/////
///////////////////wzaDXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADwzaD67+Dmq2DX
eADXeADXeADXeADXeADXeADXeADmq2D67+D////////////////////////////////13sDciSDXeADX
eADXeADXeADXeADXeADXeADXeADXeADwzaD////////////67+Dmq2DXeADXeADXeADmq2D67+D/////
///////////////////////////13sDhmkDXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADwzaD/
///////////////////////67+Dps3D67+D////////////////////////////////13sDhmkDXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D////////////////////45tDciB/4
5tD////////////////////////13sDhmkDXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADmq2D67+D////////45tDagBDXeADagBD45tD////////////13sDhmkDXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2Dz
1bDagBDXeADXeADXeADagBD45tD13sDhmkDXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAYAAAAMAAAAAEAGAAAAAAA
wAYAAAAAAAAAAAAAAAAAAAAAAADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADmq2D67+DXeAD67+Dmq2DXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D////////XeAD////////67+DkolDXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D////////////////XeAD/////////
///99/DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADmq2D67+D/////////////////////
///XeAD////////////////XeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD13sD/////////////
///////////////////XeAD////////////////XeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/
///////////////////////////////////XeAD////////////////XeADXeADXeADXeADXeADXeADX
eADXeADXeADXeAD////////////////////////////////////XeAD////////////////XeADXeADX
eADXeADXeADXeADXeADXeADXeADXeAD////////////////////////////////////XeAD/////////
///////XeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////////////////////
///XeAD////////67+D67+DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/////////////////
///////////////////XeAD67+Dmq2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeAD/
///////////////////////////67+Dmq2DXeADmq2D67+D////67+Dmq2DXeADXeADXeADXeADXeADX
eADXeADXeADXeAD////////////////////67+Dmq2DXeADXeADXeADXeADXeADmq2D67+D////67+Dm
q2DXeADXeADXeADXeADXeADXeADXeAD////////////67+Dmq2DXeADXeADXeADXeADXeADXeADXeADm
q2D67+DwzaDXeADXeADXeADXeADXeADXeADXeADXeADXeAD////67+Dmq2DXeADXeADXeADXeADXeADX
eADXeADmq2D67+D////////////wzaDXeADXeADXeADXeADXeADXeADXeADfkTDvy5zXeADXeADXeADX
eADXeADXeADXeADmq2D67+D////////////////////////wzaDXeADXeADXeADXeADXeADfkTD99/D/
///67+Dmq2DXeADXeADXeADmq2D67+D////////////////////////////67+Dmq2DXeADXeADXeADX
eADfkTD99/D////////////////67+Dps3D67+D////////////////////////////67+Dmq2DXeADX
eADXeADXeADXeADXeADciSDwzaD////////////////45tDciB/45tD////////////////////67+Dm
q2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADciSDwzaD////45tDagBDXeADagBD45tD/////
///67+Dmq2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADciSDagBDXeADX
eADXeADagBDz1bDmq2DXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADXeADX
eADXeADXeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAFAAAACgAAAABABgA
AAAAALAEAAAAAAAAAAAAAAAAAAAAAAAA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA
13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA
13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA5qtg+u/g13gA
+u/g5qtg13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA5qtg+u/g////////13gA
////////+ObQ13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA5qtg+u/g////////////////13gA
////////////13gA13gA13gA13gA13gA13gA13gA13gA13gA+ObQ////////////////////////13gA
////////////13gA13gA13gA13gA13gA13gA13gA13gA13gA////////////////////////////13gA
////////////13gA13gA13gA13gA13gA13gA13gA13gA13gA////////////////////////////13gA
////////////13gA13gA13gA13gA13gA13gA13gA13gA13gA////////////////////////////13gA
////+u/g+u/g13gA13gA13gA13gA13gA13gA13gA13gA13gA////////////////////////////13gA
5qtg13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA////////////////////////+u/g13gA
+u/g////+u/g5qtg13gA13gA13gA13gA13gA13gA13gA13gA////////////////+u/g5qtg13gA13gA
13gA5qtg+u/g////+u/g5qtg13gA13gA13gA13gA13gA13gA////////+u/g5qtg13gA13gA13gA13gA
13gA5qtg+u/g8M2g13gA13gA13gA13gA13gA13gA13gA13gA+u/g5qtg13gA13gA13gA13gA13gA5qtg
+u/g////////////8M2g13gA13gA13gA13gA13gA13gA8M2g+u/g5qtg13gA13gA13gA5qtg+u/g////
////////////////9d7A3Ikg13gA13gA13gA13gA8M2g////////////+u/g6bNw+u/g////////////
////////9d7A4ZpA13gA13gA13gA13gA13gA13gA5qtg+u/g////////+ObQ3Igf+ObQ////////////
9d7A4ZpA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA5qtg89Ww2oAQ13gA2oAQ+ObQ9d7A4ZpA
13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA
13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA
13gA13gA13gA13gA13gA13gA13gA13gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAEAAAACAAAAABABgA
AAAAAAADAAAAAAAAAAAAAAAAAAAAAAAA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA
13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA2oAQ67yA/ffw13gA/ffw67yA2oAQ13gA13gA13gA
13gA13gA13gA13gA2oAQ67yA/ffw////////13gA////////+u/g13gA13gA13gA13gA13gA13gA6bNw
/ffw////////////////13gA////////////13gA13gA13gA13gA13gA13gA////////////////////
////13gA////////////13gA13gA13gA13gA13gA13gA////////////////////////13gA////////
////13gA13gA13gA13gA13gA13gA////////////////////////13gA////////////13gA13gA13gA
13gA13gA13gA////////////////////////13gA+u/g4ZpA5qtg13gA13gA13gA13gA13gA13gA////
/////////////ffw8M2g13gA/ffw////89Ww3Ikg13gA13gA13gA13gA13gA/////////ffw67yA2oAQ
13gA13gA2oAQ7sSQ/////ffw67yA13gA13gA13gA13gA/ffw67yA2oAQ13gA13gA13gA13gA4ZpA9d7A
/ffw35Ew13gA13gA13gA13gA5KJQ46BM13gA13gA13gA13gA5qtg+u/g/////////////ffw35Ew13gA
13gA5qtg////////9d7A4ZpA5qtg+u/g/////////////////ffw67yA2oAQ13gA13gA8M2g////////
////8tOs/ffw////////////+u/g5qtg13gA13gA13gA13gA13gA13gA3Ikg8M2g8M2g13gA35Ew+ObQ
+u/g5qtg13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA13gA
13gA13gA13gA13gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAA==
</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="blank" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\blank.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="blank_light" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\blank_light.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="blank_press" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\blank_press.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cancel" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\cancel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cancel_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\cancel_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cancel_ban" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\cancel_ban.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cancel_ban_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\cancel_ban_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cancel_light" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\cancel_light.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cancel_press" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\cancel_press.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="max" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\max.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="max_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\max_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="max_ban" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\max_ban.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="max_ban_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\max_ban_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="max_light" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\max_light.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="max_press" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\max_press.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="min" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\min.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="min_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\min_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="min_ban" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\min_ban.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="min_ban_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\min_ban_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="min_light" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\min_light.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="min_press" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\min_press.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="options" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\options.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="options_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\options_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="options_ban" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\options_ban.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="options_ban_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\options_ban_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="options_light" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\options_light.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="options_press" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\options_press.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="restore" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\restore.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="restore_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\restore_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="restore_ban" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\restore_ban.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="restore_ban_back" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\restore_ban_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="restore_light" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\restore_light.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="restore_press" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\restore_press.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

38
WAShell/NormalForm.Designer.cs generated Normal file
View File

@@ -0,0 +1,38 @@
namespace WAShell
{
partial class NormalForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose (bool disposing)
{
if (disposing && (components != null))
{
components.Dispose ();
}
base.Dispose (disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent ()
{
this.components = new System.ComponentModel.Container ();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "NormalForm";
}
#endregion
}
}

25
WAShell/NormalForm.cs Normal file
View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WAShell
{
public partial class NormalForm: Form, IMetroIconSupport
{
public NormalForm ()
{
InitializeComponent ();
}
private Icon _iconForMetro = null;
public virtual Icon WindowIcon
{
get { return _iconForMetro; }
set { _iconForMetro = value; }
}
}
}

BIN
WAShell/Resources/blank.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
WAShell/Resources/max.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
WAShell/Resources/min.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -41,6 +41,19 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="IMetroIconSupport.cs" />
<Compile Include="ModenForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ModenForm.Designer.cs">
<DependentUpon>ModenForm.cs</DependentUpon>
</Compile>
<Compile Include="NormalForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="NormalForm.Designer.cs">
<DependentUpon>NormalForm.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
@@ -83,6 +96,9 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="ModenForm.resx">
<DependentUpon>ModenForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
@@ -94,6 +110,105 @@
<DependentUpon>WebAppForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="Resources\blank.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\blank_light.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\blank_press.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\cancel.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\cancel_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\cancel_ban.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\cancel_ban_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\cancel_light.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\cancel_press.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\max.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\max_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\max_ban.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\max_ban_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\max_light.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\max_press.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\min.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\min_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\min_ban.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\min_ban_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\min_light.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\min_press.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\options.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\options_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\options_ban.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\options_ban_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\options_light.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\options_press.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\restore.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\restore_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\restore_ban.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\restore_ban_back.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\restore_light.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\restore_press.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

@@ -50,6 +50,7 @@
this.ClientSize = new System.Drawing.Size(661, 416);
this.Controls.Add(this.webui);
this.Name = "WebAppForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Main Web App Form";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.WebAppForm_FormClosing);
this.Load += new System.EventHandler(this.WebAppForm_Load);

View File

@@ -12,7 +12,7 @@ namespace WAShell
{
[ComVisible (true)]
[ClassInterface (ClassInterfaceType.AutoDual)]
public partial class WebAppForm: Form, IScriptBridge, IWebBrowserPageScale, ITaskbarProgress
public partial class WebAppForm: NormalForm, IScriptBridge, IWebBrowserPageScale, ITaskbarProgress
{
SplashForm splash = new SplashForm ();
TaskbarProgress taskbar = null;

View File

@@ -1,22 +1,22 @@
<?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|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{F0C84812-0CDF-4AA0-A0F8-F37AC833F39B}</ProjectGuid>
@@ -32,6 +32,13 @@
<CharacterSet>Unicode</CharacterSet>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
@@ -40,18 +47,13 @@
<CharacterSet>Unicode</CharacterSet>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -61,26 +63,26 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -102,19 +104,27 @@
<AdditionalManifestFiles>app.manifest</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;HMODULE_MODE_EXE;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<CompileAsManaged>true</CompileAsManaged>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>shlwapi.lib;version.lib;dwmapi.lib;$(OutDir)pkgread.lib;$(OutDir)pkgmgr.lib;$(OutDir)certmgr.lib;$(OutDir)priformatcli.lib;$(OutDir)notice.lib;winhttp.lib;Psapi.lib;advapi32.lib;gdi32.lib;comdlg32.lib;shell32.lib;ole32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<IgnoreSpecificDefaultLibraries>comsupp.lib</IgnoreSpecificDefaultLibraries>
</Link>
<Manifest>
<AdditionalManifestFiles>app.manifest</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
@@ -139,7 +149,7 @@
<AdditionalManifestFiles>app.manifest</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
@@ -147,7 +157,7 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;HMODULE_MODE_EXE;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
@@ -155,7 +165,14 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>shlwapi.lib;version.lib;dwmapi.lib;$(OutDir)pkgread.lib;$(OutDir)pkgmgr.lib;$(OutDir)certmgr.lib;$(OutDir)priformatcli.lib;$(OutDir)notice.lib;winhttp.lib;Psapi.lib;advapi32.lib;gdi32.lib;comdlg32.lib;shell32.lib;ole32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<IgnoreSpecificDefaultLibraries>
</IgnoreSpecificDefaultLibraries>
</Link>
<Manifest>
<AdditionalManifestFiles>app.manifest</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\certmgr\certmgr.h" />

View File

@@ -72,6 +72,12 @@
<ClInclude Include="appxinfo.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="localeex.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="bridge.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="..\certmgr\certmgr.h">
<Filter>头文件</Filter>
</ClInclude>
@@ -84,12 +90,6 @@
<ClInclude Include="..\pkgread\pkgread.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="localeex.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="bridge.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="..\priformatcli\priformatcli.h">
<Filter>头文件</Filter>
</ClInclude>

View File

@@ -10,8 +10,8 @@
#include <codecvt>
#include <locale>
#include "nstring.h"
#include "priformatcli.h"
#include "pkgread.h"
#include "../priformatcli/priformatcli.h"
#include "../pkgread/pkgread.h"
static std::string ws2utf8 (const std::wstring &ws)
{

View File

@@ -1 +0,0 @@
E:/Profiles/Bruce/Documents/Visual Studio 2015/Projects/AppInstallerReset/certmgr/certmgr.h

View File

@@ -20,9 +20,9 @@
#include "resmap.h"
#include "appxinfo.h"
#include "localeex.h"
#include "pkgmgr.h"
#include "notice.h"
#include "certmgr.h"
#include "../pkgmgr/pkgmgr.h"
#include "../notice/notice.h"
#include "../certmgr/certmgr.h"
#include "bridge.h"
#include "filepath.h"

View File

@@ -1 +0,0 @@
E:/Profiles/Bruce/Documents/Visual Studio 2015/Projects/AppInstallerReset/notice/notice.h

View File

@@ -1 +0,0 @@
E:/Profiles/Bruce/Documents/Visual Studio 2015/Projects/AppInstallerReset/pkgmgr/pkgmgr.h

View File

@@ -1 +0,0 @@
E:/Profiles/Bruce/Documents/Visual Studio 2015/Projects/AppInstallerReset/pkgread/pkgread.h

View File

@@ -1 +0,0 @@
../priformatcli/priformatcli.h

5
arm_build.bat Normal file
View File

@@ -0,0 +1,5 @@
@echo off
cd /d "%~dp0"
set SCRIPT_DIR=%~dp0
powershell -NoProfile -ExecutionPolicy Bypass -File "%SCRIPT_DIR%ArmBuild.ps1"
pause

View File

@@ -1,22 +1,22 @@
<?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|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{E04CCAB9-35DB-495C-A279-5B483C707CD0}</ProjectGuid>
@@ -31,6 +31,12 @@
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
@@ -38,13 +44,7 @@
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
@@ -59,26 +59,26 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -95,17 +95,18 @@
<AdditionalDependencies>crypt32.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;CERTMGR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;CERTMGR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>crypt32.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -126,14 +127,14 @@
<AdditionalDependencies>crypt32.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;CERTMGR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CERTMGR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
@@ -141,6 +142,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>crypt32.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
@@ -156,23 +158,23 @@
<ClCompile Include="certmgr.cpp" />
<ClCompile Include="dllmain.cpp">
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
</PrecompiledHeader>
</ClCompile>
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>

View File

@@ -1,22 +1,22 @@
<?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|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{7A05E943-6E0A-4F57-8BD7-BE90F44DCAD7}</ProjectGuid>
@@ -31,6 +31,12 @@
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
@@ -38,13 +44,7 @@
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
@@ -59,26 +59,26 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -97,18 +97,20 @@
<AdditionalDependencies>shlwapi.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<AdditionalDependencies>shlwapi.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -131,7 +133,7 @@
<AdditionalDependencies>shlwapi.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
@@ -139,7 +141,7 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
@@ -147,6 +149,8 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<AdditionalDependencies>shlwapi.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>

76
notes/symlinks.md Normal file
View File

@@ -0,0 +1,76 @@
# 关于该项目中的一些符号链接
该项目由于原作者开发方便,使用了一些符号链接。在迁移时会遇到问题。
符号链接主要是位于 \appinstaller 目录中。
使用了符号链接的文件有:
- certmgr.h
- notice.h
- pkgmgr.h
- pkgread.h
- priformatcli.h
以上文件分别指向的是 `..\<ProjectName>\<ProjectName>.h`
但是我将源代码当中 appxinfo.h 和 main.cpp 这两个文件的 #include 语句改为了 `#include "../<ProjectName>/<ProjectName>.h"` ,因此就不需要原来的符号链接了。
# 一些最终运行所需文件位于 shared 目录
此外,在生成完成后,最终生成的程序需要一些文件,但是这些文件位于的是解决方案的 `shared` 目录。
因此,你在测试时,需要将 `shared` 目录中的每一个子目录都在输出目录下(`Debug``Release`)创建一个目录符号链接 (`SYMLINKD`),指向 `..\shared\<子目录>`
例如:
``` for /d %A in (D:\GitHub\App-Installer-For-Windows-8.x-Reset\shared\*) do @mklink /d "D:\GitHub\App-Installer-For-Windows-8.x-Reset\Debug\%~nA" "%A" ```
``` for /d %A in (D:\GitHub\App-Installer-For-Windows-8.x-Reset\shared\*) do @mklink /d "D:\GitHub\App-Installer-For-Windows-8.x-Reset\Release\%~nA" "%A" ```
最终发布时,你也需要将 `shared` 目录中的每一个子目录都复制到发布目录,再打包发布。
# pkgread 项目需要引用 pugixml 代码文件
最后pkgread 项目引用了我新建的一个叫 pugixml 的项目,包含如下文件:
- `pugixml.cpp`
- `pugixml.hpp`
- `pugiconfig.hpp`
如果没有这个的话,链接器会报错 LNK2019 无法解析的外部符号:
- `pugi::xml_document::load_file`
- `pugi::as_utf8`
- `pugi::as_wide`
和 LNK1120 n 个无法解析的外部命令。
因为这个解决方案需要一个 NuGet 包叫 `pugixml`
但是这个包默认只有 x86 和 x64 的版本,因此为了编译出 ARM32 版本,我就把 pugixml.cpp 等文件单开了一个项目。
迁移之后,你应该需要在 pugixml 项目中重新添加这几个“现有项”的引用。
路径示例:
```D:\GitHub\App-Installer-For-Windows-8.x-Reset\packages\pugixml.1.15.0\build\native\include\pugixml.cpp```
我的做法是在整个解决方案中添加了一个新的项目 `pugixml`,这个项目的唯一作用就是编译 pugixml.cpp 生成 pugixml.lib 。
暂时还需要手动将 Debug 和 Release 版本的 pugixml.lib 从生成的路径分别复制到项目生成时所引用的 Debug 和 Release 目录下,才能成功链接。
例如:
生成的目标路径:
```D:\GitHub\App-Installer-For-Windows-8.x-Reset\ARM\Debug\pugixml.lib```
```D:\GitHub\App-Installer-For-Windows-8.x-Reset\ARM\Release\pugixml.lib```
你需要复制到的路径:
```D:\GitHub\App-Installer-For-Windows-8.x-Reset\packages\pugixml.1.15.0\build\native\lib\ARM\v140\dynamic\Debug\pugixml.lib```
```D:\GitHub\App-Installer-For-Windows-8.x-Reset\packages\pugixml.1.15.0\build\native\lib\ARM\v140\dynamic\Release\pugixml.lib```

View File

@@ -1,10 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@@ -24,6 +32,13 @@
<PlatformToolset>v120</PlatformToolset>
<CLRSupport>false</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v120</PlatformToolset>
<CLRSupport>false</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
@@ -31,21 +46,40 @@
<PlatformToolset>v120</PlatformToolset>
<CLRSupport>false</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v120</PlatformToolset>
<CLRSupport>false</CLRSupport>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ReferencePath>$(VCINSTALLDIR)\vcpackages;$(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib;$(WindowsSdkDir)\References\CommonConfiguration\Neutral;$(VSSDK140Install)..\VC\atlmfc\lib;$(ReferencePath)</ReferencePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ReferencePath>$(VCINSTALLDIR)\vcpackages;$(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib;$(WindowsSdkDir)\References\CommonConfiguration\Neutral;$(VSSDK140Install)..\VC\atlmfc\lib;$(ReferencePath)</ReferencePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ReferencePath>$(VCINSTALLDIR)\vcpackages;$(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib;$(WindowsSdkDir)\References\CommonConfiguration\Neutral;$(VSSDK140Install)..\VC\atlmfc\lib;$(ReferencePath)</ReferencePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ReferencePath>$(VCINSTALLDIR)\vcpackages;$(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib;$(WindowsSdkDir)\References\CommonConfiguration\Neutral;$(VSSDK140Install)..\VC\atlmfc\lib;$(ReferencePath)</ReferencePath>
</PropertyGroup>
<!-- 关键:启用 WinRT 扩展 -->
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@@ -64,6 +98,23 @@
<AdditionalDependencies>shlwapi.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<AdditionalOptions>/ZW:nostdlib /FUplatform.winmd /FUwindows.winmd %(AdditionalOptions)</AdditionalOptions>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;NOTICE_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<CompileAsWinRT>true</CompileAsWinRT>
<MinimalRebuild>false</MinimalRebuild>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<AdditionalDependencies>shlwapi.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@@ -83,6 +134,25 @@
<AdditionalDependencies>shlwapi.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalOptions>/ZW:nostdlib /FUplatform.winmd /FUWindows.winmd %(AdditionalOptions)</AdditionalOptions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;NOTICE_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<CompileAsWinRT>true</CompileAsWinRT>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>shlwapi.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="notice.cpp" />

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

View File

@@ -1,10 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@@ -24,6 +32,13 @@
<PlatformToolset>v120</PlatformToolset>
<CLRSupport>false</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v120</PlatformToolset>
<CLRSupport>false</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
@@ -31,21 +46,40 @@
<PlatformToolset>v120</PlatformToolset>
<CLRSupport>false</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v120</PlatformToolset>
<CLRSupport>false</CLRSupport>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ReferencePath>$(VCINSTALLDIR)\vcpackages;$(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib;$(WindowsSdkDir)\References\CommonConfiguration\Neutral;$(ReferencePath)</ReferencePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ReferencePath>$(VCINSTALLDIR)\vcpackages;$(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib;$(WindowsSdkDir)\References\CommonConfiguration\Neutral;$(ReferencePath)</ReferencePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ReferencePath>$(VCINSTALLDIR)\vcpackages;$(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib;$(WindowsSdkDir)\References\CommonConfiguration\Neutral;$(ReferencePath)</ReferencePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ReferencePath>$(VCINSTALLDIR)\vcpackages;$(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib;$(WindowsSdkDir)\References\CommonConfiguration\Neutral;$(ReferencePath)</ReferencePath>
</PropertyGroup>
<!-- 关键:启用 WinRT 扩展 -->
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@@ -63,6 +97,25 @@
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<AdditionalOptions>/ZW:nostdlib /FUplatform.winmd /FUwindows.winmd %(AdditionalOptions)</AdditionalOptions>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PKGMGR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<CompileAsWinRT>true</CompileAsWinRT>
<MinimalRebuild>false</MinimalRebuild>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<AdditionalLibraryDirectories>
</AdditionalLibraryDirectories>
<AdditionalDependencies>shlwapi.lib;version.lib;dwmapi.lib;winhttp.lib;Psapi.lib;advapi32.lib;gdi32.lib;comdlg32.lib;shell32.lib;ole32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@@ -81,6 +134,27 @@
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalOptions>/ZW:nostdlib /FUplatform.winmd /FUWindows.winmd %(AdditionalOptions)</AdditionalOptions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PKGMGR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<CompileAsWinRT>true</CompileAsWinRT>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>
</AdditionalLibraryDirectories>
<AdditionalDependencies>shlwapi.lib;version.lib;dwmapi.lib;winhttp.lib;Psapi.lib;advapi32.lib;gdi32.lib;comdlg32.lib;shell32.lib;ole32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="pkgmgr.cpp" />

View File

@@ -1,22 +1,22 @@
<?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|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{A7753282-AA16-43D9-8ACA-7065239DD702}</ProjectGuid>
@@ -31,6 +31,12 @@
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
@@ -38,13 +44,7 @@
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
@@ -59,26 +59,26 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -88,6 +88,8 @@
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PKGREAD_EXPORTS;HMODULE_MODE_DLL1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -95,17 +97,30 @@
<AdditionalDependencies>urlmon.lib;crypt32.lib;version.lib;xmllite.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;PKGREAD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PKGREAD_EXPORTS;HMODULE_MODE_DLL1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<WholeProgramOptimization>false</WholeProgramOptimization>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<ConformanceMode>Default</ConformanceMode>
<ShowIncludes>false</ShowIncludes>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>shlwapi.lib;version.lib;dwmapi.lib;winhttp.lib;Psapi.lib;advapi32.lib;gdi32.lib;comdlg32.lib;shell32.lib;ole32.lib;urlmon.lib;crypt32.lib;xmllite.lib;pugixml.lib;%(AdditionalDependencies)</AdditionalDependencies>
<LinkTimeCodeGeneration>
</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>$(SolutionDir)packages\pugixml.1.15.0\build\native\lib\$(PlatformTarget)\$(PlatformToolset)\dynamic\$(Configuration)</AdditionalLibraryDirectories>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -117,6 +132,8 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PKGREAD_EXPORTS;HMODULE_MODE_DLL1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -126,21 +143,25 @@
<AdditionalDependencies>urlmon.lib;crypt32.lib;version.lib;xmllite.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;PKGREAD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PKGREAD_EXPORTS;HMODULE_MODE_DLL1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>shlwapi.lib;version.lib;dwmapi.lib;winhttp.lib;Psapi.lib;advapi32.lib;gdi32.lib;comdlg32.lib;shell32.lib;ole32.lib;urlmon.lib;crypt32.lib;xmllite.lib;pugixml.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)packages\pugixml.1.15.0\build\native\lib\$(PlatformTarget)\$(PlatformToolset)\dynamic\$(Configuration)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
@@ -169,24 +190,24 @@
<ItemGroup>
<ClCompile Include="dllmain.cpp">
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
</PrecompiledHeader>
</ClCompile>
<ClCompile Include="pkgread.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
@@ -195,6 +216,11 @@
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\pugixml\pugixml.vcxproj">
<Project>{b1df139f-cef1-404f-8255-31ef4bf0ec4c}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="..\packages\pugixml.1.15.0\build\native\pugixml.targets" Condition="Exists('..\packages\pugixml.1.15.0\build\native\pugixml.targets')" />

View File

@@ -12,26 +12,57 @@ static std::wstring StringToWString (const std::string &str, UINT codePage = CP_
}
#undef GetLocaleInfo
/// <summary>
/// 获取指定 LCID 的区域设置信息ANSI 版本)。
/// </summary>
/// <param name="code">区域标识符LCID。</param>
/// <param name="type">要获取的信息类型LCTYPE。</param>
/// <returns>以 ANSI 字符串形式返回的区域设置信息。</returns>
std::string GetLocaleInfoA (LCID code, LCTYPE type)
{
char buf [LOCALE_NAME_MAX_LENGTH] = {0};
GetLocaleInfoA (code, type, buf, LOCALE_NAME_MAX_LENGTH);
return buf;
}
/// <summary>
/// 获取指定 LCID 的区域设置信息Unicode 版本)。
/// </summary>
/// <param name="code">区域标识符LCID。</param>
/// <param name="type">要获取的信息类型LCTYPE。</param>
/// <returns>以宽字符串形式返回的区域设置信息。</returns>
std::wstring GetLocaleInfoW (LCID code, LCTYPE type)
{
WCHAR buf [LOCALE_NAME_MAX_LENGTH] = {0};
GetLocaleInfoW (code, type, buf, LOCALE_NAME_MAX_LENGTH);
return buf;
}
/// <summary>
/// 获取指定 LCID 的区域设置信息(宽字符串输出)。
/// </summary>
/// <param name="code">区域标识符LCID。</param>
/// <param name="type">要获取的信息类型LCTYPE。</param>
/// <param name="output">接收信息的宽字符串引用。</param>
void GetLocaleInfo (LCID code, LCTYPE type, std::wstring &output)
{
output = GetLocaleInfoW (code, type);
}
/// <summary>
/// 获取指定 LCID 的区域设置信息ANSI 字符串输出)。
/// </summary>
/// <param name="code">区域标识符LCID。</param>
/// <param name="type">要获取的信息类型LCTYPE。</param>
/// <param name="output">接收信息的 ANSI 字符串引用。</param>
void GetLocaleInfo (LCID code, LCTYPE type, std::string &output)
{
output = GetLocaleInfoA (code, type);
}
/// <summary>
/// 获取指定区域名称的区域设置信息(扩展版本,支持 Windows Vista+)。
/// </summary>
/// <param name="lpLocaleName">区域名称(如 "en-US")。</param>
/// <param name="type">要获取的信息类型LCTYPE。</param>
/// <param name="output">接收信息的宽字符串引用。</param>
/// <returns>成功返回非零值,失败返回 0如果 lpLocaleName 无效,则函数会返回 0。</returns>
int GetLocaleInfoEx (std::wstring lpLocaleName, LCTYPE type, std::wstring &output)
{
WCHAR buf [LOCALE_NAME_MAX_LENGTH] = {0};
@@ -41,57 +72,130 @@ int GetLocaleInfoEx (std::wstring lpLocaleName, LCTYPE type, std::wstring &outpu
}
#undef SetLocaleInfo
/// <summary>
/// 设置指定 LCID 的区域设置信息ANSI 版本)。
/// </summary>
/// <param name="code">区域标识符LCID。</param>
/// <param name="type">要设置的信息类型LCTYPE。</param>
/// <param name="lcData">要设置的数据ANSI 字符串)。</param>
/// <returns>成功返回非零值,失败返回 0。</returns>
BOOL SetLocaleInfoA (LCID code, LCTYPE type, const std::string &lcData)
{
return SetLocaleInfoA (code, type, lcData.c_str ());
}
/// <summary>
/// 设置指定 LCID 的区域设置信息Unicode 版本)。
/// </summary>
/// <param name="code">区域标识符LCID。</param>
/// <param name="type">要设置的信息类型LCTYPE。</param>
/// <param name="lcData">要设置的数据(宽字符串)。</param>
/// <returns>成功返回非零值,失败返回 0。</returns>
BOOL SetLocaleInfoW (LCID code, LCTYPE type, const std::wstring &lcData)
{
return SetLocaleInfoW (code, type, lcData.c_str ());
}
/// <summary>
/// 设置指定 LCID 的区域设置信息(宽字符串重载)。
/// </summary>
/// <param name="code">区域标识符LCID。</param>
/// <param name="type">要设置的信息类型LCTYPE。</param>
/// <param name="lcData">要设置的数据(宽字符串)。</param>
/// <returns>成功返回非零值,失败返回 0。</returns>
BOOL SetLocaleInfo (LCID code, LCTYPE type, const std::wstring &lcData)
{
return SetLocaleInfoW (code, type, lcData);
}
/// <summary>
/// 设置指定 LCID 的区域设置信息ANSI 字符串重载)。
/// </summary>
/// <param name="code">区域标识符LCID。</param>
/// <param name="type">要设置的信息类型LCTYPE。</param>
/// <param name="lcData">要设置的数据ANSI 字符串)。</param>
/// <returns>成功返回非零值,失败返回 0。</returns>
BOOL SetLocaleInfo (LCID code, LCTYPE type, const std::string &lcData)
{
return SetLocaleInfoA (code, type, lcData);
}
/// <summary>
/// 从 LCID 获取受限区域代码(如 "en"ANSI 版本。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <returns>受限区域代码的 ANSI 字符串。</returns>
std::string GetLocaleRestrictedCodeFromLcidA (LCID lcid)
{
return GetLocaleInfoA (lcid, 89);
}
/// <summary>
/// 从 LCID 获取受限区域代码(如 "en"Unicode 版本。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <returns>受限区域代码的宽字符串。</returns>
std::wstring GetLocaleRestrictedCodeFromLcidW (LCID lcid)
{
return GetLocaleInfoW (lcid, 89);
}
/// <summary>
/// 从 LCID 获取受限区域代码ANSI 输出)。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <param name="ret">输出 ANSI 字符串。</param>
void GetLocaleRestrictedCodeFromLcid (LCID lcid, std::string &ret)
{
ret = GetLocaleRestrictedCodeFromLcidA (lcid);
}
/// <summary>
/// 从 LCID 获取受限区域代码(宽字符串输出)。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <param name="ret">输出宽字符串。</param>
void GetLocaleRestrictedCodeFromLcid (LCID lcid, std::wstring &ret)
{
ret = GetLocaleRestrictedCodeFromLcidW (lcid);
}
/// <summary>
/// 从 LCID 获取详细区域代码(如 "US"ANSI 版本。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <returns>详细区域代码的 ANSI 字符串。</returns>
std::string GetLocaleElaboratedCodeFromLcidA (LCID lcid)
{
return GetLocaleInfoA (lcid, 90);
}
/// <summary>
/// 从 LCID 获取详细区域代码(如 "US"Unicode 版本。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <returns>详细区域代码的宽字符串。</returns>
std::wstring GetLocaleElaboratedCodeFromLcidW (LCID lcid)
{
return GetLocaleInfoW (lcid, 90);
}
/// <summary>
/// 从 LCID 获取详细区域代码(宽字符串输出)。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <param name="ret">输出宽字符串。</param>
void GetLocaleElaboratedCodeFromLcid (LCID lcid, std::wstring &ret)
{
ret = GetLocaleElaboratedCodeFromLcidW (lcid);
}
/// <summary>
/// 从 LCID 获取详细区域代码ANSI 输出)。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <param name="ret">输出 ANSI 字符串。</param>
void GetLocaleElaboratedCodeFromLcid (LCID lcid, std::string &ret)
{
ret = GetLocaleElaboratedCodeFromLcidA (lcid);
}
/// <summary>
/// 将宽字符串形式的区域名称转换为 LCID。
/// </summary>
/// <param name="localeCode">区域名称(如 L"en-US")。</param>
/// <returns>对应的 LCID若失败返回 0。</returns>
LCID LocaleCodeToLcidW (const std::wstring &localeCode)
{
#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600)
@@ -108,62 +212,149 @@ LCID LocaleCodeToLcidW (const std::wstring &localeCode)
return LocaleNameToLCID (localeCode.c_str (), 0);
#endif
}
/// <summary>
/// 将 ANSI 字符串形式的区域名称转换为 LCID。
/// </summary>
/// <param name="localeCode">区域名称(如 "en-US")。</param>
/// <returns>对应的 LCID若失败返回 0。</returns>
LCID LocaleCodeToLcidA (const std::string &localeCode)
{
std::wstring lcWide = StringToWString (std::string (localeCode));
return LocaleCodeToLcidW (lcWide.c_str ());
}
/// <summary>
/// 将宽字符串区域名称转换为 LCID重载
/// </summary>
/// <param name="loccode">区域名称(宽字符串)。</param>
/// <returns>对应的 LCID。</returns>
LCID LocaleCodeToLcid (const std::wstring &loccode)
{
return LocaleCodeToLcidW (loccode.c_str ());
}
/// <summary>
/// 将 ANSI 字符串区域名称转换为 LCID重载
/// </summary>
/// <param name="loccode">区域名称ANSI 字符串)。</param>
/// <returns>对应的 LCID。</returns>
LCID LocaleCodeToLcid (const std::string &loccode)
{
return LocaleCodeToLcidA (loccode.c_str ());
}
/// <summary>
/// 根据区域名称获取受限区域代码ANSI 版本,接受 C 字符串)。
/// </summary>
/// <param name="lc">区域名称(如 "en-US")。</param>
/// <returns>受限区域代码的 ANSI 字符串。</returns>
std::string GetLocaleRestrictedCodeA (LPCSTR lc)
{
return GetLocaleInfoA (LocaleCodeToLcidA (lc), 89);
}
/// <summary>
/// 根据区域名称获取受限区域代码ANSI 版本,接受 std::string
/// </summary>
/// <param name="lc">区域名称std::string。</param>
/// <returns>受限区域代码的 ANSI 字符串。</returns>
std::string GetLocaleRestrictedCodeA (const std::string &lc)
{
return GetLocaleInfoA (LocaleCodeToLcidA (lc.c_str ()), 89);
}
/// <summary>
/// 根据区域名称获取受限区域代码Unicode 版本,接受 C 宽字符串)。
/// </summary>
/// <param name="lc">区域名称(如 L"en-US")。</param>
/// <returns>受限区域代码的宽字符串。</returns>
std::wstring GetLocaleRestrictedCodeW (LPCWSTR lc)
{
return GetLocaleInfoW (LocaleCodeToLcidW (lc), 89);
}
/// <summary>
/// 根据区域名称获取受限区域代码Unicode 版本,接受 std::wstring
/// </summary>
/// <param name="lc">区域名称std::wstring。</param>
/// <returns>受限区域代码的宽字符串。</returns>
std::wstring GetLocaleRestrictedCodeW (const std::wstring &lc)
{
return GetLocaleInfoW (LocaleCodeToLcidW (lc.c_str ()), 89);
}
/// <summary>
/// 根据区域名称获取受限区域代码(宽字符串重载)。
/// </summary>
/// <param name="lc">区域名称std::wstring。</param>
/// <returns>受限区域代码的宽字符串。</returns>
std::wstring GetLocaleRestrictedCode (const std::wstring &lc) { return GetLocaleRestrictedCodeW (lc); }
/// <summary>
/// 根据区域名称获取受限区域代码ANSI 字符串重载)。
/// </summary>
/// <param name="lc">区域名称std::string。</param>
/// <returns>受限区域代码的 ANSI 字符串。</returns>
std::string GetLocaleRestrictedCode (const std::string &lc) { return GetLocaleRestrictedCodeA (lc); }
/// <summary>
/// 根据区域名称获取详细区域代码ANSI 版本,接受 C 字符串)。
/// </summary>
/// <param name="lc">区域名称(如 "en-US")。</param>
/// <returns>详细区域代码的 ANSI 字符串。</returns>
std::string GetLocaleElaboratedCodeA (LPCSTR lc)
{
return GetLocaleInfoA (LocaleCodeToLcidA (lc), 90);
}
/// <summary>
/// 根据区域名称获取详细区域代码ANSI 版本,接受 std::string
/// </summary>
/// <param name="lc">区域名称std::string。</param>
/// <returns>详细区域代码的 ANSI 字符串。</returns>
std::string GetLocaleElaboratedCodeA (const std::string &lc)
{
return GetLocaleInfoA (LocaleCodeToLcidA (lc.c_str ()), 90);
}
/// <summary>
/// 根据区域名称获取详细区域代码Unicode 版本,接受 C 宽字符串)。
/// </summary>
/// <param name="lc">区域名称(如 L"en-US")。</param>
/// <returns>详细区域代码的宽字符串。</returns>
std::wstring GetLocaleElaboratedCodeW (LPCWSTR lc)
{
return GetLocaleInfoW (LocaleCodeToLcidW (lc), 90);
}
/// <summary>
/// 根据区域名称获取详细区域代码Unicode 版本,接受 std::wstring
/// </summary>
/// <param name="lc">区域名称std::wstring。</param>
/// <returns>详细区域代码的宽字符串。</returns>
std::wstring GetLocaleElaboratedCodeW (const std::wstring &lc)
{
return GetLocaleInfoW (LocaleCodeToLcidW (lc.c_str ()), 90);
}
/// <summary>
/// 根据区域名称获取详细区域代码(宽字符串重载)。
/// </summary>
/// <param name="lc">区域名称std::wstring。</param>
/// <returns>详细区域代码的宽字符串。</returns>
std::wstring GetLocaleElaboratedCode (const std::wstring &lc) { return GetLocaleElaboratedCodeW (lc); }
/// <summary>
/// 根据区域名称获取详细区域代码ANSI 字符串重载)。
/// </summary>
/// <param name="lc">区域名称std::string。</param>
/// <returns>详细区域代码的 ANSI 字符串。</returns>
std::string GetLocaleElaboratedCode (const std::string &lc) { return GetLocaleElaboratedCodeA (lc); }
/// <summary>
/// 将 LCID 转换为区域名称ANSI 格式,如 "en-US")。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <param name="divide">分隔符,默认为 '-'。</param>
/// <returns>区域名称的 ANSI 字符串。</returns>
std::string LcidToLocaleCodeA (LCID lcid, char divide = '-')
{
return GetLocaleRestrictedCodeFromLcidA (lcid) + divide + GetLocaleElaboratedCodeFromLcidA (lcid);
}
/// <summary>
/// 将 LCID 转换为区域名称Unicode 格式,如 L"en-US")。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <param name="divide">分隔符,默认为 L'-'。</param>
/// <returns>区域名称的宽字符串。</returns>
std::wstring LcidToLocaleCodeW (LCID lcid, WCHAR divide = L'-')
{
#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600)
@@ -179,9 +370,25 @@ std::wstring LcidToLocaleCodeW (LCID lcid, WCHAR divide = L'-')
return GetLocaleRestrictedCodeFromLcidW (lcid) + divide + GetLocaleElaboratedCodeFromLcidW (lcid);
#endif
}
/// <summary>
/// 将 LCID 转换为区域名称(宽字符串重载)。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <param name="divide">分隔符,默认为 L'-'。</param>
/// <returns>区域名称的宽字符串。</returns>
std::wstring LcidToLocaleCode (LCID lcid, WCHAR divide = L'-') { return LcidToLocaleCodeW (lcid, divide); }
/// <summary>
/// 将 LCID 转换为区域名称ANSI 字符串重载)。
/// </summary>
/// <param name="lcid">区域标识符。</param>
/// <param name="divide">分隔符,默认为 '-'。</param>
/// <returns>区域名称的 ANSI 字符串。</returns>
std::string LcidToLocaleCode (LCID lcid, char divide = '-') { return LcidToLocaleCodeA (lcid, divide); }
/// <summary>
/// 获取当前用户的默认区域名称Unicode
/// </summary>
/// <returns>用户默认区域名称的宽字符串。</returns>
std::wstring GetUserDefaultLocaleName ()
{
#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600)
@@ -197,6 +404,10 @@ std::wstring GetUserDefaultLocaleName ()
return LcidToLocaleCodeW (GetUserDefaultLCID ());
#endif
}
/// <summary>
/// 获取系统默认的区域名称Unicode
/// </summary>
/// <returns>系统默认区域名称的宽字符串。</returns>
std::wstring GetSystemDefaultLocaleName ()
{
#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600)
@@ -213,6 +424,10 @@ std::wstring GetSystemDefaultLocaleName ()
#endif
}
/// <summary>
/// 获取当前计算机的区域设置名称(优先使用线程区域,然后用户默认,最后系统默认)。
/// </summary>
/// <returns>计算机区域名称的宽字符串。</returns>
std::wstring GetComputerLocaleCodeW ()
{
#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600)
@@ -250,6 +465,13 @@ std::wstring GetComputerLocaleCodeW ()
}
#endif
}
/// <summary>
/// 比较两个区域名称是否相等(支持字符串直接比较或通过 LCID 比较)。
/// </summary>
/// <param name="left">左区域名称。</param>
/// <param name="right">右区域名称。</param>
/// <returns>如果区域名称相同(字符串相等或 LCID 相等)则返回 true否则 false。</returns>
/// <remarks>注意:此处使用的 std::wnstring::equals 非标准,可能为自定义函数,实际应替换为 wstring 比较。</remarks>
bool LocaleNameCompare (const std::wstring &left, const std::wstring &right)
{
return std::wnstring::equals (left, right) || LocaleCodeToLcidW (left) == LocaleCodeToLcidW (right);

View File

@@ -563,6 +563,7 @@ void PriFileIterateTask (PCSPRIFILE pFilePri)
System::Runtime::InteropServices::GCHandle handle = System::Runtime::InteropServices::GCHandle::FromIntPtr (handlePtr);
auto pri = safe_cast <PriFileInst ^> (handle.Target);
auto &priFile = pri;
if (!priFile) return;
auto resmapsect = pri->inst->PriDescriptorSection->ResourceMapSections;
bool isallsearched = true;
size_t allitemslen = 0;
@@ -788,12 +789,14 @@ void PriFileIterateTaskCli (Object^ pFilePriObj)
// t->Start (IntPtr (pFilePri));
// }
//}
#ifdef ELDER_FUNC
void AddPriResourceName (PCSPRIFILE pFilePri, const std::vector <std::wnstring> &urilist)
{
if (!pFilePri) return;
if (!urilist.size ()) return;
{
CreateScopedLock (g_threadlock);
CreateScopedLock (g_iterlock);
if (g_tasklist.find (pFilePri) == g_tasklist.end ())
{
g_tasklist [pFilePri] = TASKINFO_SEARCH ();
@@ -802,11 +805,13 @@ void AddPriResourceName (PCSPRIFILE pFilePri, const std::vector <std::wnstring>
TASKINFO_SEARCH *ptask = nullptr;
{
CreateScopedLock (g_threadlock);
CreateScopedLock (g_iterlock);
ptask = &g_tasklist.at (pFilePri);
}
auto &task = *ptask;
bool isallfined = true;
{
CreateScopedLock (g_threadlock);
CreateScopedLock (g_iterlock);
for (auto &it : urilist)
{
@@ -832,6 +837,7 @@ void AddPriResourceName (PCSPRIFILE pFilePri, const std::vector <std::wnstring>
if (isallfined) return;
{
CreateScopedLock (g_threadlock);
CreateScopedLock (g_iterlock);
if (!task.bIsRunning)
{
System::Threading::Thread ^t = gcnew System::Threading::Thread (gcnew System::Threading::ParameterizedThreadStart (PriFileIterateTaskCli));
@@ -873,7 +879,7 @@ LPWSTR GetPriResource (PCSPRIFILE pFilePri, LPCWSTR lpswResId)
auto &result = task.mapTasks [TASKITEM_SEARCH (lpswResId)];
if (result.has_search ()) return _wcsdup (result.swValue.c_str ());
}
BYTE buf [sizeof (LPCWSTRLIST) + sizeof (LPCWSTR)] = {0};
BYTE buf [sizeof (LPCWSTRLIST) + sizeof (LPCWSTR)] = { 0 };
HLPCWSTRLIST hStrList = (HLPCWSTRLIST)buf;
hStrList->dwLength = 1;
hStrList->aswArray [0] = lpswResId;
@@ -893,6 +899,7 @@ LPWSTR GetPriResource (PCSPRIFILE pFilePri, LPCWSTR lpswResId)
}
LPWSTR GetPriStringResource (PCSPRIFILE pFilePri, LPCWSTR lpswUri) { return GetPriResource (pFilePri, lpswUri); }
LPWSTR GetPriPathResource (PCSPRIFILE pFilePri, LPCWSTR lpswFilePath) { return GetPriResource (pFilePri, lpswFilePath); }
#endif
void ClearPriCacheData ()
{
g_tasklist.clear ();
@@ -1209,3 +1216,362 @@ HWSDSPAIRLIST GetPriResourcesAllValuesList (PCSPRIFILE pPriFile, const LPCWSTR *
if (rnout.empty ()) return nullptr;
return CreateWSDSPAIRLISTFromMap (rnout);
}
size_t GetPriLocaleStringResources (
PCSPRIFILE pPriFile,
const std::vector <std::wstring> &resnames,
std::map <std::wnstring, std::map <std::wnstring, std::wstring>> &output
)
{
output.clear ();
if (!pPriFile) return 0;
auto inst = GetPriFileInst (pPriFile);
auto pri = inst->inst;
auto priFile = inst;
auto resmapsect = pri->PriDescriptorSection->ResourceMapSections;
std::set <std::wnstring> rnlist;
for (auto &it : resnames) rnlist.insert (std::wnstring (it));
for (size_t i = 0; i < resmapsect->Count; i ++)
{
auto resourceMapSectionRef = resmapsect [i];
auto resourceMapSection = pri->GetSectionByRef (resourceMapSectionRef);
if (resourceMapSection->HierarchicalSchemaReference != nullptr) continue;
auto decisionInfoSection = pri->GetSectionByRef (resourceMapSection->DecisionInfoSection);
for each (auto candidateSet in resourceMapSection->CandidateSets->Values)
{
auto item = pri->GetResourceMapItemByRef (candidateSet->ResourceMapItem);
std::wstring itemfullname = MPStringToStdW (item->FullName);
std::vector <std::wnstring> itempath;
{
auto ips = split_wcstok (itemfullname, L"\\");
for (auto &it : ips)
{
if (std::wnstring::empty (it)) continue;
itempath.push_back (it);
}
}
bool isfind = false;
std::wnstring taskkey = L"";
int tasktype = 1;
for (auto &it : rnlist)
{
TASKITEM_SEARCH key (it);
std::vector <std::wnstring> namepath;
key.get_path (namepath);
if (PathEquals (itempath, namepath))
{
taskkey = it;
tasktype = key.iTaskType;
isfind = true;
break;
}
}
if (!isfind) continue;
std::map <std::wnstring, std::wstring> values;
for each (auto candidate in candidateSet->Candidates)
{
std::wnstring resc = L"";
System::String ^value = nullptr;
if (candidate->SourceFile.HasValue)
{
// 内嵌资源,暂无法处理
// value = System::String::Format ("<external in {0}>", pri->GetReferencedFileByRef (candidate->SourceFile.Value)->FullName);
value = pri->GetReferencedFileByRef (candidate->SourceFile.Value)->FullName;
}
else
{
ByteSpan ^byteSpan = nullptr;
if (candidate->DataItem.HasValue) byteSpan = priFile->inst->GetDataItemByRef (candidate->DataItem.Value);
else byteSpan = candidate->Data.Value;
priFile->Seek (byteSpan->Offset, System::IO::SeekOrigin::Begin);
auto binaryReader = gcnew System::IO::BinaryReader (priFile, System::Text::Encoding::Default, true);
auto data = binaryReader->ReadBytes ((int)byteSpan->Length);
switch (candidate->Type)
{
case ResourceValueType::AsciiPath:
case ResourceValueType::AsciiString:
value = System::Text::Encoding::ASCII->GetString (data)->TrimEnd ('\0');
break;
case ResourceValueType::Utf8Path:
case ResourceValueType::Utf8String:
value = System::Text::Encoding::UTF8->GetString (data)->TrimEnd ('\0');
break;
case ResourceValueType::Path:
case ResourceValueType::String:
value = System::Text::Encoding::Unicode->GetString (data)->TrimEnd ('\0');
break;
case ResourceValueType::EmbeddedData:
value = Convert::ToBase64String (data);
break;
}
delete binaryReader;
delete data;
binaryReader = nullptr;
data = nullptr;
}
auto qualifierSet = decisionInfoSection->QualifierSets [candidate->QualifierSet];
auto qualis = gcnew System::Collections::Generic::Dictionary <QualifierType, Object ^> ();
for each (auto quali in qualifierSet->Qualifiers)
{
auto type = quali->Type;
auto value = quali->Value;
qualis->Add (type, value);
}
if (qualis->ContainsKey (QualifierType::Language))
{
resc = MPStringToStdW (qualis [QualifierType::Language]->ToString ());
values [resc] = MPStringToStdW (value ? value : System::String::Empty);
}
delete qualis;
qualis = nullptr;
}
output [taskkey] = values;
rnlist.erase (taskkey);
}
resourceMapSection = nullptr;
}
}
#ifndef ELDER_FUNC
std::wstring GetConfirmLocaleResources (const std::map <std::wnstring, std::wstring> &strvalue, const std::wnstring &lang)
{
for (auto &it : strvalue)
{
if (it.first.equals (lang)) return it.second;
}
for (auto &it : strvalue)
{
if (LocaleNameCompare (it.first, lang)) return it.second;
}
auto rest = GetLocaleRestrictedCode (lang);
for (auto &it : strvalue)
{
if (LocaleNameCompare (GetLocaleRestrictedCode (it.first), rest)) return it.second;
}
return L"";
}
std::wstring GetSuitableLocaleResources (const std::map <std::wnstring, std::wstring> &strvalue)
{
auto ret = GetConfirmLocaleResources (strvalue, GetComputerLocaleCodeW ());
if (ret.empty ()) ret = GetConfirmLocaleResources (strvalue, L"en-US");
if (ret.empty ())
{
if (strvalue.size () > 0) ret = strvalue.begin ()->second;
}
return ret;
}
std::wstring GetConfirmFileResources (const std::map <DWORD, std::wnstring> &input, unsigned short dpi, unsigned short contrast)
{
auto &output = input;
auto get_type = [] (DWORD key) -> DWORD {
return (key & PRI_TYPE_MASK) >> PRI_TYPE_SHIFT;
};
auto get_contrast = [] (DWORD key) -> DWORD {
return (key & PRI_CONTRAST_MASK) >> PRI_CONTRAST_SHIFT;
};
auto get_value = [] (DWORD key) -> DWORD {
return key & PRI_VALUE_MASK;
};
struct Candidate
{
DWORD scale;
std::wnstring value;
};
std::vector <Candidate> exact_contrast;
std::vector <Candidate> none_contrast;
for (const auto& kv : output) {
DWORD key = kv.first;
DWORD type = get_type (key);
if (type != 0) continue;
DWORD cont = get_contrast (key);
DWORD scale = get_value (key);
if (StrInclude (kv.second, L"layoutdir-RTL", true)) continue;
if (cont == contrast) {
exact_contrast.push_back ({ scale, kv.second });
}
else if (cont == 0) {
none_contrast.push_back ({ scale, kv.second });
}
}
auto select_best = [dpi] (std::vector<Candidate>& candidates) -> std::wstring {
if (candidates.empty ()) return L"";
std::sort (candidates.begin (), candidates.end (),
[] (const Candidate& a, const Candidate& b) {
return a.scale < b.scale;
});
for (const auto &cand : candidates) {
if (cand.scale == dpi) {
return cand.value.c_str ();
}
}
for (const auto &cand : candidates) {
if (cand.scale > dpi) {
return cand.value.c_str ();
}
}
return candidates.back ().value.c_str ();
};
std::wstring result = select_best (exact_contrast);
if (!result.empty ()) return result;
return L"";
}
std::wstring GetSuitableFileResources (const std::map <DWORD, std::wnstring> &input)
{
std::wstring ret = GetConfirmFileResources (input, GetDPI (), 0);
if (ret.empty ()) ret = GetConfirmFileResources (input, GetDPI (), 2);
if (ret.empty ()) ret = GetConfirmFileResources (input, GetDPI (), 1);
if (ret.empty ())
{
if (input.size () > 0)
{
ret = input.begin ()->second;
}
}
return ret;
}
void AddPriResourceName (PCSPRIFILE pFilePri, const std::vector <std::wnstring> &urilist) {}
void FindPriResource (PCSPRIFILE pFilePri, HLPCWSTRLIST hUriList) {}
void FindPriStringResource (PCSPRIFILE pFilePri, HLPCWSTRLIST hUriList) {}
void FindPriPathResource (PCSPRIFILE pFilePri, HLPCWSTRLIST hPathList) {}
LPWSTR GetPriResource (PCSPRIFILE pFilePri, LPCWSTR lpswResId)
{
if (strnull (lpswResId)) return NULL;
auto resid = lpswResId ? lpswResId : L"";
std::vector <std::wstring> ress;
ress.push_back (lpswResId ? lpswResId : L"");
std::map <std::wnstring, std::map <std::wnstring, std::wstring>> strRes;
if (IsMsResourcePrefix (lpswResId))
{
GetPriLocaleStringResources (pFilePri, ress, strRes);
if (strRes.size () > 0)
{
auto &res = strRes [std::wnstring (resid)];
return _wcsdup (GetSuitableLocaleResources (res).c_str ());
}
}
std::map <std::wnstring, std::map <DWORD, std::wnstring>> fileRes;
GetPriScaleAndTargetSizeFileList (pFilePri, ress, fileRes);
if (fileRes.size () > 0)
{
auto &fres = fileRes [std::wnstring (resid)];
return _wcsdup (GetSuitableFileResources (fres).c_str ());
}
GetPriLocaleStringResources (pFilePri, ress, strRes);
if (strRes.size () > 0)
{
auto &res = strRes [std::wnstring (resid)];
return _wcsdup (GetSuitableLocaleResources (res).c_str ());
}
}
LPWSTR GetPriStringResource (PCSPRIFILE pFilePri, LPCWSTR lpswUri) { return GetPriResource (pFilePri, lpswUri); }
LPWSTR GetPriPathResource (PCSPRIFILE pFilePri, LPCWSTR lpswFilePath) { return GetPriResource (pFilePri, lpswFilePath); }
#endif
HWSWSPAIRLIST CreateWSWSPAIRLISTFromMap (const std::map<std::wnstring, std::wstring>& input)
{
DWORD count = (DWORD)input.size ();
if (count == 0) return nullptr;
size_t totalSize = sizeof (WSWSPAIRLIST) + sizeof (WSTRWSTRPAIR) * (count - 1);
HWSWSPAIRLIST list = (HWSWSPAIRLIST)malloc (totalSize);
if (!list) return nullptr;
list->dwLength = count;
DWORD index = 0;
for (const auto& pair : input)
{
list->lpArray [index].lpKey = _wcsdup (pair.first.c_str ());
list->lpArray [index].lpValue = _wcsdup (pair.second.c_str ());
++index;
}
return list;
}
HWSWSPAIRLIST GetPriLocaleResourceAllValuesList (PCSPRIFILE pPriFile, LPCWSTR lpResName)
{
if (!pPriFile || !lpResName || !*lpResName)
{
SetPriLastError (L"Invalid parameters");
return nullptr;
}
std::vector<std::wstring> resnames = { lpResName };
std::map<std::wnstring, std::map<std::wnstring, std::wstring>> output;
try
{
GetPriLocaleStringResources (pPriFile, resnames, output);
}
catch (System::Exception^ e)
{
SetPriLastError (MPStringToStdW (e->Message));
return nullptr;
}
catch (const std::exception& e)
{
SetPriLastError (StringToWString (e.what ()));
return nullptr;
}
catch (...)
{
SetPriLastError (L"Unknown exception in GetPriLocaleStringResources");
return nullptr;
}
auto it = output.find (std::wnstring (lpResName));
if (it == output.end () || it->second.empty ())
{
SetPriLastError (L"Resource not found or has no language variants");
return nullptr;
}
return CreateWSWSPAIRLISTFromMap (it->second);
}
void DestroyLocaleResourceAllValuesList (HWSWSPAIRLIST list)
{
if (!list) return;
for (DWORD i = 0; i < list->dwLength; ++i)
{
if (list->lpArray [i].lpKey)
free (list->lpArray [i].lpKey);
if (list->lpArray [i].lpValue)
free (list->lpArray [i].lpValue);
}
free (list);
}
HDWSPAIRLIST GetPriFileResourceAllValuesList (PCSPRIFILE pPriFile, LPCWSTR lpResName)
{
if (!pPriFile || !lpResName || !*lpResName)
{
SetPriLastError (L"Invalid parameters");
return nullptr;
}
std::vector<std::wstring> resnames = { lpResName };
std::map<std::wnstring, std::map<DWORD, std::wnstring>> output;
try
{
GetPriScaleAndTargetSizeFileList (pPriFile, resnames, output);
}
catch (System::Exception^ e)
{
SetPriLastError (MPStringToStdW (e->Message));
return nullptr;
}
catch (const std::exception& e)
{
SetPriLastError (StringToWString (e.what ()));
return nullptr;
}
catch (...)
{
SetPriLastError (L"Unknown exception in GetPriScaleAndTargetSizeFileList");
return nullptr;
}
auto it = output.find (std::wnstring (lpResName));
if (it == output.end () || it->second.empty ())
{
SetPriLastError (L"Resource not found or has no variants");
return nullptr;
}
return CreateDWSPAIRLISTFromMap (it->second);
}

View File

@@ -113,6 +113,19 @@ extern "C" {
// 低 16 位:
// Scale 或 TargetSize 或 LCID
PRIFORMATCLI_API HWSDSPAIRLIST GetPriResourcesAllValuesList (PCSPRIFILE pPriFile, const LPCWSTR *lpResNames, DWORD dwCount);
typedef struct WSTRWSTRPAIR__
{
LPWSTR lpKey _DEFAULT_VALUE_SET (NULL);
LPWSTR lpValue _DEFAULT_VALUE_SET (NULL);
} WSTRWSTRPAIR, *HWSTRWSTRPAIR;
typedef struct WSWSPAIRLIST__
{
DWORD dwLength _DEFAULT_VALUE_SET (0);
WSTRWSTRPAIR lpArray [1];
} WSWSPAIRLIST, *HWSWSPAIRLIST;
PRIFORMATCLI_API HWSWSPAIRLIST GetPriLocaleResourceAllValuesList (PCSPRIFILE pPriFile, LPCWSTR lpResName);
PRIFORMATCLI_API void DestroyLocaleResourceAllValuesList (HWSWSPAIRLIST list);
PRIFORMATCLI_API HDWSPAIRLIST GetPriFileResourceAllValuesList (PCSPRIFILE pPriFile, LPCWSTR lpResName);
#ifdef _DEFAULT_VALUE_SET
#undef _DEFAULT_VALUE_SET
#endif

Some files were not shown because too many files have changed in this diff Show More