From 5a000a10d3e8b628718dab154ee9e9e855a22e33 Mon Sep 17 00:00:00 2001 From: Lorenz Cuno Klopfenstein Date: Fri, 29 Oct 2010 00:24:39 +0200 Subject: [PATCH] Added Spanish (es-ES) translation (Thanks to Ra?l Morillo). Some fixes to .designer code to load translated strings. --- .hgignore | 7 + Installer/header.bmp | Bin 0 -> 25818 bytes Installer/script.nsi | 112 ++ Installer/update.xml | 6 + Lib/VistaControls.dll | Bin 0 -> 95744 bytes Lib/VistaControls.pdb | Bin 0 -> 243200 bytes Lib/VistaControls.xml | 1022 +++++++++++ OnTopReplica.sln | 20 + OnTopReplica/AboutForm.Designer.cs | 235 +++ OnTopReplica/AboutForm.cs | 153 ++ OnTopReplica/AboutForm.resx | 309 ++++ OnTopReplica/Actions.cs | 15 + OnTopReplica/AspectRatioForm.cs | 214 +++ OnTopReplica/Assets/25.png | Bin 0 -> 639 bytes OnTopReplica/Assets/arrow_down.png | Bin 0 -> 218 bytes OnTopReplica/Assets/arrow_up.png | Bin 0 -> 209 bytes OnTopReplica/Assets/back.png | Bin 0 -> 150765 bytes OnTopReplica/Assets/clickforwarding.png | Bin 0 -> 951 bytes OnTopReplica/Assets/component.png | Bin 0 -> 731 bytes OnTopReplica/Assets/desktop.png | Bin 0 -> 794 bytes OnTopReplica/Assets/empty-window.ico | Bin 0 -> 10806 bytes OnTopReplica/Assets/flag_czech.png | Bin 0 -> 241 bytes OnTopReplica/Assets/flag_danish.png | Bin 0 -> 347 bytes OnTopReplica/Assets/flag_ita.png | Bin 0 -> 209 bytes OnTopReplica/Assets/flag_spanish.png | Bin 0 -> 300 bytes OnTopReplica/Assets/flag_usa.png | Bin 0 -> 355 bytes OnTopReplica/Assets/flags.pdn | Bin 0 -> 5422 bytes OnTopReplica/Assets/fullscreen.png | Bin 0 -> 396 bytes OnTopReplica/Assets/groupmode.png | Bin 0 -> 837 bytes OnTopReplica/Assets/icon-new-red.ico | Bin 0 -> 86918 bytes OnTopReplica/Assets/icon-new.ico | Bin 0 -> 86918 bytes OnTopReplica/Assets/icon.ico | Bin 0 -> 7358 bytes OnTopReplica/Assets/icon.png | Bin 0 -> 7335 bytes OnTopReplica/Assets/list.png | Bin 0 -> 681 bytes OnTopReplica/Assets/newicon.png | Bin 0 -> 770 bytes OnTopReplica/Assets/pos_bottomleft.pdn | Bin 0 -> 6696 bytes OnTopReplica/Assets/pos_bottomleft.png | Bin 0 -> 267 bytes OnTopReplica/Assets/pos_bottomright.png | Bin 0 -> 267 bytes OnTopReplica/Assets/pos_center.png | Bin 0 -> 231 bytes OnTopReplica/Assets/pos_null.png | Bin 0 -> 250 bytes OnTopReplica/Assets/pos_topleft.png | Bin 0 -> 280 bytes OnTopReplica/Assets/pos_topright.png | Bin 0 -> 278 bytes OnTopReplica/Assets/reduce.png | Bin 0 -> 259 bytes OnTopReplica/Assets/regions.png | Bin 0 -> 296 bytes OnTopReplica/Assets/regions_new.png | Bin 0 -> 207 bytes OnTopReplica/Assets/screenshot-icon.ico | Bin 0 -> 99678 bytes OnTopReplica/Assets/thumbs_up.png | Bin 0 -> 2318 bytes OnTopReplica/Assets/window16.png | Bin 0 -> 862 bytes OnTopReplica/Assets/window_border16.png | Bin 0 -> 683 bytes OnTopReplica/Assets/window_multiple.pdn | Bin 0 -> 8806 bytes OnTopReplica/Assets/window_multiple16.ico | Bin 0 -> 894 bytes OnTopReplica/Assets/window_multiple16.png | Bin 0 -> 1012 bytes OnTopReplica/Assets/window_multiple48.png | Bin 0 -> 1736 bytes OnTopReplica/Assets/window_opacity16.png | Bin 0 -> 894 bytes OnTopReplica/Assets/window_opacity_new.png | Bin 0 -> 810 bytes OnTopReplica/Assets/window_switch.pdn | Bin 0 -> 10464 bytes OnTopReplica/Assets/window_switch.png | Bin 0 -> 456 bytes OnTopReplica/Assets/windows.png | Bin 0 -> 28010 bytes OnTopReplica/Assets/x-oblique.png | Bin 0 -> 3459 bytes OnTopReplica/Assets/xiao_add.png | Bin 0 -> 753 bytes OnTopReplica/Assets/xiao_arrow.png | Bin 0 -> 437 bytes OnTopReplica/Assets/xiao_delete.png | Bin 0 -> 715 bytes OnTopReplica/Assets/xiao_down.png | Bin 0 -> 761 bytes OnTopReplica/Assets/xiao_help.png | Bin 0 -> 752 bytes OnTopReplica/Assets/xiao_ok.png | Bin 0 -> 752 bytes OnTopReplica/Assets/xiao_up.png | Bin 0 -> 744 bytes OnTopReplica/Assets/xiao_wrench.png | Bin 0 -> 459 bytes OnTopReplica/CloneClickEventArgs.cs | 29 + OnTopReplica/CloseRequestEventArgs.cs | 14 + OnTopReplica/EnumerableExtensions.cs | 27 + OnTopReplica/EnumerationExtensions.cs | 22 + OnTopReplica/ExtensionAttribute.cs | 11 + OnTopReplica/FocusedTextBox.cs | 69 + OnTopReplica/IMessagePumpProcessor.cs | 15 + OnTopReplica/MainForm.Designer.cs | 630 +++++++ OnTopReplica/MainForm.cs | 541 ++++++ OnTopReplica/MainForm.resx | 324 ++++ OnTopReplica/MainForm_ChildForms.cs | 105 ++ OnTopReplica/MainForm_Features.cs | 114 ++ OnTopReplica/MainForm_Gui.cs | 134 ++ OnTopReplica/MainForm_MenuEvents.cs | 214 +++ OnTopReplica/MessagePumpManager.cs | 85 + .../BaseMessagePumpProcessor.cs | 39 + .../GroupSwitchManager.cs | 143 ++ .../MessagePumpProcessors/HotKeyManager.cs | 50 + .../MessagePumpProcessors/WindowKeeper.cs | 39 + OnTopReplica/NDesk/Options/Options.cs | 1103 ++++++++++++ OnTopReplica/Native/CommonControls.cs | 30 + OnTopReplica/Native/ErrorMethods.cs | 37 + OnTopReplica/Native/HT.cs | 14 + OnTopReplica/Native/HookMethods.cs | 50 + OnTopReplica/Native/HotKeyMethods.cs | 32 + OnTopReplica/Native/ITaskBarList.cs | 45 + OnTopReplica/Native/InputMethods.cs | 25 + OnTopReplica/Native/MK.cs | 14 + OnTopReplica/Native/MessagingMethods.cs | 34 + OnTopReplica/Native/Point.cs | 36 + OnTopReplica/Native/Rectangle.cs | 51 + OnTopReplica/Native/VirtualKeyState.cs | 193 ++ OnTopReplica/Native/WM.cs | 28 + OnTopReplica/Native/WMSZ.cs | 15 + OnTopReplica/Native/WindowManagerMethods.cs | 88 + OnTopReplica/Native/WindowMethods.cs | 138 ++ OnTopReplica/Native/WindowsSevenMethods.cs | 20 + OnTopReplica/NativeToolStripRenderer.cs | 587 ++++++ OnTopReplica/NotificationIcon.cs | 84 + OnTopReplica/OnTopReplica.csproj | 460 +++++ OnTopReplica/OnTopReplica.csproj.user | 22 + OnTopReplica/OnTopReplica.exe.manifest | 22 + OnTopReplica/Pair.cs | 15 + OnTopReplica/PlatformSupport.cs | 109 ++ OnTopReplica/Platforms/Other.cs | 16 + OnTopReplica/Platforms/WindowsSeven.cs | 52 + OnTopReplica/Platforms/WindowsVista.cs | 44 + OnTopReplica/Platforms/WindowsXp.cs | 15 + OnTopReplica/Program.cs | 133 ++ OnTopReplica/Properties/AssemblyInfo.cs | 37 + OnTopReplica/Properties/Resources.Designer.cs | 329 ++++ OnTopReplica/Properties/Resources.resx | 236 +++ OnTopReplica/Properties/Settings.Designer.cs | 169 ++ OnTopReplica/Properties/Settings.settings | 42 + OnTopReplica/Properties/app.manifest | 26 + OnTopReplica/ScreenPosition.cs | 77 + OnTopReplica/SidePanel.cs | 49 + .../SidePanels/GroupSwitchPanel.Designer.cs | 129 ++ OnTopReplica/SidePanels/GroupSwitchPanel.cs | 74 + OnTopReplica/SidePanels/GroupSwitchPanel.resx | 120 ++ .../SidePanels/RegionPanel.Designer.cs | 314 ++++ OnTopReplica/SidePanels/RegionPanel.cs | 217 +++ OnTopReplica/SidePanels/RegionPanel.resx | 120 ++ OnTopReplica/StartupOptions/CliStatus.cs | 21 + .../CommandLineReportForm.Designer.cs | 116 ++ .../StartupOptions/CommandLineReportForm.cs | 31 + .../StartupOptions/CommandLineReportForm.resx | 1574 +++++++++++++++++ OnTopReplica/StartupOptions/Factory.cs | 92 + OnTopReplica/StartupOptions/Options.cs | 145 ++ .../StartupOptions/RectangleConverter.cs | 61 + .../StartupOptions/ScreenPositionConverter.cs | 50 + OnTopReplica/StartupOptions/SizeConverter.cs | 69 + OnTopReplica/StoredRegion.cs | 63 + OnTopReplica/StoredRegionArray.cs | 39 + OnTopReplica/StoredRegionComparer.cs | 28 + OnTopReplica/Strings.Designer.cs | 1342 ++++++++++++++ OnTopReplica/Strings.cs.resx | 456 +++++ OnTopReplica/Strings.da.resx | 451 +++++ OnTopReplica/Strings.de.resx | 15 + OnTopReplica/Strings.es.resx | 478 +++++ OnTopReplica/Strings.fi.resx | 15 + OnTopReplica/Strings.it.Designer.cs | 0 OnTopReplica/Strings.it.resx | 490 +++++ OnTopReplica/Strings.no.resx | 15 + OnTopReplica/Strings.pt.resx | 15 + OnTopReplica/Strings.resx | 493 ++++++ OnTopReplica/Strings.ru.resx | 15 + OnTopReplica/ThumbnailPanel.cs | 447 +++++ .../Update/UpdateCheckCompletedEventArgs.cs | 15 + OnTopReplica/Update/UpdateInformation.cs | 72 + OnTopReplica/Update/UpdateManager.cs | 106 ++ OnTopReplica/Win32Helper.cs | 122 ++ OnTopReplica/WindowHandle.cs | 94 + OnTopReplica/WindowListHelper.cs | 123 ++ .../WindowSeekers/BaseWindowSeeker.cs | 80 + .../WindowSeekers/ByClassWindowSeeker.cs | 35 + .../WindowSeekers/ByTitleWindowSeeker.cs | 45 + .../WindowSeekers/TaskWindowSeeker.cs | 37 + OnTopReplica/app.config | 45 + OriginalAssets/icon.pdn | Bin 0 -> 30322 bytes OriginalAssets/new-icon.png | Bin 0 -> 24269 bytes 168 files changed, 17444 insertions(+) create mode 100644 .hgignore create mode 100644 Installer/header.bmp create mode 100644 Installer/script.nsi create mode 100644 Installer/update.xml create mode 100644 Lib/VistaControls.dll create mode 100644 Lib/VistaControls.pdb create mode 100644 Lib/VistaControls.xml create mode 100644 OnTopReplica.sln create mode 100644 OnTopReplica/AboutForm.Designer.cs create mode 100644 OnTopReplica/AboutForm.cs create mode 100644 OnTopReplica/AboutForm.resx create mode 100644 OnTopReplica/Actions.cs create mode 100644 OnTopReplica/AspectRatioForm.cs create mode 100644 OnTopReplica/Assets/25.png create mode 100644 OnTopReplica/Assets/arrow_down.png create mode 100644 OnTopReplica/Assets/arrow_up.png create mode 100644 OnTopReplica/Assets/back.png create mode 100644 OnTopReplica/Assets/clickforwarding.png create mode 100644 OnTopReplica/Assets/component.png create mode 100644 OnTopReplica/Assets/desktop.png create mode 100644 OnTopReplica/Assets/empty-window.ico create mode 100644 OnTopReplica/Assets/flag_czech.png create mode 100644 OnTopReplica/Assets/flag_danish.png create mode 100644 OnTopReplica/Assets/flag_ita.png create mode 100644 OnTopReplica/Assets/flag_spanish.png create mode 100644 OnTopReplica/Assets/flag_usa.png create mode 100644 OnTopReplica/Assets/flags.pdn create mode 100644 OnTopReplica/Assets/fullscreen.png create mode 100644 OnTopReplica/Assets/groupmode.png create mode 100644 OnTopReplica/Assets/icon-new-red.ico create mode 100644 OnTopReplica/Assets/icon-new.ico create mode 100644 OnTopReplica/Assets/icon.ico create mode 100644 OnTopReplica/Assets/icon.png create mode 100644 OnTopReplica/Assets/list.png create mode 100644 OnTopReplica/Assets/newicon.png create mode 100644 OnTopReplica/Assets/pos_bottomleft.pdn create mode 100644 OnTopReplica/Assets/pos_bottomleft.png create mode 100644 OnTopReplica/Assets/pos_bottomright.png create mode 100644 OnTopReplica/Assets/pos_center.png create mode 100644 OnTopReplica/Assets/pos_null.png create mode 100644 OnTopReplica/Assets/pos_topleft.png create mode 100644 OnTopReplica/Assets/pos_topright.png create mode 100644 OnTopReplica/Assets/reduce.png create mode 100644 OnTopReplica/Assets/regions.png create mode 100644 OnTopReplica/Assets/regions_new.png create mode 100644 OnTopReplica/Assets/screenshot-icon.ico create mode 100644 OnTopReplica/Assets/thumbs_up.png create mode 100644 OnTopReplica/Assets/window16.png create mode 100644 OnTopReplica/Assets/window_border16.png create mode 100644 OnTopReplica/Assets/window_multiple.pdn create mode 100644 OnTopReplica/Assets/window_multiple16.ico create mode 100644 OnTopReplica/Assets/window_multiple16.png create mode 100644 OnTopReplica/Assets/window_multiple48.png create mode 100644 OnTopReplica/Assets/window_opacity16.png create mode 100644 OnTopReplica/Assets/window_opacity_new.png create mode 100644 OnTopReplica/Assets/window_switch.pdn create mode 100644 OnTopReplica/Assets/window_switch.png create mode 100644 OnTopReplica/Assets/windows.png create mode 100644 OnTopReplica/Assets/x-oblique.png create mode 100644 OnTopReplica/Assets/xiao_add.png create mode 100644 OnTopReplica/Assets/xiao_arrow.png create mode 100644 OnTopReplica/Assets/xiao_delete.png create mode 100644 OnTopReplica/Assets/xiao_down.png create mode 100644 OnTopReplica/Assets/xiao_help.png create mode 100644 OnTopReplica/Assets/xiao_ok.png create mode 100644 OnTopReplica/Assets/xiao_up.png create mode 100644 OnTopReplica/Assets/xiao_wrench.png create mode 100644 OnTopReplica/CloneClickEventArgs.cs create mode 100644 OnTopReplica/CloseRequestEventArgs.cs create mode 100644 OnTopReplica/EnumerableExtensions.cs create mode 100644 OnTopReplica/EnumerationExtensions.cs create mode 100644 OnTopReplica/ExtensionAttribute.cs create mode 100644 OnTopReplica/FocusedTextBox.cs create mode 100644 OnTopReplica/IMessagePumpProcessor.cs create mode 100644 OnTopReplica/MainForm.Designer.cs create mode 100644 OnTopReplica/MainForm.cs create mode 100644 OnTopReplica/MainForm.resx create mode 100644 OnTopReplica/MainForm_ChildForms.cs create mode 100644 OnTopReplica/MainForm_Features.cs create mode 100644 OnTopReplica/MainForm_Gui.cs create mode 100644 OnTopReplica/MainForm_MenuEvents.cs create mode 100644 OnTopReplica/MessagePumpManager.cs create mode 100644 OnTopReplica/MessagePumpProcessors/BaseMessagePumpProcessor.cs create mode 100644 OnTopReplica/MessagePumpProcessors/GroupSwitchManager.cs create mode 100644 OnTopReplica/MessagePumpProcessors/HotKeyManager.cs create mode 100644 OnTopReplica/MessagePumpProcessors/WindowKeeper.cs create mode 100644 OnTopReplica/NDesk/Options/Options.cs create mode 100644 OnTopReplica/Native/CommonControls.cs create mode 100644 OnTopReplica/Native/ErrorMethods.cs create mode 100644 OnTopReplica/Native/HT.cs create mode 100644 OnTopReplica/Native/HookMethods.cs create mode 100644 OnTopReplica/Native/HotKeyMethods.cs create mode 100644 OnTopReplica/Native/ITaskBarList.cs create mode 100644 OnTopReplica/Native/InputMethods.cs create mode 100644 OnTopReplica/Native/MK.cs create mode 100644 OnTopReplica/Native/MessagingMethods.cs create mode 100644 OnTopReplica/Native/Point.cs create mode 100644 OnTopReplica/Native/Rectangle.cs create mode 100644 OnTopReplica/Native/VirtualKeyState.cs create mode 100644 OnTopReplica/Native/WM.cs create mode 100644 OnTopReplica/Native/WMSZ.cs create mode 100644 OnTopReplica/Native/WindowManagerMethods.cs create mode 100644 OnTopReplica/Native/WindowMethods.cs create mode 100644 OnTopReplica/Native/WindowsSevenMethods.cs create mode 100644 OnTopReplica/NativeToolStripRenderer.cs create mode 100644 OnTopReplica/NotificationIcon.cs create mode 100644 OnTopReplica/OnTopReplica.csproj create mode 100644 OnTopReplica/OnTopReplica.csproj.user create mode 100644 OnTopReplica/OnTopReplica.exe.manifest create mode 100644 OnTopReplica/Pair.cs create mode 100644 OnTopReplica/PlatformSupport.cs create mode 100644 OnTopReplica/Platforms/Other.cs create mode 100644 OnTopReplica/Platforms/WindowsSeven.cs create mode 100644 OnTopReplica/Platforms/WindowsVista.cs create mode 100644 OnTopReplica/Platforms/WindowsXp.cs create mode 100644 OnTopReplica/Program.cs create mode 100644 OnTopReplica/Properties/AssemblyInfo.cs create mode 100644 OnTopReplica/Properties/Resources.Designer.cs create mode 100644 OnTopReplica/Properties/Resources.resx create mode 100644 OnTopReplica/Properties/Settings.Designer.cs create mode 100644 OnTopReplica/Properties/Settings.settings create mode 100644 OnTopReplica/Properties/app.manifest create mode 100644 OnTopReplica/ScreenPosition.cs create mode 100644 OnTopReplica/SidePanel.cs create mode 100644 OnTopReplica/SidePanels/GroupSwitchPanel.Designer.cs create mode 100644 OnTopReplica/SidePanels/GroupSwitchPanel.cs create mode 100644 OnTopReplica/SidePanels/GroupSwitchPanel.resx create mode 100644 OnTopReplica/SidePanels/RegionPanel.Designer.cs create mode 100644 OnTopReplica/SidePanels/RegionPanel.cs create mode 100644 OnTopReplica/SidePanels/RegionPanel.resx create mode 100644 OnTopReplica/StartupOptions/CliStatus.cs create mode 100644 OnTopReplica/StartupOptions/CommandLineReportForm.Designer.cs create mode 100644 OnTopReplica/StartupOptions/CommandLineReportForm.cs create mode 100644 OnTopReplica/StartupOptions/CommandLineReportForm.resx create mode 100644 OnTopReplica/StartupOptions/Factory.cs create mode 100644 OnTopReplica/StartupOptions/Options.cs create mode 100644 OnTopReplica/StartupOptions/RectangleConverter.cs create mode 100644 OnTopReplica/StartupOptions/ScreenPositionConverter.cs create mode 100644 OnTopReplica/StartupOptions/SizeConverter.cs create mode 100644 OnTopReplica/StoredRegion.cs create mode 100644 OnTopReplica/StoredRegionArray.cs create mode 100644 OnTopReplica/StoredRegionComparer.cs create mode 100644 OnTopReplica/Strings.Designer.cs create mode 100644 OnTopReplica/Strings.cs.resx create mode 100644 OnTopReplica/Strings.da.resx create mode 100644 OnTopReplica/Strings.de.resx create mode 100644 OnTopReplica/Strings.es.resx create mode 100644 OnTopReplica/Strings.fi.resx create mode 100644 OnTopReplica/Strings.it.Designer.cs create mode 100644 OnTopReplica/Strings.it.resx create mode 100644 OnTopReplica/Strings.no.resx create mode 100644 OnTopReplica/Strings.pt.resx create mode 100644 OnTopReplica/Strings.resx create mode 100644 OnTopReplica/Strings.ru.resx create mode 100644 OnTopReplica/ThumbnailPanel.cs create mode 100644 OnTopReplica/Update/UpdateCheckCompletedEventArgs.cs create mode 100644 OnTopReplica/Update/UpdateInformation.cs create mode 100644 OnTopReplica/Update/UpdateManager.cs create mode 100644 OnTopReplica/Win32Helper.cs create mode 100644 OnTopReplica/WindowHandle.cs create mode 100644 OnTopReplica/WindowListHelper.cs create mode 100644 OnTopReplica/WindowSeekers/BaseWindowSeeker.cs create mode 100644 OnTopReplica/WindowSeekers/ByClassWindowSeeker.cs create mode 100644 OnTopReplica/WindowSeekers/ByTitleWindowSeeker.cs create mode 100644 OnTopReplica/WindowSeekers/TaskWindowSeeker.cs create mode 100644 OnTopReplica/app.config create mode 100644 OriginalAssets/icon.pdn create mode 100644 OriginalAssets/new-icon.png diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000..a80c023 --- /dev/null +++ b/.hgignore @@ -0,0 +1,7 @@ +glob:OnTopReplica.suo +glob:bin/* +glob:obj/* +glob:publish/* +glob:*Thumbs.db +glob:*.psd +glob:Installer/OnTopReplica-Setup.exe diff --git a/Installer/header.bmp b/Installer/header.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7326b9c94076c8120ed837e0ccc93af0066fe9d5 GIT binary patch literal 25818 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 KA>PL3{`nV$p^qy7 literal 0 HcmV?d00001 diff --git a/Installer/script.nsi b/Installer/script.nsi new file mode 100644 index 0000000..2a5aa56 --- /dev/null +++ b/Installer/script.nsi @@ -0,0 +1,112 @@ +# INCLUDES +!include MUI2.nsh ;Modern interface +!include LogicLib.nsh ;nsDialogs + +# INIT +Name "OnTopReplica" +InstallDir "$LOCALAPPDATA\OnTopReplica" +OutFile "OnTopReplica-Setup.exe" +RequestExecutionLevel user + +# REFS +!define REG_UNINSTALL "Software\Microsoft\Windows\CurrentVersion\Uninstall\OnTopReplica" +!define START_LINK_DIR "$STARTMENU\Programs\OnTopReplica" +!define START_LINK_RUN "$STARTMENU\Programs\OnTopReplica\OnTopReplica.lnk" +!define START_LINK_UNINSTALLER "$STARTMENU\Programs\OnTopReplica\Uninstall OnTopReplica.lnk" +!define UNINSTALLER_NAME "OnTopReplica-Uninstall.exe" +!define WEBSITE_LINK "http://www.klopfenstein.net/lorenz.aspx/ontopreplica" + +# GRAPHICS +!define MUI_ICON "..\OnTopReplica\Assets\icon-new.ico" +!define MUI_UNICON "..\OnTopReplica\Assets\icon-new-red.ico" +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_RIGHT +!define MUI_HEADERIMAGE_BITMAP "header.bmp" +!define MUI_HEADERIMAGE_UNBITMAP "header.bmp" +#!define MUI_WELCOMEFINISHPAGE_BITMAP "banner.bmp" +#!define MUI_UNWELCOMEFINISHPAGE_BITMAP "banner.bmp" + +# TEXT AND SETTINGS +!define MUI_PAGE_HEADER_TEXT "OnTopReplica" + +!define MUI_FINISHPAGE_RUN "$INSTDIR\OnTopReplica.exe" +;!define MUI_FINISHPAGE_RUN_TEXT "Run OnTopReplica now." + +;Do not skip to finish automatially +!define MUI_FINISHPAGE_NOAUTOCLOSE +!define MUI_UNFINISHPAGE_NOAUTOCLOSE + +# PAGE DEFINITIONS +!insertmacro MUI_PAGE_WELCOME +;!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES + +# LANGUAGES +!insertmacro MUI_LANGUAGE "English" + +# CALLBACKS +Function RegisterApplication + ;Register uninstaller into Add/Remove panel (for local user only) + WriteRegStr HKCU "${REG_UNINSTALL}" "DisplayName" "OnTopReplica" + WriteRegStr HKCU "${REG_UNINSTALL}" "DisplayIcon" "$\"$INSTDIR\OnTopReplica.exe$\"" + WriteRegStr HKCU "${REG_UNINSTALL}" "Publisher" "Lorenz Cuno Klopfenstein" + WriteRegStr HKCU "${REG_UNINSTALL}" "DisplayVersion" "3.1.0.0" + WriteRegDWord HKCU "${REG_UNINSTALL}" "EstimatedSize" 800 ;KB + WriteRegStr HKCU "${REG_UNINSTALL}" "HelpLink" "${WEBSITE_LINK}" + WriteRegStr HKCU "${REG_UNINSTALL}" "URLInfoAbout" "${WEBSITE_LINK}" + WriteRegStr HKCU "${REG_UNINSTALL}" "InstallLocation" "$\"$INSTDIR$\"" + WriteRegStr HKCU "${REG_UNINSTALL}" "InstallSource" "$\"$EXEDIR$\"" + WriteRegDWord HKCU "${REG_UNINSTALL}" "NoModify" 1 + WriteRegDWord HKCU "${REG_UNINSTALL}" "NoRepair" 1 + WriteRegStr HKCU "${REG_UNINSTALL}" "UninstallString" "$\"$INSTDIR\${UNINSTALLER_NAME}$\"" + WriteRegStr HKCU "${REG_UNINSTALL}" "Comments" "Uninstalls OnTopReplica." + + ;Links + SetShellVarContext current + CreateDirectory "${START_LINK_DIR}" + CreateShortCut "${START_LINK_RUN}" "$INSTDIR\OnTopReplica.exe" + CreateShortCut "${START_LINK_UNINSTALLER}" "$INSTDIR\${UNINSTALLER_NAME}" +FunctionEnd + +Function un.DeregisterApplication + ;Deregister uninstaller from Add/Remove panel + DeleteRegKey HKCU "${REG_UNINSTALL}" + + ;Start menu links + SetShellVarContext current + RMDir /r "${START_LINK_DIR}" +FunctionEnd + +# INSTALL SECTIONS +Section "!OnTopReplica" OnTopReplica + SectionIn RO + + SetOutPath $INSTDIR + SetOverwrite on + File "..\OnTopReplica\bin\Release\OnTopReplica.exe" + File "..\OnTopReplica\bin\Release\VistaControls.dll" + + ;Install localization files + SetOutPath "$INSTDIR\it" + File "..\OnTopReplica\bin\Release\it\OnTopReplica.resources.dll" + SetOutPath "$INSTDIR\cs" + File "..\OnTopReplica\bin\Release\cs\OnTopReplica.resources.dll" + SetOutPath "$INSTDIR\da" + File "..\OnTopReplica\bin\Release\da\OnTopReplica.resources.dll" + + ;Uninstaller + WriteUninstaller "$INSTDIR\${UNINSTALLER_NAME}" + Call RegisterApplication +SectionEnd + +Section "Uninstall" + ;Remove whole directory (no data is stored there anyway) + RMDir /r "$INSTDIR" + + ;Remove uninstaller + Call un.DeregisterApplication +SectionEnd diff --git a/Installer/update.xml b/Installer/update.xml new file mode 100644 index 0000000..f8298c0 --- /dev/null +++ b/Installer/update.xml @@ -0,0 +1,6 @@ + + + 3.2.0.0 + 2010-10-15T00:00:00Z + http://www.klopfenstein.net/lorenz.aspx/ontopreplica + \ No newline at end of file diff --git a/Lib/VistaControls.dll b/Lib/VistaControls.dll new file mode 100644 index 0000000000000000000000000000000000000000..2b197bd372971504c5976d1983ba21795541ac1d GIT binary patch literal 95744 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 N9o)_wbscR&005)FFoOU9 literal 0 HcmV?d00001 diff --git a/Lib/VistaControls.pdb b/Lib/VistaControls.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3fb6e9f536b9812d966ba4ab23f3b6c654433455 GIT binary patch literal 243200 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�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 HPl5jhB3wyQ literal 0 HcmV?d00001 diff --git a/Lib/VistaControls.xml b/Lib/VistaControls.xml new file mode 100644 index 0000000..cf4c8fb --- /dev/null +++ b/Lib/VistaControls.xml @@ -0,0 +1,1022 @@ + + + + VistaControls + + + + Common Task Dialog buttons. OK is the default button. + + + Represents a custom button shown on a Task Dialog. + + + Instantiates a new custom button with an ID and a text. + Unique ID that will be returned by the Task Dialog if the button is clicked. + Use values greater than 8 to prevent conflicts with common buttons. + Text label shown on the button. If you enable Command Links, a newline here + separates the upper from the lower string on the button. + + + Instantiates a new custom button with an ID and a text. + Common ID that will be returned by the Task Dialog if the button is clicked. + Text label shown on the button. If you enable Command Links, a newline here + separates the upper from the lower string on the button. + + + Unique ID that will be returned by the Task Dialog if the button is clicked. + + + Text label shown on the button. If you enable Command Links, a newline here + separates the upper from the lower string on the button. + + + + Adds a handler on the Form that enables the user to move the window around + by clicking on a glass margin (or the title bar, as usual). + + The form that will be controlled. + Margins of the glass sheet. + + Eventual UI elements on the glass sheet will prevent the handler from receiving events + (except the ThemeText control, which manually redirects mouse events to the form). + + + + + Adds a handler on the Form that automatically paints the glass background black + + The form that will be controlled. + Margins of the glass sheet. + + + + + + + Handler will be kept alive by the event references on the form. + As soon as the form is disposed, the handler will be disposed as well. + + + + + + + + Handler will be kept alive by the event references on the form. + As soon as the form is disposed, the handler will be disposed as well. + + + + + Control style and notification constants + + + + Stores a Task Dialog message that will be sent to a dialog in order to update its state. + + + Simple int, int message. + + + Simple int, bool message. + + + Simple bool, bool message. + + + Simple bool, int message. + + + Simple int, long (hi word and lo word) message. + + + Text updating message. + The string will be marshaled: the Message must be correctly disposed after use. + + + Navigation message. + The config structure will be marshaled: must be correctly disposed after use. + + + Text values that can be updated. + + + A standard WinForms text box presenting the common Vista "search" interface. + Reacts on user input by raising "SearchStarted" events. + + + Puts the focus on the text box and moves the caret to the end of the text, without selecting it. + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + Gets or sets the background Color of the button when the mouse hovers on it. + + + Gets or sets the ForeColor of the control when the search box is active. + + + Gets or sets the BackColor of the control when the search box is active. + + + Gets or sets the ForeColor of the control when the search box is inactive. + + + Gets or sets the BackColor of the control when the search box is inactive. + + + Temporary ForeColor property of the control. You should use InactiveForeColor and ActiveForeColor instead. + + + Temporary BackColor property of the control. You should use InactiveBackColor and ActiveBackColor instead. + + + Gets or sets the text that is shown on top of the text box when the user hasn't entered any text. + + + Gets or sets the font used in the search text box. + Equals to the Font property. + + + Gets or sets the font used to write the "inactivity label" on top of the control when the user hasn't entered any text. + + + Overall Font property of the control. Property changes are forwarded to the ActiveFont property. + + + Returns true if the user entered some text in the search textbox. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + Displays a dialog box that can contain text, icons, buttons, command links, radio buttons and/or a progress bar. + + + Initializes a new Task Dialog instance without text. + + + Initializes a new Task Dialog instance with text. + The main instruction to display. + + + Initializes a new Task Dialog instance with an instruction and a title. + The main instruction to display. + The title of the Task Dialog. + + + Initializes a new Task Dialog instance with an instruction, a title and some content text. + The main instruction to display. + The title of the Task Dialog. + The content text that will be displayes below the main instruction. + + + Initializes a new Task Dialog instance with an instruction, a title, some content text and a specific button. + The main instruction to display. + The title of the Task Dialog. + The content text that will be displayes below the main instruction. + Specifies one or more buttons to be displayed on the bottom of the dialog, instead of the default OK button. + + + Initializes a new Task Dialog instance with an instruction, a title, some content text, a specific button and an icon. + The main instruction to display. + The title of the Task Dialog. + The content text that will be displayes below the main instruction. + Specifies one or more buttons to be displayed on the bottom of the dialog, instead of the default OK button. + The icon to display. + + + Injects a virtual button click. + Numeric id of the clicked button. + + + Injects a virtual radio button click. + Numeric id of the clicked radio button. + + + Injects a virtual checkbox click. + New state of the verification checkbox. + Sets whether the checkbox should have focus after state change. + + + Enables or disables a button of the dialog. + Id of the button whose state will be changed. + New state of the button. + + + Enables or disables a radio button of the dialog. + Id of the radio button whose state will be changed. + New state of the button. + + + Creates a new Task Dialog setup and replaces the existing one. Note that the window will not be + destroyed and that you should keep the existing TaskDialog reference (event handlers will still be + registered). The existing Task Dialog will simply reset and use the options of the new one. + An instance of Task Dialog, whose settings will be copied into the existing dialog. + You may safely destroy the nextDialog instance after use (do not register to events on it). + + + Adds or removes an UAC Shield icon from a button. + Id of the button. + Sets whether to display a Shield icon or not. + + + Sets whether the dialog's progress bar should be in standard or in marquee mode. + True if the progress bar should be displayed in marquee mode (no explicit progress). + + + Sets whether the dialog's progress bar should be in standard or in marquee mode and sets its marquee speed. + True if the progress bar should be displayed in marquee mode (no explicit progress). + Speed of the progress bar in marquee mode. + + + Common native callback for Task Dialogs. Will route events to the user event handler. + TODO: Currently unused, would need complex marshaling of data. + + + Prepares the internal configuration structure. + Allocates some unmanaged memory, must always be followed by a PostConfig() call. + + + Frees the unmanages memory allocated by PreConfig(). + + + Displays the task dialog without an explicit parent. + + + Displays the task dialog with an explicit parent window. + Handle to the dialog's parent window. + + + Displays the task dialog with an explicit parent form. + Instance of the dialog's parent form. + + + Displays a task dialog that has a message. + The text to display. + + + Displays a task dialog that has a message and a title. + The text to display. + The title bar caption of the dialog. + + + Displays a task dialog that has a message, a title and an instruction. + The text to display. + The title bar caption of the dialog. + The instruction shown below the main text. + + + Displays a task dialog that has a message, a title, an instruction and one or more buttons. + The text to display. + The title bar caption of the dialog. + The instruction shown below the main text. + Value that specifies which button or buttons to display. + + + Displays a task dialog that has a message, a title, an instruction, one or more buttons and an icon. + The text to display. + The title bar caption of the dialog. + The instruction shown below the main text. + Value that specifies which button or buttons to display. + The icon to display. + + + Is true if the task dialog is currently displayed. + + + Gets or sets the title of the dialog. + + + Gets or sets the icon of the dialog, from a set of common icons. + + + Gets or sets the icon of the dialog, from a custom Icon instance. + + + Gets or sets the dialog's buttons, from one or more common button types. + + + Gets or sets a set of custom buttons which will be displayed on the dialog. + These buttons can also be shown as Command Links optionally. + + + Gets or sets the integer identificator of the dialog's default button. + + + Gets or sets a set of custom buttons which will be displayed as radio buttons. + + + Gets or sets the identificator of the enabled radio button by default. + + + Gets or sets the text that will be shown next to a verification checkbox. + + + Gets or sets the text displayed on the control that enables the user to expand and collapse the dialog, + when the dialog is in expanded mode. + + + Gets or sets the text displayed on the control that enables the user to expand and collapse the dialog, + when the dialog is in collapsed mode. + + + Gets or sets the icon shown in the dialog's footer, from a set of common icons. + + + Gets or sets the icon shown in the dialog's footer, from a custom Icon instance. + + + Explicitly sets the desiderd width in pixels of the dialog. + Will be set automatically by the task dialog to an optimal size. + + + Gets or Sets the Main Instruction text of the TaskDialog. + Text written in blue and slightly bigger font in Windows Aero. + + + Gets or sets the Content text of the TaskDialog. + Text written with standard font, right below the Main instruction. + + + Gets or Sets the expanded information text, that will be optionally shown + by clicking on the Expand control. + + + Gets or Sets the Footer text. + + + Gets or sets the current Progress bar value. + + + Gets of sets the minimum value allowed by the Progress bar. + + + Gets or sets the maximum value allowed by the Progress bar. + + + Gets or sets the current Progress bar state. + Determines the bar's color and behavior. + + + Enables or disables Hyperlinks in the content (in the form of <A HREF="link">). + + + Gets or sets whether the dialog can be cancelled (ESC, ALT+F4 and X button) even if no Cancel button has been specified. + + + Gets or sets whether Command Link buttons should be used instead of standard custom buttons (doesn't apply to custom buttons, like OK or Cancel). + + + Gets or sets whether Command Link buttons wihtout icon should be used instead of standard custom buttons (doesn't apply to custom buttons, like OK or Cancel). + + + Gets or sets whether the ExpandedInformation should be shown in the Footer area (instead of under the Content text). + + + Gets or sets whether the ExpandedInformation is visible on dialog creation. + + + Gets or sets whether the Verification checkbox should be checked when the dialog is shown. + + + Gets or sets whether a progress bar should be displayed on the dialog. + + + Sets or gets whether the user specified callback (if any) should be called every 200ms. + + + Gets or sets whether the dialog should be positioned centered on the parent window. + + + Enables or disables right to left reading order. + + + Gets or sets whether there should be a selected radio button by default when the dialog is shown. + + + Gets or sets whether the dialog may be minimized or not. + + + Occurs when the Task Dialog is first created and before it is displayed (is sent after Construction event). + + + Occurs when the user clicks a button or a command link. By default the Dialog is closed after the notification. + + + Occurs when the user clicks on a Hyperlink in the Content text. + + + Occurs when a navigation event is raised. + + + Occurs approximately every 200ms if the Task Dialog callback timer is enabled. + + + Occurs when the Task Dialog is destroyed and the handle to the dialog is not valid anymore. + + + Occurs when the user selects a radio button. + + + Occurs when the Task Dialog is constructed and before it is displayed (is sent before Creation event). + + + Occurs when the user switches the state of the Verification Checkbox. + + + Occurs when the user presses F1 when the Task Dialog has focus. + + + Occurs when the user clicks on the expand button of the dialog, before the dialog is expanded. + + + Occurs when the split label is clicked. + + + Occurs when the split label is clicked, but before the associated + context menu is displayed by the control. + + + Gets or sets the associated context menu that is displayed when the split + glyph of the button is clicked. + + + Gets or sets the associated context menu that is displayed when the split + glyph of the button is clicked. Exposed for backward compatibility. + + + Provides data for the clicking of split buttons and the opening + of context menus. + + + Represents the bounding box of the clicked button. + A menu should be opened, with top-left coordinates in the left-bottom point of + the rectangle and with width equal (or greater) than the width of the rectangle. + + + Set to true if you want to prevent the menu from opening. + + + Margins structure for the Glass Sheet effect. + + + + Returns whether a point in client coordinates is outside the margins defined by this instance. + + Point in client coordinates. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Common Controls library version 6.0 not loaded. Must run on Vista and must provide a manifest.. + + + + + Looks up a localized string similar to Desktop composition is not enabled.. + + + + + Looks up a localized string similar to Desktop composition is not supported by operating system.. + + + + + Looks up a localized string similar to Unable to get thumbnail's original size.. + + + + + Looks up a localized string similar to Unable to update thumbnail properties.. + + + + + Looks up a localized string similar to Source and target windows cannot be the same.. + + + + + Looks up a localized string similar to Native call to {0} failed.. + + + + + Looks up a localized string similar to Failed to create TaskDialog.. + + + + + A vertical panel which resembles what is used for information and navigation in the Control Panel of Windows 7 and Vista. + + + This control is meant to be used on the left hand side of a form, it creates a graphic border on the right hand side. Also + I have VB code for this control if anyone needs it, just send me an e-mail at bpell@indiana.edu or blakepell@hotmail.com. + + + + + Constructor + + + We are by default setting the background color to Color.Transparent. The reason for this is that a lot of controls that will + be used with this, namingly the Label and LinkLabel default their back color to the color of the panel and for those controls + to display properly on this panel, their BackColor will need to be Color.Transparent (otherwise, they'll display as a black + box). This should help to isolate the developer from having to research this. + + To reduce flicker, especially when glass is enabled, I had to set all three of the below styles. + + + + + + When a control is added, we will check the type and if it meets certain criteria will change some default behaviors of + the control so that it fits our theme by default. The developer can still change this as they desire after it's added. + + + + + + The actual painting of the background of our control. + + + + The colors in use here were extracted from an image of the Control Panel taken from a Windows 7 RC1 installation. + + + + + This procedure will redraw any control, given it's handl as an image on the form. This is necessary if you want to lay this + control on top of the glass surface of an Aero form. + + + + + + Handles incoming Windows Messages. + + + + On the paint event and if the RenderOnGlass is set to true, we will redraw the control as an image directly on + the form. This has a little extra overhead but also provides the ability to lay this control directly on the + glass and have it rendered correctly. + + + + + Whether or not the control needs to be rendered on the Glass surface. + + + This is false by default, it should only be toggled to true if the control needs to lay directly on + the glass surface of the form. + + + + + A Label containing some text that will be drawn with glowing border on top of the Glass Sheet effect. + + + + Size of the glow effect around the text. + + + Enables or disables the glow effect around the text. + + + Shadow type. + + + Gets or sets the horizontal text alignment setting. + + + Gets or sets the vertical text alignment setting. + + + Gets or sets whether the text will be laid out on a single line or on multiple lines. + + + Gets or sets whether the text lines over the label's border should be trimmed with an ellipsis. + + + Gets or sets whether the text should break only at the end of a word. + + + Gets or sets whether the text should be trimmed to the last word and an ellipse should be placed at the end of the line. + + + + Determines a window's Flip 3D policy. + + + + + Default Flip 3D behavior. + + + + + Excludes the window from Flip 3D and hides it behind the animation. + + + + + Excludes the window from Flip 3D and shows it above the animation. + + + + Handle to a DWM Thumbnail. + + + Updates the thumbnail's display settings. + Drawing region on destination window. + Origin region from source window. + Opacity. 0 is transparent, 255 opaque. + Visibility flag. + If true, only the client area of the window will be rendered. Otherwise, the borders will be be rendered as well. + + + Updates the thumbnail's display settings. + Drawing region on destination window. + Opacity. 0 is transparent, 255 opaque. + Visibility flag. + If true, only the client area of the window will be rendered. Otherwise, the borders will be be rendered as well. + + + Returns true if the handle is valid, false if the handle has been closed or hasn't been initialized. + + + Sets the thumbnail opacity value, from 0 to 255 (opaque). + + + Sets whether only the client area of the thumbnailed window should be shown or + the entire window area. + + + Area in the destination window on which the thumbnail should be drawn. + + + Region of the source window that should be drawn. + + + Sets whether the thumbnail should be drawn or not. + + + Gets the thumbnail's original size. + + + + Applies a glow on the themed text. + + + + + Default glow size. + + + + + Glow size used commonly by Office 2007 in titles. + + + + + Precise glow effect. + + + + + Instantiates a new glow effect for themed text. + + Size of the glow effect. + + + + Gets or sets the size of the glow effect. + + + + + Static class providing information about the current support for Vista-only features. + + + + + Gets whether the running operating system is Windows Vista or a more recent version. + + + + + Gets whether the running operating system is Windows Seven or a more recent version. + + + + Is true if the DWM composition engine is currently enabled. + + + + The labeled divider provides a Aero styled divider with an option caption, similiar to what is seen in the + Control Panel dialogs of Windows 7 and Vista. + + + + + Constructor + + + + + The actual painting of the background of our control. + + + + The colors in use here were extracted from an image of the Control Panel taken from a Windows 7 RC1 installation. + + + + + The position of the divider line. + + + The default value is the center position which is consistent on how this type of divider has been used throughout the Windows + 7 and Vista UI's. + + + + + The color of the divider line. + + + + + The text that should be used for the caption. If the caption is set to blank and the divider position is set to center then + a simple divider line will be drawn. + + + After a change is made to the text property we want to invalidate the control so it triggers a new paint message being sent. + + + + + The positions that the divider line can be drawn in + + + + + The divider will be centered after the text caption and will begin drawing after the string. This is the default behavior. + + + + + The divider will be drawn below the text caption. + + + + Gets or sets the cue text that is displayed on the TextBox control. + + + Gets or sets whether the Cue text should be displyed even when the control has keybord focus. + If true, the Cue text will disappear as soon as the user starts typing. + + + Sets the origin of the thumbnail and shows the thumbnail on the control. + The Form instance that will be thumbnailed. + True if the control should automatically update itself in case the thumbnailed + form changes size or is closed. + + + Forces and update of the thumbnail. + Use this method if you know that the thumbnailed window has been resized and the thumbnail control should react to these changes. + + + Gets or sets the glass margins of the form. + + + Gets or sets whether mouse dragging should be handled automatically. + + + Gets or sets whether the extended glass margin is enabled or not. + + + + Gets or sets whether the window title and icon should be hidden. + + + + Main DWM class, provides Thumbnail registration, glass sheet effect and blur behind. + + + Registers a thumbnail to be drawn on a Windows Form. + The thumbnail will not be drawn until you update the thumbnail's properties calling Update(). + The Windows Form instance on which to draw the thumbnail. + The handle (HWND) of the window that has to be drawn. + A Thumbnail instance, needed to unregister and to update properties. + + + Registers a thumbnail to be drawn on a window. + The thumbnail will not be drawn until you update the thumbnail's properties calling Update(). + The handle (HWND) of the window on which the thumbnail will be drawn. + The handle (HWND) of the window that has to be drawn. + A Thumbnail instance, needed to unregister and to update properties. + + + Unregisters the thumbnail handle. + The handle is unvalid after the call and should not be used again. + A handle to a registered thumbnail. + + + Enable the Aero "Blur Behind" effect on the whole client area. Background must be black. + + + Enable the Aero "Blur Behind" effect on the whole client area. Background must be black. + + + + Enable the Aero "Blur Behind" effect on a specific region. Background of the region must be black. + + + Disables the Aero "Blur Behind" effect. + + + Extends the Aero "Glass Frame" into the client area. Background must be black. + + + Extends the Aero "Glass Frame" into the client area. Background must be black. + + + Extends the Aero "Glass Frame" to the whole client area ("Glass Sheet" effect). Background must be black. + + + Extends the Aero "Glass Frame" to the whole client area ("Glass Sheet" effect). Background must be black. + + + Disables the Aero "Glass Frame". + + + Disables the Aero "Glass Frame". + + + + Sets a window's Flip 3D policy. + + Form whose policy is to be set. + Desired Flip 3D policy. + Is ignored on OSs that do not support Aero. + + + + Disallows Aero Peek on a window (or allows it). + + Form whose Aero Peek preview should be disabled. + True if Aero Peek should be disabled for the window. + Is ignored on OSs that do not support Aero Peek. + + + + Sets a window's state in order to exclude (or include) it in Aero Peek. + + Form whose Aero Peek exclusion state is to be set. + Set to true to exlude the window from Aero Peek. + Is ignored on OSs that do not support Aero Peek. + + + Common Task Dialog icons. Determine the look of the main instruction. + + + Returns the active windows on the current thread. + + + Class that aggregates the results of an "indirect" Task Dialog. + + + Results returned by Task Dialogs when closed by the user. + + + Direct Task Dialog call. + + + Indirect Task Dialog call. Allows complex dialogs with interaction logic (via callback). + + + The Task Dialog config structure. + + + Flags used in TaskDialogConfig struct. + From CommCtrl.h. + + + Notifications returned by Task Dialogs to the callback. + From CommCtrl.h. + + + Messages that can be sent to Task Dialogs. + From CommCtrl.h. + + + + A horizontal panel which resembles what is used for information and navigation in the Control Panel of Windows 7 and Vista. + + + This control is meant to be used on the left hand side of a form, it creates a graphic border on the right hand side. Also + I have VB code for this control if anyone needs it, just send me an e-mail at bpell@indiana.edu or blakepell@hotmail.com. + + + + + Constructor + + + We are by default setting the background color to Color.Transparent. The reason for this is that a lot of controls that will + be used with this, namingly the Label and LinkLabel default their back color to the color of the panel and for those controls + to display properly on this panel, their BackColor will need to be Color.Transparent (otherwise, they'll display as a black + box). This should help to isolate the developer from having to research this. + + To reduce flicker, especially when glass is enabled, I had to set all three of the below styles. + + + + + + When a control is added, we will check the type and if it meets certain criteria will change some default behaviors of + the control so that it fits our theme by default. The developer can still change this as they desire after it's added. + + + + + + The actual painting of the background of our control. + + + + The colors in use here were extracted from an image of the Control Panel taken from a Windows 7 RC1 installation. + + + + + This procedure will redraw any control, given it's handl as an image on the form. This is necessary if you want to lay this + control on top of the glass surface of an Aero form. + + + + + + Handles incoming Windows Messages. + + + + On the paint event and if the RenderOnGlass is set to true, we will redraw the control as an image directly on + the form. This has a little extra overhead but also provides the ability to lay this control directly on the + glass and have it rendered correctly. + + + + + Whether or not the control needs to be rendered on the Glass surface. + + + This is false by default, it should only be toggled to true if the control needs to lay directly on + the glass surface of the form. + + + + diff --git a/OnTopReplica.sln b/OnTopReplica.sln new file mode 100644 index 0000000..1c732a8 --- /dev/null +++ b/OnTopReplica.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C# Express 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OnTopReplica", "OnTopReplica\OnTopReplica.csproj", "{E626BD6E-BF38-4EB7-A128-5CA6F40EF557}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E626BD6E-BF38-4EB7-A128-5CA6F40EF557}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E626BD6E-BF38-4EB7-A128-5CA6F40EF557}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E626BD6E-BF38-4EB7-A128-5CA6F40EF557}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E626BD6E-BF38-4EB7-A128-5CA6F40EF557}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/OnTopReplica/AboutForm.Designer.cs b/OnTopReplica/AboutForm.Designer.cs new file mode 100644 index 0000000..2c487d8 --- /dev/null +++ b/OnTopReplica/AboutForm.Designer.cs @@ -0,0 +1,235 @@ +namespace OnTopReplica { + partial class AboutForm { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm)); + this.themedLabel1 = new VistaControls.ThemeText.ThemedLabel(); + this.themedLabel2 = new VistaControls.ThemeText.ThemedLabel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.buttonReset = new System.Windows.Forms.Button(); + this.progressBar1 = new VistaControls.ProgressBar(); + this.buttonUpdate = new System.Windows.Forms.Button(); + this.buttonExpander = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.linkLabel2 = new System.Windows.Forms.LinkLabel(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.label2 = new System.Windows.Forms.Label(); + this.webBrowser = new System.Windows.Forms.WebBrowser(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // themedLabel1 + // + this.themedLabel1.Font = new System.Drawing.Font("Segoe UI", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.themedLabel1.Location = new System.Drawing.Point(0, 0); + this.themedLabel1.Name = "themedLabel1"; + this.themedLabel1.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.themedLabel1.Size = new System.Drawing.Size(200, 40); + this.themedLabel1.TabIndex = 0; + this.themedLabel1.Text = Strings.ApplicationName; + // + // themedLabel2 + // + this.themedLabel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.themedLabel2.Font = new System.Drawing.Font("Segoe UI", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.themedLabel2.GlowSize = 11; + this.themedLabel2.Location = new System.Drawing.Point(200, 0); + this.themedLabel2.Name = "themedLabel2"; + this.themedLabel2.Padding = new System.Windows.Forms.Padding(6, 0, 0, 0); + this.themedLabel2.Size = new System.Drawing.Size(189, 40); + this.themedLabel2.TabIndex = 1; + this.themedLabel2.Text = "v2"; + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackgroundImage = global::OnTopReplica.Properties.Resources.back; + this.panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.panel1.Controls.Add(this.buttonReset); + this.panel1.Controls.Add(this.progressBar1); + this.panel1.Controls.Add(this.buttonUpdate); + this.panel1.Controls.Add(this.buttonExpander); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.linkLabel2); + this.panel1.Controls.Add(this.linkLabel1); + this.panel1.Controls.Add(this.label2); + this.panel1.Location = new System.Drawing.Point(0, 40); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(388, 105); + this.panel1.TabIndex = 10; + // + // buttonReset + // + this.buttonReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonReset.Image = global::OnTopReplica.Properties.Resources.refresh; + this.buttonReset.Location = new System.Drawing.Point(338, 79); + this.buttonReset.Name = "buttonReset"; + this.buttonReset.Size = new System.Drawing.Size(23, 23); + this.buttonReset.TabIndex = 14; + this.buttonReset.UseVisualStyleBackColor = true; + this.buttonReset.Click += new System.EventHandler(this.ResetClick); + // + // progressBar1 + // + this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar1.Location = new System.Drawing.Point(235, 79); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(102, 23); + this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.progressBar1.TabIndex = 3; + this.progressBar1.Visible = false; + // + // buttonUpdate + // + this.buttonUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUpdate.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.buttonUpdate.Image = global::OnTopReplica.Properties.Resources.xiao_component; + this.buttonUpdate.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonUpdate.Location = new System.Drawing.Point(235, 79); + this.buttonUpdate.Name = "buttonUpdate"; + this.buttonUpdate.Size = new System.Drawing.Size(102, 23); + this.buttonUpdate.TabIndex = 2; + this.buttonUpdate.Text = global::OnTopReplica.Strings.UpdateNow; + this.buttonUpdate.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonUpdate.UseVisualStyleBackColor = true; + this.buttonUpdate.Click += new System.EventHandler(this.Update_click); + // + // buttonExpander + // + this.buttonExpander.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonExpander.Image = global::OnTopReplica.Properties.Resources.xiao_down; + this.buttonExpander.Location = new System.Drawing.Point(362, 79); + this.buttonExpander.Name = "buttonExpander"; + this.buttonExpander.Size = new System.Drawing.Size(23, 23); + this.buttonExpander.TabIndex = 4; + this.buttonExpander.UseVisualStyleBackColor = true; + this.buttonExpander.Click += new System.EventHandler(this.Toggle_click); + // + // label1 + // + this.label1.BackColor = System.Drawing.Color.Transparent; + this.label1.Font = new System.Drawing.Font("Segoe UI", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(6, 75); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(199, 31); + this.label1.TabIndex = 13; + this.label1.Text = Strings.UpdateDisclaimer; + // + // linkLabel2 + // + this.linkLabel2.AutoSize = true; + this.linkLabel2.BackColor = System.Drawing.Color.Transparent; + this.linkLabel2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkLabel2.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkLabel2.Location = new System.Drawing.Point(7, 58); + this.linkLabel2.Name = "linkLabel2"; + this.linkLabel2.Size = new System.Drawing.Size(252, 21); + this.linkLabel2.TabIndex = 1; + this.linkLabel2.TabStop = true; + this.linkLabel2.Text = Strings.Homepage; + this.linkLabel2.UseCompatibleTextRendering = true; + this.linkLabel2.VisitedLinkColor = System.Drawing.Color.Blue; + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.BackColor = System.Drawing.Color.Transparent; + this.linkLabel1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkLabel1.LinkColor = System.Drawing.Color.Blue; + this.linkLabel1.Location = new System.Drawing.Point(7, 37); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(212, 21); + this.linkLabel1.TabIndex = 0; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = Strings.CreatedBy; + this.linkLabel1.UseCompatibleTextRendering = true; + this.linkLabel1.VisitedLinkColor = System.Drawing.Color.Blue; + // + // label2 + // + this.label2.BackColor = System.Drawing.Color.Transparent; + this.label2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(7, 4); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(287, 33); + this.label2.TabIndex = 10; + this.label2.Text = Strings.Slogan; + // + // webBrowser + // + this.webBrowser.AllowWebBrowserDrop = false; + this.webBrowser.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.webBrowser.Location = new System.Drawing.Point(0, 146); + this.webBrowser.MinimumSize = new System.Drawing.Size(20, 20); + this.webBrowser.Name = "webBrowser"; + this.webBrowser.ScriptErrorsSuppressed = true; + this.webBrowser.Size = new System.Drawing.Size(389, 200); + this.webBrowser.TabIndex = 14; + // + // AboutForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ClientSize = new System.Drawing.Size(389, 145); + this.Controls.Add(this.webBrowser); + this.Controls.Add(this.themedLabel2); + this.Controls.Add(this.themedLabel1); + this.Controls.Add(this.panel1); + this.DoubleBuffered = true; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.HideTitle = true; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "AboutForm"; + this.Text = "OnTopReplica"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private VistaControls.ThemeText.ThemedLabel themedLabel1; + private VistaControls.ThemeText.ThemedLabel themedLabel2; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button buttonExpander; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.LinkLabel linkLabel2; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button buttonUpdate; + private System.Windows.Forms.WebBrowser webBrowser; + private System.Windows.Forms.Button buttonReset; + private VistaControls.ProgressBar progressBar1; + private System.Windows.Forms.ToolTip toolTip; + } +} \ No newline at end of file diff --git a/OnTopReplica/AboutForm.cs b/OnTopReplica/AboutForm.cs new file mode 100644 index 0000000..9121ad0 --- /dev/null +++ b/OnTopReplica/AboutForm.cs @@ -0,0 +1,153 @@ +using System.Diagnostics; +using System.Windows.Forms; +using VistaControls.Dwm.Helpers; +using System.Drawing; +using System.Runtime.InteropServices; +using OnTopReplica.Properties; +using System.Deployment.Application; +using System; +using VistaControls.TaskDialog; +using System.ComponentModel; +using OnTopReplica.Update; + +namespace OnTopReplica { + public partial class AboutForm : GlassForm { + + public AboutForm() { + InitializeComponent(); + + //Tooltips + toolTip.SetToolTip(buttonExpander, Strings.AboutButtonExpanderTT); + toolTip.SetToolTip(buttonReset, Strings.AboutButtonResetTT); + toolTip.SetToolTip(buttonUpdate, Strings.AboutButtonUpdateTT); + + //Add link areas (localized text) + linkLabel1.LinkArea = new LinkArea(linkLabel1.Text.IndexOf("Lorenz Cuno Klopfenstein"), "Lorenz Cuno Klopfenstein".Length); + int linkStart = linkLabel2.Text.IndexOf("www"); + linkLabel2.LinkArea = new LinkArea(linkStart, linkLabel2.Text.Length - linkStart - 1); + + //Glassify + GlassEnabled = true; + GlassMargins = new VistaControls.Dwm.Margins(0, 0, themedLabel1.Size.Height, 0); + + //Update title + themedLabel2.Text = "v" + Application.ProductVersion.Substring(0, 3); + + //Add update event handling + _updateManager.UpdateCheckCompleted += new EventHandler(UpdateManager_UpdateCheckCompleted); + } + + protected override void OnKeyUp(KeyEventArgs e) { + if (e.KeyCode == Keys.Escape) + this.Close(); + + base.OnKeyUp(e); + } + + private void Lck_click(object sender, LinkLabelLinkClickedEventArgs e) { + Process.Start("http://lorenz.klopfenstein.net"); + } + + private void Homepage_click(object sender, LinkLabelLinkClickedEventArgs e) { + Process.Start("http://www.codeplex.com/ontopreplica"); + } + + private void ShowGenericError(string title, string mainContent, Exception ex) { + TaskDialog.Show(mainContent, title, ex.Message, TaskDialogButton.Close, TaskDialogIcon.Stop); + } + + #region Bottom toggler + + private void Toggle_click(object sender, System.EventArgs e) { + IsExpanded = !IsExpanded; + + //Update icon + buttonExpander.Image = IsExpanded ? Resources.xiao_up : Resources.xiao_down; + } + + bool _isExpanded = false; + bool _isFirstExpansion = true; + public bool IsExpanded { + get { return _isExpanded; } + set { + if(_isExpanded != value) + Size = new Size(Size.Width, Size.Height + ((value) ? webBrowser.Size.Height : -webBrowser.Size.Height)); + + _isExpanded = value; + + if (value && _isFirstExpansion) { + //Load text from resources + webBrowser.DocumentText = Strings.AboutDetails; + + //Register navigation events + webBrowser.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating); + + _isFirstExpansion = false; + } + } + } + + void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { + if (e.Url != null && e.Url.IsAbsoluteUri) { + Process.Start(e.Url.ToString()); + e.Cancel = true; + } + } + + #endregion + + #region Updating + + UpdateManager _updateManager = new UpdateManager(); + + private void Update_click(object sender, System.EventArgs e) { + CheckForUpdate(); + } + + delegate void GuiAction(); + + void UpdateManager_UpdateCheckCompleted(object sender, UpdateCheckCompletedEventArgs e) { + Invoke(new GuiAction(() => { + if (e.Success) { + _updateManager.HandleUpdateCheck(this, e.Information, true); + } + else { + var dlg = new TaskDialog(Strings.ErrorUpdate, Strings.ErrorUpdate, Strings.ErrorUpdateContentGeneric) { + CommonIcon = TaskDialogIcon.Stop, + CommonButtons = TaskDialogButton.OK + }; + dlg.Show(this); + } + + UpdateStopped(); + })); + } + + public void CheckForUpdate() { + //Update GUI + buttonUpdate.Visible = false; + progressBar1.Visible = true; + + _updateManager.CheckForUpdate(); + } + + void UpdateStopped() { + //Reset UI + progressBar1.Visible = false; + buttonUpdate.Visible = true; + } + + #endregion + + private void ResetClick(object sender, EventArgs e) { + var dlg = new TaskDialog(Strings.AskSettingReset, Strings.AskSettingResetTitle, + Strings.AskSettingResetContent); + dlg.CommonButtons = TaskDialogButton.OK | TaskDialogButton.Cancel; + + if (dlg.Show(this).CommonButton == Result.OK) { + Settings.Default.Reset(); + } + } + + } +} diff --git a/OnTopReplica/AboutForm.resx b/OnTopReplica/AboutForm.resx new file mode 100644 index 0000000..4d116c2 --- /dev/null +++ b/OnTopReplica/AboutForm.resx @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAIAMDAAAAEAIACoJQAAJgAAABAQAAABACAAaAQAAM4lAAAoAAAAMAAAAGAAAAABACAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAFwAAACAAAAAnAAAAKwAAACwAAAAsAAAALAAA + ACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAA + ACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAA + ACwAAAAsAAAAKwAAACcAAAAfAAAAFwAAAA0AAAAGAAAABgAAAA4AAAAdAAAALQAAAD0AAABIAAAATgAA + AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAA + AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAA + AE8AAABPAAAATwAAAE8AAABPAAAATgAAAEgAAAA9AAAALQAAABwAAAANAAAACwAAABkAAAAwAAAARwAA + AFsAAABpAAAAcAAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcAAAAGkAAABdAAAASAAAAC8AAAAYAAAAEQAA + ACQAAABBAAAAbAoKC6QYGBiyFhcXtBcXF7QXFxe0FxcXtBcXF7UXFxi0FxcYtBcYGLQXGBi0FxgYtBgY + GLQXGBi0FxcYtBcXF7QXFxe0FxcXtBcXF7QXFxe0FxcXtRcXF7UXFxe1FxcXtBcXF7QXFxe0FxcXtBYX + F7QWFhe0FhYXtBYWFrQWFhe0FxcXtBcXF7QXFxe0FxcXtBcXF7QXFxe0GBgYtQEBAqYAAAB5AAAAXwAA + AEEAAAAkAAAAFwAAACwAAABdOTk3u46IgKWTjIKUkYiAk4yEepKHf3WQhHtyj4B5b45+eG2NfHVrjHly + Z4t5cmeLeXFni3huZot5b2aLe3JoioB3bIuDe3KMiH92jIyCeIyMhXqNjYZ7jo2HfI+Ph36PkId/j5GI + f4+SiX+PkomAj5OLgJCTjIKQk4yCkJSMgpCTi4GQj4h+joyEeo2LgniMjIN5jY+HfY6RiYCPkoqAjn55 + c7IXFxe1AAAAcQAAAFAAAAAuAAAAGwAAADAJCQmJkoyGrJ6ViXCypp2Fv7OskL2yq5G6r6ePt6yljbWr + o4yzqqGLsaefirClnYmupJ2JrqOdia6inYqvpJ2JsqafibSqo4m4raeKu7Gqiryyq4u8s6uLu7OsjLyz + rYy8s62MvbOujb20ro29ta6NvbWujry2ro67tq6OvLaujr23r468ta6OurOsjLiyq4u3sayLubOvjLu0 + so20ramGnpWNdJ+ViGxnZWG9AAAAiQAAAFYAAAAzAAAAHAAAADIREhKSqaGapbK4splz3ePrceDn8nPg + 5/N14OfzduDm83nh5fN84uXyf+Lk8oLj5PKF4+Lyh+Pi8onk4PKM5d/yj+Xf8pPm3/KX6ODynOni8qDq + 4/Kk7OLyqO7i863w4vKy8+Hytvbh87z44fPE+uHzzvvk89776vPs+/Pz+fv58//7/fP/+/7z//v98v/7 + 9/L8++3y9/vi8/b70fPz+b7u1da5u6mim3V/fHe1AAAAkQAAAFkAAAA2AAAAHQAAADMQEBCRsKiirMLO + ybBI3eT/PNnf/z3Z2v8+2df/P9nV/0HZ0/9G2tL/StvQ/0vbzv9O28v/UNzJ/1Pcx/9W3sX/WuHD/13k + wv9i6ML/aO/E/3D1x/99+s7/jP3W/53/4P+y/+r/xf/x/9r/+f/v//3/9//8//n//P/6//r/8v/r/+H/ + 3v+//dr/t/3Z/8L+zv/K/7H/1f2b/9r8jv/X/Yz/0Oa+1r2zsYJ+e3e4AAAAkQAAAFoAAAA3AAAAHQAA + ADMPDw+RtKumr8bSz7Y809n/L9DT/zLQ0f8zz8//NNDL/zfQyf860Mj/PNHF/z3Sw/9A1cH/RdnC/0re + xP9S5cj/W+zN/2by0/9x+Nj/e/3d/4L/4P+L/+T/mf/o/6n/6/+5/+z/xP/n/8f/2/+//8z/tPy//6X5 + tf+Z96//jPar/3j1rP9z97j/gvrD/4X9yf+Q/cv/qvu5/7jtkf+112f/z9mt2cW9u4iAfXm5AAAAkQAA + AFoAAAA3AAAAHQAAADMPDw+Rta6osMfT0Lc40tX/LM/Q/zHQz/8y0c7/NdTO/znXz/8/29H/ROHV/0zo + 2P9T7tz/WvTg/2D54v9l++H/avzf/27+3f90/9v/ev/a/4H/1/+K/tT/kPzL/5H4v/+N87D/he6f/4Dp + k/+B5o3/huWK/4/liP+W5of/muaG/5zihv+e2ob/pNeJ/6ncjP+s5pD/pO6U/5/wlv+h4oX/ytu32si/ + vYuCf3u6AAAAkQAAAFoAAAA2AAAAHQAAADMPDw+Rt6+qscnV0bk+2Nf/M9nV/zrd2P9A4tz/Rejf/0jq + 4P9J6tv/TOrW/07o0P9P5sn/UefD/1Xqwf9c8ML/ZPXC/2v3wP9v8rn/cOqv/27iof9r25X/a9mN/3TZ + jP9924v/gtuH/4fbgv+I2n7/itR6/4nNdP+HxW3/iL5o/4y4YP+St1X/k7ZL/5S1Tv+ZtlX/pL5d/67L + Yv+x123/0uC828rCwI2DgHy7AAAAkAAAAFoAAAA2AAAAHQAAADMPDw+RuLCss8rX07pG4dz/Od7W/zzb + 0f8/2s3/P9jI/0DUwv8/0Ln/Q9G2/0rXuP9S3rr/WuS9/1/kuf9f3rD/X9ai/1/Pl/9hzJD/Zc+M/2zT + if9x1oj/d9eE/37Vg/+D0X//fshz/3m+aP95uGP/e7Nf/3+wXP+FsFb/jLVR/4+8Uv+QwFv/k8Rk/5zF + Zf+hw2D/pMBY/6i7Uv+ps0D/0M+i3M3Hx5CEgX68AAAAkAAAAFoAAAA2AAAAHQAAADMPDw+RubKutMvW + 0rs/ysH/MsS3/zbDtP87x7b/Qc27/0bVwP9L2b//Ttq7/1HWs/9T0Kn/Vcqh/1jImv9dy5X/Y9CS/2nT + kP9u1Yz/cNOG/3DOfv9wx3X/cMJv/3vDcf+GxnH/gsFl/4G/Xv+Iv17/jMNc/5DHXP+QzGH/jM9u/4vL + c/+OwWz/j7lg/5GyVP+SqEn/lqJB/5icOv+WkSr/yMOb3NDMypGFgn+9AAAAkAAAAFoAAAA2AAAAHQAA + ADIPDw+RurOvtszW0bxCxbj/OMa2/0DNu/9F0r3/SdS9/0rSt/9LzKz/TMik/1HLoP9a0aH/Y9ih/2vc + nv9w3Jf/cdqP/3PXiP931YH/etV8/37Vdv+A1HD/hdNq/5XUbv+Z027/icll/4HGYv+Dx1z/hcJU/4K3 + VP99qVX/fJ1J/3yTPP97izT/fIYv/4CDK/+EgSj/iIAn/4uBJv+MfBr/xr2W3dPPzZOHhIG9AAAAkAAA + AFoAAAA2AAAAHQAAADIPDw+RvLWwts7Z071K0L7/Psq0/0LKr/9HzK3/T9Ox/1jdtv9f5bf/Y+q0/2rt + r/9y7Kn/eeqj/4Hmnf+C4pT/gNyK/3/Tfv99zHP/e8Rp/3e7Yf9ysl3/b69h/3e2cf9zuHD/aa9Z/3Gn + Qv94nDT/dI4v/3KGKv90gyb/doIk/3d/I/94fCH/enog/3x4IP+AeCD/g3kg/4d6Iv+Idhf/xLuW3tbR + 0JWHhIG+AAAAkAAAAFoAAAA2AAAAHQAAADIPDw+RvLWxuM/Z075W173/Utq7/1riv/9h6cL/aOzC/23t + v/9s6bP/aeCl/2nVl/9pzIz/bcSB/3C8d/9ts23/Z6lj/2SiXf9hnVv/XZpb/1yZXP9cnFv/ZaVZ/3aw + U/94pjv/cY8n/2+EJP9sgCX/bH4k/3B+I/92gCL/en8f/3p7Hv95eB7/eXcd/3t1Hv9+dR7/gHYf/4R3 + H/+FchX/w7qW3tfT0peHhYK/AAAAkAAAAFoAAAA2AAAAHQAAADIPDw+RvbazuNHb1b9k3r//WNez/1bP + qP9Tx5z/U7+U/1O5jv9Ss4T/UKp2/1Cha/9Tnmb/Wp5j/2ChZP9gn2L/XJld/1yYXP9cmFf/XphQ/2Sa + R/9nmDr/cJkv/32dKf92jyT/an0h/2p9If9ufyD/cn4e/3V+Hf98gB3/fX8c/3t6HP95dhz/eHQb/3lz + HP97cxz/fXQc/4J0Hf+CbxL/wrmV3tjU1JiIhoPAAAAAkAAAAFoAAAA2AAAAHQAAADIPDw+Qvbe1udDY + 0sBPt5b/QauH/0Khff9CnXT/RZ1y/0iecP9Lnm3/S5pn/0yVYv9QlGD/WZlf/2KhXv9ln1n/YplS/2WZ + TP9nmEP/aJQ5/2aNLP9mhST/dI0i/3+WI/9yhx//aXkc/2x7G/9xfhr/dYEa/3qAGv+Agxr/f4AZ/3x7 + Gv95dhr/eHIZ/3hxGv95cRn/fHEa/4ByG/+AbBD/wbiU39nW1pqIhoPAAAAAkAAAAFoAAAA2AAAAHQAA + ADIPDw+Qvrq2utDW0MFJo4D/P5xz/0KVbP9BkWb/RJJl/0eVZ/9LmGb/TZZh/0+TW/9UlFf/X5pU/2ui + U/9uoUz/bZtD/2+YO/9oji//ZIQl/2Z/IP9ugB3/e40e/32QHv9xgRv/a3kY/298F/90gRf/eYMY/36D + F/+Ehhj/g4IY/358GP96dhj/d3IY/3dwGP94bxj/em8Y/31wGf99ag7/wbiU4NzY15uJh4TBAAAAkAAA + AFoAAAA2AAAAHQAAADIPDw6Qv7q3u9DWz8FJnnT/QJdq/0KPZP9Di1//RYxd/0mQXP9Ok1r/UJNW/1OS + Uf9ak0z/aJxI/3ilRP96oT3/b5Qx/2yMKP9pgyH/a4Ac/219Gf9wfhj/eosa/3yOGv9xfxf/bnwW/3J/ + Ff96hBX/fYMW/4GFFv+Hhxb/hYMW/398Ff97dRb/eHIW/3dvFv93bhb/eG4W/3xuF/97aAz/wLiU4N3Z + 2JuJh4TBAAAAkAAAAFoAAAA2AAAAHQAAADIPDg6Qv7u4u9DWz8JLmm3/QpRh/0SNWv9Fh1P/SYhR/0yL + T/9Rjk7/V5RK/12XRv9mmUD/dqI8/4GmNf93mCz/booj/3OKHv9yhBr/cH8V/257FP9ygBb/fY8Y/36P + GP9ygBT/cn4U/3iDFP+AiBT/foUT/4aIFP+IiBT/hYMU/398E/98dhP/eXMU/3hwFP93bRX/d20V/3tt + Ff94Zgr/wLeT4N3Z2p2KiIXBAAAAkAAAAFoAAAA2AAAAHQAAADIODg6QwLy5vNHWz8JOmGP/RpNW/0eK + UP9Igkj/SoJG/1CIQ/9blEL/ZJs+/2qfO/9zoTX/eJ0s/32aJP95kiD/doob/3uMGf92hRb/cYAU/258 + Ev92hRP/g5MV/4WSFf92gxL/eIMS/3+HEv+EjBL/gYcR/4mKEf+IiRL/hIMS/4B8EP98dxH/e3QS/3lx + E/93bhP/eG0T/3lsFP93ZQn/wLeT4d7a252KiIXCAAAAkAAAAFoAAAA2AAAAHQAAADIPDg6QwLy5vNHW + zcNRlFj/SZJN/0yIR/9MgD//VYs8/2CXOv9lmDf/bqU1/3CgL/9tjiX/d5Eg/4OaHv9/khz/e4sX/4KN + Fv96hhT/dIAS/3N/Ef9/ixP/i5kU/4qVFP98hhH/fogR/4WNEf+GjRH/hYkO/4mLD/+IiA//hIEQ/398 + D/99eA//fXYQ/3xzEf96bxL/eW0S/3ptEv93Zgf/wLiS4d7a256LiIbCAAAAkAAAAFoAAAA2AAAAHQAA + ADIPDg6QwLy6vNLVzcNUklD/S5BD/1OOP/9elTr/YZQ0/2WYMf9urC//apgn/2WCIP9wiR7/f5Uc/4qb + Gv+Fkhr/gIsV/4SNE/98hhL/eIEP/3mDEP+GkhL/kp4S/4uWEf+Aig//gosO/4qREP+IjQ//iYsN/4uM + Df+Ihgz/hIEO/4B7Df9/eA3/gXgP/4B1D/9+chD/fW4R/3xtEf95aAb/wbmS4d/c3J+LiYbCAAAAjwAA + AFoAAAA2AAAAHQAAADIPDw+Rwby6vdLVzMRVkUf/WZ89/2WjOv9gjzD/ZKAu/2muLf9ljST/ZH0f/2uE + Hf93jRv/hZYY/4+bF/+Ikhr/gooS/4OMEP99hg7/eoIO/36HDv+NlxD/l6AQ/42VD/+FjQ3/h44N/4+U + D/+IjA7/jYwM/46KDP+JhAr/gn8M/396C/+BeAz/g3gN/4J1Df+Acw7/fm8P/31uD/98awT/wruS4d/c + 3J+LiYbDAAAAkAAAAFoAAAA2AAAAHQAAADIPDw+RwLy7vtPWzMRjo0L/YaY2/1+XMf9lri7/YqQp/1x+ + If9lgB7/aoIc/2+FGv99jRf/i5YV/5KaFv+JkBj/gogP/4OLDf9/hgz/fIML/4OKDP+Umw7/nKEP/42T + Df+Ijgz/jJEM/5CWDf+Liwz/kY4K/4+KC/+Jgwn/gn0K/4B5Cv+CeAv/g3gM/4N2Df+Acw3/f28N/35v + Df9+bgP/w72S4d7c3KCLiYbDAAAAjwAAAFoAAAA2AAAAHQAAADIPDw+Rwr27vdTYzMRfmTv/W6Ew/2a+ + M/9emCj/WHUf/197Hf9ogxv/bIIY/3KFF/+AjhT/jZcT/5KZFv+IjhX/gogM/4WJDP+AhQr/f4UJ/4iO + C/+ang3/naEN/42SC/+LkAv/kZUL/5KUC/+OjAn/lI8J/4+JCf+Jgwj/g30J/4F5CP+DeQj/g3gK/4J2 + C/9/cgz/fm8L/4BxDP+AcQL/xL6R4d/b3KCLiIXEAAAAjwAAAFoAAAA2AAAAHQAAADIPDw+Qwr28vtPU + y8Rgojn/YcEx/1uXKf9Zdx//W3gb/2F8Gf9rgxf/bYEV/3WFE/+DjhL/j5YP/5KXE/+HjBL/g4gK/4WJ + Cf+ChQj/gYYI/46SCP+eoQv/naAL/42RCf+OkQr/lpgK/5ORCf+Sjgj/lI8I/4+JCP+Jggf/g30G/4F6 + Bv+DeQf/gncJ/4F0Cv9+cQr/fW8J/4ByC/+BcwD/xL+R4t3a26GKiIXEAAAAjwAAAFoAAAA2AAAAHQAA + ADIPDw+Qwby8v9XczMVhuDf/VpEl/1qFIv9bfBz/XHcZ/2J7Fv9rgRT/b4AR/3eFEP+FjRD/jpUL/5GV + EP+GihD/g4YH/4WIB/+ChAf/hIYH/5SVB/+hogr/nJ0J/5GRB/+Tkgj/mZgJ/5KPCP+VkAf/lY8H/4+I + B/+Jggb/hH0F/4J6Bf+CeAb/gnYH/350CP97cAj/e3AI/4F0Cv+BdQD/xL+R4t3Y26KKiIXEAAAAjwAA + AFoAAAA2AAAAHQAAADIPDw+Qwb69v9TWy8ZZhCz/Voof/1yJIP9cexn/XHYW/2N5FP9sfxH/bn8O/3mE + Df+EjQz/jZMI/5GUEP+FiQ3/hIUF/4aGBf+ChAb/hocF/5iYBv+jpAb/m5oH/5ORB/+WlQb/mZcH/5KP + Bf+XkQb/lY4F/46HBv+IgQX/hHwE/4N7BP+CeAX/f3UG/3xyBv96bwb/e3EG/4J2Cf+CdwD/xL+Q4tzZ + 26KKiIXEAAAAjwAAAFoAAAA2AAAAHQAAADIPDw6Qw769v9TVy8ZXgin/V4sc/1yKHv9behj/XXQV/2N3 + Ev9rfA//b30N/3mCDP+Eiwv/jJEI/5CSEv+Ehgz/g4QD/4WFBf+CgwX/iokF/5uaBv+jpAX/mJYF/5OQ + Bv+Ylgb/lpMG/5SPBf+YkQb/k4sG/42EBv+HfwT/hHwD/4N7BP+AeAX/fXQE/3pwBf93bgb/enEG/4B2 + CP+CdwD/xMCP49zZ26OKiIXFAAAAjwAAAFoAAAA2AAAAHQAAADIPDw6Qw7++wNXVzMZYgCj/Voob/12K + G/9cehb/XXIT/2J1EP9rew7/bXwM/3iBC/+Eigr/io8H/46RE/+ChAn/gYID/4ODBf+Cggb/jYsF/52c + Bf+iogb/lZMF/5OQBv+YlQb/k48G/5WOBv+Xjwb/kIkG/4uCBv+FfQT/g3wD/4N6Bf9/dQX/enEE/3Vu + BP90bgX/eHEG/393CP+BeQD/xMGO49vZ26SKiIXFAAAAjwAAAFoAAAA2AAAAHQAAADIPDg6RxMC+wNXW + zMZZfib/V4kY/16KGf9behX/W3AS/2JzD/9peQz/bHoL/3eACf+DiQj/io0H/46QFf+Aggj/gIED/4GC + BP+BgQX/j40F/5+dBv+hngX/lI8G/5WQBv+YkwX/kosF/5aOBf+VjAb/j4YF/4iABf+EewP/g3sE/4J4 + Bf9+dAT/d3AE/3JtBP9ybQT/d3IF/3x3B/+AeQD/wb6N49vY26SJiIXGAAAAjwAAAFoAAAA2AAAAHQAA + ADIODg6QxMC/wNbWzMZZfCP/WIYV/16KGP9ceRT/XG8Q/2FxDf9odwz/bXgK/3Z/CP+Bhwj/iYsH/42O + Ff9+gAf/f4AE/3+AA/+CgQT/ko8G/6CeBv+emQb/kowH/5WPBv+VkAX/kYkG/5eMBv+TiQX/jYMF/4d+ + BP+DegP/g3kE/4B2BP98cgT/dW4E/3BrA/9xbQT/dXEF/3t4Bv97dwD/vbqN49za26WJiIXGAAAAjwAA + AFoAAAA2AAAAHQAAADIODg6QxcG/wNbXzcdXeiH/V4QT/16JFv9deRL/W24N/19wDP9ndAv/bHYJ/3V9 + B/+Bhgf/iIkH/4yNFv98fgX/fn4D/35+A/+DgAT/lJEF/6GeBv+alAb/kYkH/5WOBf+SiwX/kIcH/5aK + Bv+QhQX/i4EF/4Z8BP+CeAX/gXYF/35zBP96cAT/c2wE/29qA/9xbQP/dHEE/3t6Bf9zcAD/uriN493a + 26WKiIXGAAAAjwAAAFoAAAA2AAAAHQAAADIPDg6Qx8PBwdbXzcdWeB//V4IS/16IE/9ceRD/WmwN/15u + C/9lcgn/anUH/3V8B/+BhAb/hocG/4uLGP96ewX/fH0E/3x8A/+EgQT/lZMF/6GdBv+Vjwb/kIgF/5ON + Bf+PhwX/kYYG/5OHBf+MggX/ioAE/4R5BP+BdwX/gHUE/3xyBP92bgT/cGsE/29qA/9wbAP/c3ED/3l4 + Bf9taQD/ubWN493a26WKiIbGAAAAjwAAAFoAAAA2AAAAHQAAADIODg6Qx8PCwdjYzsdWdR//VX8P/12G + Ef9cdw7/WWoN/15sCv9jcQj/anMG/3R7Bv9/gwX/hIUG/4mJGf94eAP/ensE/3p6BP+FggT/l5QE/56b + Bf+PigX/j4YG/5CJBf+MgwX/kYUG/5CDBf+KfwT/iH8D/4F3Bf+AdQT/fnME/3pwBP9zbAT/cGoD/29q + A/9vbAP/dHID/3RzBf9nYgD/trOM493a3KaKiIbGAAAAjwAAAFoAAAA2AAAAHQAAADIODg6Qx8TDwdjY + zsdVch3/U3oN/1yEEP9cdg3/WWkL/11rCP9icAf/aXEG/3N5Bv9+gQT/goQH/4aHGf91dgL/eHgF/3l4 + BP+GgwP/mZQF/5uXBf+MhQX/jYYF/42FBP+JgAT/j4ME/4uABP+JfgT/hXsE/390BP9/dAT/fHIE/3du + BP9yawP/b2oD/29rA/9vbAP/c3MD/25tA/9hXQD/tLKM493a3KaKiIbGAAAAjwAAAFoAAAA2AAAAHQAA + ADIODg6QycXEwdnZz8dUbxv/UnYM/1uBDv9cdQv/WWkJ/1tpB/9gbgX/aHEF/3J3Bv97fgP/gIII/4SF + GP9ycwL/dnYF/3h3BP+IhAT/mJQF/5aSBP+IggX/ioMF/4iAA/+IfwT/jYEE/4d9BP+HfgT/gXgE/39z + BP99cgT/enAE/3RtBP9wagP/bmoD/25rA/9wbQP/cXED/2lnAv9cWAD/s7CL497a3KaKiIbGAAAAjwAA + AFoAAAA2AAAAHQAAADIODg6QysfFwdna0MhTbRn/UXIL/1t+Df9bdAr/WGgI/1pnB/9fbAb/Zm8F/3F2 + BP95fAL/f4EK/4KCFv9wcQL/dXQE/3d2BP+JhQT/mJQF/5GMBf+GfwX/hn8E/4N7BP+IfgT/iX4E/4V7 + A/+GfAT/fXQE/31yBP97cQT/d24E/3FrA/9uaQL/bWoC/21qAv9xbwP/bWwD/2RiA/9XVAD/sa6L5N/b + 3KiKiIbHAAAAjwAAAFoAAAA2AAAAGwAAADEODg6PysfFwdjYzsZRaRb/TW0G/1d6Cf9YcQb/VGUE/1dk + BP9caAP/ZGwB/25zAP92eQD/fX8K/31+Ev9sbQD/cXAB/3Z1Af+IhQL/lZEC/4uEAf+BewL/f3gB/393 + Av+EewH/hHoB/4N4Af+CeAH/eG8B/3lvAv93bgH/cmsC/21oAP9rZwD/a2cA/2tpAP9ubQD/ZmUA/2Bd + AP9STgD/rquJ497b3KeKiIbHAAAAjQAAAFgAAAA1AAAAGAAAACwQDw+MysbEv9LRx71WbR3+U3AP/1x7 + EP9ddQ7/WmoN/11pDv9jbQz/anEK/3N4C/96fAr/gYMX/36BGv9wcQj/dXQL/3t7DP+Niw3/l5QN/4qE + Df+Efg3/f3kM/4N8DP+IgAv/hnwM/4h/DP+CeQz/fXQM/310DP95cwz/dW8L/3JtCv9xbQn/cW0K/3Jx + Cv9xcAr/aWgL/2RiCv9WUgf/qaaH2tjV1aGMiojGAAAAiQAAAFIAAAAwAAAAFAAAACQLCwuCv7y4v9XR + y6PMzcDB0tTGzNTWx87V1sfO1NXHztXVx87V1cfP1tbHztjXx87Y18fO2dfIztfWx8zV1MXL1dPDytXU + w8nX1cPJ2NbDydbUw8jW08PI1dPDydbTw8nX1MPJ1tPDytfUxMrW1MTK1tPDytbTxMvW08TL1tTFy9bT + xcvV0sPL1NHDzNPRwszS0cLM0c/CzNHOwszJx7vFxsK7sM3IxJmEgoDGAAAAewAAAEYAAAAoAAAADgAA + ABoAAABTaWhmx9jUzrLg3Nmr4t3br+Ld26/j3tuv497br+Pf26/i39uw4d/br+He26/h3duv4Nvart7a + 2Kzc2Nap29bTqNnV0qfY1NGn2NPRp9jV0abZ1NGm2tTRpdnV0abZ1NKn2dTTqNrW1Kjb1tSo29bUqdzW + 1and2Nap3dnWqd3X1qra1tSq2NTTrNfU0qzX09Ks19PSrNfT0q3W0c+r0MvHp766tr0xMTC4AAAAVwAA + ADUAAAAeAAAACQAAABIAAAAnAAAAZzMzMqtPTk20TEtKs0tLSrRMS0q0TEtKtExLSrRMS0q0S0tKtEtL + SrRLS0q0S0tKs0tKSbNKSUmzS0pIs0pKSbNKSkizSkpIs0pKSLNLSUizS0pJsktKSbJLSkmzS0pJs0tK + SbNLSkmzTEpJs0xKSbNMSkmzTEpJs0xKSbNLSkmzS0pJs0tKSbNLSkmzS0pJs0tJSbNLSkm0TUxLth4d + HaMAAABeAAAAOAAAACUAAAATAAAABQAAAAsAAAAWAAAAIQAAAC0AAAA3AAAAOgAAADoAAAA6AAAAOgAA + ADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADoAAAA7AAAAOgAAADMAAAArAAAAIQAAABUAAAALAAAAAgAAAAQAAAAJAAAADgAAABMAAAAXAAAAGQAA + ABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAA + ABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAA + ABkAAAAZAAAAGQAAABkAAAAZAAAAGAAAABcAAAATAAAADgAAAAgAAAAEAAAAAAAAAAEAAAACAAAABAAA + AAcAAAAJAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAkAAAAHAAAABAAAAAIAAAABAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBIAAAAAAAPIEKAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ABEAAABAAAAAVwAAAFUAAABVAAAAVQAAAFUAAABVAAAAVQAAAFUAAABVAAAAVQAAAFUAAABXAAAATAAA + AB8EBAQ+VlRQlXNybqFqamaeZ2dinWZkYJxqaGOdcG5pnXFwa550cm2feXRxn350c597cW+efHVwnU1K + RZgAAQFUFw4NUI+5uMNY4+b0Xt7b9Gbh2PRv59bzf/La9JP84vSx/+r0z//p9Nv/4vTP/930yv/Z9N// + ufKnp5OvAwEEZRkPDk6Eu7nPLtvX/zrbz/9F4Mn/VOrF/2Xuvf9y667/guWe/4nciP+K1Hf/jM5v/5bO + b/+v2HT/paeTuwQCBmIZDxBPirmy0D/Wwf9Q273/W9yt/2vZm/9x0IT/csZw/33Eav99tlT/fqdG/4Cb + QP+FjjH/mZAz/6SfjL0FBQhjGBAST5G6rtFOyqT/VsCS/1mze/9mrGv/ZqFZ/2WXRP9zmDT/bYIh/3V9 + HP96eBn/d28X/4p7Jf+kno3ABQYJYxkTFlCOq5vTPpFi/0eLV/9WlE//b51B/26NKv9tgBn/d4YX/3N+ + Ff+ChhX/gH0W/3ZuFP+FdyH/pZ+OwQYGCWMZFBhQkKiR1EuNRv9dlDr/bZgu/4CWHv98iBT/eoUR/4SQ + Ev+CihD/iYoP/4F9D/97cQ//hHYc/6Wgj8MGBgljGBQZUJasidReozD/Y40i/3OHGP+MlRX/gYgO/4iP + Df+RmA3/jZEM/42JCv+Cewr/gXQK/4l6F/+noo/EBgYJYxgUGlCXroXVWI8f/2J4Ff97iBD/jZIO/4OF + CP+TlQf/mJkI/5WSCP+PiAb/g3oF/31yBf+KfhP/p6OOxQYGCWMZFhtQlaOB1VeCFf9idRD/eoQK/4qM + C/+CggT/mJYF/5iVBv+WkAX/jIQF/4J4BP92bgP/h4AR/6ajjcYGBgljGRYcUJaif9ZYgA//YHAM/3d/ + CP+Ghwv/gIAE/5mVBv+UjQb/kogG/4h9BP99cwT/cGsB/4B+D/+joYzGBgYKYxoXHVCWoH7XU3cG/1tq + Bf9yeAL/fX4I/317AP+TjgH/ioIB/4p+Af+AdQD/dWwA/21pAP90cgn/oJ2MyAcHCmQaGB1RoaiK1maC + HP9teh3/gYYb/4mKIf+Nixr/m5Yb/5KKG/+Uihv/i4Eb/4F7Gv9+exf/fHoi/6WilMcHBwpjBgYHMXp5 + dKCcnZG2mZiNtJqZjbWZl4yzmJaIsJiWiLCYlYiwmZaJsZmVirGYlYqylpSJs5mXjbRqaGadAQEBPQAA + AAUAAAAeAAAAKgAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAArAAAAIwAA + AAoAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAA + rEEAAKxB + + + \ No newline at end of file diff --git a/OnTopReplica/Actions.cs b/OnTopReplica/Actions.cs new file mode 100644 index 0000000..8406001 --- /dev/null +++ b/OnTopReplica/Actions.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica { + + public delegate void Action(); + + public delegate void Action(T1 arg1); + + public delegate void Action(T1 arg1, T2 arg2); + + public delegate void Action(T1 arg1, T2 arg2, T3 arg3); + +} diff --git a/OnTopReplica/AspectRatioForm.cs b/OnTopReplica/AspectRatioForm.cs new file mode 100644 index 0000000..4e96ab7 --- /dev/null +++ b/OnTopReplica/AspectRatioForm.cs @@ -0,0 +1,214 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using VistaControls.Dwm.Helpers; +using System.ComponentModel; +using OnTopReplica.Native; +using System.Drawing; + +namespace OnTopReplica { + + /// + /// Form that automatically keeps a certain aspect ratio and resizes without flickering. + /// + public class AspectRatioForm : GlassForm { + + bool _keepAspectRatio = true; + + /// + /// Gets or sets whether the form should keep its aspect ratio. + /// + [Description("Enables fixed aspect ratio for this form."), Category("Appearance"), DefaultValue(true)] + public bool KeepAspectRatio { + get { + return _keepAspectRatio; + } + set { + _keepAspectRatio = value; + + if (value) + RefreshAspectRatio(); + } + } + + double _aspectRatio = 1.0; + + /// + /// Gets or sets the form's aspect ratio that will be kept automatically when resizing. + /// + [Description("Determines this form's fixed aspect ratio."), Category("Appearance"), DefaultValue(1.0)] + public double AspectRatio { + get { + return _aspectRatio; + } + set { + if (value <= 0.0 || Double.IsInfinity(value)) + return; + + _aspectRatio = value; + } + } + + Padding _extraPadding; + + /// + /// Gets or sets some additional internal padding of the form that is ignored when keeping the aspect ratio. + /// + [Description("Sets some padding inside the form's client area that is ignored when keeping the aspect ratio."), + Category("Appearance")] + public Padding ExtraPadding { + get { + return _extraPadding; + } + set { + _extraPadding = value; + + if(KeepAspectRatio) + RefreshAspectRatio(); + } + } + + /// + /// Forces the form to update its height based on the current aspect ratio setting. + /// + public void RefreshAspectRatio() { + int newWidth = ClientSize.Width; + int newHeight = (int)((ClientSize.Width - ExtraPadding.Horizontal) / AspectRatio) + ExtraPadding.Vertical; + if (newHeight < FromSizeToClientSize(MinimumSize).Height) { + newHeight = FromSizeToClientSize(MinimumSize).Height; + newWidth = (int)((newHeight - ExtraPadding.Vertical) * AspectRatio) + ExtraPadding.Horizontal; + } + + ClientSize = new Size(newWidth, newHeight); + } + + /// + /// Adjusts the size of the form by a pixel increment while keeping its aspect ratio. + /// + /// Change of size in pixels. + public void AdjustSize(int pixelOffset) { + Size origSize = Size; + + //Resize to new width (clamped to max allowed size and minimum form size) + int newWidth = Math.Max(Math.Min(origSize.Width + pixelOffset, + SystemInformation.MaxWindowTrackSize.Width), + MinimumSize.Width); + + //Determine new height while keeping aspect ratio + int newHeight = (int)((newWidth - ExtraPadding.Horizontal - clientSizeConversionWidth) / AspectRatio) + ExtraPadding.Vertical + clientSizeConversionHeight; + + //Apply and move form to recenter + Size = new Size(newWidth, newHeight); + int deltaX = Size.Width - origSize.Width; + int deltaY = Size.Height - origSize.Height; + Location = new System.Drawing.Point(Location.X - (deltaX / 2), Location.Y - (deltaY / 2)); + } + + /// + /// Updates the aspect ratio of the form and optionally forces a refresh. + /// + /// Size from which aspect ratio should be computed. + /// True if the size of the form should be refreshed to match the new aspect ratio. + public void SetAspectRatio(Size aspectRatioSource, bool forceRefresh) { + AspectRatio = ((double)aspectRatioSource.Width / (double)aspectRatioSource.Height); + + if (forceRefresh) { + KeepAspectRatio = true; + } + } + + #region Event overriding + + protected override void OnResizeEnd(EventArgs e) { + base.OnResizeEnd(e); + + //Ensure that the ClientSize of the form is always respected + //(not ensured by the WM_SIZING message alone because of rounding errors and the chrome space) + if (KeepAspectRatio) { + var newHeight = (int)Math.Round(((ClientSize.Width - ExtraPadding.Horizontal) / AspectRatio) + ExtraPadding.Vertical); + ClientSize = new Size(ClientSize.Width, newHeight); + } + } + + /// + /// Override WM_SIZING message to restrict resizing. + /// Taken from: http://www.vcskicks.com/maintain-aspect-ratio.php + /// Improved with code from: http://stoyanoff.info/blog/2010/06/27/resizing-forms-while-keeping-aspect-ratio/ + /// + protected override void WndProc(ref Message m) { + if (KeepAspectRatio && m.Msg == WM.SIZING) { + var rc = (Native.NRectangle)Marshal.PtrToStructure(m.LParam, typeof(Native.NRectangle)); + int res = m.WParam.ToInt32(); + + int width = (rc.Right - rc.Left) - clientSizeConversionWidth - ExtraPadding.Horizontal; + int height = (rc.Bottom - rc.Top) - clientSizeConversionHeight - ExtraPadding.Vertical; + + if (res == WMSZ.LEFT || res == WMSZ.RIGHT) { + //Left or right resize, adjust top and bottom + int targetHeight = (int)(width / AspectRatio); + int diffHeight = height - targetHeight; + + rc.Top += (int)(diffHeight / 2.0); + rc.Bottom = rc.Top + targetHeight + ExtraPadding.Vertical + clientSizeConversionHeight; + } + else if (res == WMSZ.TOP || res == WMSZ.BOTTOM) { + //Up or down resize, adjust left and right + int targetWidth = (int)(height * AspectRatio); + int diffWidth = width - targetWidth; + + rc.Left += (int)(diffWidth / 2.0); + rc.Right = rc.Left + targetWidth + ExtraPadding.Horizontal + clientSizeConversionWidth; + } + else if (res == WMSZ.RIGHT + WMSZ.BOTTOM || res == WMSZ.LEFT + WMSZ.BOTTOM) { + //Lower corner resize, adjust bottom + rc.Bottom = rc.Top + (int)(width / AspectRatio) + ExtraPadding.Vertical + clientSizeConversionHeight; + } + else if (res == WMSZ.LEFT + WMSZ.TOP || res == WMSZ.RIGHT + WMSZ.TOP) { + //Upper corner resize, adjust top + rc.Top = rc.Bottom - (int)(width / AspectRatio) - ExtraPadding.Vertical - clientSizeConversionHeight; + } + + Marshal.StructureToPtr(rc, m.LParam, false); + } + + base.WndProc(ref m); + } + + #endregion + + #region ClientSize/Size conversion helpers + + int clientSizeConversionWidth, clientSizeConversionHeight; + + /// + /// Converts a client size measurement to a window size measurement. + /// + /// Size of the window's client area. + /// Size of the whole window. + public Size FromClientSizeToSize(Size clientSize) { + return new Size(clientSize.Width + clientSizeConversionWidth, clientSize.Height + clientSizeConversionHeight); + } + + /// + /// Converts a window size measurement to a client size measurement. + /// + /// Size of the whole window. + /// Size of the window's client area. + public Size FromSizeToClientSize(Size size) { + return new Size(size.Width - clientSizeConversionWidth, size.Height - clientSizeConversionHeight); + } + + protected override void OnShown(EventArgs e) { + base.OnShown(e); + + clientSizeConversionWidth = Size.Width - ClientSize.Width; + clientSizeConversionHeight = Size.Height - ClientSize.Height; + } + + #endregion + + } + +} diff --git a/OnTopReplica/Assets/25.png b/OnTopReplica/Assets/25.png new file mode 100644 index 0000000000000000000000000000000000000000..e98a5dda4366693f7bae7194ede43e7da9befd9a GIT binary patch literal 639 zcmV-_0)YLAP)@Pd1f>O+aux zK?~z2D(hDve&Nl$xUO7raAe@weRt-adFFlRS?+K+z-P=vkLzF8=ROH>gSbLOkG^-r zE8-_YMJNdQ<;x4l3heiLh{xklsZ??%lj*_Z@d$3W8ypS?%U&**(dl#=olGXV-EQ|g z7!1n2UeD+Nolq{9b5^UhAc`WmTrSWHlcAr%Znq2T^;+=xe9&&UjRM>4RwCv=AOJR- z4Ui2+qY;e9W46ib^#UbPM-(SQ%we$$dTchE8)OxTMbk8>*Xv7c@oOv=;|REZqoS0g z19OZH@Z-wqbh1FF(}Bfe@svm;9_bs8ri4Nv8Smx9ddx8j;JKn^vza-&-7X}P$wz$y z#^h$R3537w?Yx6i_49SHSfm&CFCAPQS>AC(ESV-yDwXoI&SWyDje;QL5r-obMB)4r zU;F(&V~#{3fXBI`BG0jB(4I8lc|K3RY&Hu7oQjM&L)IQiS^O^27)z2Q34XsHEEWsY zYBgxJT8up$4nsPfX7?}{3_w-YA&&C$p(@^HyVus&6xB+%A_Q+*=z757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10LZZYq zq9iy!t)x7$D3u`~F*C13&(AePq0Cs%*lgwVN2)+ICY~;iAsWHS2@*yR>@O^BF=$KY z$YeMf>@Ivlq-NVg-t-))&Mt|RUYE=U%|ovWC;3Q79A#KJTkBeuNQ*O2KZB>MpUXO@ GgeCw)7e2)R literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/arrow_up.png b/OnTopReplica/Assets/arrow_up.png new file mode 100644 index 0000000000000000000000000000000000000000..b34489e747f6c4d65d4f2bb82693fe6535d8e783 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@q#X;^)4C~IxyaaMs(j9#r85lP9 zbN@+X1@aY=J%W507^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10LZZYq zq9iy!t)x7$D3u`~F*C13&(AePq0Cs%*lgwVN2)+I+MX_sAsWHS2@;zg*ss)M&umCs x^hGIK!AseUx5D(%<%VG8zb1mBUSC347&NW5uD!bX|2|L~gQu&X%Q~loCIAd3JJA3D literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/back.png b/OnTopReplica/Assets/back.png new file mode 100644 index 0000000000000000000000000000000000000000..d5cfc9f16a5141391fbb6051cc6382cd52c23a28 GIT binary patch literal 150765 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�l==v9-BOCPv*ENV#bGR0oHk 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 bF9!ZU+yv;L96J+*00000NkvXXu0mjf5|;Bq literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/clickforwarding.png b/OnTopReplica/Assets/clickforwarding.png new file mode 100644 index 0000000000000000000000000000000000000000..66d9bc80fde385d142fef3f29cf7817a404de259 GIT binary patch literal 951 zcmV;o14#UdP)_ROnYA*=AP;U%I zAV$MaO@wM&G*l%a)Lpi_-A=nZ+nG7Xvs1))LN`Z-e+eAi-xY0r<+Y2;S2bje z$w{xK>$7@5x0s@kUoT%y_8#f^n1w@C_2I_l(eB@VSYcnE!H3&kz>b~-%$sTVsBe-t zqi4hwe7bulcJ`kDDHPxr9DD9xd%ov@V7lDStpj-g~ zalaUKRk#pUOLPPq=fhX6;X>jlPJDX`e}3MNX|sUNz3q7J!F6Er8mblqlUd02e*_48 z_AJ7w34|;I{Vi>HIQ|A$nd(}09PX}1)6e620e!7A~y&-82i1?Kpxv1)(sDsA>*pPY-SghP1JJ zqpQchJ3H9)=zHrLKHK-MVI!Y%;ABhwf|ABtzc0uCmRh}O^OG-+j9wZ3W9(8wZVde` ZzyLCuV;%72pw9pR002ovPDHLkV1jSLx#s`? literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/component.png b/OnTopReplica/Assets/component.png new file mode 100644 index 0000000000000000000000000000000000000000..c1796148e6e9d38079060282af20f44099970f5a GIT binary patch literal 731 zcmV<10wn#3P)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XT000XT0n*)m z`~Uy|7<5HgbW?9;ba!ELWdKlNX>N2bPDNB8b~7$BHmT?0B>(^dJxN4CR5(wKlUryL zK@^6MAigLHO1+@e78QI@48?#%u|5Q~6e&W5Dp)U7q0)#HLCH%%3Mz_tDJ?~amY^2t zOA+xwu@r(J+M19iy(F79mkr4V4K9ID2>kxLLJVyJS@;;{%sK!3XJ&SlEc?E`kS>P0 zNj({~T@}~zoT~GW4`j1{On~?h5Pl6U)Qs_Ga=9h}?rfpJ6)n&V1Rn#TJ|J@wjJ-4j zxL#LP$U7kSXTNMhcw#Gz5#e57#);6Ubzq^%)O!K*E>#rq4#^+HJixpQm}Bu==Rf9e zQ|ulPc?zVS8v@@e3UG%aVn$*+5N!jL7ILDDvuwvW zXe-!iWaN%4-tCZ4`vI|*xA0S6Xh%A*4LRkodGGEXiE1-;GnV$%qo7{I=O+?p(GFrf zsx>76+8I=RcH|a#NV*ID539`+&nLUhm^OO~+Dt3nIc2!wJD?p4ZH+J?W$f;`C2t>H z5C`psNOIts1UVn;JSIn~J!iv?VQV*OBpb+DvYqTA4J&Nd^oP}u^cS%>oLGX`a2Ego N002ovPDHLkV1g_eD)#^Y literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/desktop.png b/OnTopReplica/Assets/desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..1f6a7f4bb706a4d9e2b81257c1dca8fc045f8f9d GIT binary patch literal 794 zcmV+#1LgdQP)ezU0v0~n=;2C zMiWEah^V-7;Rm=ET)A=Qr}z#2f`~gmKnMt~qM$}GniyhYhUc5Qy9Q6^C8E_7UDR;u zo}ol^|9KFRgj5l`fRF-O2M7@`vJO531n1zYihuU11gZjg>>y#GM3$ol5HSJbdJ4F+ zta0;F0v9BVF$muAOnLGzivq$~%(h~zt#1*a*?`m$B6dZ9(s|sw-olf+(+H74;RJc959_ z-R=>J5iMiMXHA^-(rwd*Mx^$uu(&YQz}roY7heox%&ZP-e_2jR4N|IVR1C$^BbHQg!~3s4(ad7ZPj+zo z>I%At)mT8XF`93Mv=u{F)0GDVbL46X)N^E`6D+N)V(s$)J6+4m0v0cyN28hZu%=U* z0gGV+$3jCqdif?S=@Fyc!9}C7;WNyXBdl)~*f<_S^X1j{cZUQkHMS2bSVq(rBM8g2 zkFVG4Zeyr?HIK)05{J{*(0ca<3vrBB->l;OaK4? literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/empty-window.ico b/OnTopReplica/Assets/empty-window.ico new file mode 100644 index 0000000000000000000000000000000000000000..ca5edce1402e54eb04e80c5c2ca8916f7ccf019b GIT binary patch literal 10806 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

vF9gJ@Je|yRw3>4@pRamq~Dp4(LNsCb6l7h zFxvaNhK=nl!`NSOj9@<~LcbHR8(Zi-?bzqmVqdcv`#kx*DcXy|zJwn4;!U`(*6XtM zj+#2#MpqUmJu}!_!ajxt_svc5psmeq)~oT`DX9s26!tFMjWViKzhI7x21lGZu5#B<7XuwJcp5;yRJ8 zU1`>!YgM{NrRxkj7hKG_G!x+Ukk@USwOe{7agC6_K8VxYjO&+vIv;Z~b3d2v?b7^7 z*CGeF$Av!1-2d{r>~k)=W$N44hct6%=h-8=uGs3Q8HmoicrJY}%|qLm-Ec1?;`cb_ z`+B-2|KF=N>vUaC^E}PRm~AqHn9GLILq}Zp zzJ*_Y@By#7vcg?cRpG8Ct1Nd_R+KsMTSEuTo-+r2FX*U(Rg{&|YcBl$(DR#*f2}Df KNIv}U*na?MF7@;P literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/flag_czech.png b/OnTopReplica/Assets/flag_czech.png new file mode 100644 index 0000000000000000000000000000000000000000..8308ed84ed70128030d13e6315cf7864c24d4e18 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ#}*A-ZN!DMTwp+jv*HQ$q5p_8V)aiYp>eCn8LvE|M%Zso#F><2Y8gOitsQyu<72b z?8+$KAmz}N{Xy!3v)iZt@}8=DB$hL_m>hay$fFRZ+{XCko-E7U?z06Oxc_;1O3t2amNsq%TE^h%>gTe~DWM4f&;U;T literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/flag_danish.png b/OnTopReplica/Assets/flag_danish.png new file mode 100644 index 0000000000000000000000000000000000000000..d39d4c1917c8e11a5b4a713cb900312b21c89195 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8oo45Zzdi4M2&;Pe<`LC`0f7R;$r%(UC zfB(O+@qb?4|NHj+KXBl`l+?R(mw*ON`7uKTXq{q7kY6y6ix)7=KX^eAs5sHn#WAGf z)|B(^d<_mf&VlD0UhFO3@n5qurG-WMNOaxN?gteI%RAPtO5OBCxrys2``Hik4jSof zy1TF_RAHyLcA2}Wk(EioB(EZ09%t>lvPyAN!Zie>ud;V8 literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/flag_spanish.png b/OnTopReplica/Assets/flag_spanish.png new file mode 100644 index 0000000000000000000000000000000000000000..4463433243309356b86730484fae8dd811b93ee5 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z;_sg8IR|$ zNC65;mbgZg1m~xflqVLYG6W=M=9TFAxrQi|8S9zqnR<5pc>q*Y>*?YcV&R{hAW`rk zFz}zf>WoIAvkH5sNPqah|44m^&cFYs&3R1>OH4WJm^VF}uHEvl{xua1Mz1@R9lO|LWha|K`Uk`AkWh@H&v^$N%~KYd${ZPE*iz oo1!@7_@M*Kn;Fl0i&!%-Yzopr081=vMgRZ+ literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/flag_usa.png b/OnTopReplica/Assets/flag_usa.png new file mode 100644 index 0000000000000000000000000000000000000000..aed8f11f9992b987e25e3344be224bfc6294d3c2 GIT binary patch literal 355 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 literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/fullscreen.png b/OnTopReplica/Assets/fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..b1f8a2b0282f2dd25a2fb69f343d0696a2db3241 GIT binary patch literal 396 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 literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/icon-new.ico b/OnTopReplica/Assets/icon-new.ico new file mode 100644 index 0000000000000000000000000000000000000000..18362992f3fec1ff3742fd8b63d393500a8b5cc2 GIT binary patch literal 86918 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 A{r~^~ literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/icon.ico b/OnTopReplica/Assets/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..791a5e2abbe1788c3b7920ec0c87ababd4691435 GIT binary patch literal 7358 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 QzVN^OFZTb>|Gz2lpGUyLN&o-= literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/icon.png b/OnTopReplica/Assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d87244edd38607b98111a0e4759f8eddeae7ba71 GIT binary patch literal 7335 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 N002ovPDHLkV1l0s81euB literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/list.png b/OnTopReplica/Assets/list.png new file mode 100644 index 0000000000000000000000000000000000000000..33b1ff0345e156591927d0d05e1ecfd9f064a89c GIT binary patch literal 681 zcmV;a0#^NrP)A}HuaqOhR5=&~SiQC$Qz3cHA?yv$u#j9hbRHa8V# zuG)sEJK9d`>});Xe6fR9df>;ty*qo}=Y7t5gudvFJ1xd$XHimFY%&z;KlAK1+rlO8 zEw*}H)-LzsjDd}A7z-{u*8^JX36l%T5~oJj%;w-t2zG{ zxYQVY+I#tAPAM+y?+?t~qxzN2W+3FhJwIFCWqDGPrdTrZ)#L2)hp`8I1h`?p=)OAI z1p_dG9CG+vabVP?4B5m4%g8CF7#lpOg+V9Ho1(=z3RF5{T*k9n6BwKbE&k2QbJezd zbav)P+~ultJVu=lZE!4;3odZ0BG4E3J>qelp7PjRq;z?fZ{PbZ?SYy$A82lC_ZIQA z>&+`cs-Fk7APq+Oee|7ocJil$oQm9yc=$y3)y@tl8~7L*9~=G9eT|*s0$yMR{M~p- zA+}Sfdw7Uo5xf(JV~Mx5Ly`JVgMk;R`ACTzI5aLVXwLgI=MWF}p8x{@XDi290elMa P00000NkvXXu0mjf+9*5T literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/newicon.png b/OnTopReplica/Assets/newicon.png new file mode 100644 index 0000000000000000000000000000000000000000..37017ad33c7c87a6c2f945feeef56ba0acf1fb3e GIT binary patch literal 770 zcmV+d1O5DoP)ox1a z7VLs78w-Twn-Av3{~$|-zu*G^SqOdx;hVJ}AMnBQ&Dz2Hn4Ot^S0z!i;tt))?&_@0 z$jFQ=0pMwOX>*$5zg>pb(cZZtgfGAO_PeJ?_wOyHF(!zJCQXxS-2F;O$=42AMKy`D zR{lCUIeq@q55Ky_t;0_jj~+h${`GI4OIIMx4-s66UL0h$2W;Exgl!8Q8bsbRO?dX? zs~6QTKY!+!K{wr2mfJJvxWn`*)C@j7;JKBhLr`boHsDuvaOCzlPd;FlB7vN zpZ73iWlX`OcGq#khQZAY>KlR_8=Sxf%LKyB5r%P=;OrcO=yL^3;u_a&b@}O%>cL@v zO@e0V5G}o#;lP@0MWz$du44L$=qAm}e*pyLG+?njLtWg$W;Wn5ZMZujHa#U|@IWvr zGG8`vfS*V;rE7rvs%_Gb-I|KA`&Eyt%HY&1E;>bOB2q^g%6+EdcO2nEO;$)dfGMhe zuy51XpWMWGQ{r@OaoM-H!`lC@6_*llwj40FYsAs#p@MTh3!r(*$bb&*^=Q7r-2;P< zWQOzTaoPsFZv;cCvAn8rwc>hXuv$|Iv!B(C8N!i=7G}_ezu<6>n7bM7?De>J`v9wW z1DAuxvMpGSpd0cLsNw4cikD4Fgy0}0N;%u?mtSn%7!ajoot3)sraag?L}`yn^cX$Q z+K3HXJK`;Fr`IoEY$%>}ZF6@18{?u-(`ige$IF;<)*bspTj zFHZE;tCNv)d6CsUpgp2}NK60YICDtw=RX1r0DQbuM9q8juK)l507*qoM6N<$g4OVC A-~a#s literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/pos_bottomleft.pdn b/OnTopReplica/Assets/pos_bottomleft.pdn new file mode 100644 index 0000000000000000000000000000000000000000..6658542355e57545d1b138be337b56d0ed15ad29 GIT binary patch literal 6696 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 HDWM4fG=x-j literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/pos_bottomright.png b/OnTopReplica/Assets/pos_bottomright.png new file mode 100644 index 0000000000000000000000000000000000000000..96ba61893ba568efaf9bb9835d5329dbfe26c4db GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijSl0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(q@_ zHKHUqKdq!Zu_%=xATcwqM9}FK5etQUh2#kmRT2WL`C{*P zJP?+)m}qA9|8i4PfPqKPizytJV&dcbn;er4A7t=i7GzLs>D>2Zg)bw}LIzJ)KbLh* G2~7YYM^pg- literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/pos_center.png b/OnTopReplica/Assets/pos_center.png new file mode 100644 index 0000000000000000000000000000000000000000..d672a20baab23469fa22cbf4d711e4ae2c6c2e60 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$179u0Iceio!iz978PplV_M@Ui!b(d-|e;2@=dw2UhYe`FUohv4(_7TONa7>EQzm zIgP@Z$)D|YH8@zCk92V66x?VuxqkinVxan}1CO5Y8!~I~9Z8%pLE{_K(wmYD3x!y+ Um;83;1zN%2>FVdQ&MBb@00?tREdT%j literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/pos_null.png b/OnTopReplica/Assets/pos_null.png new file mode 100644 index 0000000000000000000000000000000000000000..ea301953f4a137a0c2a6c12010b7234431bd3a53 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijSl0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(q@_ zHKHUqKdq!Zu_%=xATcwqM9}FK5etQUh2#kmRT2WL`C{*P pJP?+)u(-uR0qGPfD8YB{i+h- z5t8O(YhV(5lAgjN(|LC)8IumM=*;A_ kY?eJ_(y-*g@em${tp58O7Cx@M26QEZr>mdKI;Vst00-D*CIA2c literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/regions_new.png b/OnTopReplica/Assets/regions_new.png new file mode 100644 index 0000000000000000000000000000000000000000..25947b96dedbc6263707383ff7bb5ce7bf0e4a4d GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X3O!vMLn>}1r6eRgU`i5Hc$TKXTf_RuT%k=ypuYW)iH6!V z{o@=eCXGL21lSoqDl6r(NA6b9{kM0%%TlySL|m!d9m;Y>lp_f zt|QkMBz|b~s4cKvoaoSMu)snySk*Xi%3MY!9)_5W`rqzs3j7VUoWax8&t;ucLK6V& C9z^W` literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/screenshot-icon.ico b/OnTopReplica/Assets/screenshot-icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3251e44fcf9b29c72083eb6543466410d9926753 GIT binary patch literal 99678 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 FFaU5&7=Zu) literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/thumbs_up.png b/OnTopReplica/Assets/thumbs_up.png new file mode 100644 index 0000000000000000000000000000000000000000..e77b7f130babaf80c65481efc1d008884e60ac86 GIT binary patch literal 2318 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 literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/window_border16.png b/OnTopReplica/Assets/window_border16.png new file mode 100644 index 0000000000000000000000000000000000000000..b9bc0b092087debf2200041e8334bcf20f508a05 GIT binary patch literal 683 zcmV;c0#yBpP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy7<5HgbW?9;ba!ELWdKlNX>N2bPDNB8b~7$9Fmkdbk^le#1xZ9f zR5(wqlig3!Q5=W4?z%Thpe!I0ejuVwNyCJkqnH_5G1pp+%qAiT=$tasD09wgX0Ekf z)+(*^&*>sm-gLwADUT2ij4HQC0cKulA#{1t_QuqH}~WIKyj?%1~AKXo@Cj9!}%Fmd4Saq#~Ta z986HwouV@G23zz!j*(9^jD6+godt}?dNTm6)sK59CBi9=h;Vr*PEkjk;-I+qq_JLl zOYPMU93B0PYy2DTyNeVxWC3(SZ8cm!ki-(2NAk{L@WnBQQdoLlb7=4#b;BR2zww2p zi3OVPeaCb>3!t}m(kLoeyF|Ecmcljx@Fytk+DLzq)AyG!x%x5{RsnT=ag5$s_O%Lt zcOFycdVOb>{+Wl%6lVkW*90gJ%%N?Gp%nmq`=9mCK3c}ym}Q_o7(mw=L+y!CaB)pP zy}|Db{Rc~&d;EivrbwoO!r~XCBVS_Y9*MlY1{7)oO3knNy+b)I(kdjk^Ao~A%$#(e RGs*w}002ovPDHLkV1h^TF@yjB literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/window_multiple.pdn b/OnTopReplica/Assets/window_multiple.pdn new file mode 100644 index 0000000000000000000000000000000000000000..2641e329e05972bf982e65852fb0269808fce01c GIT binary patch literal 8806 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 BaXbJ3 literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/window_multiple16.ico b/OnTopReplica/Assets/window_multiple16.ico new file mode 100644 index 0000000000000000000000000000000000000000..6c48346dd69e92f341301e5d260e9d4befbbe0db GIT binary patch literal 894 zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?x!0Y3I7DG_GAwyL&Tvep{1Hrn#G zx=MEXD)t6y4n`U-=DJ>vmdM&0GNWeKC(Ow6o0Z`;JKJw=LGb*Nhy@kVi)!MR)F&@( z$(-JhgRFjfY4VZUkW+b97YeN|S2$g5^t#y*baz73gXxKn=B7VhTySuDF|zu(Rq5C3 z{BLFI+|JavUuf{C+Ui-0^Q&Ipchf>Y&WroFG~>+7JY@9?YO`;)N8ipjxs|1LH(&2z zh56G)hnHQRZzczSm=pbBaoWZC#pZq%VHsf%T?^}SZuh3#sc^iVXK*J^_d%)2<2u{t z?QX9p_`jbS@qR(_jn$P6yPEpgX7MldJ&0G;%1e&W@& zrFnOY+OBm0)kkJDu4}Eo)e(EYCFFji@7;3SdnKk1DlDEfI=lco>Fu1jE31lt>RYaL z0M)n5+`g={L$KCnJN=WapMwKkyo zrp0H%>h{MKFHf&ny?T9J-^Q4xRbC}at&3M!SFUqu-0Ii1JEHYyTITKC#>=fh^<68^ z*|*+SFS(&za=Z6PXX?o~APP9*<#N!@>4<~RNw1J|A+eWZGj3$oU2X)b?^|=xzyGd& z#SP8U8;u8Q!w>prpG*O2@jK$-dc?u=n0xSusPG z|0$asr_TtQw=8nWnusMU!j>&cUNc)YQbi+LLpM&>Jk|oJzIoZjkV$vLCf{{vxocE? z+qC+weZwQq)~7*TucG_km(6(uRD%r4=bm+KzY#U{Zb<)KyXLz<^)?L;Tw0&{b-oDi zds{T?0kUEs+sHXg$|_F7DN)NgN!dP0+9DB%Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy7<5HgbW?9;ba!ELWdKlNX>N2bPDNB8b~7$9Fmkdbk^le$PDw;T zR5(v-E-A&++i@_60@MbAE zzsrOhloA(f)aW-H05#N)f~yXs_nDB`OCs@74N`utN7gkOs$W}B zcDoseIW3x5dIfO3(+qQ~8yadD#q=nOI_@FE=0l?C7Pg5kv5sPQhad9JyU4%5qH<^$ zReS|nCQK^;hrT#uvNEp=ty55#XOT(ILQ=;go}9rqh9IQ$-$=8Cuy{mlRL)y^f9_b#Df@X_3wlQx|h@hBR+NYLFuLiJtjGO$Re?<3nf ziM)0mMW=%}aCRP5t_Lvnb87)d9fQAXnz{vfb(fHF$SKHm-9k>yc_FXPC8&+PLUH3o zp{(h$P+{#8s8d(CH3pixc1sr3#>A_1O!W3#CORR9iIFIoSgDGMOWx0HP0eGz-BZ9w iWkpPZw*KtVMP)7Lx|dmGW$$x;v%hmD2?+@a&mmf2v4=&!Xr*87;w>@2>=UAo zK3rb$@5C#Z0Brt^H4(jq`}NR9C}}NGDwF|bLwW0n3ZNpW6e?d&v<2D@?SSePQ4`b( zbwIl}5OqPl&|YYGBhe_tzcVfY*!((Z1C$7*z;rs41?58dFue&Xfi^>xFue_`f$E?} zm~MgEpb$^cm-JF106PB22~i)5%W6{pc96>p*{~f6EMF&9syoM2dk~4 zW8%I_L&wIwgANP}I#akm7>@v6bfR#-!ZSmkSx)ta#{f5iw2qB?pfmR~D>y*(>Wu{8 z*6~r95+LQ{L^3JuRw8A7l0-STlPPp3nF>Ekp^`6BY4hDQs`xUEwtSsV+rP=6+IyMQ za6glpzssVw2idgqVGecvkVD;%a;fj9Jlgv>M8i)*H2QNsO*|{0{l6B{q34D3sy7nA zXJy&~q#{%X%xB+DqP$O&sQ~7SK2N1m1aQoM6*j-)UIx{Fn@LSD-wN{`-)GZqnD6>A zmwF%N(ZJ(88hR3 zYY?Cg<{R&4QOkoYYKQqoqD)(F0LMH&xXgV% zxYt`JDmvia+Bz;ehw;H>?%DjQ*+FnnG(P;e=A&>dh09|9j7wUI$W8@-PLDw&b=t1i!W^feC{$OfES%j z+Q8zVRk4Rp=|oeNm~%YT7G-C~b)75I& z=g1a|z3Av%f%$8%$}CR+rz;7da&e~7m4|=lL)eNa6oJB%RGXm+XbZFrs)lNzdZ-a< zf!d%BXcx2x>V|ru0ca2!hDM=rXcF2F9STQaFFHC`VgANHwg5PwL=6yf&0~%ze2(VK zSK)rEYkmi=b*}klTw68sow)CE&G+NF*EPQn*D+|qHGdG-!;t{oI)cu1n7{ciR?Tyc z4*zfWTM1(THeUc?8{(M9BB*jm%x}kijcdLE*Cy9|JFYt+G2esxKG*yZt|OZHDcrl} z)zL@*ZXH2~%|{R5f;TUKpu^?`9X4MH2|8?E&|&j}4x8T%F*;&i&|&j}4x2v!0Ub84 zjzj*m00{rJ~9{%w;{%z<8_l%Bk&*6=y1W1z$4)tMjyaNkR1a_ey4$Eh+M?p<`)ygD010BIemOl}?SdsAg{>qupC>u}#M zpfb62n0s{^nug8?5nwUXRw^^rw3W)_)?xE5_m25<(1joZ#ADjZRzU`q0Ucg_bt#Ad z%P?(C=%|Yba5;zo`m~L6W$Ng#c{LLW;BFA+U2K082@f*wF4Hz`qwO+%RwlO&bI<6g zE6}w_fEec!@pkhzU(qh8#R5}M%iVWD%0Vf(P8sfq3f>&Fq*Wz84kc3 zwZ)(#TLsHT&1oH}Ol}>Qdq#)NtD8XtSjquq3FxRB2=HzY0r+$k-~q)iI&5COA4GtF z4=A?E)X`DzA;1Sg1TgI~`E09CTRvU+JfN7StyCtrj)RVCK9~Tuv#owW@t$qo?{igf}jmWAd30000Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy7<5HgbW?9;ba!ELWdKlNX>N2bPDNB8b~7$9Fmkdbk^le#*hxe| zR5(w?)A>u&aTvhyZ$!UE1QGob5rL^KkJeDZo4wt&AyBuSi znXN-D^O!fNh#*lxh)8yrj zku^P@D6?94YI{?r4zJ^B@sdQjJ@c&C#)=l%X!Htu@CCW^P=eaC=Ra_Tc?PGKI;Pkv zVvMizb#m){jZ6hm6D{@>Q_4N*ky0;{UOi8ZQ!NBC^t|KF>|CvP zl3VW`O;ix=RFS*k)GfFCbU7iU%6z<-noo>)&6h})!5@&)^!)($(ekeCh^}L9i>>l3 z!m%x>mYAT4TqB`EXIogY+ei_4t7w%U3uEg(r!jPkmy%51C~WhOWBit%`?mu|ixs75 zh+nBHVj)K2vW6DnuSiACp|BE9YlOtB2fhsW1;A$mKaTTYnViwOax|x7ZQtLB$ufsH z8Uit@+#BISd_G8ke;^56FUe)ZAn==kuLHjHvcaDR{1o8FW<6OA&+S}4Vi>~rVur3+ zbXDm=)KVu3%y+B>3UFV@P4|1?KL>t4@E-zS3w$x~uLD0h`{`;-zGXesIE)|0bnP>U zQRzk}1r8LD>p;OboGZX5A|$@Iz<&n(Uf|ycz8d)D8IM=8fq$i-dxLHo#z~m6^&N^X zbHcG51>`vpsmO(ZzYKgg@TY-44txvnn}A;j{1V`23VJqKrV*Tm-8R2Qps=}TjECh&Oejj(fjAHeqH$3$ zH5HL)Y!pJjhQiNrw#er>iq&OeQ!c z2xgEXqDX8I+hoVLuw@hY3qAl)g!mc+tfE>lc4I%Tq}aN?>mGjf^*3Lhe{z3Wa&3Uvq{&o7jz45gNr;$H zVAA{~(xS6A{eF45dHTb5zq!?&<@xHfho67@;^zk#``i}G)VU!|=pxQfB2WkbCO`-* ziMc|hxwONRM~~C^(~l=kZ;(SIT+=4Yen_?X)O97s3K4A=AjSX%SOOCSVyKbEv8R}G z)C#K;5kLcJ9DS;jPo?+K4r6pvil$crL5AE&`(kL7YRuFv77WhnnPjJ`G=q{mBPn|m zo3|0X3y@0?6vn}k*v43N&z?-~$e5nc*r>V1s9@seCeLnR^cG_0FxbupXOWF$HV)Vt zA#_%gkc{iuG>rjO8z{#Ls#Dd^mR+-C|r3WL`_aghP@^$K~3a~RXtk#hoA|xnQieSw+|Ew$8qB8 z(a@C_dL4xtS8A~k45wPQe%DOCo3U#DmY`HA@15HC#mBe#6%Ty1x3rxC-E(mGYbLzK zjyCJWIqa!s&uS`m&MSc^fgIaMo#hnH7d!so%+QB8r&ra}Rp|I{MoMi)>+2a^?=(Ib z-t9dbbE*>pb>&e%Eu%Lnto&<=kZIxObnj%M`*+W1S8vfad0K~F+d+=WFu*MM*(&tU zcxqLSMr!Jj`Sx`9)VSPn#XNdnR!i@aF)t@$Y;wjY13v3{Mu++N^UJL7LZ=HbD&AN0 oM^$g2zQfJ9zI)F9;f(+T0RHh6oC1-g0RR9107*qoM6N<$f^F}B7XSbN literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/window_switch.pdn b/OnTopReplica/Assets/window_switch.pdn new file mode 100644 index 0000000000000000000000000000000000000000..72bcc91da1b19273df35affdb8d985bfa6af0bc2 GIT binary patch literal 10464 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 literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/window_switch.png b/OnTopReplica/Assets/window_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..987ef8eea5050eb07f43ac3f3fa443d0359f85a6 GIT binary patch literal 456 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 literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/xiao_arrow.png b/OnTopReplica/Assets/xiao_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..ca39d4820e0858e3519c1d6e238b171950cc53a3 GIT binary patch literal 437 zcmV;m0ZRUfP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-J4r-ARCwCNlQB;MK@^0)6*0;shK|yNYW)TL0b*-nVPiCE2Uaw8R(3R2Xon_- zA7Eo;q_ELgs12MnL}P;_gg`j%IL))r(}ZK8pzt-jJDHulc{{5_glTGqDQh;^D5XXc zQpM^qkQstcZg+GR01;uFja0EJ&mvO(5V`b39z`TotV(ciq6OdSoNb-j)H_gV!HZ+C zFsA+OgLTbo7h*s}3<3tP?5}ESO;}ol{DnrrTyIBGqwoqxnQ{yva#hQzdThSar`fhhQ0rbd8SfKAh*YQFET?gt5vEcY_9HKYy zar*AafqH}J_#go!<54_+ek3s&pCI72o29}H8>T0{w!b;UxC&CJl(K*XU>P)eK;viq fO|Sa*-}p5E1l@+qVnZ^Q00000NkvXXu0mjfU7@ez literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/xiao_delete.png b/OnTopReplica/Assets/xiao_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..4f7e3c06c7072ab8bd2992ec1db3040dde5bb9ff GIT binary patch literal 715 zcmV;+0yO=JP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;QAtEWRCwB?lRr#TaS+Ep?@wES8fe1+O&LfK8xlI{8g*x!>LAes`A> z9LM3)^m+c07Z?Ms02iyicfd2?5un!sqjMjSsn?hwN=semVg$QSL$JN#RSsjy*PU4M zg$#jkH;MS`5#XK-AWPza?D1e{a$uW;Z@p*; zu%AqWVIl`Y$dWivH$=zKDVJ2ROqyt{vZf+RG9ImjW7&oaP<3-lEf%8ywyyDW{wn{H z*mM$8RnaVa*9D|=>Pjx1injXwl=E3|?8e!G$cZ*T`E-hOPF-=gFuA<5c(@(MYHkN# z3x;7}=;eAd4DhvJHMeuP9cOZRXVC>@AiJ4VW>V{G$Q?b%!4Qt*#j;E+%fykq$iWbD zM-Qp>H8zvVOa`)U3ma2|djEWU_Tgp2ccG--2%d`K>x>}F0^nd;0;Qb7_qVIO|MKJR z_-bNyV`@;Z+X7G=UrpSG#M3*MQrG)BTVq{;mL7oAQE_i;KmY3H%WwCAJ)r20<@h!B x&&R!hA7}-4qZ*J0e$^`1u2FCthyT&<0RU|@782+2Qd0l`002ovPDHLkV1n3wH?;r& literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/xiao_down.png b/OnTopReplica/Assets/xiao_down.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf7a5d1c0ad4f723223346040b778b0a4a73fd7 GIT binary patch literal 761 zcmV(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;e@R3^RCwB?lTAoeQ5c4wd*{xGKVXhhG)$nNHVApxN-S)y+eD68$d%o{G z=ToGVT$udIAw+;d;5u;mfcpr%2A%^>>EM^4b~KJ+Fr+Gz$;27X#-lXU1!VRY$#1%m z{IIe$R`li2ff2wz17G^Lqt#X816L9h!;o`fFBj}pgrTi9%DJW}FK1RJje@DEiuw#d zEu|d}g~kWE6BtF<%0o^-dR8YrtCJG}XB1(eJ3%-U8b2sCFetjtt*(|Bzk#0uEC*~C zQhjk!eQ|6z;C>4D4Rp1{D7wzAvVo!~y-g?U$mBr?uO|sOdgs})}bg$Z@C9* zNb3woH1_v=JPE5C+kvtp4#2{S4nS*D49|gBy@ndnI*&Bb@g$~Y0NtXd?ih9NOjMZ8rTgviD2e(C6h%WyQ1CEJi?@s0>@I$Kyg4>JdVXTw zIr0iXVRLNw;U>J&Z#=qN+t`+@K6R!Uppenma~n%D-(Ng<3akT#l1Mo|jdQ~t5ugUB r1u73{0px%`rJGCBs7NXKAN(BvYQHHQ=RzG>00000NkvXXu0mjfkH<^r literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/xiao_help.png b/OnTopReplica/Assets/xiao_help.png new file mode 100644 index 0000000000000000000000000000000000000000..df861f96e0c4f211756f6aa44252f0e35fad1739 GIT binary patch literal 752 zcmV(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;c1c7*RCwB?lf6$9aTv!xcfGbi5keuD;E~uwkr0h-2u5QZp5K7pe`CZpackz08Kmz*7l@8ulLg4IrNRP`bP+yO#CIhuBhS9 zYdVN1LAu0Y7i&*QV99CW(Uh3P327 z;Bkq9ar@duRAAqNFHxl;weBvNIyd-%7axC+vmNikV9=BRa+W#VeLlcG@FxR~4UvAi z0`PDZj4VjiaP@2p^UK@Az%vOz5QM%!a|7`M$XI#7y~VP4ECjld_v2XzG&k@`i1n2K zqD$&@dnERfHd&`E+}Pg9J0Tg}umQ-L(9$R&x}?sECYo6XO*bk4N6XL(DM&66-E?E) zSS3JK*H+S+7Q}{(X>;6eL=H;+36F@TXR-CnMhT#)yR%ASFIZb$Px8>fE@aU=lb@r{ zR|SA5Ky6JGN+N}(?#=>;0PEu;lhIg$CT|X(3oOgRFf1bdGLe26!?3U{3!e*`yg8z= z1nc7?ljR;{;z@OLX>`sbJ?d#Yg(5n{(-yrm`M*%(5oz|hk?SPpRu$CErBO2RWC_qU zwP;3%LSxpQDX(T;z8{qRv^RPY1PR9hfh?+~^I>_1-^<^g#wLcwx~3M*iYWl;*u>D| z7`#(%J-J(dx+Cm6*?I;b9apwe+bi?G-aL2?Yys(_NI1TY(V>tBs0HeQ>OwdJq=3WX i%f)RJ9LM2*?B4+H@(<#P|3};a0000%t*xm literal 0 HcmV?d00001 diff --git a/OnTopReplica/Assets/xiao_ok.png b/OnTopReplica/Assets/xiao_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5029a25f4417ad92afa7489f464874dc3318df GIT binary patch literal 752 zcmV(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;c1c7*RCwB?lTAoeQ5c4wGk2VE(s3N6G)+pYjcFT2iI8xUB#|3YcWp$mz?IZO zSK_9YK}q7KU52X+0|{Dagx0{|UpUcV)RYchW}N?f?%cU8)Qh9bUicR0<@+Aa$2qSs zO%ovmN9vt#bN~ZDH*n+7{tV0lQ!|}w@~GD|O~i3P?|kEcB9xa67h1V^{xYTIUI3zM zgr9$Zu>N})!!!nGI@hL70eapwJaD@_&u=$(Ly19}1X(ly>^N~z3^9d;ud~F{`w!pT zU4LN#`rco6C_>ThwcaOPvX5rOG0B$zoQfM)%){H|R~V+@e0^tC+5oaLH&kEMj8+&Y zo>I{?4SAxz_?KDoeLyRWQ(x6gR_2BPYydVP`YOw6h-OqWGJ__yyjuO{XS!vP>6S&J z8I{Vi8f-%J9jpfkyJ#wK+DW8h1Vi7gYhS9aV>=XNx@FPw5~&!at_p-*G+6)uJ)1?- z(s|AOD{Xn_v0x91O+g~TG<9nQJ#B2Hl1Xwo7}@Hw296JpY;}>*HF8-PHw$PUh25xSHNuXW_T!0=iJQfAPl#F;B%FS0{2oSL%$3!~eU0o9M&@Z!LQE_DWd z?Enn=+R>y$mpTqyxD77>)z8A{_M`D41p*Tjn=VLbQG(G8e)-fVpTKKLdh5@*oN)!gMGHPz-ng*P)jN i_JIU&I*tFMe**wrqevEjZknS20000P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;Zb?KzRCwB?lS@ccQ5eU6=gyrgI+i+!(lmmGkwlPU_CUhgxNXxyR}q4bUbL%4 zD``=?=&3?P`!?Z9U1+$deBgr=3pAly>7=*uG50lh?rCwI$#mHt4xICy@B5waaL!*y zDG@@DRYT8|2DAg0fpa_I_rM#VZ@jb4&E`re5xW5mJyY!=Mf5h+RB$XFrL-hST>A~5 zb%S>c-^lo~W4yDjZy%uk#pJbUq~O_=i#24zu#pBQ69Do;P!xtx8eR`CV5H3JlU?=C zbAZ#m(^^Oo&W+}i7{F#4q=eB49f0$v;s^l;!w?0Y4$hGAW!_jvt*ZcJ(r#Dd(HNV+ zFAHopC?05yGte4mbVA2=gS}0l@o0=p+U){R0E7@NRb?e4w!pGrY$hnqYM?dF*o=;4 zL1GK4%1RJIwB!IvNUaZRD#?_O?fCx`?}pfpPcr4BX(~!ctp`xE39ctGZ3j<6+ei?5 zc_ANwwh=1_QbP*18^%Yba{$ja=TfFwiw~CT?>pUcyxjbNreNA0zHNQUUBNU~`t`LW zg{s7L9c(8US!LI*>rkjl^tB|WvCLuVch{El$5@>0 z#!9UJ?I8Hdg_SpZ?v38!00000(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-QAtEWRCwCFlD$d;K@^3*6*q-K0ycuMjg>xukCGyrI+&NyO4&w>nT5QEg`~9F zMl9?k44OdL*-7A7xU0qp{(+~t%(-_y?r>hsV!ms@Ll0Nrkv>2yk`)4^H`fO9Sf;OL^zwWO1K>GUS(=%SD$ zfNfyk7^AW*RTPEFvTPFB2eu`>JmE3Gq=Yc_@0XbacK{&-y!V6=yQuqYG{{pJ2 z!h26uRiFQZy%rqqz=AEVZr1@xlCWGZNs?q8;GZV>;F4Zr_@_w@2d@LpxqLJl^#I1> z@mqYgqB^eKy3TYn002ovPDHLkV1gvj B#S{Pl literal 0 HcmV?d00001 diff --git a/OnTopReplica/CloneClickEventArgs.cs b/OnTopReplica/CloneClickEventArgs.cs new file mode 100644 index 0000000..95012a7 --- /dev/null +++ b/OnTopReplica/CloneClickEventArgs.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Windows.Forms; + +namespace OnTopReplica { + public class CloneClickEventArgs : EventArgs { + + public Point ClientClickLocation { get; set; } + + public bool IsDoubleClick { get; set; } + + public MouseButtons Buttons { get; set; } + + public CloneClickEventArgs(Point location, MouseButtons buttons) { + ClientClickLocation = location; + Buttons = buttons; + IsDoubleClick = false; + } + + public CloneClickEventArgs(Point location, MouseButtons buttons, bool doubleClick) { + ClientClickLocation = location; + Buttons = buttons; + IsDoubleClick = doubleClick; + } + + } +} diff --git a/OnTopReplica/CloseRequestEventArgs.cs b/OnTopReplica/CloseRequestEventArgs.cs new file mode 100644 index 0000000..377ce99 --- /dev/null +++ b/OnTopReplica/CloseRequestEventArgs.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; + +namespace OnTopReplica { + public class CloseRequestEventArgs : EventArgs { + + public WindowHandle LastWindowHandle { get; set; } + + public Rectangle? LastRegion { get; set; } + + } +} diff --git a/OnTopReplica/EnumerableExtensions.cs b/OnTopReplica/EnumerableExtensions.cs new file mode 100644 index 0000000..dbd7c6c --- /dev/null +++ b/OnTopReplica/EnumerableExtensions.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica { + /// + /// Extension methods for IEnumerable. + /// + static class EnumerableExtensions { + + /// + /// Gets the first element of an enumeration of a default value. + /// + public static T FirstOrDefault(this IEnumerable collection) { + if (collection == null) + throw new ArgumentNullException(); + + using (var enumerator = collection.GetEnumerator()) { + if (!enumerator.MoveNext()) + return default(T); + else + return enumerator.Current; + } + } + + } +} diff --git a/OnTopReplica/EnumerationExtensions.cs b/OnTopReplica/EnumerationExtensions.cs new file mode 100644 index 0000000..a7cc169 --- /dev/null +++ b/OnTopReplica/EnumerationExtensions.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica { + + /// + /// Poor man's LINQ. + /// + static class EnumerationExtensions { + + public static bool Contains(IEnumerable collection, T value){ + foreach (var v in collection) + if (v.Equals(value)) + return true; + + return false; + } + + } + +} diff --git a/OnTopReplica/ExtensionAttribute.cs b/OnTopReplica/ExtensionAttribute.cs new file mode 100644 index 0000000..09eb1e5 --- /dev/null +++ b/OnTopReplica/ExtensionAttribute.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace System.Runtime.CompilerServices { + /// + /// Fake extension attribute that adds extension method support to C# 2 (without System.Core.dll reference). + /// + class ExtensionAttribute : Attribute { + } +} diff --git a/OnTopReplica/FocusedTextBox.cs b/OnTopReplica/FocusedTextBox.cs new file mode 100644 index 0000000..ac34c2d --- /dev/null +++ b/OnTopReplica/FocusedTextBox.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Text; +using VistaControls; +using System.Windows.Forms; + +namespace OnTopReplica { + + class FocusedTextBox : System.Windows.Forms.TextBox { + + protected override bool IsInputChar(char charCode) { + if (charCode == '\n' || charCode == '\r') + return true; + + return base.IsInputChar(charCode); + } + + protected override void OnKeyUp(KeyEventArgs e) { + if (e.KeyCode == Keys.Return) { + if(!string.IsNullOrEmpty(Text)) + OnConfirmInput(); + + e.Handled = true; + e.SuppressKeyPress = true; + } + else if (e.KeyCode == Keys.Escape) { + OnAbortInput(); + + e.Handled = true; + e.SuppressKeyPress = true; + } + + //Console.WriteLine("{0} ({1})", e.KeyCode, e.KeyValue); + + base.OnKeyUp(e); + } + + //List of characters to ignore on KeyPress events (because they generate bell rings) + char[] _ignoreChars = new char[] { + (char)27, (char)13 + }; + + protected override void OnKeyPress(KeyPressEventArgs e) { + if (EnumerationExtensions.Contains(_ignoreChars, e.KeyChar)) { + e.Handled = true; + } + + base.OnKeyPress(e); + } + + public event EventHandler ConfirmInput; + + protected virtual void OnConfirmInput() { + var evt = ConfirmInput; + if (evt != null) + evt(this, EventArgs.Empty); + } + + public event EventHandler AbortInput; + + protected virtual void OnAbortInput() { + var evt = AbortInput; + if (evt != null) + evt(this, EventArgs.Empty); + } + + } + +} diff --git a/OnTopReplica/IMessagePumpProcessor.cs b/OnTopReplica/IMessagePumpProcessor.cs new file mode 100644 index 0000000..824b9e5 --- /dev/null +++ b/OnTopReplica/IMessagePumpProcessor.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace OnTopReplica { + + interface IMessagePumpProcessor : IDisposable { + + void Initialize(MainForm form); + + bool Process(ref Message msg); + + } +} diff --git a/OnTopReplica/MainForm.Designer.cs b/OnTopReplica/MainForm.Designer.cs new file mode 100644 index 0000000..97cc99e --- /dev/null +++ b/OnTopReplica/MainForm.Designer.cs @@ -0,0 +1,630 @@ +namespace OnTopReplica +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.menuContext = new System.Windows.Forms.ContextMenuStrip(this.components); + this.menuContextWindows = new System.Windows.Forms.ToolStripMenuItem(); + this.menuWindows = new System.Windows.Forms.ContextMenuStrip(this.components); + this.noneToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.switchToWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectRegionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.advancedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.clickForwardingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.clickThroughToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.groupSwitchModeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuContextOpacity = new System.Windows.Forms.ToolStripMenuItem(); + this.menuOpacity = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem(); + this.fullOpacityToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.resizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuResize = new System.Windows.Forms.ContextMenuStrip(this.components); + this.doubleToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.fitToWindowToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.halfToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.quarterToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.fullscreenToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.restorePositionAndSizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.dockToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.disabledToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.topLeftToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.topRightToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.centerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bottomLeftToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bottomRightToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.chromeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.reduceToIconToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.languageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuLanguages = new System.Windows.Forms.ContextMenuStrip(this.components); + this.englishToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.cestinaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.danskToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.italianoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuContextClose = new System.Windows.Forms.ToolStripMenuItem(); + this.fullSelectWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.danskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuFullscreenContext = new System.Windows.Forms.ContextMenuStrip(this.components); + this.enableClickthroughToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.fullExitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.espanolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuContext.SuspendLayout(); + this.menuWindows.SuspendLayout(); + this.menuOpacity.SuspendLayout(); + this.menuResize.SuspendLayout(); + this.menuLanguages.SuspendLayout(); + this.menuFullscreenContext.SuspendLayout(); + this.SuspendLayout(); + // + // menuContext + // + this.menuContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuContextWindows, + this.switchToWindowToolStripMenuItem, + this.selectRegionToolStripMenuItem, + this.advancedToolStripMenuItem, + this.menuContextOpacity, + this.resizeToolStripMenuItem, + this.dockToolStripMenuItem, + this.chromeToolStripMenuItem, + this.reduceToIconToolStripMenuItem, + this.toolStripSeparator1, + this.languageToolStripMenuItem, + this.aboutToolStripMenuItem, + this.menuContextClose}); + this.menuContext.Name = "menuContext"; + this.menuContext.Size = new System.Drawing.Size(169, 296); + this.menuContext.Opening += new System.ComponentModel.CancelEventHandler(this.Menu_opening); + // + // menuContextWindows + // + this.menuContextWindows.DropDown = this.menuWindows; + this.menuContextWindows.Image = global::OnTopReplica.Properties.Resources.list; + this.menuContextWindows.Name = "menuContextWindows"; + this.menuContextWindows.Size = new System.Drawing.Size(168, 22); + this.menuContextWindows.Text = global::OnTopReplica.Strings.MenuWindows; + this.menuContextWindows.ToolTipText = global::OnTopReplica.Strings.MenuWindowsTT; + // + // menuWindows + // + this.menuWindows.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.noneToolStripMenuItem}); + this.menuWindows.Name = "menuWindows"; + this.menuWindows.OwnerItem = this.fullSelectWindowToolStripMenuItem; + this.menuWindows.Size = new System.Drawing.Size(118, 26); + this.menuWindows.Opening += new System.ComponentModel.CancelEventHandler(this.Menu_Windows_opening); + // + // noneToolStripMenuItem + // + this.noneToolStripMenuItem.Name = "noneToolStripMenuItem"; + this.noneToolStripMenuItem.Size = new System.Drawing.Size(117, 22); + this.noneToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuWindowsNone; + // + // switchToWindowToolStripMenuItem + // + this.switchToWindowToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.xiao_arrow; + this.switchToWindowToolStripMenuItem.Name = "switchToWindowToolStripMenuItem"; + this.switchToWindowToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.switchToWindowToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuSwitch; + this.switchToWindowToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuSwitchTT; + this.switchToWindowToolStripMenuItem.Click += new System.EventHandler(this.Menu_Switch_click); + // + // selectRegionToolStripMenuItem + // + this.selectRegionToolStripMenuItem.Enabled = false; + this.selectRegionToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.regions; + this.selectRegionToolStripMenuItem.Name = "selectRegionToolStripMenuItem"; + this.selectRegionToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.selectRegionToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuRegion; + this.selectRegionToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuRegionTT; + this.selectRegionToolStripMenuItem.Click += new System.EventHandler(this.Menu_Region_click); + // + // advancedToolStripMenuItem + // + this.advancedToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.clickForwardingToolStripMenuItem, + this.clickThroughToolStripMenuItem, + this.groupSwitchModeToolStripMenuItem}); + this.advancedToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.xiao_wrench; + this.advancedToolStripMenuItem.Name = "advancedToolStripMenuItem"; + this.advancedToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.advancedToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuAdvanced; + // + // clickForwardingToolStripMenuItem + // + this.clickForwardingToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.clickforwarding; + this.clickForwardingToolStripMenuItem.Name = "clickForwardingToolStripMenuItem"; + this.clickForwardingToolStripMenuItem.Size = new System.Drawing.Size(199, 22); + this.clickForwardingToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuClickForwarding; + this.clickForwardingToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuClickForwardingTT; + this.clickForwardingToolStripMenuItem.Click += new System.EventHandler(this.Menu_ClickForwarding_click); + // + // clickThroughToolStripMenuItem + // + this.clickThroughToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.window_opacity; + this.clickThroughToolStripMenuItem.Name = "clickThroughToolStripMenuItem"; + this.clickThroughToolStripMenuItem.Size = new System.Drawing.Size(199, 22); + this.clickThroughToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuClickThrough; + this.clickThroughToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuClickThroughTT; + this.clickThroughToolStripMenuItem.Click += new System.EventHandler(this.Menu_ClickThrough_click); + // + // groupSwitchModeToolStripMenuItem + // + this.groupSwitchModeToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.groupmode; + this.groupSwitchModeToolStripMenuItem.Name = "groupSwitchModeToolStripMenuItem"; + this.groupSwitchModeToolStripMenuItem.Size = new System.Drawing.Size(199, 22); + this.groupSwitchModeToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuGroupSwitch; + this.groupSwitchModeToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuGroupSwitchTT; + this.groupSwitchModeToolStripMenuItem.Click += new System.EventHandler(this.Menu_GroupSwitchMode_click); + // + // menuContextOpacity + // + this.menuContextOpacity.DropDown = this.menuOpacity; + this.menuContextOpacity.Image = global::OnTopReplica.Properties.Resources.window_opacity; + this.menuContextOpacity.Name = "menuContextOpacity"; + this.menuContextOpacity.Size = new System.Drawing.Size(168, 22); + this.menuContextOpacity.Text = global::OnTopReplica.Strings.MenuOpacity; + // + // menuOpacity + // + this.menuOpacity.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem1, + this.toolStripMenuItem2, + this.toolStripMenuItem3, + this.toolStripMenuItem4}); + this.menuOpacity.Name = "menuOpacity"; + this.menuOpacity.OwnerItem = this.menuContextOpacity; + this.menuOpacity.ShowCheckMargin = true; + this.menuOpacity.ShowImageMargin = false; + this.menuOpacity.Size = new System.Drawing.Size(154, 92); + this.menuOpacity.Opening += new System.ComponentModel.CancelEventHandler(this.Menu_Opacity_opening); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Checked = true; + this.toolStripMenuItem1.CheckState = System.Windows.Forms.CheckState.Checked; + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(153, 22); + this.toolStripMenuItem1.Tag = 1D; + this.toolStripMenuItem1.Text = global::OnTopReplica.Strings.MenuOp100; + this.toolStripMenuItem1.ToolTipText = global::OnTopReplica.Strings.MenuOp100TT; + this.toolStripMenuItem1.Click += new System.EventHandler(this.Menu_Opacity_click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(153, 22); + this.toolStripMenuItem2.Tag = 0.75D; + this.toolStripMenuItem2.Text = global::OnTopReplica.Strings.MenuOp75; + this.toolStripMenuItem2.ToolTipText = global::OnTopReplica.Strings.MenuOp75TT; + this.toolStripMenuItem2.Click += new System.EventHandler(this.Menu_Opacity_click); + // + // toolStripMenuItem3 + // + this.toolStripMenuItem3.Name = "toolStripMenuItem3"; + this.toolStripMenuItem3.Size = new System.Drawing.Size(153, 22); + this.toolStripMenuItem3.Tag = 0.5D; + this.toolStripMenuItem3.Text = global::OnTopReplica.Strings.MenuOp50; + this.toolStripMenuItem3.ToolTipText = global::OnTopReplica.Strings.MenuOp50TT; + this.toolStripMenuItem3.Click += new System.EventHandler(this.Menu_Opacity_click); + // + // toolStripMenuItem4 + // + this.toolStripMenuItem4.Name = "toolStripMenuItem4"; + this.toolStripMenuItem4.Size = new System.Drawing.Size(153, 22); + this.toolStripMenuItem4.Tag = 0.25D; + this.toolStripMenuItem4.Text = global::OnTopReplica.Strings.MenuOp25; + this.toolStripMenuItem4.ToolTipText = global::OnTopReplica.Strings.MenuOp25TT; + this.toolStripMenuItem4.Click += new System.EventHandler(this.Menu_Opacity_click); + // + // fullOpacityToolStripMenuItem + // + this.fullOpacityToolStripMenuItem.DropDown = this.menuOpacity; + this.fullOpacityToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.window_opacity; + this.fullOpacityToolStripMenuItem.Name = "fullOpacityToolStripMenuItem"; + this.fullOpacityToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.fullOpacityToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuOpacity; + // + // resizeToolStripMenuItem + // + this.resizeToolStripMenuItem.DropDown = this.menuResize; + this.resizeToolStripMenuItem.Enabled = false; + this.resizeToolStripMenuItem.Name = "resizeToolStripMenuItem"; + this.resizeToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.resizeToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuResize; + // + // menuResize + // + this.menuResize.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.doubleToolStripMenuItem1, + this.fitToWindowToolStripMenuItem1, + this.halfToolStripMenuItem1, + this.quarterToolStripMenuItem1, + this.toolStripSeparator3, + this.fullscreenToolStripMenuItem1, + this.toolStripSeparator2, + this.restorePositionAndSizeToolStripMenuItem}); + this.menuResize.Name = "menuResize"; + this.menuResize.OwnerItem = this.resizeToolStripMenuItem; + this.menuResize.Size = new System.Drawing.Size(218, 170); + this.menuResize.Opening += new System.ComponentModel.CancelEventHandler(this.Menu_Resize_opening); + // + // doubleToolStripMenuItem1 + // + this.doubleToolStripMenuItem1.Name = "doubleToolStripMenuItem1"; + this.doubleToolStripMenuItem1.Size = new System.Drawing.Size(217, 22); + this.doubleToolStripMenuItem1.Text = global::OnTopReplica.Strings.MenuFitDouble; + this.doubleToolStripMenuItem1.Click += new System.EventHandler(this.Menu_Resize_Double); + // + // fitToWindowToolStripMenuItem1 + // + this.fitToWindowToolStripMenuItem1.Name = "fitToWindowToolStripMenuItem1"; + this.fitToWindowToolStripMenuItem1.Size = new System.Drawing.Size(217, 22); + this.fitToWindowToolStripMenuItem1.Text = global::OnTopReplica.Strings.MenuFitOriginal; + this.fitToWindowToolStripMenuItem1.Click += new System.EventHandler(this.Menu_Resize_FitToWindow); + // + // halfToolStripMenuItem1 + // + this.halfToolStripMenuItem1.Name = "halfToolStripMenuItem1"; + this.halfToolStripMenuItem1.Size = new System.Drawing.Size(217, 22); + this.halfToolStripMenuItem1.Text = global::OnTopReplica.Strings.MenuFitHalf; + this.halfToolStripMenuItem1.Click += new System.EventHandler(this.Menu_Resize_Half); + // + // quarterToolStripMenuItem1 + // + this.quarterToolStripMenuItem1.Name = "quarterToolStripMenuItem1"; + this.quarterToolStripMenuItem1.Size = new System.Drawing.Size(217, 22); + this.quarterToolStripMenuItem1.Text = global::OnTopReplica.Strings.MenuFitQuarter; + this.quarterToolStripMenuItem1.Click += new System.EventHandler(this.Menu_Resize_Quarter); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(214, 6); + // + // fullscreenToolStripMenuItem1 + // + this.fullscreenToolStripMenuItem1.Image = global::OnTopReplica.Properties.Resources.fullscreen; + this.fullscreenToolStripMenuItem1.Name = "fullscreenToolStripMenuItem1"; + this.fullscreenToolStripMenuItem1.Size = new System.Drawing.Size(217, 22); + this.fullscreenToolStripMenuItem1.Text = global::OnTopReplica.Strings.MenuFitFullscreen; + this.fullscreenToolStripMenuItem1.Click += new System.EventHandler(this.Menu_Resize_Fullscreen); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(214, 6); + // + // restorePositionAndSizeToolStripMenuItem + // + this.restorePositionAndSizeToolStripMenuItem.Name = "restorePositionAndSizeToolStripMenuItem"; + this.restorePositionAndSizeToolStripMenuItem.Size = new System.Drawing.Size(217, 22); + this.restorePositionAndSizeToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuRecall; + this.restorePositionAndSizeToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuRecallTT; + this.restorePositionAndSizeToolStripMenuItem.Click += new System.EventHandler(this.Menu_Resize_RecallPosition_click); + // + // dockToolStripMenuItem + // + this.dockToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.disabledToolStripMenuItem, + this.topLeftToolStripMenuItem, + this.topRightToolStripMenuItem, + this.centerToolStripMenuItem, + this.bottomLeftToolStripMenuItem, + this.bottomRightToolStripMenuItem}); + this.dockToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.pos_null; + this.dockToolStripMenuItem.Name = "dockToolStripMenuItem"; + this.dockToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.dockToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuPosition; + this.dockToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuPositionTT; + this.dockToolStripMenuItem.DropDownOpening += new System.EventHandler(this.Menu_Position_Opening); + // + // disabledToolStripMenuItem + // + this.disabledToolStripMenuItem.Checked = true; + this.disabledToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.disabledToolStripMenuItem.Name = "disabledToolStripMenuItem"; + this.disabledToolStripMenuItem.Size = new System.Drawing.Size(145, 22); + this.disabledToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuPosDisabled; + this.disabledToolStripMenuItem.Click += new System.EventHandler(this.Menu_Position_Disable); + // + // topLeftToolStripMenuItem + // + this.topLeftToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.pos_topleft; + this.topLeftToolStripMenuItem.Name = "topLeftToolStripMenuItem"; + this.topLeftToolStripMenuItem.Size = new System.Drawing.Size(145, 22); + this.topLeftToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuPosTopLeft; + this.topLeftToolStripMenuItem.Click += new System.EventHandler(this.Menu_Position_TopLeft); + // + // topRightToolStripMenuItem + // + this.topRightToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.pos_topright; + this.topRightToolStripMenuItem.Name = "topRightToolStripMenuItem"; + this.topRightToolStripMenuItem.Size = new System.Drawing.Size(145, 22); + this.topRightToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuPosTopRight; + this.topRightToolStripMenuItem.Click += new System.EventHandler(this.Menu_Position_TopRight); + // + // centerToolStripMenuItem + // + this.centerToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.pos_center; + this.centerToolStripMenuItem.Name = "centerToolStripMenuItem"; + this.centerToolStripMenuItem.Size = new System.Drawing.Size(145, 22); + this.centerToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuPosCenter; + this.centerToolStripMenuItem.Click += new System.EventHandler(this.Menu_Position_Center); + // + // bottomLeftToolStripMenuItem + // + this.bottomLeftToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.pos_bottomleft; + this.bottomLeftToolStripMenuItem.Name = "bottomLeftToolStripMenuItem"; + this.bottomLeftToolStripMenuItem.Size = new System.Drawing.Size(145, 22); + this.bottomLeftToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuPosBottomLeft; + this.bottomLeftToolStripMenuItem.Click += new System.EventHandler(this.Menu_Position_BottomLeft); + // + // bottomRightToolStripMenuItem + // + this.bottomRightToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.pos_bottomright; + this.bottomRightToolStripMenuItem.Name = "bottomRightToolStripMenuItem"; + this.bottomRightToolStripMenuItem.Size = new System.Drawing.Size(145, 22); + this.bottomRightToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuPosBottomRight; + this.bottomRightToolStripMenuItem.Click += new System.EventHandler(this.Menu_Position_BottomRight); + // + // chromeToolStripMenuItem + // + this.chromeToolStripMenuItem.Name = "chromeToolStripMenuItem"; + this.chromeToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.chromeToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuChrome; + this.chromeToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuChromeTT; + this.chromeToolStripMenuItem.Click += new System.EventHandler(this.Menu_Chrome_click); + // + // reduceToIconToolStripMenuItem + // + this.reduceToIconToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.reduce; + this.reduceToIconToolStripMenuItem.Name = "reduceToIconToolStripMenuItem"; + this.reduceToIconToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.reduceToIconToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuReduce; + this.reduceToIconToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuReduceTT; + this.reduceToIconToolStripMenuItem.Click += new System.EventHandler(this.Menu_Reduce_click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(165, 6); + // + // languageToolStripMenuItem + // + this.languageToolStripMenuItem.DropDown = this.menuLanguages; + this.languageToolStripMenuItem.Name = "languageToolStripMenuItem"; + this.languageToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.languageToolStripMenuItem.Text = global::OnTopReplica.Strings.Language; + // + // menuLanguages + // + this.menuLanguages.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.englishToolStripMenuItem, + this.cestinaToolStripMenuItem, + this.danskToolStripMenuItem1, + this.espanolToolStripMenuItem, + this.italianoToolStripMenuItem}); + this.menuLanguages.Name = "menuLanguages"; + this.menuLanguages.OwnerItem = this.languageToolStripMenuItem; + this.menuLanguages.Size = new System.Drawing.Size(153, 136); + this.menuLanguages.Text = "Dansk"; + // + // englishToolStripMenuItem + // + this.englishToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.flag_usa; + this.englishToolStripMenuItem.Name = "englishToolStripMenuItem"; + this.englishToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.englishToolStripMenuItem.Tag = "en-US"; + this.englishToolStripMenuItem.Text = "English"; + this.englishToolStripMenuItem.Click += new System.EventHandler(this.Menu_Language_click); + // + // cestinaToolStripMenuItem + // + this.cestinaToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.flag_czech; + this.cestinaToolStripMenuItem.Name = "cestinaToolStripMenuItem"; + this.cestinaToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.cestinaToolStripMenuItem.Tag = "cs-CZ"; + this.cestinaToolStripMenuItem.Text = "Čeština"; + this.cestinaToolStripMenuItem.Click += new System.EventHandler(this.Menu_Language_click); + // + // danskToolStripMenuItem1 + // + this.danskToolStripMenuItem1.Image = global::OnTopReplica.Properties.Resources.flag_danish; + this.danskToolStripMenuItem1.Name = "danskToolStripMenuItem1"; + this.danskToolStripMenuItem1.Size = new System.Drawing.Size(152, 22); + this.danskToolStripMenuItem1.Tag = "da-DK"; + this.danskToolStripMenuItem1.Text = "Dansk"; + this.danskToolStripMenuItem1.Click += new System.EventHandler(this.Menu_Language_click); + // + // italianoToolStripMenuItem + // + this.italianoToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.flag_ita; + this.italianoToolStripMenuItem.Name = "italianoToolStripMenuItem"; + this.italianoToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.italianoToolStripMenuItem.Tag = "it-IT"; + this.italianoToolStripMenuItem.Text = "Italiano"; + this.italianoToolStripMenuItem.Click += new System.EventHandler(this.Menu_Language_click); + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.xiao_help; + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.aboutToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuAbout; + this.aboutToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuAboutTT; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.Menu_About_click); + // + // menuContextClose + // + this.menuContextClose.Image = global::OnTopReplica.Properties.Resources.close_new; + this.menuContextClose.Name = "menuContextClose"; + this.menuContextClose.Size = new System.Drawing.Size(168, 22); + this.menuContextClose.Text = global::OnTopReplica.Strings.MenuClose; + this.menuContextClose.Click += new System.EventHandler(this.Menu_Close_click); + // + // fullSelectWindowToolStripMenuItem + // + this.fullSelectWindowToolStripMenuItem.DropDown = this.menuWindows; + this.fullSelectWindowToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.list; + this.fullSelectWindowToolStripMenuItem.Name = "fullSelectWindowToolStripMenuItem"; + this.fullSelectWindowToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.fullSelectWindowToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuWindows; + this.fullSelectWindowToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuWindowsTT; + // + // danskToolStripMenuItem + // + this.danskToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.flag_danish; + this.danskToolStripMenuItem.Name = "danskToolStripMenuItem"; + this.danskToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.danskToolStripMenuItem.Tag = "da-DA"; + this.danskToolStripMenuItem.Text = "Dansk"; + this.danskToolStripMenuItem.Click += new System.EventHandler(this.Menu_Language_click); + // + // menuFullscreenContext + // + this.menuFullscreenContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fullSelectWindowToolStripMenuItem, + this.fullOpacityToolStripMenuItem, + this.enableClickthroughToolStripMenuItem, + this.fullExitToolStripMenuItem}); + this.menuFullscreenContext.Name = "menuFullscreenContext"; + this.menuFullscreenContext.Size = new System.Drawing.Size(190, 92); + // + // enableClickthroughToolStripMenuItem + // + this.enableClickthroughToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.clickforwarding; + this.enableClickthroughToolStripMenuItem.Name = "enableClickthroughToolStripMenuItem"; + this.enableClickthroughToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.enableClickthroughToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuClickThrough; + this.enableClickthroughToolStripMenuItem.ToolTipText = global::OnTopReplica.Strings.MenuClickThroughTT; + this.enableClickthroughToolStripMenuItem.Click += new System.EventHandler(this.Menu_ClickThrough_click); + // + // fullExitToolStripMenuItem + // + this.fullExitToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.close_new; + this.fullExitToolStripMenuItem.Name = "fullExitToolStripMenuItem"; + this.fullExitToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.fullExitToolStripMenuItem.Text = global::OnTopReplica.Strings.MenuQuitFullscreen; + this.fullExitToolStripMenuItem.Click += new System.EventHandler(this.Menu_Fullscreen_ExitFullscreen_click); + // + // espanolToolStripMenuItem + // + this.espanolToolStripMenuItem.Image = global::OnTopReplica.Properties.Resources.flag_spanish; + this.espanolToolStripMenuItem.Name = "espanolToolStripMenuItem"; + this.espanolToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.espanolToolStripMenuItem.Text = "Español"; + this.espanolToolStripMenuItem.Tag = "es-ES"; + this.espanolToolStripMenuItem.Click += new System.EventHandler(this.Menu_Language_click); + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Control; + this.ClientSize = new System.Drawing.Size(264, 204); + this.ControlBox = false; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(20, 34); + this.Name = "MainForm"; + this.Text = "OnTopReplica"; + this.TopMost = true; + this.menuContext.ResumeLayout(false); + this.menuWindows.ResumeLayout(false); + this.menuOpacity.ResumeLayout(false); + this.menuResize.ResumeLayout(false); + this.menuLanguages.ResumeLayout(false); + this.menuFullscreenContext.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip menuContext; + private System.Windows.Forms.ToolStripMenuItem menuContextWindows; + private System.Windows.Forms.ToolStripMenuItem menuContextClose; + private System.Windows.Forms.ContextMenuStrip menuWindows; + private System.Windows.Forms.ToolStripMenuItem menuContextOpacity; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ContextMenuStrip menuOpacity; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4; + private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem reduceToIconToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem selectRegionToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem resizeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem noneToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem switchToWindowToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem dockToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem topLeftToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem topRightToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bottomLeftToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bottomRightToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip menuResize; + private System.Windows.Forms.ToolStripMenuItem doubleToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem fitToWindowToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem halfToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem quarterToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem fullscreenToolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem languageToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip menuLanguages; + private System.Windows.Forms.ToolStripMenuItem englishToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem italianoToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem cestinaToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem danskToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem chromeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem danskToolStripMenuItem1; + private System.Windows.Forms.ContextMenuStrip menuFullscreenContext; + private System.Windows.Forms.ToolStripMenuItem fullSelectWindowToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem fullOpacityToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem fullExitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem advancedToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem clickForwardingToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem clickThroughToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem groupSwitchModeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem enableClickthroughToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem centerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem disabledToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem restorePositionAndSizeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem espanolToolStripMenuItem; + } +} + diff --git a/OnTopReplica/MainForm.cs b/OnTopReplica/MainForm.cs new file mode 100644 index 0000000..c1e9a52 --- /dev/null +++ b/OnTopReplica/MainForm.cs @@ -0,0 +1,541 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using OnTopReplica.Properties; +using VistaControls.Dwm; +using VistaControls.TaskDialog; +using System.Collections.Generic; +using OnTopReplica.Native; +using OnTopReplica.Update; +using OnTopReplica.StartupOptions; +using OnTopReplica.WindowSeekers; + +namespace OnTopReplica { + + partial class MainForm : AspectRatioForm { + + //GUI elements + ThumbnailPanel _thumbnailPanel; + SidePanel _currentSidePanel = null; + Panel _sidePanelContainer; + + //Managers + BaseWindowSeeker _windowSeeker = new TaskWindowSeeker { + SkipNotVisibleWindows = true + }; + MessagePumpManager _msgPumpManager = new MessagePumpManager(); + UpdateManager _updateManager = new UpdateManager(); + + Options _startupOptions; + + public MainForm(Options startupOptions) { + _startupOptions = startupOptions; + + //WinForms init pass + InitializeComponent(); + KeepAspectRatio = false; + GlassEnabled = true; + + //Store default values + _nonClickThroughKey = TransparencyKey; + + //Thumbnail panel + _thumbnailPanel = new ThumbnailPanel { + Location = Point.Empty, + Anchor = AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right, + Size = ClientSize + }; + _thumbnailPanel.CloneClick += new EventHandler(Thumbnail_CloneClick); + Controls.Add(_thumbnailPanel); + + //Side panel + _sidePanelContainer = new Panel { + Location = new Point(ClientSize.Width, 0), + Anchor = AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom, + Enabled = false, + Visible = false, + Size = new Size(100, ClientSize.Height), + Padding = new Padding(4) + }; + Controls.Add(_sidePanelContainer); + + //Set native renderer on context menus + Asztal.Szótár.NativeToolStripRenderer.SetToolStripRenderer( + menuContext, menuWindows, menuOpacity, menuResize, menuLanguages, menuFullscreenContext + ); + + //Init message pump extensions + _msgPumpManager.Initialize(this); + + //Add hotkeys + var hotKeyMgr = _msgPumpManager.Get(); + hotKeyMgr.RegisterHotKey(Native.HotKeyModifiers.Control | Native.HotKeyModifiers.Shift, + Keys.O, new Native.HotKeyMethods.HotKeyHandler(HotKeyOpenHandler)); + hotKeyMgr.RegisterHotKey(Native.HotKeyModifiers.Control | Native.HotKeyModifiers.Shift, + Keys.C, new Native.HotKeyMethods.HotKeyHandler(HotKeyCloneHandler)); + + //Set to Key event preview + this.KeyPreview = true; + } + + delegate void GuiAction(); + + void UpdateManager_CheckCompleted(object sender, UpdateCheckCompletedEventArgs e) { + this.Invoke(new GuiAction(() => { + if (e.Success) { + _updateManager.HandleUpdateCheck(this, e.Information, false); + } + else { + Console.WriteLine("Failed to check for updates: {0}", e.Error); + } + })); + } + + #region Event override + + protected override CreateParams CreateParams { + get { + //Needed to hide caption, while keeping window title in task bar + var parms = base.CreateParams; + parms.Style &= ~0x00C00000; //WS_CAPTION + parms.Style &= 0x00040000; //WS_SIZEBOX + return parms; + } + } + + protected override void OnHandleCreated(EventArgs e){ + base.OnHandleCreated(e); + + _windowSeeker.OwnerHandle = this.Handle; + + //Platform specific form initialization + Program.Platform.InitForm(this); + } + + protected override void OnShown(EventArgs e) { + base.OnShown(e); + + //Apply startup options + _startupOptions.Apply(this); + + //Check for updates + _updateManager.UpdateCheckCompleted += new EventHandler(UpdateManager_CheckCompleted); + _updateManager.CheckForUpdate(); + } + + protected override void OnClosing(CancelEventArgs e) { + _msgPumpManager.Dispose(); + + base.OnClosing(e); + } + + Margins fullMargins = new Margins(-1); + + protected override void OnResize(EventArgs e) { + base.OnResize(e); + + this.GlassMargins = (_currentSidePanel != null) ? + new Margins(ClientSize.Width - _sidePanelContainer.Width, 0, 0, 0) : + fullMargins; + } + + protected override void OnResizeEnd(EventArgs e) { + base.OnResizeEnd(e); + + //If locked in position, move accordingly + if (PositionLock.HasValue) { + this.SetScreenPosition(PositionLock.Value); + } + } + + protected override void OnActivated(EventArgs e) { + base.OnActivated(e); + + //Deactivate click-through if form is reactivated + if (ClickThroughEnabled) { + ClickThroughEnabled = false; + } + + Program.Platform.RestoreForm(this); + } + + protected override void OnDeactivate(EventArgs e) { + base.OnDeactivate(e); + + //HACK: sometimes, even if TopMost is true, the window loses its "always on top" status. + // This is a fix attempt that probably won't work... + if (!IsFullscreen) { //fullscreen mode doesn't use TopMost + TopMost = false; + TopMost = true; + } + } + + protected override void OnMouseWheel(MouseEventArgs e) { + base.OnMouseWheel(e); + + if (!IsFullscreen) { + int change = (int)(e.Delta / 6.0); //assumes a mouse wheel "tick" is in the 80-120 range + AdjustSize(change); + } + } + + protected override void OnMouseDoubleClick(MouseEventArgs e) { + base.OnMouseDoubleClick(e); + + //This is handled by the WM_NCLBUTTONDBLCLK msg handler usually (because the GlassForm translates + //clicks on client to clicks on caption). But if fullscreen mode disables GlassForm dragging, we need + //this auxiliary handler to switch mode. + IsFullscreen = !IsFullscreen; + } + + protected override void OnMouseClick(MouseEventArgs e) { + base.OnMouseClick(e); + + //Same story as above (OnMouseDoubleClick) + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + OpenContextMenu(); + } + } + + protected override void WndProc(ref Message m) { + if (_msgPumpManager != null) { + if (_msgPumpManager.PumpMessage(ref m)) { + return; + } + } + + switch (m.Msg) { + case WM.NCRBUTTONUP: + //Open context menu if right button clicked on caption (i.e. all of the window area because of glass) + if (m.WParam.ToInt32() == HT.CAPTION) { + OpenContextMenu(); + + m.Result = IntPtr.Zero; + return; + } + break; + + case WM.NCLBUTTONDBLCLK: + //Toggle fullscreen mode if double click on caption (whole glass area) + if (m.WParam.ToInt32() == HT.CAPTION) { + IsFullscreen = !IsFullscreen; + + m.Result = IntPtr.Zero; + return; + } + break; + + case WM.NCHITTEST: + //Make transparent to hit-testing if in click through mode + if (ClickThroughEnabled && (ModifierKeys & Keys.Alt) != Keys.Alt) { + m.Result = (IntPtr)HT.TRANSPARENT; + return; + } + break; + } + + base.WndProc(ref m); + } + + #endregion + + const string Title = "OnTopReplica"; + + #region Keyboard event handling + + protected override void OnKeyUp(KeyEventArgs e) { + base.OnKeyUp(e); + + //ALT + if (e.Modifiers == Keys.Alt) { + if (e.KeyCode == Keys.Enter) { + e.Handled = true; + IsFullscreen = !IsFullscreen; + } + + else if (e.KeyCode == Keys.D1 || e.KeyCode == Keys.NumPad1) { + FitToThumbnail(0.25); + } + + else if (e.KeyCode == Keys.D2 || e.KeyCode == Keys.NumPad2) { + FitToThumbnail(0.5); + } + + else if (e.KeyCode == Keys.D3 || e.KeyCode == Keys.NumPad3 || e.KeyCode == Keys.D0 || e.KeyCode == Keys.NumPad0) { + FitToThumbnail(1.0); + } + + else if (e.KeyCode == Keys.D4 || e.KeyCode == Keys.NumPad4) { + FitToThumbnail(2.0); + } + } + + //ESCAPE + else if (e.KeyCode == Keys.Escape) { + +#if DEBUG + Console.WriteLine("Received ESCAPE"); +#endif + + //Disable click-through + if (ClickThroughEnabled) { + ClickThroughEnabled = false; + } + //Toggle fullscreen + else if (IsFullscreen) { + IsFullscreen = false; + } + //Disable click forwarding + else if (ClickForwardingEnabled) { + ClickForwardingEnabled = false; + } + } + } + + void HotKeyOpenHandler() { + if (IsFullscreen) + IsFullscreen = false; + + if (!Program.Platform.IsHidden(this)) { + Program.Platform.HideForm(this); + } + else { + EnsureMainFormVisible(); + } + } + + void HotKeyCloneHandler() { + var handle = Win32Helper.GetCurrentForegroundWindow(); + if (handle.Handle == this.Handle) + return; + + SetThumbnail(handle, null); + } + + #endregion + + #region Fullscreen + + bool _isFullscreen = false; + Point _preFullscreenLocation; + Size _preFullscreenSize; + FormBorderStyle _preFullscreenBorderStyle; + + public bool IsFullscreen { + get { + return _isFullscreen; + } + set { + if (IsFullscreen == value) + return; + if (value && !_thumbnailPanel.IsShowingThumbnail) + return; + + CloseSidePanel(); //on switch, always hide side panels + + //Location and size + if (value) { + _preFullscreenLocation = Location; + _preFullscreenSize = ClientSize; + _preFullscreenBorderStyle = FormBorderStyle; + + var currentScreen = Screen.FromControl(this); + FormBorderStyle = FormBorderStyle.None; + Size = currentScreen.WorkingArea.Size; + Location = currentScreen.WorkingArea.Location; + } + else { + FormBorderStyle = _preFullscreenBorderStyle; + Location = _preFullscreenLocation; + ClientSize = _preFullscreenSize; + RefreshAspectRatio(); + } + + //Common + GlassEnabled = !value; + TopMost = !value; + HandleMouseMove = !value; + + _isFullscreen = value; + + Program.Platform.OnFormStateChange(this); + } + } + + #endregion + + #region Thumbnail operation + + /// + /// Sets a new thumbnail. + /// + /// Handle to the window to clone. + /// Region of the window to clone. + public void SetThumbnail(WindowHandle handle, Rectangle? region) { + try { + CurrentThumbnailWindowHandle = handle; + _thumbnailPanel.SetThumbnailHandle(handle); + +#if DEBUG + string windowClass = WindowMethods.GetWindowClass(handle.Handle); + Console.WriteLine("Cloning window HWND {0} of class {1}.", handle.Handle, windowClass); +#endif + + if (region.HasValue) + _thumbnailPanel.SelectedRegion = region.Value; + else + _thumbnailPanel.ConstrainToRegion = false; + + //Set aspect ratio (this will resize the form), do not refresh if in fullscreen + SetAspectRatio(_thumbnailPanel.ThumbnailOriginalSize, !IsFullscreen); + } + catch (Exception ex) { + ThumbnailError(ex, false, Strings.ErrorUnableToCreateThumbnail); + } + } + + /// + /// Enables group mode on a list of window handles. + /// + /// List of window handles. + public void SetThumbnailGroup(IList handles) { + if (handles.Count == 0) + return; + + //At last one thumbnail + SetThumbnail(handles[0], null); + + //Handle if no real group + if (handles.Count == 1) + return; + + CurrentThumbnailWindowHandle = null; + _msgPumpManager.Get().EnableGroupMode(handles); + } + + /// + /// Disables the cloned thumbnail. + /// + public void UnsetThumbnail() { + //Unset handle + CurrentThumbnailWindowHandle = null; + _thumbnailPanel.UnsetThumbnail(); + + //Disable aspect ratio + KeepAspectRatio = false; + } + + /// + /// Gets or sets the region displayed of the current thumbnail. + /// + public Rectangle? SelectedThumbnailRegion { + get { + if (!_thumbnailPanel.IsShowingThumbnail || !_thumbnailPanel.ConstrainToRegion) + return null; + + return _thumbnailPanel.SelectedRegion; + } + set { + if (!_thumbnailPanel.IsShowingThumbnail) + return; + + if (value.HasValue) { + _thumbnailPanel.SelectedRegion = value.Value; + SetAspectRatio(value.Value.Size, true); + } + else { + _thumbnailPanel.ConstrainToRegion = false; + SetAspectRatio(_thumbnailPanel.ThumbnailOriginalSize, true); + } + + FixPositionAndSize(); + } + } + + const int FixMargin = 10; + + /// + /// Fixes the form's position and size, ensuring it is fully displayed in the current screen. + /// + private void FixPositionAndSize() { + var screen = Screen.FromControl(this); + + if (Width > screen.WorkingArea.Width) { + Width = screen.WorkingArea.Width - FixMargin; + } + if (Height > screen.WorkingArea.Height) { + Height = screen.WorkingArea.Height - FixMargin; + } + if (Location.X + Width > screen.WorkingArea.Right) { + Location = new Point(screen.WorkingArea.Right - Width - FixMargin, Location.Y); + } + if (Location.Y + Height > screen.WorkingArea.Bottom) { + Location = new Point(Location.X, screen.WorkingArea.Bottom - Height - FixMargin); + } + } + + private void ThumbnailError(Exception ex, bool suppress, string title) { + if (!suppress) { + ShowErrorDialog(title, Strings.ErrorGenericThumbnailHandleError, ex.Message); + } + + UnsetThumbnail(); + } + + /// Automatically sizes the window in order to accomodate the thumbnail p times. + /// Scale of the thumbnail to consider. + private void FitToThumbnail(double p) { + try { + Size originalSize = _thumbnailPanel.ThumbnailOriginalSize; + Size fittedSize = new Size((int)(originalSize.Width * p), (int)(originalSize.Height * p)); + ClientSize = fittedSize; + } + catch (Exception ex) { + ThumbnailError(ex, false, Strings.ErrorUnableToFit); + } + } + + #endregion + + #region Accessors + + /// + /// Gets the form's thumbnail panel. + /// + public ThumbnailPanel ThumbnailPanel { + get { + return _thumbnailPanel; + } + } + + /// + /// Gets the form's message pump manager. + /// + public MessagePumpManager MessagePumpManager { + get { + return _msgPumpManager; + } + } + + /// + /// Gets the form's window list drop down menu. + /// + public ContextMenuStrip MenuWindows { + get { + return menuWindows; + } + } + + /// + /// Retrieves the window handle of the currently cloned thumbnail. + /// + public WindowHandle CurrentThumbnailWindowHandle { + get; + private set; + } + + #endregion + + } +} diff --git a/OnTopReplica/MainForm.resx b/OnTopReplica/MainForm.resx new file mode 100644 index 0000000..e1539d6 --- /dev/null +++ b/OnTopReplica/MainForm.resx @@ -0,0 +1,324 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 142, 17 + + + 275, 17 + + + 578, 17 + + + 695, 17 + + + 399, 17 + + + + + AAABAAIAMDAAAAEAIACoJQAAJgAAABAQAAABACAAaAQAAM4lAAAoAAAAMAAAAGAAAAABACAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAFwAAACAAAAAnAAAAKwAAACwAAAAsAAAALAAA + ACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAA + ACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAA + ACwAAAAsAAAAKwAAACcAAAAfAAAAFwAAAA0AAAAGAAAABgAAAA4AAAAdAAAALQAAAD0AAABIAAAATgAA + AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAA + AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAA + AE8AAABPAAAATwAAAE8AAABPAAAATgAAAEgAAAA9AAAALQAAABwAAAANAAAACwAAABkAAAAwAAAARwAA + AFsAAABpAAAAcAAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcAAAAGkAAABdAAAASAAAAC8AAAAYAAAAEQAA + ACQAAABBAAAAbAoKC6QYGBiyFhcXtBcXF7QXFxe0FxcXtBcXF7UXFxi0FxcYtBcYGLQXGBi0FxgYtBgY + GLQXGBi0FxcYtBcXF7QXFxe0FxcXtBcXF7QXFxe0FxcXtRcXF7UXFxe1FxcXtBcXF7QXFxe0FxcXtBYX + F7QWFhe0FhYXtBYWFrQWFhe0FxcXtBcXF7QXFxe0FxcXtBcXF7QXFxe0GBgYtQEBAqYAAAB5AAAAXwAA + AEEAAAAkAAAAFwAAACwAAABdOTk3u46IgKWTjIKUkYiAk4yEepKHf3WQhHtyj4B5b45+eG2NfHVrjHly + Z4t5cmeLeXFni3huZot5b2aLe3JoioB3bIuDe3KMiH92jIyCeIyMhXqNjYZ7jo2HfI+Ph36PkId/j5GI + f4+SiX+PkomAj5OLgJCTjIKQk4yCkJSMgpCTi4GQj4h+joyEeo2LgniMjIN5jY+HfY6RiYCPkoqAjn55 + c7IXFxe1AAAAcQAAAFAAAAAuAAAAGwAAADAJCQmJkoyGrJ6ViXCypp2Fv7OskL2yq5G6r6ePt6yljbWr + o4yzqqGLsaefirClnYmupJ2JrqOdia6inYqvpJ2JsqafibSqo4m4raeKu7Gqiryyq4u8s6uLu7OsjLyz + rYy8s62MvbOujb20ro29ta6NvbWujry2ro67tq6OvLaujr23r468ta6OurOsjLiyq4u3sayLubOvjLu0 + so20ramGnpWNdJ+ViGxnZWG9AAAAiQAAAFYAAAAzAAAAHAAAADIREhKSqaGapbK4splz3ePrceDn8nPg + 5/N14OfzduDm83nh5fN84uXyf+Lk8oLj5PKF4+Lyh+Pi8onk4PKM5d/yj+Xf8pPm3/KX6ODynOni8qDq + 4/Kk7OLyqO7i863w4vKy8+Hytvbh87z44fPE+uHzzvvk89776vPs+/Pz+fv58//7/fP/+/7z//v98v/7 + 9/L8++3y9/vi8/b70fPz+b7u1da5u6mim3V/fHe1AAAAkQAAAFkAAAA2AAAAHQAAADMQEBCRsKiirMLO + ybBI3eT/PNnf/z3Z2v8+2df/P9nV/0HZ0/9G2tL/StvQ/0vbzv9O28v/UNzJ/1Pcx/9W3sX/WuHD/13k + wv9i6ML/aO/E/3D1x/99+s7/jP3W/53/4P+y/+r/xf/x/9r/+f/v//3/9//8//n//P/6//r/8v/r/+H/ + 3v+//dr/t/3Z/8L+zv/K/7H/1f2b/9r8jv/X/Yz/0Oa+1r2zsYJ+e3e4AAAAkQAAAFoAAAA3AAAAHQAA + ADMPDw+RtKumr8bSz7Y809n/L9DT/zLQ0f8zz8//NNDL/zfQyf860Mj/PNHF/z3Sw/9A1cH/RdnC/0re + xP9S5cj/W+zN/2by0/9x+Nj/e/3d/4L/4P+L/+T/mf/o/6n/6/+5/+z/xP/n/8f/2/+//8z/tPy//6X5 + tf+Z96//jPar/3j1rP9z97j/gvrD/4X9yf+Q/cv/qvu5/7jtkf+112f/z9mt2cW9u4iAfXm5AAAAkQAA + AFoAAAA3AAAAHQAAADMPDw+Rta6osMfT0Lc40tX/LM/Q/zHQz/8y0c7/NdTO/znXz/8/29H/ROHV/0zo + 2P9T7tz/WvTg/2D54v9l++H/avzf/27+3f90/9v/ev/a/4H/1/+K/tT/kPzL/5H4v/+N87D/he6f/4Dp + k/+B5o3/huWK/4/liP+W5of/muaG/5zihv+e2ob/pNeJ/6ncjP+s5pD/pO6U/5/wlv+h4oX/ytu32si/ + vYuCf3u6AAAAkQAAAFoAAAA2AAAAHQAAADMPDw+Rt6+qscnV0bk+2Nf/M9nV/zrd2P9A4tz/Rejf/0jq + 4P9J6tv/TOrW/07o0P9P5sn/UefD/1Xqwf9c8ML/ZPXC/2v3wP9v8rn/cOqv/27iof9r25X/a9mN/3TZ + jP9924v/gtuH/4fbgv+I2n7/itR6/4nNdP+HxW3/iL5o/4y4YP+St1X/k7ZL/5S1Tv+ZtlX/pL5d/67L + Yv+x123/0uC828rCwI2DgHy7AAAAkAAAAFoAAAA2AAAAHQAAADMPDw+RuLCss8rX07pG4dz/Od7W/zzb + 0f8/2s3/P9jI/0DUwv8/0Ln/Q9G2/0rXuP9S3rr/WuS9/1/kuf9f3rD/X9ai/1/Pl/9hzJD/Zc+M/2zT + if9x1oj/d9eE/37Vg/+D0X//fshz/3m+aP95uGP/e7Nf/3+wXP+FsFb/jLVR/4+8Uv+QwFv/k8Rk/5zF + Zf+hw2D/pMBY/6i7Uv+ps0D/0M+i3M3Hx5CEgX68AAAAkAAAAFoAAAA2AAAAHQAAADMPDw+RubKutMvW + 0rs/ysH/MsS3/zbDtP87x7b/Qc27/0bVwP9L2b//Ttq7/1HWs/9T0Kn/Vcqh/1jImv9dy5X/Y9CS/2nT + kP9u1Yz/cNOG/3DOfv9wx3X/cMJv/3vDcf+GxnH/gsFl/4G/Xv+Iv17/jMNc/5DHXP+QzGH/jM9u/4vL + c/+OwWz/j7lg/5GyVP+SqEn/lqJB/5icOv+WkSr/yMOb3NDMypGFgn+9AAAAkAAAAFoAAAA2AAAAHQAA + ADIPDw+RurOvtszW0bxCxbj/OMa2/0DNu/9F0r3/SdS9/0rSt/9LzKz/TMik/1HLoP9a0aH/Y9ih/2vc + nv9w3Jf/cdqP/3PXiP931YH/etV8/37Vdv+A1HD/hdNq/5XUbv+Z027/icll/4HGYv+Dx1z/hcJU/4K3 + VP99qVX/fJ1J/3yTPP97izT/fIYv/4CDK/+EgSj/iIAn/4uBJv+MfBr/xr2W3dPPzZOHhIG9AAAAkAAA + AFoAAAA2AAAAHQAAADIPDw+RvLWwts7Z071K0L7/Psq0/0LKr/9HzK3/T9Ox/1jdtv9f5bf/Y+q0/2rt + r/9y7Kn/eeqj/4Hmnf+C4pT/gNyK/3/Tfv99zHP/e8Rp/3e7Yf9ysl3/b69h/3e2cf9zuHD/aa9Z/3Gn + Qv94nDT/dI4v/3KGKv90gyb/doIk/3d/I/94fCH/enog/3x4IP+AeCD/g3kg/4d6Iv+Idhf/xLuW3tbR + 0JWHhIG+AAAAkAAAAFoAAAA2AAAAHQAAADIPDw+RvLWxuM/Z075W173/Utq7/1riv/9h6cL/aOzC/23t + v/9s6bP/aeCl/2nVl/9pzIz/bcSB/3C8d/9ts23/Z6lj/2SiXf9hnVv/XZpb/1yZXP9cnFv/ZaVZ/3aw + U/94pjv/cY8n/2+EJP9sgCX/bH4k/3B+I/92gCL/en8f/3p7Hv95eB7/eXcd/3t1Hv9+dR7/gHYf/4R3 + H/+FchX/w7qW3tfT0peHhYK/AAAAkAAAAFoAAAA2AAAAHQAAADIPDw+RvbazuNHb1b9k3r//WNez/1bP + qP9Tx5z/U7+U/1O5jv9Ss4T/UKp2/1Cha/9Tnmb/Wp5j/2ChZP9gn2L/XJld/1yYXP9cmFf/XphQ/2Sa + R/9nmDr/cJkv/32dKf92jyT/an0h/2p9If9ufyD/cn4e/3V+Hf98gB3/fX8c/3t6HP95dhz/eHQb/3lz + HP97cxz/fXQc/4J0Hf+CbxL/wrmV3tjU1JiIhoPAAAAAkAAAAFoAAAA2AAAAHQAAADIPDw+Qvbe1udDY + 0sBPt5b/QauH/0Khff9CnXT/RZ1y/0iecP9Lnm3/S5pn/0yVYv9QlGD/WZlf/2KhXv9ln1n/YplS/2WZ + TP9nmEP/aJQ5/2aNLP9mhST/dI0i/3+WI/9yhx//aXkc/2x7G/9xfhr/dYEa/3qAGv+Agxr/f4AZ/3x7 + Gv95dhr/eHIZ/3hxGv95cRn/fHEa/4ByG/+AbBD/wbiU39nW1pqIhoPAAAAAkAAAAFoAAAA2AAAAHQAA + ADIPDw+Qvrq2utDW0MFJo4D/P5xz/0KVbP9BkWb/RJJl/0eVZ/9LmGb/TZZh/0+TW/9UlFf/X5pU/2ui + U/9uoUz/bZtD/2+YO/9oji//ZIQl/2Z/IP9ugB3/e40e/32QHv9xgRv/a3kY/298F/90gRf/eYMY/36D + F/+Ehhj/g4IY/358GP96dhj/d3IY/3dwGP94bxj/em8Y/31wGf99ag7/wbiU4NzY15uJh4TBAAAAkAAA + AFoAAAA2AAAAHQAAADIPDw6Qv7q3u9DWz8FJnnT/QJdq/0KPZP9Di1//RYxd/0mQXP9Ok1r/UJNW/1OS + Uf9ak0z/aJxI/3ilRP96oT3/b5Qx/2yMKP9pgyH/a4Ac/219Gf9wfhj/eosa/3yOGv9xfxf/bnwW/3J/ + Ff96hBX/fYMW/4GFFv+Hhxb/hYMW/398Ff97dRb/eHIW/3dvFv93bhb/eG4W/3xuF/97aAz/wLiU4N3Z + 2JuJh4TBAAAAkAAAAFoAAAA2AAAAHQAAADIPDg6Qv7u4u9DWz8JLmm3/QpRh/0SNWv9Fh1P/SYhR/0yL + T/9Rjk7/V5RK/12XRv9mmUD/dqI8/4GmNf93mCz/booj/3OKHv9yhBr/cH8V/257FP9ygBb/fY8Y/36P + GP9ygBT/cn4U/3iDFP+AiBT/foUT/4aIFP+IiBT/hYMU/398E/98dhP/eXMU/3hwFP93bRX/d20V/3tt + Ff94Zgr/wLeT4N3Z2p2KiIXBAAAAkAAAAFoAAAA2AAAAHQAAADIODg6QwLy5vNHWz8JOmGP/RpNW/0eK + UP9Igkj/SoJG/1CIQ/9blEL/ZJs+/2qfO/9zoTX/eJ0s/32aJP95kiD/doob/3uMGf92hRb/cYAU/258 + Ev92hRP/g5MV/4WSFf92gxL/eIMS/3+HEv+EjBL/gYcR/4mKEf+IiRL/hIMS/4B8EP98dxH/e3QS/3lx + E/93bhP/eG0T/3lsFP93ZQn/wLeT4d7a252KiIXCAAAAkAAAAFoAAAA2AAAAHQAAADIPDg6QwLy5vNHW + zcNRlFj/SZJN/0yIR/9MgD//VYs8/2CXOv9lmDf/bqU1/3CgL/9tjiX/d5Eg/4OaHv9/khz/e4sX/4KN + Fv96hhT/dIAS/3N/Ef9/ixP/i5kU/4qVFP98hhH/fogR/4WNEf+GjRH/hYkO/4mLD/+IiA//hIEQ/398 + D/99eA//fXYQ/3xzEf96bxL/eW0S/3ptEv93Zgf/wLiS4d7a256LiIbCAAAAkAAAAFoAAAA2AAAAHQAA + ADIPDg6QwLy6vNLVzcNUklD/S5BD/1OOP/9elTr/YZQ0/2WYMf9urC//apgn/2WCIP9wiR7/f5Uc/4qb + Gv+Fkhr/gIsV/4SNE/98hhL/eIEP/3mDEP+GkhL/kp4S/4uWEf+Aig//gosO/4qREP+IjQ//iYsN/4uM + Df+Ihgz/hIEO/4B7Df9/eA3/gXgP/4B1D/9+chD/fW4R/3xtEf95aAb/wbmS4d/c3J+LiYbCAAAAjwAA + AFoAAAA2AAAAHQAAADIPDw+Rwby6vdLVzMRVkUf/WZ89/2WjOv9gjzD/ZKAu/2muLf9ljST/ZH0f/2uE + Hf93jRv/hZYY/4+bF/+Ikhr/gooS/4OMEP99hg7/eoIO/36HDv+NlxD/l6AQ/42VD/+FjQ3/h44N/4+U + D/+IjA7/jYwM/46KDP+JhAr/gn8M/396C/+BeAz/g3gN/4J1Df+Acw7/fm8P/31uD/98awT/wruS4d/c + 3J+LiYbDAAAAkAAAAFoAAAA2AAAAHQAAADIPDw+RwLy7vtPWzMRjo0L/YaY2/1+XMf9lri7/YqQp/1x+ + If9lgB7/aoIc/2+FGv99jRf/i5YV/5KaFv+JkBj/gogP/4OLDf9/hgz/fIML/4OKDP+Umw7/nKEP/42T + Df+Ijgz/jJEM/5CWDf+Liwz/kY4K/4+KC/+Jgwn/gn0K/4B5Cv+CeAv/g3gM/4N2Df+Acw3/f28N/35v + Df9+bgP/w72S4d7c3KCLiYbDAAAAjwAAAFoAAAA2AAAAHQAAADIPDw+Rwr27vdTYzMRfmTv/W6Ew/2a+ + M/9emCj/WHUf/197Hf9ogxv/bIIY/3KFF/+AjhT/jZcT/5KZFv+IjhX/gogM/4WJDP+AhQr/f4UJ/4iO + C/+ang3/naEN/42SC/+LkAv/kZUL/5KUC/+OjAn/lI8J/4+JCf+Jgwj/g30J/4F5CP+DeQj/g3gK/4J2 + C/9/cgz/fm8L/4BxDP+AcQL/xL6R4d/b3KCLiIXEAAAAjwAAAFoAAAA2AAAAHQAAADIPDw+Qwr28vtPU + y8Rgojn/YcEx/1uXKf9Zdx//W3gb/2F8Gf9rgxf/bYEV/3WFE/+DjhL/j5YP/5KXE/+HjBL/g4gK/4WJ + Cf+ChQj/gYYI/46SCP+eoQv/naAL/42RCf+OkQr/lpgK/5ORCf+Sjgj/lI8I/4+JCP+Jggf/g30G/4F6 + Bv+DeQf/gncJ/4F0Cv9+cQr/fW8J/4ByC/+BcwD/xL+R4t3a26GKiIXEAAAAjwAAAFoAAAA2AAAAHQAA + ADIPDw+Qwby8v9XczMVhuDf/VpEl/1qFIv9bfBz/XHcZ/2J7Fv9rgRT/b4AR/3eFEP+FjRD/jpUL/5GV + EP+GihD/g4YH/4WIB/+ChAf/hIYH/5SVB/+hogr/nJ0J/5GRB/+Tkgj/mZgJ/5KPCP+VkAf/lY8H/4+I + B/+Jggb/hH0F/4J6Bf+CeAb/gnYH/350CP97cAj/e3AI/4F0Cv+BdQD/xL+R4t3Y26KKiIXEAAAAjwAA + AFoAAAA2AAAAHQAAADIPDw+Qwb69v9TWy8ZZhCz/Voof/1yJIP9cexn/XHYW/2N5FP9sfxH/bn8O/3mE + Df+EjQz/jZMI/5GUEP+FiQ3/hIUF/4aGBf+ChAb/hocF/5iYBv+jpAb/m5oH/5ORB/+WlQb/mZcH/5KP + Bf+XkQb/lY4F/46HBv+IgQX/hHwE/4N7BP+CeAX/f3UG/3xyBv96bwb/e3EG/4J2Cf+CdwD/xL+Q4tzZ + 26KKiIXEAAAAjwAAAFoAAAA2AAAAHQAAADIPDw6Qw769v9TVy8ZXgin/V4sc/1yKHv9behj/XXQV/2N3 + Ev9rfA//b30N/3mCDP+Eiwv/jJEI/5CSEv+Ehgz/g4QD/4WFBf+CgwX/iokF/5uaBv+jpAX/mJYF/5OQ + Bv+Ylgb/lpMG/5SPBf+YkQb/k4sG/42EBv+HfwT/hHwD/4N7BP+AeAX/fXQE/3pwBf93bgb/enEG/4B2 + CP+CdwD/xMCP49zZ26OKiIXFAAAAjwAAAFoAAAA2AAAAHQAAADIPDw6Qw7++wNXVzMZYgCj/Voob/12K + G/9cehb/XXIT/2J1EP9rew7/bXwM/3iBC/+Eigr/io8H/46RE/+ChAn/gYID/4ODBf+Cggb/jYsF/52c + Bf+iogb/lZMF/5OQBv+YlQb/k48G/5WOBv+Xjwb/kIkG/4uCBv+FfQT/g3wD/4N6Bf9/dQX/enEE/3Vu + BP90bgX/eHEG/393CP+BeQD/xMGO49vZ26SKiIXFAAAAjwAAAFoAAAA2AAAAHQAAADIPDg6RxMC+wNXW + zMZZfib/V4kY/16KGf9behX/W3AS/2JzD/9peQz/bHoL/3eACf+DiQj/io0H/46QFf+Aggj/gIED/4GC + BP+BgQX/j40F/5+dBv+hngX/lI8G/5WQBv+YkwX/kosF/5aOBf+VjAb/j4YF/4iABf+EewP/g3sE/4J4 + Bf9+dAT/d3AE/3JtBP9ybQT/d3IF/3x3B/+AeQD/wb6N49vY26SJiIXGAAAAjwAAAFoAAAA2AAAAHQAA + ADIODg6QxMC/wNbWzMZZfCP/WIYV/16KGP9ceRT/XG8Q/2FxDf9odwz/bXgK/3Z/CP+Bhwj/iYsH/42O + Ff9+gAf/f4AE/3+AA/+CgQT/ko8G/6CeBv+emQb/kowH/5WPBv+VkAX/kYkG/5eMBv+TiQX/jYMF/4d+ + BP+DegP/g3kE/4B2BP98cgT/dW4E/3BrA/9xbQT/dXEF/3t4Bv97dwD/vbqN49za26WJiIXGAAAAjwAA + AFoAAAA2AAAAHQAAADIODg6QxcG/wNbXzcdXeiH/V4QT/16JFv9deRL/W24N/19wDP9ndAv/bHYJ/3V9 + B/+Bhgf/iIkH/4yNFv98fgX/fn4D/35+A/+DgAT/lJEF/6GeBv+alAb/kYkH/5WOBf+SiwX/kIcH/5aK + Bv+QhQX/i4EF/4Z8BP+CeAX/gXYF/35zBP96cAT/c2wE/29qA/9xbQP/dHEE/3t6Bf9zcAD/uriN493a + 26WKiIXGAAAAjwAAAFoAAAA2AAAAHQAAADIPDg6Qx8PBwdbXzcdWeB//V4IS/16IE/9ceRD/WmwN/15u + C/9lcgn/anUH/3V8B/+BhAb/hocG/4uLGP96ewX/fH0E/3x8A/+EgQT/lZMF/6GdBv+Vjwb/kIgF/5ON + Bf+PhwX/kYYG/5OHBf+MggX/ioAE/4R5BP+BdwX/gHUE/3xyBP92bgT/cGsE/29qA/9wbAP/c3ED/3l4 + Bf9taQD/ubWN493a26WKiIbGAAAAjwAAAFoAAAA2AAAAHQAAADIODg6Qx8PCwdjYzsdWdR//VX8P/12G + Ef9cdw7/WWoN/15sCv9jcQj/anMG/3R7Bv9/gwX/hIUG/4mJGf94eAP/ensE/3p6BP+FggT/l5QE/56b + Bf+PigX/j4YG/5CJBf+MgwX/kYUG/5CDBf+KfwT/iH8D/4F3Bf+AdQT/fnME/3pwBP9zbAT/cGoD/29q + A/9vbAP/dHID/3RzBf9nYgD/trOM493a3KaKiIbGAAAAjwAAAFoAAAA2AAAAHQAAADIODg6Qx8TDwdjY + zsdVch3/U3oN/1yEEP9cdg3/WWkL/11rCP9icAf/aXEG/3N5Bv9+gQT/goQH/4aHGf91dgL/eHgF/3l4 + BP+GgwP/mZQF/5uXBf+MhQX/jYYF/42FBP+JgAT/j4ME/4uABP+JfgT/hXsE/390BP9/dAT/fHIE/3du + BP9yawP/b2oD/29rA/9vbAP/c3MD/25tA/9hXQD/tLKM493a3KaKiIbGAAAAjwAAAFoAAAA2AAAAHQAA + ADIODg6QycXEwdnZz8dUbxv/UnYM/1uBDv9cdQv/WWkJ/1tpB/9gbgX/aHEF/3J3Bv97fgP/gIII/4SF + GP9ycwL/dnYF/3h3BP+IhAT/mJQF/5aSBP+IggX/ioMF/4iAA/+IfwT/jYEE/4d9BP+HfgT/gXgE/39z + BP99cgT/enAE/3RtBP9wagP/bmoD/25rA/9wbQP/cXED/2lnAv9cWAD/s7CL497a3KaKiIbGAAAAjwAA + AFoAAAA2AAAAHQAAADIODg6QysfFwdna0MhTbRn/UXIL/1t+Df9bdAr/WGgI/1pnB/9fbAb/Zm8F/3F2 + BP95fAL/f4EK/4KCFv9wcQL/dXQE/3d2BP+JhQT/mJQF/5GMBf+GfwX/hn8E/4N7BP+IfgT/iX4E/4V7 + A/+GfAT/fXQE/31yBP97cQT/d24E/3FrA/9uaQL/bWoC/21qAv9xbwP/bWwD/2RiA/9XVAD/sa6L5N/b + 3KiKiIbHAAAAjwAAAFoAAAA2AAAAGwAAADEODg6PysfFwdjYzsZRaRb/TW0G/1d6Cf9YcQb/VGUE/1dk + BP9caAP/ZGwB/25zAP92eQD/fX8K/31+Ev9sbQD/cXAB/3Z1Af+IhQL/lZEC/4uEAf+BewL/f3gB/393 + Av+EewH/hHoB/4N4Af+CeAH/eG8B/3lvAv93bgH/cmsC/21oAP9rZwD/a2cA/2tpAP9ubQD/ZmUA/2Bd + AP9STgD/rquJ497b3KeKiIbHAAAAjQAAAFgAAAA1AAAAGAAAACwQDw+MysbEv9LRx71WbR3+U3AP/1x7 + EP9ddQ7/WmoN/11pDv9jbQz/anEK/3N4C/96fAr/gYMX/36BGv9wcQj/dXQL/3t7DP+Niw3/l5QN/4qE + Df+Efg3/f3kM/4N8DP+IgAv/hnwM/4h/DP+CeQz/fXQM/310DP95cwz/dW8L/3JtCv9xbQn/cW0K/3Jx + Cv9xcAr/aWgL/2RiCv9WUgf/qaaH2tjV1aGMiojGAAAAiQAAAFIAAAAwAAAAFAAAACQLCwuCv7y4v9XR + y6PMzcDB0tTGzNTWx87V1sfO1NXHztXVx87V1cfP1tbHztjXx87Y18fO2dfIztfWx8zV1MXL1dPDytXU + w8nX1cPJ2NbDydbUw8jW08PI1dPDydbTw8nX1MPJ1tPDytfUxMrW1MTK1tPDytbTxMvW08TL1tTFy9bT + xcvV0sPL1NHDzNPRwszS0cLM0c/CzNHOwszJx7vFxsK7sM3IxJmEgoDGAAAAewAAAEYAAAAoAAAADgAA + ABoAAABTaWhmx9jUzrLg3Nmr4t3br+Ld26/j3tuv497br+Pf26/i39uw4d/br+He26/h3duv4Nvart7a + 2Kzc2Nap29bTqNnV0qfY1NGn2NPRp9jV0abZ1NGm2tTRpdnV0abZ1NKn2dTTqNrW1Kjb1tSo29bUqdzW + 1and2Nap3dnWqd3X1qra1tSq2NTTrNfU0qzX09Ks19PSrNfT0q3W0c+r0MvHp766tr0xMTC4AAAAVwAA + ADUAAAAeAAAACQAAABIAAAAnAAAAZzMzMqtPTk20TEtKs0tLSrRMS0q0TEtKtExLSrRMS0q0S0tKtEtL + SrRLS0q0S0tKs0tKSbNKSUmzS0pIs0pKSbNKSkizSkpIs0pKSLNLSUizS0pJsktKSbJLSkmzS0pJs0tK + SbNLSkmzTEpJs0xKSbNMSkmzTEpJs0xKSbNLSkmzS0pJs0tKSbNLSkmzS0pJs0tJSbNLSkm0TUxLth4d + HaMAAABeAAAAOAAAACUAAAATAAAABQAAAAsAAAAWAAAAIQAAAC0AAAA3AAAAOgAAADoAAAA6AAAAOgAA + ADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADoAAAA7AAAAOgAAADMAAAArAAAAIQAAABUAAAALAAAAAgAAAAQAAAAJAAAADgAAABMAAAAXAAAAGQAA + ABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAA + ABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAA + ABkAAAAZAAAAGQAAABkAAAAZAAAAGAAAABcAAAATAAAADgAAAAgAAAAEAAAAAAAAAAEAAAACAAAABAAA + AAcAAAAJAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAkAAAAHAAAABAAAAAIAAAABAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBIAAAAAAAPIEKAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ABEAAABAAAAAVwAAAFUAAABVAAAAVQAAAFUAAABVAAAAVQAAAFUAAABVAAAAVQAAAFUAAABXAAAATAAA + AB8EBAQ+VlRQlXNybqFqamaeZ2dinWZkYJxqaGOdcG5pnXFwa550cm2feXRxn350c597cW+efHVwnU1K + RZgAAQFUFw4NUI+5uMNY4+b0Xt7b9Gbh2PRv59bzf/La9JP84vSx/+r0z//p9Nv/4vTP/930yv/Z9N// + ufKnp5OvAwEEZRkPDk6Eu7nPLtvX/zrbz/9F4Mn/VOrF/2Xuvf9y667/guWe/4nciP+K1Hf/jM5v/5bO + b/+v2HT/paeTuwQCBmIZDxBPirmy0D/Wwf9Q273/W9yt/2vZm/9x0IT/csZw/33Eav99tlT/fqdG/4Cb + QP+FjjH/mZAz/6SfjL0FBQhjGBAST5G6rtFOyqT/VsCS/1mze/9mrGv/ZqFZ/2WXRP9zmDT/bYIh/3V9 + HP96eBn/d28X/4p7Jf+kno3ABQYJYxkTFlCOq5vTPpFi/0eLV/9WlE//b51B/26NKv9tgBn/d4YX/3N+ + Ff+ChhX/gH0W/3ZuFP+FdyH/pZ+OwQYGCWMZFBhQkKiR1EuNRv9dlDr/bZgu/4CWHv98iBT/eoUR/4SQ + Ev+CihD/iYoP/4F9D/97cQ//hHYc/6Wgj8MGBgljGBQZUJasidReozD/Y40i/3OHGP+MlRX/gYgO/4iP + Df+RmA3/jZEM/42JCv+Cewr/gXQK/4l6F/+noo/EBgYJYxgUGlCXroXVWI8f/2J4Ff97iBD/jZIO/4OF + CP+TlQf/mJkI/5WSCP+PiAb/g3oF/31yBf+KfhP/p6OOxQYGCWMZFhtQlaOB1VeCFf9idRD/eoQK/4qM + C/+CggT/mJYF/5iVBv+WkAX/jIQF/4J4BP92bgP/h4AR/6ajjcYGBgljGRYcUJaif9ZYgA//YHAM/3d/ + CP+Ghwv/gIAE/5mVBv+UjQb/kogG/4h9BP99cwT/cGsB/4B+D/+joYzGBgYKYxoXHVCWoH7XU3cG/1tq + Bf9yeAL/fX4I/317AP+TjgH/ioIB/4p+Af+AdQD/dWwA/21pAP90cgn/oJ2MyAcHCmQaGB1RoaiK1maC + HP9teh3/gYYb/4mKIf+Nixr/m5Yb/5KKG/+Uihv/i4Eb/4F7Gv9+exf/fHoi/6WilMcHBwpjBgYHMXp5 + dKCcnZG2mZiNtJqZjbWZl4yzmJaIsJiWiLCYlYiwmZaJsZmVirGYlYqylpSJs5mXjbRqaGadAQEBPQAA + AAUAAAAeAAAAKgAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAArAAAAIwAA + AAoAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAA + rEEAAKxB + + + \ No newline at end of file diff --git a/OnTopReplica/MainForm_ChildForms.cs b/OnTopReplica/MainForm_ChildForms.cs new file mode 100644 index 0000000..0e43ad9 --- /dev/null +++ b/OnTopReplica/MainForm_ChildForms.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.Drawing; + +namespace OnTopReplica { + partial class MainForm { + + EventHandler RequestClosingHandler; + + const int SidePanelMargin = 1; + + /// + /// Opens a new side panel. + /// + /// The side panel to embed. + public void SetSidePanel(SidePanel panel) { + if (_currentSidePanel != null) { + CloseSidePanel(); + } + + _currentSidePanel = panel; + _currentSidePanel.OnFirstShown(this); + + //Add and show + _sidePanelContainer.Controls.Add(panel); + _sidePanelContainer.Visible = _sidePanelContainer.Enabled = true; + panel.Show(); + + int intHorzMargin = panel.Margin.Horizontal + _sidePanelContainer.Padding.Horizontal; //internal margins for sidepanel + int intVertMargin = panel.Margin.Vertical + _sidePanelContainer.Padding.Vertical; + + //Resize container + _sidePanelContainer.ClientSize = new Size( + panel.MinimumSize.Width + intHorzMargin, + ClientSize.Height + ); + + int rightHorzMargin = _sidePanelContainer.Width + SidePanelMargin; //horz margin between the two controls + + //Resize rest + MinimumSize = new Size( + 20 + panel.MinimumSize.Width + SidePanelMargin + intHorzMargin, + panel.MinimumSize.Height + intVertMargin + ); + ClientSize = new Size( + ClientSize.Width + rightHorzMargin, + ClientSize.Height + ); + ExtraPadding = new Padding(0, 0, rightHorzMargin, 0); + _thumbnailPanel.Size = new Size( + ClientSize.Width - rightHorzMargin, + ClientSize.Height + ); + _sidePanelContainer.Location = new Point( + ClientSize.Width - rightHorzMargin, + 0 + ); + + //Move window if needed + FixPositionAndSize(); + + //Hook event listener + if (RequestClosingHandler == null) + RequestClosingHandler = new EventHandler(SidePanel_RequestClosing); + panel.RequestClosing += RequestClosingHandler; + } + + /// + /// Closes the current side panel. + /// + public void CloseSidePanel() { + if (_currentSidePanel == null) + return; + + //Unhook listener + _currentSidePanel.RequestClosing -= RequestClosingHandler; + + //Remove side panel + _currentSidePanel.OnClosing(this); + _sidePanelContainer.Controls.Clear(); + _sidePanelContainer.Visible = _sidePanelContainer.Enabled = false; + _currentSidePanel = null; + + //Resize + MinimumSize = new Size(20, 20); + ClientSize = new Size( + ClientSize.Width - _sidePanelContainer.Width - SidePanelMargin, + ClientSize.Height + ); + ExtraPadding = new Padding(0); + _thumbnailPanel.Size = ClientSize; + } + + void SidePanel_RequestClosing(object sender, EventArgs e) { + CloseSidePanel(); + } + + void Thumbnail_CloneClick(object sender, CloneClickEventArgs e) { + Win32Helper.InjectFakeMouseClick(CurrentThumbnailWindowHandle.Handle, e); + } + + } +} diff --git a/OnTopReplica/MainForm_Features.cs b/OnTopReplica/MainForm_Features.cs new file mode 100644 index 0000000..3149fd9 --- /dev/null +++ b/OnTopReplica/MainForm_Features.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Text; +using OnTopReplica.Properties; +using VistaControls.TaskDialog; +using System.Drawing; +using System.Windows.Forms; + +namespace OnTopReplica { + //Contains some feature implementations of MainForm + partial class MainForm { + + #region Click forwarding + + public bool ClickForwardingEnabled { + get { + return _thumbnailPanel.ReportThumbnailClicks; + } + set { + if (value && Settings.Default.FirstTimeClickForwarding) { + TaskDialog dlg = new TaskDialog(Strings.InfoClickForwarding, Strings.InfoClickForwardingTitle, Strings.InfoClickForwardingContent) { + CommonButtons = TaskDialogButton.Yes | TaskDialogButton.No + }; + if (dlg.Show(this).CommonButton == Result.No) + return; + + Settings.Default.FirstTimeClickForwarding = false; + } + + _thumbnailPanel.ReportThumbnailClicks = value; + } + } + + #endregion + + #region Click-through + + bool _clickThrough = false; + Color _nonClickThroughKey; + + public bool ClickThroughEnabled { + get { + return _clickThrough; + } + set { + //Adjust opacity if fully opaque + /*if (value && Opacity == 1.0) + Opacity = 0.75; + if (!value) + Opacity = 1.0;*/ + + //Enable transparency and force as top-most + TransparencyKey = (value) ? Color.Black : _nonClickThroughKey; + if (value) + TopMost = true; + + _clickThrough = value; + } + } + + #endregion + + #region Chrome + + public bool IsChromeVisible { + get { + return (FormBorderStyle == FormBorderStyle.SizableToolWindow); + } + set { + if (!value) { + Location = new Point { + X = Location.X + SystemInformation.FrameBorderSize.Width, + Y = Location.Y + SystemInformation.FrameBorderSize.Height + }; + FormBorderStyle = FormBorderStyle.None; + } + else if(value) { + Location = new Point { + X = Location.X - SystemInformation.FrameBorderSize.Width, + Y = Location.Y - SystemInformation.FrameBorderSize.Height + }; + FormBorderStyle = FormBorderStyle.SizableToolWindow; + } + + Program.Platform.OnFormStateChange(this); + Invalidate(); + } + } + + #endregion + + #region Position lock + + ScreenPosition? _positionLock = null; + + /// + /// Gets or sets the screen position where the window is currently locked in. + /// + public ScreenPosition? PositionLock { + get { + return _positionLock; + } + set { + if (value != null) + this.SetScreenPosition(value.Value); + + _positionLock = value; + } + } + + #endregion + + } +} diff --git a/OnTopReplica/MainForm_Gui.cs b/OnTopReplica/MainForm_Gui.cs new file mode 100644 index 0000000..996d2f9 --- /dev/null +++ b/OnTopReplica/MainForm_Gui.cs @@ -0,0 +1,134 @@ +using System.Drawing; +using System.Windows.Forms; +using VistaControls.TaskDialog; + +namespace OnTopReplica { + partial class MainForm { + + /// + /// Opens the context menu. + /// + public void OpenContextMenu() { + if (IsFullscreen) { + menuFullscreenContext.Show(MousePosition); + } + else { + menuContext.Show(MousePosition); + } + } + + private Point RecenterLocation(Control original, Control final) { + int origX = original.Location.X + original.Size.Width / 2; + int origY = original.Location.Y + original.Size.Height / 2; + + int finX = origX - final.Size.Width / 2; + int finY = origY - final.Size.Height / 2; + + //Check boundaries + var screen = Screen.FromControl(final); + if (finX < screen.WorkingArea.X) + finX = screen.WorkingArea.X; + if (finX + final.Size.Width > screen.WorkingArea.Width) + finX = screen.WorkingArea.Width - final.Size.Width; + if (finY < screen.WorkingArea.Y) + finY = screen.WorkingArea.Y; + if (finY + final.Size.Height > screen.WorkingArea.Height) + finY = screen.WorkingArea.Height - final.Size.Height; + + return new Point(finX, finY); + } + + /// + /// Gets the window's vertical chrome size. + /// + public int ChromeBorderVertical { + get { + if (IsChromeVisible) + return SystemInformation.FrameBorderSize.Height; + else + return 0; + } + } + + /// + /// Gets the window's horizontal chrome size. + /// + public int ChromeBorderHorizontal { + get { + if (IsChromeVisible) + return SystemInformation.FrameBorderSize.Width; + else + return 0; + } + } + + /// + /// Displays an error task dialog. + /// + /// Main instruction of the error dialog. + /// Detailed informations about the error. + /// Expanded error codes/messages. + private void ShowErrorDialog(string mainInstruction, string explanation, string errorMessage) { + TaskDialog dlg = new TaskDialog(mainInstruction, Strings.ErrorGenericTitle, explanation) { + CommonIcon = TaskDialogIcon.Stop, + IsExpanded = false + }; + + if (!string.IsNullOrEmpty(errorMessage)) { + dlg.ExpandedInformation = Strings.ErrorGenericInfoText + errorMessage; + dlg.ExpandedControlText = Strings.ErrorGenericInfoButton; + } + + dlg.Show(this); + } + + /// + /// Ensures that the main form is visible (either closing the fullscreen mode or reactivating from task icon). + /// + public void EnsureMainFormVisible() { + //Reset special modes + IsFullscreen = false; + ClickThroughEnabled = false; + Opacity = 1.0; + + //Restore main form in platform with dependent method + Program.Platform.RestoreForm(this); + } + + /// + /// Opens a confirmation dialog to confirm whether to reset the main form or not. + /// + public void ResetMainFormWithConfirmation() { + var dlg = new TaskDialog(Strings.AskReset, Strings.AskResetTitle, Strings.AskResetContent); + dlg.UseCommandLinks = true; + dlg.CustomButtons = new CustomButton[] { + new CustomButton(Result.OK, Strings.AskResetButtonOk), + new CustomButton(Result.Cancel, Strings.ButtonCancel) + }; + dlg.CommonIcon = TaskDialogIcon.Information; + + if (dlg.Show(this).CommonButton == Result.OK) { + ResetMainForm(); + } + } + + /// + /// Resets the main form to its initial state. + /// + public void ResetMainForm() { + //Reset form settings + UnsetThumbnail(); + CloseSidePanel(); + + //Reset location and size (edge of the screen, min size) + Point nuLoc = Screen.PrimaryScreen.WorkingArea.Location; + nuLoc.Offset(40, 40); + Location = nuLoc; + Size = new Size(240, 220); + + this.Show(); + this.Activate(); + } + + } +} diff --git a/OnTopReplica/MainForm_MenuEvents.cs b/OnTopReplica/MainForm_MenuEvents.cs new file mode 100644 index 0000000..d1ffc77 --- /dev/null +++ b/OnTopReplica/MainForm_MenuEvents.cs @@ -0,0 +1,214 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using OnTopReplica.Properties; +using VistaControls.TaskDialog; + +namespace OnTopReplica { + partial class MainForm { + + private void Menu_opening(object sender, CancelEventArgs e) { + //Cancel if currently in "fullscreen" mode or a side panel is open + if (IsFullscreen || _currentSidePanel != null) { + e.Cancel = true; + return; + } + + bool showing = _thumbnailPanel.IsShowingThumbnail; + + selectRegionToolStripMenuItem.Enabled = showing; + switchToWindowToolStripMenuItem.Enabled = showing; + resizeToolStripMenuItem.Enabled = showing; + chromeToolStripMenuItem.Checked = IsChromeVisible; + clickForwardingToolStripMenuItem.Checked = ClickForwardingEnabled; + chromeToolStripMenuItem.Enabled = showing; + clickThroughToolStripMenuItem.Enabled = showing; + clickForwardingToolStripMenuItem.Enabled = showing; + + } + + private void Menu_Windows_opening(object sender, CancelEventArgs e) { + _windowSeeker.Refresh(); + var menu = (ToolStrip)sender; + menu.PopulateMenu(this, _windowSeeker, + CurrentThumbnailWindowHandle, new EventHandler(Menu_Windows_itemclick)); + } + + void Menu_Windows_itemclick(object sender, EventArgs e) { + //Ensure the menu is closed + menuContext.Close(); + menuFullscreenContext.Close(); + menuWindows.Close(); + + //Get clicked item and window index from tag + ToolStripItem tsi = (ToolStripItem)sender; + + //Handle special "none" window + if (tsi.Tag == null) { + UnsetThumbnail(); + return; + } + + var selectionData = (WindowListHelper.WindowSelectionData)tsi.Tag; + Rectangle? bounds = (selectionData.Region != null) + ? (Rectangle?)selectionData.Region.Bounds : null; + SetThumbnail(selectionData.Handle, bounds); + } + + private void Menu_Switch_click(object sender, EventArgs e) { + if (CurrentThumbnailWindowHandle == null) + return; + + Program.Platform.HideForm(this); + Native.WindowManagerMethods.SetForegroundWindow(CurrentThumbnailWindowHandle.Handle); + } + + private void Menu_GroupSwitchMode_click(object sender, EventArgs e) { + SetSidePanel(new SidePanels.GroupSwitchPanel()); + } + + private void Menu_ClickForwarding_click(object sender, EventArgs e) { + ClickForwardingEnabled = !ClickForwardingEnabled; + } + + private void Menu_ClickThrough_click(object sender, EventArgs e) { + ClickThroughEnabled = true; + } + + private void Menu_Opacity_opening(object sender, CancelEventArgs e) { + ToolStripMenuItem[] items = { + toolStripMenuItem1, + toolStripMenuItem2, + toolStripMenuItem3, + toolStripMenuItem4 + }; + + foreach (ToolStripMenuItem i in items) { + if ((double)i.Tag == this.Opacity) + i.Checked = true; + else + i.Checked = false; + } + } + + private void Menu_Opacity_click(object sender, EventArgs e) { + //Get clicked menu item + ToolStripMenuItem tsi = sender as ToolStripMenuItem; + + if (tsi != null) { + //Get opacity from the tag + this.Opacity = (double)tsi.Tag; + } + } + + private void Menu_Region_click(object sender, EventArgs e) { + SetSidePanel(new OnTopReplica.SidePanels.RegionPanel()); + } + + private void Menu_Resize_opening(object sender, CancelEventArgs e) { + if (!_thumbnailPanel.IsShowingThumbnail) + e.Cancel = true; + + restorePositionAndSizeToolStripMenuItem.Checked = Settings.Default.RestoreSizeAndPosition; + } + + private void Menu_Resize_Double(object sender, EventArgs e) { + FitToThumbnail(2.0); + } + + private void Menu_Resize_FitToWindow(object sender, EventArgs e) { + FitToThumbnail(1.0); + } + + private void Menu_Resize_Half(object sender, EventArgs e) { + FitToThumbnail(0.5); + } + + private void Menu_Resize_Quarter(object sender, EventArgs e) { + FitToThumbnail(0.25); + } + + private void Menu_Resize_Fullscreen(object sender, EventArgs e) { + IsFullscreen = true; + } + + private void Menu_Resize_RecallPosition_click(object sender, EventArgs e) { + Settings.Default.RestoreSizeAndPosition = !Settings.Default.RestoreSizeAndPosition; + } + + private void Menu_Position_Opening(object sender, EventArgs e) { + disabledToolStripMenuItem.Checked = (PositionLock == null); + topLeftToolStripMenuItem.Checked = (PositionLock == ScreenPosition.TopLeft); + topRightToolStripMenuItem.Checked = (PositionLock == ScreenPosition.TopRight); + centerToolStripMenuItem.Checked = (PositionLock == ScreenPosition.Center); + bottomLeftToolStripMenuItem.Checked = (PositionLock == ScreenPosition.BottomLeft); + bottomRightToolStripMenuItem.Checked = (PositionLock == ScreenPosition.BottomRight); + } + + private void Menu_Position_Disable(object sender, EventArgs e) { + PositionLock = null; + } + + private void Menu_Position_TopLeft(object sender, EventArgs e) { + PositionLock = ScreenPosition.TopLeft; + } + + private void Menu_Position_TopRight(object sender, EventArgs e) { + PositionLock = ScreenPosition.TopRight; + } + + private void Menu_Position_Center(object sender, EventArgs e) { + PositionLock = ScreenPosition.Center; + } + + private void Menu_Position_BottomLeft(object sender, EventArgs e) { + PositionLock = ScreenPosition.BottomLeft; + } + + private void Menu_Position_BottomRight(object sender, EventArgs e) { + PositionLock = ScreenPosition.BottomRight; + } + + private void Menu_Reduce_click(object sender, EventArgs e) { + //Hide form in a platform specific way + Program.Platform.HideForm(this); + } + + private void Menu_Chrome_click(object sender, EventArgs e) { + IsChromeVisible = !IsChromeVisible; + } + + private void Menu_Language_click(object sender, EventArgs e) { + ToolStripItem tsi = (ToolStripItem)sender; + + string langCode = tsi.Tag as string; + + if (Program.ForceGlobalLanguageChange(langCode)) + this.Close(); + else + MessageBox.Show("Error"); + } + + private void Menu_About_click(object sender, EventArgs e) { + this.Hide(); + + using (var box = new AboutForm()) { + box.Location = RecenterLocation(this, box); + box.ShowDialog(); + Location = RecenterLocation(box, this); + } + + this.Show(); + } + + private void Menu_Close_click(object sender, EventArgs e) { + this.Close(); + } + + private void Menu_Fullscreen_ExitFullscreen_click(object sender, EventArgs e) { + IsFullscreen = false; + } + + } +} diff --git a/OnTopReplica/MessagePumpManager.cs b/OnTopReplica/MessagePumpManager.cs new file mode 100644 index 0000000..b12114e --- /dev/null +++ b/OnTopReplica/MessagePumpManager.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using OnTopReplica.MessagePumpProcessors; +using OnTopReplica.Native; + +namespace OnTopReplica { + class MessagePumpManager : IDisposable { + + Dictionary _processors = new Dictionary(); + + public MainForm Form { get; private set; } + + private void Register(IMessagePumpProcessor processor, MainForm form) { + _processors[processor.GetType()] = processor; + processor.Initialize(form); + +#if DEBUG + Console.WriteLine("Registered message pump processor: {0}", processor.GetType()); +#endif + } + + /// + /// Instantiates all message pump processors and registers them on the main form. + /// + /// + public void Initialize(MainForm form) { + Form = form; + + //Register window shell hook + if (!HookMethods.RegisterShellHookWindow(form.Handle)) { + Console.Error.WriteLine("Failed to register shell hook window."); + } + else { +#if DEBUG + Console.WriteLine("Shell hook window registered successfully."); +#endif + } + + //Register message pump processors + Register(new WindowKeeper(), form); + Register(new HotKeyManager(), form); + Register(new GroupSwitchManager(), form); + } + + /// + /// Run the registered message pump processors. + /// + /// Message to process. + /// True if the message has been handled internally. + public bool PumpMessage(ref Message msg) { + foreach (var processor in _processors.Values) { + if (processor.Process(ref msg)) + return true; + } + + return false; + } + + /// + /// Get the instance of a registered message pump processor. + /// Throws if instance not found. + /// + public T Get() { + return (T)_processors[typeof(T)]; + } + + #region IDisposable Members + + public void Dispose() { + if (!HookMethods.DeregisterShellHookWindow(Form.Handle)) { + Console.Error.WriteLine("Failed to deregister shell hook window."); + } + + foreach (var processor in _processors.Values) { + processor.Dispose(); + } + _processors.Clear(); + } + + #endregion + + } + +} diff --git a/OnTopReplica/MessagePumpProcessors/BaseMessagePumpProcessor.cs b/OnTopReplica/MessagePumpProcessors/BaseMessagePumpProcessor.cs new file mode 100644 index 0000000..b5f13d7 --- /dev/null +++ b/OnTopReplica/MessagePumpProcessors/BaseMessagePumpProcessor.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace OnTopReplica.MessagePumpProcessors { + abstract class BaseMessagePumpProcessor : IMessagePumpProcessor { + + protected MainForm Form { get; private set; } + + #region IMessagePumpProcessor Members + + public void Initialize(MainForm form) { + Form = form; + } + + public abstract bool Process(ref Message msg); + + #endregion + + bool _isDisposed = false; + + protected abstract void Shutdown(); + + #region IDisposable Members + + public void Dispose() { + if (_isDisposed) + return; + + Shutdown(); + + _isDisposed = true; + } + + #endregion + + } +} diff --git a/OnTopReplica/MessagePumpProcessors/GroupSwitchManager.cs b/OnTopReplica/MessagePumpProcessors/GroupSwitchManager.cs new file mode 100644 index 0000000..2bfd3e9 --- /dev/null +++ b/OnTopReplica/MessagePumpProcessors/GroupSwitchManager.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Diagnostics; +using System.Reflection; +using System.IO; +using System.Windows.Forms; +using OnTopReplica.Native; + +namespace OnTopReplica.MessagePumpProcessors { + + class GroupSwitchManager : BaseMessagePumpProcessor { + + bool _active = false; + List _lruHandles; + + /// + /// Enables group switch mode. + /// + /// List of window handles to track. + public void EnableGroupMode(IList handles) { + if (handles == null || handles.Count == 0) + return; + + //Okey dokey, will now track handles + TrackHandles(handles); + _active = true; + } + + /// + /// Initializes the LRU sorted list of window handles. + /// + private void TrackHandles(IList handles) { + _lruHandles = new List(handles.Count); + var now = DateTime.Now; + + foreach(var h in handles){ + _lruHandles.Add(new WindowHandleWrapper { + WindowHandle = h, + LastTimeUsed = now + }); + } + } + + /// + /// Disables group switch mode. + /// + public void Disable() { + if (!_active) + return; + + _lruHandles = null; + _active = false; + } + + /// + /// Processes the message pump. + /// + public override bool Process(ref Message msg) { + if (_active && msg.Msg == HookMethods.WM_SHELLHOOKMESSAGE) { + int hookCode = msg.WParam.ToInt32(); + if (hookCode == HookMethods.HSHELL_WINDOWACTIVATED || + hookCode == HookMethods.HSHELL_RUDEAPPACTIVATED) { + + IntPtr activeHandle = msg.LParam; + HandleForegroundWindowChange(activeHandle); + } + } + + return false; + } + + private void HandleForegroundWindowChange(IntPtr activeWindow) { +#if DEBUG + Console.Write("New active window (h {0}). ", activeWindow); +#endif + + //Seek window in tracked handles + WindowHandleWrapper activated = null; + foreach (var i in _lruHandles) { + if (i.WindowHandle.Handle == activeWindow) + activated = i; + } + + if (activated == null) { +#if DEBUG + //new foreground window is not tracked + Console.WriteLine("Active window is not tracked."); +#endif + return; + } + + //Update tracked handle + activated.LastTimeUsed = DateTime.Now; + _lruHandles.Sort(new LruDateTimeComparer()); + + //Get least recently used + var next = _lruHandles[0]; + +#if DEBUG + Console.WriteLine("Tracked. Switching to {0} (last use: {1}).", next.WindowHandle.Title, next.LastTimeUsed); +#endif + + Form.SetThumbnail(next.WindowHandle, null); + } + + protected override void Shutdown() { + Disable(); + } + + /// + /// Gets whether the group switch manager ia active. + /// + public bool IsActive { + get { + return _active; + } + } + + #region List sorting stuff + + class WindowHandleWrapper { + public WindowHandle WindowHandle { get; set; } + public DateTime LastTimeUsed { get; set; } + } + + class LruDateTimeComparer : IComparer { + + #region IComparer Members + + public int Compare(WindowHandleWrapper x, WindowHandleWrapper y) { + return x.LastTimeUsed.CompareTo(y.LastTimeUsed); + } + + #endregion + } + + #endregion + + } + +} diff --git a/OnTopReplica/MessagePumpProcessors/HotKeyManager.cs b/OnTopReplica/MessagePumpProcessors/HotKeyManager.cs new file mode 100644 index 0000000..0acbe33 --- /dev/null +++ b/OnTopReplica/MessagePumpProcessors/HotKeyManager.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using OnTopReplica.Native; + +namespace OnTopReplica.MessagePumpProcessors { + + /// + /// HotKey registration helper. + /// + class HotKeyManager : BaseMessagePumpProcessor { + + int _lastUsedKey = 0; + + Dictionary _handlers = new Dictionary(); + + public void RegisterHotKey(HotKeyModifiers mod, Keys keys, HotKeyMethods.HotKeyHandler handler) { + var newKey = ++_lastUsedKey; + + if (!HotKeyMethods.RegisterHotKey(Form.Handle, newKey, (int)mod, (int)keys)) { + Console.Error.WriteLine("Failed to register {0} hot key.", newKey); + return; + } + + _handlers[newKey] = handler; + } + + public override bool Process(ref Message msg) { + if (msg.Msg == HotKeyMethods.WM_HOTKEY) { + int keyId = msg.WParam.ToInt32(); + if (!_handlers.ContainsKey(keyId)) + return false; + + _handlers[keyId].Invoke(); + } + + return false; + } + + protected override void Shutdown() { + foreach (var key in _handlers.Keys) { + if (!HotKeyMethods.UnregisterHotKey(Form.Handle, key)) { + Console.Error.WriteLine("Failed to unregister {0} hot key.", key); + } + } + } + } + +} diff --git a/OnTopReplica/MessagePumpProcessors/WindowKeeper.cs b/OnTopReplica/MessagePumpProcessors/WindowKeeper.cs new file mode 100644 index 0000000..4877931 --- /dev/null +++ b/OnTopReplica/MessagePumpProcessors/WindowKeeper.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using OnTopReplica.Native; + +namespace OnTopReplica.MessagePumpProcessors { + + /// + /// Listens for shell events and closes the thumbnail if a cloned window is destroyed. + /// + class WindowKeeper : BaseMessagePumpProcessor { + + public override bool Process(ref Message msg) { + if (Form.CurrentThumbnailWindowHandle != null && + msg.Msg == HookMethods.WM_SHELLHOOKMESSAGE) { + int hookCode = msg.WParam.ToInt32(); + if (hookCode == HookMethods.HSHELL_WINDOWDESTROYED) { + //Check whether the destroyed window is the one we were cloning + IntPtr destroyedHandle = msg.LParam; + if (destroyedHandle == Form.CurrentThumbnailWindowHandle.Handle) { + //Disable group switch mode, since a window of the group has been destroyed + Form.MessagePumpManager.Get().Disable(); + + //Disable cloning + Form.UnsetThumbnail(); + } + } + } + + return false; + } + + protected override void Shutdown() { + + } + } + +} diff --git a/OnTopReplica/NDesk/Options/Options.cs b/OnTopReplica/NDesk/Options/Options.cs new file mode 100644 index 0000000..871d2d7 --- /dev/null +++ b/OnTopReplica/NDesk/Options/Options.cs @@ -0,0 +1,1103 @@ +// +// Options.cs +// +// Authors: +// Jonathan Pryor +// +// Copyright (C) 2008 Novell (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +// Compile With: +// gmcs -debug+ -r:System.Core Options.cs -o:NDesk.Options.dll +// gmcs -debug+ -d:LINQ -r:System.Core Options.cs -o:NDesk.Options.dll +// +// The LINQ version just changes the implementation of +// OptionSet.Parse(IEnumerable), and confers no semantic changes. + +// +// A Getopt::Long-inspired option parsing library for C#. +// +// NDesk.Options.OptionSet is built upon a key/value table, where the +// key is a option format string and the value is a delegate that is +// invoked when the format string is matched. +// +// Option format strings: +// Regex-like BNF Grammar: +// name: .+ +// type: [=:] +// sep: ( [^{}]+ | '{' .+ '}' )? +// aliases: ( name type sep ) ( '|' name type sep )* +// +// Each '|'-delimited name is an alias for the associated action. If the +// format string ends in a '=', it has a required value. If the format +// string ends in a ':', it has an optional value. If neither '=' or ':' +// is present, no value is supported. `=' or `:' need only be defined on one +// alias, but if they are provided on more than one they must be consistent. +// +// Each alias portion may also end with a "key/value separator", which is used +// to split option values if the option accepts > 1 value. If not specified, +// it defaults to '=' and ':'. If specified, it can be any character except +// '{' and '}' OR the *string* between '{' and '}'. If no separator should be +// used (i.e. the separate values should be distinct arguments), then "{}" +// should be used as the separator. +// +// Options are extracted either from the current option by looking for +// the option name followed by an '=' or ':', or is taken from the +// following option IFF: +// - The current option does not contain a '=' or a ':' +// - The current option requires a value (i.e. not a Option type of ':') +// +// The `name' used in the option format string does NOT include any leading +// option indicator, such as '-', '--', or '/'. All three of these are +// permitted/required on any named option. +// +// Option bundling is permitted so long as: +// - '-' is used to start the option group +// - all of the bundled options are a single character +// - at most one of the bundled options accepts a value, and the value +// provided starts from the next character to the end of the string. +// +// This allows specifying '-a -b -c' as '-abc', and specifying '-D name=value' +// as '-Dname=value'. +// +// Option processing is disabled by specifying "--". All options after "--" +// are returned by OptionSet.Parse() unchanged and unprocessed. +// +// Unprocessed options are returned from OptionSet.Parse(). +// +// Examples: +// int verbose = 0; +// OptionSet p = new OptionSet () +// .Add ("v", v => ++verbose) +// .Add ("name=|value=", v => Console.WriteLine (v)); +// p.Parse (new string[]{"-v", "--v", "/v", "-name=A", "/name", "B", "extra"}); +// +// The above would parse the argument string array, and would invoke the +// lambda expression three times, setting `verbose' to 3 when complete. +// It would also print out "A" and "B" to standard output. +// The returned array would contain the string "extra". +// +// C# 3.0 collection initializers are supported and encouraged: +// var p = new OptionSet () { +// { "h|?|help", v => ShowHelp () }, +// }; +// +// System.ComponentModel.TypeConverter is also supported, allowing the use of +// custom data types in the callback type; TypeConverter.ConvertFromString() +// is used to convert the value option to an instance of the specified +// type: +// +// var p = new OptionSet () { +// { "foo=", (Foo f) => Console.WriteLine (f.ToString ()) }, +// }; +// +// Random other tidbits: +// - Boolean options (those w/o '=' or ':' in the option format string) +// are explicitly enabled if they are followed with '+', and explicitly +// disabled if they are followed with '-': +// string a = null; +// var p = new OptionSet () { +// { "a", s => a = s }, +// }; +// p.Parse (new string[]{"-a"}); // sets v != null +// p.Parse (new string[]{"-a+"}); // sets v != null +// p.Parse (new string[]{"-a-"}); // sets v == null +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Globalization; +using System.IO; +using System.Runtime.Serialization; +using System.Security.Permissions; +using System.Text; +using System.Text.RegularExpressions; + +#if LINQ +using System.Linq; +#endif + +#if TEST +using NDesk.Options; +#endif + +namespace NDesk.Options { + + public class OptionValueCollection : IList, IList { + + List values = new List (); + OptionContext c; + + internal OptionValueCollection (OptionContext c) + { + this.c = c; + } + + #region ICollection + void ICollection.CopyTo (Array array, int index) {(values as ICollection).CopyTo (array, index);} + bool ICollection.IsSynchronized {get {return (values as ICollection).IsSynchronized;}} + object ICollection.SyncRoot {get {return (values as ICollection).SyncRoot;}} + #endregion + + #region ICollection + public void Add (string item) {values.Add (item);} + public void Clear () {values.Clear ();} + public bool Contains (string item) {return values.Contains (item);} + public void CopyTo (string[] array, int arrayIndex) {values.CopyTo (array, arrayIndex);} + public bool Remove (string item) {return values.Remove (item);} + public int Count {get {return values.Count;}} + public bool IsReadOnly {get {return false;}} + #endregion + + #region IEnumerable + IEnumerator IEnumerable.GetEnumerator () {return values.GetEnumerator ();} + #endregion + + #region IEnumerable + public IEnumerator GetEnumerator () {return values.GetEnumerator ();} + #endregion + + #region IList + int IList.Add (object value) {return (values as IList).Add (value);} + bool IList.Contains (object value) {return (values as IList).Contains (value);} + int IList.IndexOf (object value) {return (values as IList).IndexOf (value);} + void IList.Insert (int index, object value) {(values as IList).Insert (index, value);} + void IList.Remove (object value) {(values as IList).Remove (value);} + void IList.RemoveAt (int index) {(values as IList).RemoveAt (index);} + bool IList.IsFixedSize {get {return false;}} + object IList.this [int index] {get {return this [index];} set {(values as IList)[index] = value;}} + #endregion + + #region IList + public int IndexOf (string item) {return values.IndexOf (item);} + public void Insert (int index, string item) {values.Insert (index, item);} + public void RemoveAt (int index) {values.RemoveAt (index);} + + private void AssertValid (int index) + { + if (c.Option == null) + throw new InvalidOperationException ("OptionContext.Option is null."); + if (index >= c.Option.MaxValueCount) + throw new ArgumentOutOfRangeException ("index"); + if (c.Option.OptionValueType == OptionValueType.Required && + index >= values.Count) + throw new OptionException (string.Format ( + c.OptionSet.MessageLocalizer ("Missing required value for option '{0}'."), c.OptionName), + c.OptionName); + } + + public string this [int index] { + get { + AssertValid (index); + return index >= values.Count ? null : values [index]; + } + set { + values [index] = value; + } + } + #endregion + + public List ToList () + { + return new List (values); + } + + public string[] ToArray () + { + return values.ToArray (); + } + + public override string ToString () + { + return string.Join (", ", values.ToArray ()); + } + } + + public class OptionContext { + private Option option; + private string name; + private int index; + private OptionSet set; + private OptionValueCollection c; + + public OptionContext (OptionSet set) + { + this.set = set; + this.c = new OptionValueCollection (this); + } + + public Option Option { + get {return option;} + set {option = value;} + } + + public string OptionName { + get {return name;} + set {name = value;} + } + + public int OptionIndex { + get {return index;} + set {index = value;} + } + + public OptionSet OptionSet { + get {return set;} + } + + public OptionValueCollection OptionValues { + get {return c;} + } + } + + public enum OptionValueType { + None, + Optional, + Required, + } + + public abstract class Option { + string prototype, description; + string[] names; + OptionValueType type; + int count; + string[] separators; + + protected Option (string prototype, string description) + : this (prototype, description, 1) + { + } + + protected Option (string prototype, string description, int maxValueCount) + { + if (prototype == null) + throw new ArgumentNullException ("prototype"); + if (prototype.Length == 0) + throw new ArgumentException ("Cannot be the empty string.", "prototype"); + if (maxValueCount < 0) + throw new ArgumentOutOfRangeException ("maxValueCount"); + + this.prototype = prototype; + this.names = prototype.Split ('|'); + this.description = description; + this.count = maxValueCount; + this.type = ParsePrototype (); + + if (this.count == 0 && type != OptionValueType.None) + throw new ArgumentException ( + "Cannot provide maxValueCount of 0 for OptionValueType.Required or " + + "OptionValueType.Optional.", + "maxValueCount"); + if (this.type == OptionValueType.None && maxValueCount > 1) + throw new ArgumentException ( + string.Format ("Cannot provide maxValueCount of {0} for OptionValueType.None.", maxValueCount), + "maxValueCount"); + if (Array.IndexOf (names, "<>") >= 0 && + ((names.Length == 1 && this.type != OptionValueType.None) || + (names.Length > 1 && this.MaxValueCount > 1))) + throw new ArgumentException ( + "The default option handler '<>' cannot require values.", + "prototype"); + } + + public string Prototype {get {return prototype;}} + public string Description {get {return description;}} + public OptionValueType OptionValueType {get {return type;}} + public int MaxValueCount {get {return count;}} + + public string[] GetNames () + { + return (string[]) names.Clone (); + } + + public string[] GetValueSeparators () + { + if (separators == null) + return new string [0]; + return (string[]) separators.Clone (); + } + + protected static T Parse (string value, OptionContext c) + { + TypeConverter conv = TypeDescriptor.GetConverter(typeof(T)); + T t = default (T); + try { + if (value != null) + t = (T) conv.ConvertFromString (value); + } + catch (Exception e) { + throw new OptionException ( + string.Format ( + c.OptionSet.MessageLocalizer ("Could not convert string `{0}' to type {1} for option `{2}'."), + value, typeof (T).Name, c.OptionName), + c.OptionName, e); + } + return t; + } + + internal string[] Names {get {return names;}} + internal string[] ValueSeparators {get {return separators;}} + + static readonly char[] NameTerminator = new char[]{'=', ':'}; + + private OptionValueType ParsePrototype () + { + char type = '\0'; + List seps = new List (); + for (int i = 0; i < names.Length; ++i) { + string name = names [i]; + if (name.Length == 0) + throw new ArgumentException ("Empty option names are not supported.", "prototype"); + + int end = name.IndexOfAny (NameTerminator); + if (end == -1) + continue; + names [i] = name.Substring (0, end); + if (type == '\0' || type == name [end]) + type = name [end]; + else + throw new ArgumentException ( + string.Format ("Conflicting option types: '{0}' vs. '{1}'.", type, name [end]), + "prototype"); + AddSeparators (name, end, seps); + } + + if (type == '\0') + return OptionValueType.None; + + if (count <= 1 && seps.Count != 0) + throw new ArgumentException ( + string.Format ("Cannot provide key/value separators for Options taking {0} value(s).", count), + "prototype"); + if (count > 1) { + if (seps.Count == 0) + this.separators = new string[]{":", "="}; + else if (seps.Count == 1 && seps [0].Length == 0) + this.separators = null; + else + this.separators = seps.ToArray (); + } + + return type == '=' ? OptionValueType.Required : OptionValueType.Optional; + } + + private static void AddSeparators (string name, int end, ICollection seps) + { + int start = -1; + for (int i = end+1; i < name.Length; ++i) { + switch (name [i]) { + case '{': + if (start != -1) + throw new ArgumentException ( + string.Format ("Ill-formed name/value separator found in \"{0}\".", name), + "prototype"); + start = i+1; + break; + case '}': + if (start == -1) + throw new ArgumentException ( + string.Format ("Ill-formed name/value separator found in \"{0}\".", name), + "prototype"); + seps.Add (name.Substring (start, i-start)); + start = -1; + break; + default: + if (start == -1) + seps.Add (name [i].ToString ()); + break; + } + } + if (start != -1) + throw new ArgumentException ( + string.Format ("Ill-formed name/value separator found in \"{0}\".", name), + "prototype"); + } + + public void Invoke (OptionContext c) + { + OnParseComplete (c); + c.OptionName = null; + c.Option = null; + c.OptionValues.Clear (); + } + + protected abstract void OnParseComplete (OptionContext c); + + public override string ToString () + { + return Prototype; + } + } + + [Serializable] + public class OptionException : Exception { + private string option; + + public OptionException () + { + } + + public OptionException (string message, string optionName) + : base (message) + { + this.option = optionName; + } + + public OptionException (string message, string optionName, Exception innerException) + : base (message, innerException) + { + this.option = optionName; + } + + protected OptionException (SerializationInfo info, StreamingContext context) + : base (info, context) + { + this.option = info.GetString ("OptionName"); + } + + public string OptionName { + get {return this.option;} + } + + [SecurityPermission (SecurityAction.LinkDemand, SerializationFormatter = true)] + public override void GetObjectData (SerializationInfo info, StreamingContext context) + { + base.GetObjectData (info, context); + info.AddValue ("OptionName", option); + } + } + + public delegate void OptionAction (TKey key, TValue value); + + public class OptionSet : KeyedCollection + { + public OptionSet () + : this (delegate (string f) {return f;}) + { + } + + public OptionSet (Converter localizer) + { + this.localizer = localizer; + } + + Converter localizer; + + public Converter MessageLocalizer { + get {return localizer;} + } + + protected override string GetKeyForItem (Option item) + { + if (item == null) + throw new ArgumentNullException ("option"); + if (item.Names != null && item.Names.Length > 0) + return item.Names [0]; + // This should never happen, as it's invalid for Option to be + // constructed w/o any names. + throw new InvalidOperationException ("Option has no names!"); + } + + [Obsolete ("Use KeyedCollection.this[string]")] + protected Option GetOptionForName (string option) + { + if (option == null) + throw new ArgumentNullException ("option"); + try { + return base [option]; + } + catch (KeyNotFoundException) { + return null; + } + } + + protected override void InsertItem (int index, Option item) + { + base.InsertItem (index, item); + AddImpl (item); + } + + protected override void RemoveItem (int index) + { + base.RemoveItem (index); + Option p = Items [index]; + // KeyedCollection.RemoveItem() handles the 0th item + for (int i = 1; i < p.Names.Length; ++i) { + Dictionary.Remove (p.Names [i]); + } + } + + protected override void SetItem (int index, Option item) + { + base.SetItem (index, item); + RemoveItem (index); + AddImpl (item); + } + + private void AddImpl (Option option) + { + if (option == null) + throw new ArgumentNullException ("option"); + List added = new List (option.Names.Length); + try { + // KeyedCollection.InsertItem/SetItem handle the 0th name. + for (int i = 1; i < option.Names.Length; ++i) { + Dictionary.Add (option.Names [i], option); + added.Add (option.Names [i]); + } + } + catch (Exception) { + foreach (string name in added) + Dictionary.Remove (name); + throw; + } + } + + public new OptionSet Add (Option option) + { + base.Add (option); + return this; + } + + sealed class ActionOption : Option { + Action action; + + public ActionOption (string prototype, string description, int count, Action action) + : base (prototype, description, count) + { + if (action == null) + throw new ArgumentNullException ("action"); + this.action = action; + } + + protected override void OnParseComplete (OptionContext c) + { + action (c.OptionValues); + } + } + + public OptionSet Add (string prototype, Action action) + { + return Add (prototype, null, action); + } + + public OptionSet Add (string prototype, string description, Action action) + { + if (action == null) + throw new ArgumentNullException ("action"); + Option p = new ActionOption (prototype, description, 1, + delegate (OptionValueCollection v) { action (v [0]); }); + base.Add (p); + return this; + } + + public OptionSet Add (string prototype, OptionAction action) + { + return Add (prototype, null, action); + } + + public OptionSet Add (string prototype, string description, OptionAction action) + { + if (action == null) + throw new ArgumentNullException ("action"); + Option p = new ActionOption (prototype, description, 2, + delegate (OptionValueCollection v) {action (v [0], v [1]);}); + base.Add (p); + return this; + } + + sealed class ActionOption : Option { + Action action; + + public ActionOption (string prototype, string description, Action action) + : base (prototype, description, 1) + { + if (action == null) + throw new ArgumentNullException ("action"); + this.action = action; + } + + protected override void OnParseComplete (OptionContext c) + { + action (Parse (c.OptionValues [0], c)); + } + } + + sealed class ActionOption : Option { + OptionAction action; + + public ActionOption (string prototype, string description, OptionAction action) + : base (prototype, description, 2) + { + if (action == null) + throw new ArgumentNullException ("action"); + this.action = action; + } + + protected override void OnParseComplete (OptionContext c) + { + action ( + Parse (c.OptionValues [0], c), + Parse (c.OptionValues [1], c)); + } + } + + public OptionSet Add (string prototype, Action action) + { + return Add (prototype, null, action); + } + + public OptionSet Add (string prototype, string description, Action action) + { + return Add (new ActionOption (prototype, description, action)); + } + + public OptionSet Add (string prototype, OptionAction action) + { + return Add (prototype, null, action); + } + + public OptionSet Add (string prototype, string description, OptionAction action) + { + return Add (new ActionOption (prototype, description, action)); + } + + protected virtual OptionContext CreateOptionContext () + { + return new OptionContext (this); + } + +#if LINQ + public List Parse (IEnumerable arguments) + { + bool process = true; + OptionContext c = CreateOptionContext (); + c.OptionIndex = -1; + var def = GetOptionForName ("<>"); + var unprocessed = + from argument in arguments + where ++c.OptionIndex >= 0 && (process || def != null) + ? process + ? argument == "--" + ? (process = false) + : !Parse (argument, c) + ? def != null + ? Unprocessed (null, def, c, argument) + : true + : false + : def != null + ? Unprocessed (null, def, c, argument) + : true + : true + select argument; + List r = unprocessed.ToList (); + if (c.Option != null) + c.Option.Invoke (c); + return r; + } +#else + public List Parse (IEnumerable arguments) + { + OptionContext c = CreateOptionContext (); + c.OptionIndex = -1; + bool process = true; + List unprocessed = new List (); + Option def = Contains ("<>") ? this ["<>"] : null; + foreach (string argument in arguments) { + ++c.OptionIndex; + if (argument == "--") { + process = false; + continue; + } + if (!process) { + Unprocessed (unprocessed, def, c, argument); + continue; + } + if (!Parse (argument, c)) + Unprocessed (unprocessed, def, c, argument); + } + if (c.Option != null) + c.Option.Invoke (c); + return unprocessed; + } +#endif + + private static bool Unprocessed (ICollection extra, Option def, OptionContext c, string argument) + { + if (def == null) { + extra.Add (argument); + return false; + } + c.OptionValues.Add (argument); + c.Option = def; + c.Option.Invoke (c); + return false; + } + + private readonly Regex ValueOption = new Regex ( + @"^(?--|-|/)(?[^:=]+)((?[:=])(?.*))?$"); + + protected bool GetOptionParts (string argument, out string flag, out string name, out string sep, out string value) + { + if (argument == null) + throw new ArgumentNullException ("argument"); + + flag = name = sep = value = null; + Match m = ValueOption.Match (argument); + if (!m.Success) { + return false; + } + flag = m.Groups ["flag"].Value; + name = m.Groups ["name"].Value; + if (m.Groups ["sep"].Success && m.Groups ["value"].Success) { + sep = m.Groups ["sep"].Value; + value = m.Groups ["value"].Value; + } + return true; + } + + protected virtual bool Parse (string argument, OptionContext c) + { + if (c.Option != null) { + ParseValue (argument, c); + return true; + } + + string f, n, s, v; + if (!GetOptionParts (argument, out f, out n, out s, out v)) + return false; + + Option p; + if (Contains (n)) { + p = this [n]; + c.OptionName = f + n; + c.Option = p; + switch (p.OptionValueType) { + case OptionValueType.None: + c.OptionValues.Add (n); + c.Option.Invoke (c); + break; + case OptionValueType.Optional: + case OptionValueType.Required: + ParseValue (v, c); + break; + } + return true; + } + // no match; is it a bool option? + if (ParseBool (argument, n, c)) + return true; + // is it a bundled option? + if (ParseBundledValue (f, string.Concat (n + s + v), c)) + return true; + + return false; + } + + private void ParseValue (string option, OptionContext c) + { + if (option != null) + foreach (string o in c.Option.ValueSeparators != null + ? option.Split (c.Option.ValueSeparators, StringSplitOptions.None) + : new string[]{option}) { + c.OptionValues.Add (o); + } + if (c.OptionValues.Count == c.Option.MaxValueCount || + c.Option.OptionValueType == OptionValueType.Optional) + c.Option.Invoke (c); + else if (c.OptionValues.Count > c.Option.MaxValueCount) { + throw new OptionException (localizer (string.Format ( + "Error: Found {0} option values when expecting {1}.", + c.OptionValues.Count, c.Option.MaxValueCount)), + c.OptionName); + } + } + + private bool ParseBool (string option, string n, OptionContext c) + { + Option p; + string rn; + if (n.Length >= 1 && (n [n.Length-1] == '+' || n [n.Length-1] == '-') && + Contains ((rn = n.Substring (0, n.Length-1)))) { + p = this [rn]; + string v = n [n.Length-1] == '+' ? option : null; + c.OptionName = option; + c.Option = p; + c.OptionValues.Add (v); + p.Invoke (c); + return true; + } + return false; + } + + private bool ParseBundledValue (string f, string n, OptionContext c) + { + if (f != "-") + return false; + for (int i = 0; i < n.Length; ++i) { + Option p; + string opt = f + n [i].ToString (); + string rn = n [i].ToString (); + if (!Contains (rn)) { + if (i == 0) + return false; + throw new OptionException (string.Format (localizer ( + "Cannot bundle unregistered option '{0}'."), opt), opt); + } + p = this [rn]; + switch (p.OptionValueType) { + case OptionValueType.None: + Invoke (c, opt, n, p); + break; + case OptionValueType.Optional: + case OptionValueType.Required: { + string v = n.Substring (i+1); + c.Option = p; + c.OptionName = opt; + ParseValue (v.Length != 0 ? v : null, c); + return true; + } + default: + throw new InvalidOperationException ("Unknown OptionValueType: " + p.OptionValueType); + } + } + return true; + } + + private static void Invoke (OptionContext c, string name, string value, Option option) + { + c.OptionName = name; + c.Option = option; + c.OptionValues.Add (value); + option.Invoke (c); + } + + private const int OptionWidth = 29; + + public void WriteOptionDescriptions (TextWriter o) + { + foreach (Option p in this) { + int written = 0; + if (!WriteOptionPrototype (o, p, ref written)) + continue; + + if (written < OptionWidth) + o.Write (new string (' ', OptionWidth - written)); + else { + o.WriteLine (); + o.Write (new string (' ', OptionWidth)); + } + + List lines = GetLines (localizer (GetDescription (p.Description))); + o.WriteLine (lines [0]); + string prefix = new string (' ', OptionWidth+2); + for (int i = 1; i < lines.Count; ++i) { + o.Write (prefix); + o.WriteLine (lines [i]); + } + } + } + + bool WriteOptionPrototype (TextWriter o, Option p, ref int written) + { + string[] names = p.Names; + + int i = GetNextOptionIndex (names, 0); + if (i == names.Length) + return false; + + if (names [i].Length == 1) { + Write (o, ref written, " -"); + Write (o, ref written, names [0]); + } + else { + Write (o, ref written, " --"); + Write (o, ref written, names [0]); + } + + for ( i = GetNextOptionIndex (names, i+1); + i < names.Length; i = GetNextOptionIndex (names, i+1)) { + Write (o, ref written, ", "); + Write (o, ref written, names [i].Length == 1 ? "-" : "--"); + Write (o, ref written, names [i]); + } + + if (p.OptionValueType == OptionValueType.Optional || + p.OptionValueType == OptionValueType.Required) { + if (p.OptionValueType == OptionValueType.Optional) { + Write (o, ref written, localizer ("[")); + } + Write (o, ref written, localizer ("=" + GetArgumentName (0, p.MaxValueCount, p.Description))); + string sep = p.ValueSeparators != null && p.ValueSeparators.Length > 0 + ? p.ValueSeparators [0] + : " "; + for (int c = 1; c < p.MaxValueCount; ++c) { + Write (o, ref written, localizer (sep + GetArgumentName (c, p.MaxValueCount, p.Description))); + } + if (p.OptionValueType == OptionValueType.Optional) { + Write (o, ref written, localizer ("]")); + } + } + return true; + } + + static int GetNextOptionIndex (string[] names, int i) + { + while (i < names.Length && names [i] == "<>") { + ++i; + } + return i; + } + + static void Write (TextWriter o, ref int n, string s) + { + n += s.Length; + o.Write (s); + } + + private static string GetArgumentName (int index, int maxIndex, string description) + { + if (description == null) + return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1); + string[] nameStart; + if (maxIndex == 1) + nameStart = new string[]{"{0:", "{"}; + else + nameStart = new string[]{"{" + index + ":"}; + for (int i = 0; i < nameStart.Length; ++i) { + int start, j = 0; + do { + start = description.IndexOf (nameStart [i], j); + } while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false); + if (start == -1) + continue; + int end = description.IndexOf ("}", start); + if (end == -1) + continue; + return description.Substring (start + nameStart [i].Length, end - start - nameStart [i].Length); + } + return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1); + } + + private static string GetDescription (string description) + { + if (description == null) + return string.Empty; + StringBuilder sb = new StringBuilder (description.Length); + int start = -1; + for (int i = 0; i < description.Length; ++i) { + switch (description [i]) { + case '{': + if (i == start) { + sb.Append ('{'); + start = -1; + } + else if (start < 0) + start = i + 1; + break; + case '}': + if (start < 0) { + if ((i+1) == description.Length || description [i+1] != '}') + throw new InvalidOperationException ("Invalid option description: " + description); + ++i; + sb.Append ("}"); + } + else { + sb.Append (description.Substring (start, i - start)); + start = -1; + } + break; + case ':': + if (start < 0) + goto default; + start = i + 1; + break; + default: + if (start < 0) + sb.Append (description [i]); + break; + } + } + return sb.ToString (); + } + + private static List GetLines (string description) + { + List lines = new List (); + if (string.IsNullOrEmpty (description)) { + lines.Add (string.Empty); + return lines; + } + int length = 80 - OptionWidth - 2; + int start = 0, end; + do { + end = GetLineEnd (start, length, description); + bool cont = false; + if (end < description.Length) { + char c = description [end]; + if (c == '-' || (char.IsWhiteSpace (c) && c != '\n')) + ++end; + else if (c != '\n') { + cont = true; + --end; + } + } + lines.Add (description.Substring (start, end - start)); + if (cont) { + lines [lines.Count-1] += "-"; + } + start = end; + if (start < description.Length && description [start] == '\n') + ++start; + } while (end < description.Length); + return lines; + } + + private static int GetLineEnd (int start, int length, string description) + { + int end = Math.Min (start + length, description.Length); + int sep = -1; + for (int i = start; i < end; ++i) { + switch (description [i]) { + case ' ': + case '\t': + case '\v': + case '-': + case ',': + case '.': + case ';': + sep = i; + break; + case '\n': + return i; + } + } + if (sep == -1 || end == description.Length) + return end; + return sep; + } + } +} + diff --git a/OnTopReplica/Native/CommonControls.cs b/OnTopReplica/Native/CommonControls.cs new file mode 100644 index 0000000..bf2123c --- /dev/null +++ b/OnTopReplica/Native/CommonControls.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + public static class CommonControls { + + [DllImport("comctl32.dll", EntryPoint = "InitCommonControlsEx", CallingConvention = CallingConvention.StdCall)] + static extern bool InitCommonControlsEx(ref INITCOMMONCONTROLSEX iccex); + + const int ICC_STANDARD_CLASSES = 0x00004000; + const int ICC_WIN95_CLASSES = 0x000000FF; + + public static bool InitStandard() { + INITCOMMONCONTROLSEX ex = new INITCOMMONCONTROLSEX(); + ex.dwSize = 8; + ex.dwICC = ICC_STANDARD_CLASSES | ICC_WIN95_CLASSES; + + return InitCommonControlsEx(ref ex); + } + + } + + struct INITCOMMONCONTROLSEX { + public int dwSize; + public int dwICC; + } + +} diff --git a/OnTopReplica/Native/ErrorMethods.cs b/OnTopReplica/Native/ErrorMethods.cs new file mode 100644 index 0000000..f1863eb --- /dev/null +++ b/OnTopReplica/Native/ErrorMethods.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + /// + /// Common Win32 error handling methods. + /// + static class ErrorMethods { + + [DllImport("kernel32.dll")] + static extern uint FormatMessage(uint dwFlags, IntPtr lpSource, + int dwMessageId, uint dwLanguageId, [Out] StringBuilder lpBuffer, + uint nSize, IntPtr Arguments); + + /// + /// Gets a string representation of a Win32 error code. + /// + /// ID of the Win32 error code. + /// String representation of the error. + public static string GetErrorMessage(int msgCode) { + var sb = new StringBuilder(300); + FormatMessage((uint)(0x00001000), IntPtr.Zero, msgCode, 0, sb, 299, IntPtr.Zero); + return sb.ToString(); + } + + /// + /// Gets a string representation of the last Win32 error on this thread. + /// + public static string GetLastErrorMessage() { + int errorCode = Marshal.GetLastWin32Error(); + return GetErrorMessage(errorCode); + } + + } +} diff --git a/OnTopReplica/Native/HT.cs b/OnTopReplica/Native/HT.cs new file mode 100644 index 0000000..231e928 --- /dev/null +++ b/OnTopReplica/Native/HT.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica.Native { + /// + /// Native Win32 Hit Testing codes. + /// + static class HT { + public const int TRANSPARENT = -1; + public const int CLIENT = 1; + public const int CAPTION = 2; + } +} diff --git a/OnTopReplica/Native/HookMethods.cs b/OnTopReplica/Native/HookMethods.cs new file mode 100644 index 0000000..3b6f7fc --- /dev/null +++ b/OnTopReplica/Native/HookMethods.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + + /// + /// Helpers for interop with native Windows hooks. + /// + static class HookMethods { + + static HookMethods() { + WM_SHELLHOOKMESSAGE = RegisterWindowMessage("SHELLHOOK"); + if (WM_SHELLHOOKMESSAGE == 0) + Console.Error.WriteLine("Failed to register SHELLHOOK Windows message."); + } + + public static int WM_SHELLHOOKMESSAGE { + get; + private set; + } + + public const int HSHELL_WINDOWACTIVATED = 4; + public const int HSHELL_RUDEAPPACTIVATED = HSHELL_WINDOWACTIVATED | HSHELL_HIGHBIT; + const int HSHELL_HIGHBIT = 0x8000; + public const int HSHELL_WINDOWDESTROYED = 2; + public const int HSHELL_WINDOWCREATED = 1; + + /// + /// Registers the WM_ID for a window message. + /// + /// Name of the window message. + [DllImport("User32.dll")] + public static extern int RegisterWindowMessage(string wndMessageName); + + /// + /// Registers a window as a shell hook window. + /// + [DllImport("User32.dll")] + public static extern bool RegisterShellHookWindow(IntPtr hwnd); + + /// + /// Deregisters a window as a shell hook window. + /// + [DllImport("User32.dll")] + public static extern bool DeregisterShellHookWindow(IntPtr hwnd); + + } +} diff --git a/OnTopReplica/Native/HotKeyMethods.cs b/OnTopReplica/Native/HotKeyMethods.cs new file mode 100644 index 0000000..8aea7f1 --- /dev/null +++ b/OnTopReplica/Native/HotKeyMethods.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace OnTopReplica.Native { + + [Flags] + public enum HotKeyModifiers : int { + Alt = 0x1, + Control = 0x2, + Shift = 0x4, + Windows = 0x8 + } + + static class HotKeyMethods { + + public delegate void HotKeyHandler(); + + public const int WM_HOTKEY = 0x312; + + [DllImport("user32.dll")] + public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc); + + [DllImport("user32.dll")] + public static extern bool UnregisterHotKey(IntPtr hWnd, int id); + + public delegate void FormDelegate(HotKeyModifiers mod, Keys key, HotKeyHandler handler); + + } +} diff --git a/OnTopReplica/Native/ITaskBarList.cs b/OnTopReplica/Native/ITaskBarList.cs new file mode 100644 index 0000000..e4a53bb --- /dev/null +++ b/OnTopReplica/Native/ITaskBarList.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + [ComImport, + Guid("56fdf342-fd6d-11d0-958a-006097c9a090"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface ITaskbarList { + /// + /// Initializes the taskbar list object. This method must be called before any other ITaskbarList methods can be called. + /// + void HrInit(); + + /// + /// Adds an item to the taskbar. + /// + /// A handle to the window to be added to the taskbar. + void AddTab([In] IntPtr hWnd); + + /// + /// Deletes an item from the taskbar. + /// + /// A handle to the window to be deleted from the taskbar. + void DeleteTab([In] IntPtr hWnd); + + /// + /// Activates an item on the taskbar. The window is not actually activated; the window's item on the taskbar is merely displayed as active. + /// + /// A handle to the window on the taskbar to be displayed as active. + void ActivateTab([In] IntPtr hWnd); + + /// + /// Marks a taskbar item as active but does not visually activate it. + /// + /// A handle to the window to be marked as active. + void SetActiveAlt([In] IntPtr hWnd); + } + + [ComImport] + [Guid("56fdf344-fd6d-11d0-958a-006097c9a090")] + public class CoTaskbarList { + } +} diff --git a/OnTopReplica/Native/InputMethods.cs b/OnTopReplica/Native/InputMethods.cs new file mode 100644 index 0000000..fe8233e --- /dev/null +++ b/OnTopReplica/Native/InputMethods.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + static class InputMethods { + + [DllImport("user32.dll")] + static extern short GetKeyState(VirtualKeyState nVirtKey); + + const int KeyToggled = 0x1; + + const int KeyPressed = 0x8000; + + public static bool IsKeyPressed(VirtualKeyState virtKey) { + return (GetKeyState(virtKey) & KeyPressed) != 0; + } + + public static bool IsKeyToggled(VirtualKeyState virtKey) { + return (GetKeyState(virtKey) & KeyToggled) != 0; + } + + } +} diff --git a/OnTopReplica/Native/MK.cs b/OnTopReplica/Native/MK.cs new file mode 100644 index 0000000..90c7e90 --- /dev/null +++ b/OnTopReplica/Native/MK.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica.Native { + /// + /// Native Mouse click codes. + /// + static class MK { + public const int LBUTTON = 0x0001; + public const int RBUTTON = 0x0002; + public const int MBUTTON = 0x0010; + } +} diff --git a/OnTopReplica/Native/MessagingMethods.cs b/OnTopReplica/Native/MessagingMethods.cs new file mode 100644 index 0000000..cabe03e --- /dev/null +++ b/OnTopReplica/Native/MessagingMethods.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + /// + /// Common methods for Win32 messaging. + /// + static class MessagingMethods { + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] + public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); + + [Flags] + public enum SendMessageTimeoutFlags : uint { + AbortIfHung = 2, + Block = 1, + Normal = 0 + } + + [DllImport("user32.dll")] + public static extern IntPtr SendMessageTimeout(IntPtr hwnd, uint message, IntPtr wparam, IntPtr lparam, SendMessageTimeoutFlags flags, uint timeout, out IntPtr result); + + [return: MarshalAs(UnmanagedType.Bool)] + [DllImport("user32.dll", SetLastError = false)] + public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); + + public static IntPtr MakeLParam(int LoWord, int HiWord) { + return new IntPtr((HiWord << 16) | (LoWord & 0xffff)); + } + + } +} diff --git a/OnTopReplica/Native/Point.cs b/OnTopReplica/Native/Point.cs new file mode 100644 index 0000000..c34db85 --- /dev/null +++ b/OnTopReplica/Native/Point.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + /// + /// Native Point structure. + /// + [StructLayout(LayoutKind.Sequential)] + public struct NPoint { + public int X, Y; + + public NPoint(int x, int y) { + X = x; + Y = y; + } + + public NPoint(NPoint copy) { + X = copy.X; + Y = copy.Y; + } + + public static NPoint FromPoint(System.Drawing.Point point) { + return new NPoint(point.X, point.Y); + } + + public System.Drawing.Point ToPoint() { + return new System.Drawing.Point(X, Y); + } + + public override string ToString() { + return "{" + X + "," + Y + "}"; + } + } +} diff --git a/OnTopReplica/Native/Rectangle.cs b/OnTopReplica/Native/Rectangle.cs new file mode 100644 index 0000000..4934198 --- /dev/null +++ b/OnTopReplica/Native/Rectangle.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + /// A native Rectangle Structure. + [StructLayout(LayoutKind.Sequential)] + struct NRectangle { + public NRectangle(int left, int top, int right, int bottom) { + Left = left; + Top = top; + Right = right; + Bottom = bottom; + } + + public NRectangle(System.Drawing.Rectangle rect) { + Left = rect.X; + Top = rect.Y; + Right = rect.Right; + Bottom = rect.Bottom; + } + + public int Left; + public int Top; + public int Right; + public int Bottom; + + public int Width { + get { + return Right - Left; + } + } + public int Height { + get { + return Bottom - Top; + } + } + + public System.Drawing.Rectangle ToRectangle() { + return new System.Drawing.Rectangle(Left, Top, Right - Left, Bottom - Top); + } + + public System.Drawing.Size Size { + get { + return new System.Drawing.Size(Width, Height); + } + } + + } +} diff --git a/OnTopReplica/Native/VirtualKeyState.cs b/OnTopReplica/Native/VirtualKeyState.cs new file mode 100644 index 0000000..91e94a0 --- /dev/null +++ b/OnTopReplica/Native/VirtualKeyState.cs @@ -0,0 +1,193 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica.Native { + enum VirtualKeyState : int { + VK_LBUTTON = 0x01, + VK_RBUTTON = 0x02, + VK_CANCEL = 0x03, + VK_MBUTTON = 0x04, + // + VK_XBUTTON1 = 0x05, + VK_XBUTTON2 = 0x06, + // + VK_BACK = 0x08, + VK_TAB = 0x09, + // + VK_CLEAR = 0x0C, + VK_RETURN = 0x0D, + // + VK_SHIFT = 0x10, + VK_CONTROL = 0x11, + VK_MENU = 0x12, + VK_PAUSE = 0x13, + VK_CAPITAL = 0x14, + // + VK_KANA = 0x15, + VK_HANGEUL = 0x15, /* old name - should be here for compatibility */ + VK_HANGUL = 0x15, + VK_JUNJA = 0x17, + VK_FINAL = 0x18, + VK_HANJA = 0x19, + VK_KANJI = 0x19, + // + VK_ESCAPE = 0x1B, + // + VK_CONVERT = 0x1C, + VK_NONCONVERT = 0x1D, + VK_ACCEPT = 0x1E, + VK_MODECHANGE = 0x1F, + // + VK_SPACE = 0x20, + VK_PRIOR = 0x21, + VK_NEXT = 0x22, + VK_END = 0x23, + VK_HOME = 0x24, + VK_LEFT = 0x25, + VK_UP = 0x26, + VK_RIGHT = 0x27, + VK_DOWN = 0x28, + VK_SELECT = 0x29, + VK_PRINT = 0x2A, + VK_EXECUTE = 0x2B, + VK_SNAPSHOT = 0x2C, + VK_INSERT = 0x2D, + VK_DELETE = 0x2E, + VK_HELP = 0x2F, + // + VK_LWIN = 0x5B, + VK_RWIN = 0x5C, + VK_APPS = 0x5D, + // + VK_SLEEP = 0x5F, + // + VK_NUMPAD0 = 0x60, + VK_NUMPAD1 = 0x61, + VK_NUMPAD2 = 0x62, + VK_NUMPAD3 = 0x63, + VK_NUMPAD4 = 0x64, + VK_NUMPAD5 = 0x65, + VK_NUMPAD6 = 0x66, + VK_NUMPAD7 = 0x67, + VK_NUMPAD8 = 0x68, + VK_NUMPAD9 = 0x69, + VK_MULTIPLY = 0x6A, + VK_ADD = 0x6B, + VK_SEPARATOR = 0x6C, + VK_SUBTRACT = 0x6D, + VK_DECIMAL = 0x6E, + VK_DIVIDE = 0x6F, + VK_F1 = 0x70, + VK_F2 = 0x71, + VK_F3 = 0x72, + VK_F4 = 0x73, + VK_F5 = 0x74, + VK_F6 = 0x75, + VK_F7 = 0x76, + VK_F8 = 0x77, + VK_F9 = 0x78, + VK_F10 = 0x79, + VK_F11 = 0x7A, + VK_F12 = 0x7B, + VK_F13 = 0x7C, + VK_F14 = 0x7D, + VK_F15 = 0x7E, + VK_F16 = 0x7F, + VK_F17 = 0x80, + VK_F18 = 0x81, + VK_F19 = 0x82, + VK_F20 = 0x83, + VK_F21 = 0x84, + VK_F22 = 0x85, + VK_F23 = 0x86, + VK_F24 = 0x87, + // + VK_NUMLOCK = 0x90, + VK_SCROLL = 0x91, + // + VK_OEM_NEC_EQUAL = 0x92, // '=' key on numpad + // + VK_OEM_FJ_JISHO = 0x92, // 'Dictionary' key + VK_OEM_FJ_MASSHOU = 0x93, // 'Unregister word' key + VK_OEM_FJ_TOUROKU = 0x94, // 'Register word' key + VK_OEM_FJ_LOYA = 0x95, // 'Left OYAYUBI' key + VK_OEM_FJ_ROYA = 0x96, // 'Right OYAYUBI' key + // + VK_LSHIFT = 0xA0, + VK_RSHIFT = 0xA1, + VK_LCONTROL = 0xA2, + VK_RCONTROL = 0xA3, + VK_LMENU = 0xA4, + VK_RMENU = 0xA5, + // + VK_BROWSER_BACK = 0xA6, + VK_BROWSER_FORWARD = 0xA7, + VK_BROWSER_REFRESH = 0xA8, + VK_BROWSER_STOP = 0xA9, + VK_BROWSER_SEARCH = 0xAA, + VK_BROWSER_FAVORITES = 0xAB, + VK_BROWSER_HOME = 0xAC, + // + VK_VOLUME_MUTE = 0xAD, + VK_VOLUME_DOWN = 0xAE, + VK_VOLUME_UP = 0xAF, + VK_MEDIA_NEXT_TRACK = 0xB0, + VK_MEDIA_PREV_TRACK = 0xB1, + VK_MEDIA_STOP = 0xB2, + VK_MEDIA_PLAY_PAUSE = 0xB3, + VK_LAUNCH_MAIL = 0xB4, + VK_LAUNCH_MEDIA_SELECT = 0xB5, + VK_LAUNCH_APP1 = 0xB6, + VK_LAUNCH_APP2 = 0xB7, + // + VK_OEM_1 = 0xBA, // ';:' for US + VK_OEM_PLUS = 0xBB, // '+' any country + VK_OEM_COMMA = 0xBC, // ',' any country + VK_OEM_MINUS = 0xBD, // '-' any country + VK_OEM_PERIOD = 0xBE, // '.' any country + VK_OEM_2 = 0xBF, // '/?' for US + VK_OEM_3 = 0xC0, // '`~' for US + // + VK_OEM_4 = 0xDB, // '[{' for US + VK_OEM_5 = 0xDC, // '\|' for US + VK_OEM_6 = 0xDD, // ']}' for US + VK_OEM_7 = 0xDE, // ''"' for US + VK_OEM_8 = 0xDF, + // + VK_OEM_AX = 0xE1, // 'AX' key on Japanese AX kbd + VK_OEM_102 = 0xE2, // "<>" or "\|" on RT 102-key kbd. + VK_ICO_HELP = 0xE3, // Help key on ICO + VK_ICO_00 = 0xE4, // 00 key on ICO + // + VK_PROCESSKEY = 0xE5, + // + VK_ICO_CLEAR = 0xE6, + // + VK_PACKET = 0xE7, + // + VK_OEM_RESET = 0xE9, + VK_OEM_JUMP = 0xEA, + VK_OEM_PA1 = 0xEB, + VK_OEM_PA2 = 0xEC, + VK_OEM_PA3 = 0xED, + VK_OEM_WSCTRL = 0xEE, + VK_OEM_CUSEL = 0xEF, + VK_OEM_ATTN = 0xF0, + VK_OEM_FINISH = 0xF1, + VK_OEM_COPY = 0xF2, + VK_OEM_AUTO = 0xF3, + VK_OEM_ENLW = 0xF4, + VK_OEM_BACKTAB = 0xF5, + // + VK_ATTN = 0xF6, + VK_CRSEL = 0xF7, + VK_EXSEL = 0xF8, + VK_EREOF = 0xF9, + VK_PLAY = 0xFA, + VK_ZOOM = 0xFB, + VK_NONAME = 0xFC, + VK_PA1 = 0xFD, + VK_OEM_CLEAR = 0xFE + } +} diff --git a/OnTopReplica/Native/WM.cs b/OnTopReplica/Native/WM.cs new file mode 100644 index 0000000..eddcd01 --- /dev/null +++ b/OnTopReplica/Native/WM.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica.Native { + /// + /// Native Windows Message codes. + /// + static class WM { + public const int GETICON = 0x7f; + public const int SIZING = 0x214; + public const int NCHITTEST = 0x84; + public const int NCPAINT = 0x0085; + public const int LBUTTONDOWN = 0x0201; + public const int LBUTTONUP = 0x0202; + public const int LBUTTONDBLCLK = 0x0203; + public const int RBUTTONDOWN = 0x0204; + public const int RBUTTONUP = 0x0205; + public const int RBUTTONDBLCLK = 0x0206; + public const int NCLBUTTONUP = 0x00A2; + public const int NCLBUTTONDOWN = 0x00A1; + public const int NCLBUTTONDBLCLK = 0x00A3; + public const int NCRBUTTONUP = 0x00A5; + public const int SYSCOMMAND = 0x0112; + public const int GETTEXT = 0x000D; + public const int GETTEXTLENGTH = 0x000E; + } +} diff --git a/OnTopReplica/Native/WMSZ.cs b/OnTopReplica/Native/WMSZ.cs new file mode 100644 index 0000000..2052280 --- /dev/null +++ b/OnTopReplica/Native/WMSZ.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica.Native { + /// + /// Native Win32 sizing codes (used by WM_SIZING message). + /// + static class WMSZ { + public const int LEFT = 1; + public const int RIGHT = 2; + public const int TOP = 3; + public const int BOTTOM = 6; + } +} diff --git a/OnTopReplica/Native/WindowManagerMethods.cs b/OnTopReplica/Native/WindowManagerMethods.cs new file mode 100644 index 0000000..967f2a6 --- /dev/null +++ b/OnTopReplica/Native/WindowManagerMethods.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + /// + /// Common Win32 Window Manager native methods. + /// + static class WindowManagerMethods { + + [DllImport("user32.dll")] + public static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll")] + public static extern IntPtr RealChildWindowFromPoint(IntPtr parent, NPoint point); + + [return: MarshalAs(UnmanagedType.Bool)] + public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam); + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool IsWindowVisible(IntPtr hWnd); + + [DllImport("user32.dll")] + public static extern IntPtr GetDesktopWindow(); + + [DllImport("user32.dll")] + static extern bool ClientToScreen(IntPtr hwnd, ref NPoint point); + + /// + /// Converts a point in client coordinates of a window to screen coordinates. + /// + /// Handle to the window of the original point. + /// Point expressed in client coordinates. + /// Point expressed in screen coordinates. + public static NPoint ClientToScreen(IntPtr hwnd, NPoint clientPoint) { + NPoint localCopy = new NPoint(clientPoint); + + if (ClientToScreen(hwnd, ref localCopy)) + return localCopy; + else + return new NPoint(); + } + + [DllImport("user32.dll")] + static extern bool ScreenToClient(IntPtr hwnd, ref NPoint point); + + /// + /// Converts a point in screen coordinates in client coordinates relative to a window. + /// + /// Handle of the window whose client coordinate system should be used. + /// Point expressed in screen coordinates. + /// Point expressed in client coordinates. + public static NPoint ScreenToClient(IntPtr hwnd, NPoint screenPoint) { + NPoint localCopy = new NPoint(screenPoint); + + if (ScreenToClient(hwnd, ref localCopy)) + return localCopy; + else + return new NPoint(); + } + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + public static extern IntPtr GetParent(IntPtr hWnd); + + [DllImport("user32.dll", SetLastError = false)] + public static extern bool SetForegroundWindow(IntPtr hwnd); + + public enum GetWindowMode : uint { + GW_HWNDFIRST = 0, + GW_HWNDLAST = 1, + GW_HWNDNEXT = 2, + GW_HWNDPREV = 3, + GW_OWNER = 4, + GW_CHILD = 5, + GW_ENABLEDPOPUP = 6 + } + + [DllImport("user32.dll")] + public static extern IntPtr GetWindow(IntPtr hwnd, GetWindowMode mode); + + } +} diff --git a/OnTopReplica/Native/WindowMethods.cs b/OnTopReplica/Native/WindowMethods.cs new file mode 100644 index 0000000..3c35c02 --- /dev/null +++ b/OnTopReplica/Native/WindowMethods.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + /// + /// Common Win32 methods for operating on windows. + /// + static class WindowMethods { + + [DllImport("user32.dll", SetLastError = true)] + public static extern bool GetClientRect(IntPtr handle, out NRectangle rect); + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] + static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount); + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] + static extern int GetWindowTextLength(IntPtr hWnd); + + /// + /// Gets a window's text via API call. + /// + /// Window handle. + /// Title of the window. + public static string GetWindowText(IntPtr hwnd) { + int length = GetWindowTextLength(hwnd); + + if (length > 0) { + StringBuilder sb = new StringBuilder(length + 1); + if (WindowMethods.GetWindowText(hwnd, sb, sb.Capacity) > 0) + return sb.ToString(); + else + return String.Empty; + } + else + return String.Empty; + } + + const int MaxClassLength = 255; + + public static string GetWindowClass(IntPtr hwnd) { + var sb = new StringBuilder(MaxClassLength + 1); + RealGetWindowClass(hwnd, sb, MaxClassLength); + return sb.ToString(); + } + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] + static extern uint RealGetWindowClass(IntPtr hwnd, [Out] StringBuilder lpString, uint maxCount); + + public enum WindowLong { + WndProc = (-4), + HInstance = (-6), + HwndParent = (-8), + Style = (-16), + ExStyle = (-20), + UserData = (-21), + Id = (-12) + } + + public enum ClassLong { + Icon = -14, + IconSmall = -34 + } + + [Flags] + public enum WindowStyles : long { + None = 0, + Disabled = 0x8000000L, + Minimize = 0x20000000L, + MinimizeBox = 0x20000L, + Visible = 0x10000000L + } + + [Flags] + public enum WindowExStyles : long { + AppWindow = 0x40000, + Layered = 0x80000, + NoActivate = 0x8000000L, + ToolWindow = 0x80, + TopMost = 8, + Transparent = 0x20 + } + + public static IntPtr GetWindowLong(IntPtr hWnd, WindowLong i) { + if (IntPtr.Size == 8) { + return GetWindowLongPtr64(hWnd, i); + } + else { + return new IntPtr(GetWindowLong32(hWnd, i)); + } + } + + [DllImport("user32.dll", EntryPoint = "GetWindowLong")] + static extern int GetWindowLong32(IntPtr hWnd, WindowLong nIndex); + + [DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")] + static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, WindowLong nIndex); + + public static IntPtr SetWindowLong(IntPtr hWnd, WindowLong i, IntPtr dwNewLong) { + if (IntPtr.Size == 8) { + return SetWindowLongPtr64(hWnd, i, dwNewLong); + } + else { + return new IntPtr(SetWindowLong32(hWnd, i, dwNewLong.ToInt32())); + } + } + + [DllImport("user32.dll", EntryPoint = "SetWindowLong")] + static extern int SetWindowLong32(IntPtr hWnd, WindowLong nIndex, int dwNewLong); + + [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr")] + static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, WindowLong nIndex, IntPtr dwNewLong); + + #region Class styles + + [DllImport("user32.dll", EntryPoint = "GetClassLongPtrW")] + static extern IntPtr GetClassLong64(IntPtr hWnd, int nIndex); + + [DllImport("user32.dll", EntryPoint = "GetClassLongW")] + static extern int GetClassLong32(IntPtr hWnd, int nIndex); + + public static IntPtr GetClassLong(IntPtr hWnd, ClassLong i) { + if (IntPtr.Size == 8) { + return GetClassLong64(hWnd, (int)i); + } + else { + return new IntPtr(GetClassLong32(hWnd, (int)i)); + } + } + + #endregion + + [DllImport("user32.dll")] + public static extern IntPtr GetMenu(IntPtr hwnd); + + } +} diff --git a/OnTopReplica/Native/WindowsSevenMethods.cs b/OnTopReplica/Native/WindowsSevenMethods.cs new file mode 100644 index 0000000..587bf95 --- /dev/null +++ b/OnTopReplica/Native/WindowsSevenMethods.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OnTopReplica.Native { + + static class WindowsSevenMethods { + + [DllImport("shell32.dll")] + internal static extern void SetCurrentProcessExplicitAppUserModelID( + [MarshalAs(UnmanagedType.LPWStr)] string AppID); + + [DllImport("shell32.dll")] + internal static extern void GetCurrentProcessExplicitAppUserModelID( + [Out(), MarshalAs(UnmanagedType.LPWStr)] out string AppID); + + } + +} diff --git a/OnTopReplica/NativeToolStripRenderer.cs b/OnTopReplica/NativeToolStripRenderer.cs new file mode 100644 index 0000000..b4d94f3 --- /dev/null +++ b/OnTopReplica/NativeToolStripRenderer.cs @@ -0,0 +1,587 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Diagnostics.CodeAnalysis; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; +using System.Runtime.InteropServices; + +namespace Asztal.Szótár { + public enum ToolbarTheme { + Toolbar, + MediaToolbar, + CommunicationsToolbar, + BrowserTabBar + } + + /// + /// Renders a toolstrip using the UxTheme API via VisualStyleRenderer. Visual styles must be supported for this to work; if you need to support other operating systems use + /// + class UXThemeToolStripRenderer : ToolStripSystemRenderer { + /// + /// It shouldn't be necessary to P/Invoke like this, however a bug in VisualStyleRenderer.GetMargins forces my hand. + /// + static internal class NativeMethods { + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct MARGINS { + public int cxLeftWidth; + public int cxRightWidth; + public int cyTopHeight; + public int cyBottomHeight; + } + + [DllImport("uxtheme", ExactSpelling = true)] + public extern static Int32 GetThemeMargins(IntPtr hTheme, IntPtr hdc, int iPartId, int iStateId, int iPropId, IntPtr rect, out MARGINS pMargins); + } + + //See http://msdn2.microsoft.com/en-us/library/bb773210.aspx - "Parts and States" + #region Parts and States + enum MenuParts : int { + MENU_MENUITEM_TMSCHEMA = 1, + MENU_MENUDROPDOWN_TMSCHEMA = 2, + MENU_MENUBARITEM_TMSCHEMA = 3, + MENU_MENUBARDROPDOWN_TMSCHEMA = 4, + MENU_CHEVRON_TMSCHEMA = 5, + MENU_SEPARATOR_TMSCHEMA = 6, + MENU_BARBACKGROUND = 7, + MENU_BARITEM = 8, + MENU_POPUPBACKGROUND = 9, + MENU_POPUPBORDERS = 10, + MENU_POPUPCHECK = 11, + MENU_POPUPCHECKBACKGROUND = 12, + MENU_POPUPGUTTER = 13, + MENU_POPUPITEM = 14, + MENU_POPUPSEPARATOR = 15, + MENU_POPUPSUBMENU = 16, + MENU_SYSTEMCLOSE = 17, + MENU_SYSTEMMAXIMIZE = 18, + MENU_SYSTEMMINIMIZE = 19, + MENU_SYSTEMRESTORE = 20 + } + + enum MenuBarStates : int { + MB_ACTIVE = 1, + MB_INACTIVE = 2 + } + + enum MenuBarItemStates : int { + MBI_NORMAL = 1, + MBI_HOT = 2, + MBI_PUSHED = 3, + MBI_DISABLED = 4, + MBI_DISABLEDHOT = 5, + MBI_DISABLEDPUSHED = 6 + } + + enum MenuPopupItemStates : int { + MPI_NORMAL = 1, + MPI_HOT = 2, + MPI_DISABLED = 3, + MPI_DISABLEDHOT = 4 + } + + enum MenuPopupCheckStates : int { + MC_CHECKMARKNORMAL = 1, + MC_CHECKMARKDISABLED = 2, + MC_BULLETNORMAL = 3, + MC_BULLETDISABLED = 4 + } + + enum MenuPopupCheckBackgroundStates : int { + MCB_DISABLED = 1, + MCB_NORMAL = 2, + MCB_BITMAP = 3 + } + + enum MenuPopupSubMenuStates : int { + MSM_NORMAL = 1, + MSM_DISABLED = 2 + } + + enum MarginTypes : int { + TMT_SIZINGMARGINS = 3601, + TMT_CONTENTMARGINS = 3602, + TMT_CAPTIONMARGINS = 3603 + } + + const int RP_BACKGROUND = 6; + #endregion + + #region Theme helpers + Padding GetThemeMargins(IDeviceContext dc, MarginTypes marginType) { + NativeMethods.MARGINS margins; + try { + IntPtr hDC = dc.GetHdc(); + if (0 == NativeMethods.GetThemeMargins(renderer.Handle, hDC, renderer.Part, renderer.State, (int)marginType, IntPtr.Zero, out margins)) + return new Padding(margins.cxLeftWidth, margins.cyTopHeight, margins.cxRightWidth, margins.cyBottomHeight); + return new Padding(-1); + } finally { + dc.ReleaseHdc(); + } + } + + private static int GetItemState(ToolStripItem item) { + bool pressed = item.Pressed; + bool hot = item.Selected; + + if (item.Owner.IsDropDown) { + if (item.Enabled) + return hot ? (int)MenuPopupItemStates.MPI_HOT : (int)MenuPopupItemStates.MPI_NORMAL; + return hot ? (int)MenuPopupItemStates.MPI_DISABLEDHOT : (int)MenuPopupItemStates.MPI_DISABLED; + } else { + if (pressed) + return item.Enabled ? (int)MenuBarItemStates.MBI_PUSHED : (int)MenuBarItemStates.MBI_DISABLEDPUSHED; + if (item.Enabled) + return hot ? (int)MenuBarItemStates.MBI_HOT : (int)MenuBarItemStates.MBI_NORMAL; + return hot ? (int)MenuBarItemStates.MBI_DISABLEDHOT : (int)MenuBarItemStates.MBI_DISABLED; + } + } + #endregion + + #region Theme subclasses + public ToolbarTheme Theme { + get; set; + } + + private string RebarClass { + get { + return SubclassPrefix + "Rebar"; + } + } + + private string ToolbarClass { + get { + return SubclassPrefix + "ToolBar"; + } + } + + private string MenuClass { + get { + return SubclassPrefix + "Menu"; + } + } + + private string SubclassPrefix { + get { + switch (Theme) { + case ToolbarTheme.MediaToolbar: return "Media::"; + case ToolbarTheme.CommunicationsToolbar: return "Communications::"; + case ToolbarTheme.BrowserTabBar: return "BrowserTabBar::"; + default: return string.Empty; + } + } + } + + private VisualStyleElement Subclass(VisualStyleElement element) { + return VisualStyleElement.CreateElement(SubclassPrefix + element.ClassName, + element.Part, element.State); + } + #endregion + + VisualStyleRenderer renderer; + + public UXThemeToolStripRenderer(ToolbarTheme theme) { + Theme = theme; + renderer = new VisualStyleRenderer(VisualStyleElement.Button.PushButton.Normal); + } + + #region Borders + protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) { + renderer.SetParameters(MenuClass, (int)MenuParts.MENU_POPUPBORDERS, 0); + if (e.ToolStrip.IsDropDown) { + Region oldClip = e.Graphics.Clip; + + //Tool strip borders are rendered *after* the content, for some reason. + //So we have to exclude the inside of the popup otherwise we'll draw over it. + Rectangle insideRect = e.ToolStrip.ClientRectangle; + insideRect.Inflate(-1, -1); + e.Graphics.ExcludeClip(insideRect); + + renderer.DrawBackground(e.Graphics, e.ToolStrip.ClientRectangle, e.AffectedBounds); + + //Restore the old clip in case the Graphics is used again (does that ever happen?) + e.Graphics.Clip = oldClip; + } + } + #endregion + + #region Backgrounds + protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { + int partId = e.Item.Owner.IsDropDown ? (int)MenuParts.MENU_POPUPITEM : (int)MenuParts.MENU_BARITEM; + renderer.SetParameters(MenuClass, partId, GetItemState(e.Item)); + + Rectangle bgRect = e.Item.ContentRectangle; + + Padding content = GetThemeMargins(e.Graphics, MarginTypes.TMT_CONTENTMARGINS), + sizing = GetThemeMargins(e.Graphics, MarginTypes.TMT_SIZINGMARGINS), + caption = GetThemeMargins(e.Graphics, MarginTypes.TMT_CAPTIONMARGINS); + + if (!e.Item.Owner.IsDropDown) { + bgRect.Y = 0; + bgRect.Height = e.ToolStrip.Height; + bgRect.Inflate(-1, -1); //GetMargins here perhaps? + } + + renderer.DrawBackground(e.Graphics, bgRect, bgRect); + } + + protected override void OnRenderToolStripPanelBackground(ToolStripPanelRenderEventArgs e) { + //Draw the background using Rebar & RP_BACKGROUND (or, if that is not available, fall back to + //Rebar.Band.Normal) + if (VisualStyleRenderer.IsElementDefined(VisualStyleElement.CreateElement(RebarClass, RP_BACKGROUND, 0))) { + renderer.SetParameters(RebarClass, RP_BACKGROUND, 0); + } else { + renderer.SetParameters(RebarClass, 0, 0); + //renderer.SetParameters(VisualStyleElement.Taskbar.BackgroundBottom.Normal); + //renderer.SetParameters(Subclass(VisualStyleElement.Rebar.Band.Normal)); + } + + if (renderer.IsBackgroundPartiallyTransparent()) + renderer.DrawParentBackground(e.Graphics, e.ToolStripPanel.ClientRectangle, e.ToolStripPanel); + + renderer.DrawBackground(e.Graphics, e.ToolStripPanel.ClientRectangle); + + //Draw the etched edges of each row. + //renderer.SetParameters(Subclass(VisualStyleElement.Rebar.Band.Normal)); + //foreach (ToolStripPanelRow row in e.ToolStripPanel.Rows) { + // Rectangle rowBounds = row.Bounds; + // rowBounds.Offset(0, -1); + // renderer.DrawEdge(e.Graphics, rowBounds, Edges.Top, EdgeStyle.Etched, EdgeEffects.None); + //} + + e.Handled = true; + } + + //Render the background of an actual menu bar, dropdown menu or toolbar. + protected override void OnRenderToolStripBackground(System.Windows.Forms.ToolStripRenderEventArgs e) { + if (e.ToolStrip.IsDropDown) { + renderer.SetParameters(MenuClass, (int)MenuParts.MENU_POPUPBACKGROUND, 0); + } else { + //It's a MenuStrip or a ToolStrip. If it's contained inside a larger panel, it should have a + //transparent background, showing the panel's background. + + if (e.ToolStrip.Parent is ToolStripPanel) { + //The background should be transparent, because the ToolStripPanel's background will be visible. + //(Of course, we assume the ToolStripPanel is drawn using the same theme, but it's not my fault + //if someone does that.) + return; + } else { + //A lone toolbar/menubar should act like it's inside a toolbox, I guess. + //Maybe I should use the MenuClass in the case of a MenuStrip, although that would break + //the other themes... + if(VisualStyleRenderer.IsElementDefined(VisualStyleElement.CreateElement(RebarClass, RP_BACKGROUND, 0))) + renderer.SetParameters(RebarClass, RP_BACKGROUND, 0); + else + renderer.SetParameters(RebarClass, 0, 0); + } + } + + if (renderer.IsBackgroundPartiallyTransparent()) + renderer.DrawParentBackground(e.Graphics, e.ToolStrip.ClientRectangle, e.ToolStrip); + + renderer.DrawBackground(e.Graphics, e.ToolStrip.ClientRectangle, e.AffectedBounds); + } + + protected override void OnRenderToolStripContentPanelBackground(ToolStripContentPanelRenderEventArgs e) { + //e.Graphics.FillRectangle(Brushes.RosyBrown, e.ToolStripContentPanel.ClientRectangle); + //base.OnRenderToolStripContentPanelBackground(e); + } + + //Some sort of chevron thing? + //protected override void OnRenderOverflowButtonBackground(ToolStripItemRenderEventArgs e) { + // base.OnRenderOverflowButtonBackground(e); + //} + #endregion + + #region Text + protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) { + int partId = e.Item.Owner.IsDropDown ? (int)MenuParts.MENU_POPUPITEM : (int)MenuParts.MENU_BARITEM; + renderer.SetParameters(MenuClass, partId, GetItemState(e.Item)); + Color color = renderer.GetColor(ColorProperty.TextColor); + + if(e.Item.Owner.IsDropDown || e.Item.Owner is MenuStrip) + e.TextColor = color; + + base.OnRenderItemText(e); + } + #endregion + + #region Glyphs + + //protected override void OnRenderGrip(ToolStripGripRenderEventArgs e) { + // if (e.GripStyle == ToolStripGripStyle.Visible) { + // renderer.SetParameters(VisualStyleElement.Rebar.Gripper.Normal); + // renderer.DrawBackground(e.Graphics, e.GripBounds, e.AffectedBounds); + // } + //} + + protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) { + if (e.ToolStrip.IsDropDown) { + renderer.SetParameters(MenuClass, (int)MenuParts.MENU_POPUPGUTTER, 0); + Rectangle displayRect = e.ToolStrip.DisplayRectangle, + marginRect = new Rectangle(0, displayRect.Top, displayRect.Left, displayRect.Height); + //e.Graphics.DrawRectangle(Pens.Black, marginRect); + renderer.DrawBackground(e.Graphics, marginRect, marginRect); + } + } + + protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) { + if (e.ToolStrip.IsDropDown) { + renderer.SetParameters(MenuClass, (int)MenuParts.MENU_POPUPSEPARATOR, 0); + Rectangle rect = new Rectangle(e.ToolStrip.DisplayRectangle.Left, 0, e.ToolStrip.DisplayRectangle.Width, e.Item.Height); + renderer.DrawBackground(e.Graphics, rect, rect); + } else { + base.OnRenderSeparator(e); + } + } + + protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { + ToolStripMenuItem item = e.Item as ToolStripMenuItem; + if (item != null) { + if (item.Checked) { + Rectangle rect = e.Item.ContentRectangle; + rect.Width = rect.Height; + + //Center the checkmark horizontally in the gutter (looks ugly, though) + //rect.X = (e.ToolStrip.DisplayRectangle.Left - rect.Width) / 2; + + renderer.SetParameters(MenuClass, (int)MenuParts.MENU_POPUPCHECKBACKGROUND, e.Item.Enabled ? (int)MenuPopupCheckBackgroundStates.MCB_NORMAL : (int)MenuPopupCheckBackgroundStates.MCB_DISABLED); + renderer.DrawBackground(e.Graphics, rect); + + Padding margins = GetThemeMargins(e.Graphics, MarginTypes.TMT_SIZINGMARGINS); + + rect = new Rectangle(rect.X + margins.Left, rect.Y + margins.Top, + rect.Width - margins.Horizontal, + rect.Height - margins.Vertical); + + //I don't think ToolStrip even supports radio box items. So no need to render them. + renderer.SetParameters(MenuClass, (int)MenuParts.MENU_POPUPCHECK, e.Item.Enabled ? (int)MenuPopupCheckStates.MC_CHECKMARKNORMAL : (int)MenuPopupCheckStates.MC_CHECKMARKDISABLED); + + renderer.DrawBackground(e.Graphics, rect); + } + } else { + base.OnRenderItemCheck(e); + } + } + + //This is broken for RTL + protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) { + int stateId = e.Item.Enabled ? (int)MenuPopupSubMenuStates.MSM_NORMAL : (int)MenuPopupSubMenuStates.MSM_DISABLED; + renderer.SetParameters(MenuClass, (int)MenuParts.MENU_POPUPSUBMENU, stateId); + renderer.DrawBackground(e.Graphics, e.ArrowRectangle); + } + + protected override void OnRenderOverflowButtonBackground(ToolStripItemRenderEventArgs e) { + renderer.SetParameters(RebarClass, VisualStyleElement.Rebar.Chevron.Normal.Part, VisualStyleElement.Rebar.Chevron.Normal.State); + renderer.DrawBackground(e.Graphics, e.Item.ContentRectangle); + + //base.OnRenderOverflowButtonBackground(e); + } + #endregion + + public static bool IsSupported { + get { + if (!VisualStyleRenderer.IsSupported) + return false; + + return VisualStyleRenderer.IsElementDefined(VisualStyleElement.CreateElement("MENU", (int)MenuParts.MENU_BARBACKGROUND, (int)MenuBarStates.MB_ACTIVE)); + } + } + } + + /// + /// Renders a toolstrip using UXTheme if possible, and switches back to the default + /// ToolStripRenderer when UXTheme-based rendering is not available. + /// Designed for menu bars and context menus - it is not guaranteed to work with anything else. + /// + /// + /// NativeToolStripRenderer.SetToolStripRenderer(toolStrip1, toolStrip2, contextMenuStrip1); + /// + /// + /// toolStrip1.Renderer = new NativeToolStripRenderer(); + /// + public class NativeToolStripRenderer : ToolStripRenderer { + UXThemeToolStripRenderer nativeRenderer; + ToolStripRenderer defaultRenderer; + ToolStrip toolStrip; + + //NativeToolStripRenderer looks best with no padding - but keep the old padding in case the + //visual styles become unsupported again (e.g. user changes to windows classic skin) + Padding defaultPadding; + + #region Constructors + /// + /// Creates a NativeToolStripRenderer for a particular ToolStrip. NativeToolStripRenderer will subscribe to some events + /// of this ToolStrip. + /// + /// The toolstrip for this NativeToolStripRenderer. NativeToolStripRenderer will subscribe to some events + /// of this ToolStrip. + public NativeToolStripRenderer(ToolStrip toolStrip, ToolbarTheme theme) { + if (toolStrip == null) + throw new ArgumentNullException("toolStrip", "ToolStrip cannot be null."); + + Theme = theme; + + this.toolStrip = toolStrip; + defaultRenderer = toolStrip.Renderer; + + defaultPadding = toolStrip.Padding; + toolStrip.SystemColorsChanged += new EventHandler(toolStrip_SystemColorsChanged); + + //Can't initialize here - constructor throws if visual styles not enabled + //nativeRenderer = new NativeToolStripRenderer(); + } + + public NativeToolStripRenderer(ToolStripPanel panel, ToolbarTheme theme) { + if (panel == null) + throw new ArgumentNullException("panel", "Panel cannot be null."); + + Theme = theme; + + this.toolStrip = null; + defaultRenderer = panel.Renderer; + } + #endregion + + public ToolbarTheme Theme { get; set; } + + void toolStrip_SystemColorsChanged(object sender, EventArgs e) { + if (toolStrip == null) + return; + + if (UXThemeToolStripRenderer.IsSupported) + toolStrip.Padding = Padding.Empty; + else + toolStrip.Padding = defaultPadding; + } + + //This is indeed called every time a menu part is rendered, but I can't + //find a way of caching it that I can be sure has no race conditions. + //The check is no longer very costly, anyway. + protected ToolStripRenderer ActualRenderer { + get { + bool nativeSupported = UXThemeToolStripRenderer.IsSupported; + + if (nativeSupported) { + if (nativeRenderer == null) + nativeRenderer = new UXThemeToolStripRenderer(Theme); + return nativeRenderer; + } + + return defaultRenderer; + } + } + + #region InitializeXXX + protected override void Initialize(ToolStrip toolStrip) { + base.Initialize(toolStrip); + + toolStrip.Padding = Padding.Empty; + + if (/*!(toolStrip is MenuStrip) &&*/ toolStrip.Parent is ToolStripPanel) { + toolStrip.BackColor = Color.Transparent; + } + } + + protected override void InitializePanel(ToolStripPanel toolStripPanel) { + base.InitializePanel(toolStripPanel); + } + + protected override void InitializeItem(ToolStripItem item) { + base.InitializeItem(item); + } + #endregion + + #region SetToolStripRenderer + /// + /// Sets the renderer of each ToolStrip to a NativeToolStripRenderer. A convenience method. + /// + /// A parameter list of ToolStrips. + [SuppressMessage("Microsoft.Design", "CA1062")] //The parameter array is actually checked. + public static void SetToolStripRenderer(ToolbarTheme theme, params Control[] toolStrips) { + foreach (Control ts in toolStrips) { + if (ts == null) + throw new ArgumentNullException("toolStrips", "ToolStrips cannot contain a null reference."); + } + + foreach (Control ts in toolStrips) { + if (ts is ToolStrip) { + ToolStrip t = (ToolStrip)ts; + t.Renderer = new NativeToolStripRenderer(t, theme); + } else if (ts is ToolStripPanel) { + ToolStripPanel t = (ToolStripPanel)ts; + t.Renderer = new NativeToolStripRenderer(t, theme); + } else + throw new ArgumentException("Can't set the renderer for a " + ts.GetType().Name); + } + } + + public static void SetToolStripRenderer(params Control[] toolStrips) { + SetToolStripRenderer(ToolbarTheme.Toolbar, toolStrips); + } + #endregion + + #region Overridden Methods - Deferred to actual renderer + protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) { + ActualRenderer.DrawArrow(e); + } + + protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) { + ActualRenderer.DrawButtonBackground(e); + } + + protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { + ActualRenderer.DrawDropDownButtonBackground(e); + } + + protected override void OnRenderGrip(ToolStripGripRenderEventArgs e) { + ActualRenderer.DrawGrip(e); + } + + protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) { + ActualRenderer.DrawImageMargin(e); + } + + protected override void OnRenderItemBackground(ToolStripItemRenderEventArgs e) { + ActualRenderer.DrawItemBackground(e); + } + + protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { + ActualRenderer.DrawItemCheck(e); + } + + protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) { + ActualRenderer.DrawItemImage(e); + } + + protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) { + ActualRenderer.DrawItemText(e); + } + + protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { + ActualRenderer.DrawMenuItemBackground(e); + } + + protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) { + ActualRenderer.DrawSeparator(e); + } + + protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) { + ActualRenderer.DrawToolStripBackground(e); + } + + protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) { + ActualRenderer.DrawToolStripBorder(e); + } + + protected override void OnRenderToolStripContentPanelBackground(ToolStripContentPanelRenderEventArgs e) { + ActualRenderer.DrawToolStripContentPanelBackground(e); + } + + protected override void OnRenderToolStripPanelBackground(ToolStripPanelRenderEventArgs e) { + ActualRenderer.DrawToolStripPanelBackground(e); + } + #endregion + } +} diff --git a/OnTopReplica/NotificationIcon.cs b/OnTopReplica/NotificationIcon.cs new file mode 100644 index 0000000..ebdce67 --- /dev/null +++ b/OnTopReplica/NotificationIcon.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using OnTopReplica.Properties; + +namespace OnTopReplica { + /// + /// Notification icon that installs itself in the "tray" and manipulates the OnTopReplica main form. + /// + class NotificationIcon : IDisposable { + + public NotificationIcon(MainForm form) { + Form = form; + Install(); + } + + public MainForm Form { get; private set; } + + NotifyIcon _taskIcon; + ContextMenuStrip _contextMenu; + + private void Install() { + _contextMenu = new ContextMenuStrip(); + _contextMenu.Items.AddRange(new ToolStripItem[] { + new ToolStripMenuItem(Strings.MenuOpen, Resources.icon, TaskIconOpen_click) { + ToolTipText = Strings.MenuOpenTT, + }, + new ToolStripMenuItem(Strings.MenuWindows, Resources.list){ + DropDown = Form.MenuWindows, + ToolTipText = Strings.MenuWindowsTT + }, + new ToolStripMenuItem(Strings.MenuReset, null, TaskIconReset_click){ + ToolTipText = Strings.MenuResetTT + }, + new ToolStripMenuItem(Strings.MenuClose, Resources.close_new, TaskIconExit_click){ + ToolTipText = Strings.MenuCloseTT + } + }); + Asztal.Szótár.NativeToolStripRenderer.SetToolStripRenderer(_contextMenu); + + _taskIcon = new NotifyIcon { + Text = Strings.ApplicationName, + Icon = Resources.icon_new, + Visible = true, + ContextMenuStrip = _contextMenu + }; + _taskIcon.DoubleClick += new EventHandler(TaskIcon_doubleclick); + } + + #region IDisposable Members + + public void Dispose() { + //Destroy NotifyIcon + if (_taskIcon != null) { + _taskIcon.Visible = false; + _taskIcon.Dispose(); + _taskIcon = null; + } + } + + #endregion + + #region Task Icon events + + void TaskIcon_doubleclick(object sender, EventArgs e) { + Form.EnsureMainFormVisible(); + } + + private void TaskIconOpen_click(object sender, EventArgs e) { + Form.EnsureMainFormVisible(); + } + + private void TaskIconReset_click(object sender, EventArgs e) { + Form.ResetMainFormWithConfirmation(); + } + + private void TaskIconExit_click(object sender, EventArgs e) { + Form.Close(); + } + + #endregion + } +} diff --git a/OnTopReplica/OnTopReplica.csproj b/OnTopReplica/OnTopReplica.csproj new file mode 100644 index 0000000..fbbb0e7 --- /dev/null +++ b/OnTopReplica/OnTopReplica.csproj @@ -0,0 +1,460 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {E626BD6E-BF38-4EB7-A128-5CA6F40EF557} + WinExe + Properties + OnTopReplica + OnTopReplica + v2.0 + 512 + Assets\icon-new.ico + false + false + Internet + OnTopReplica.Program + + + false + A305A505E19CF40E069521C80C13AB3C900EDB7C + OnTopReplica_1_TemporaryKey.pfx + false + + + + + 3.5 + + publish\ + true + Disk + true + Background + 1 + Weeks + true + false + true + http://www.klopfenstein.net/public/Uploads/ontopreplica/ + http://www.klopfenstein.net/lorenz.aspx/ontopreplica + en + OnTopReplica + Lorenz Cuno Klopfenstein + true + publish.htm + false + 0 + 3.2.0.%2a + false + true + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + false + true + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + false + + + + + + + + + OnTopReplica.exe.manifest + + + + + + + + + + False + ..\Lib\VistaControls.dll + + + + + Form + + + AboutForm.cs + + + + Form + + + + + + + Form + + + Form + + + Form + + + Form + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UserControl + + + UserControl + + + GroupSwitchPanel.cs + + + + Form + + + CommandLineReportForm.cs + + + + + + + + + + + + + + + + + + True + True + Strings.resx + + + Component + + + Form + + + MainForm.cs + + + + + + AboutForm.cs + Designer + + + GroupSwitchPanel.cs + Designer + + + CommandLineReportForm.cs + + + ResXFileCodeGenerator + Strings.cs.Designer.cs + + + ResXFileCodeGenerator + Strings.da.Designer.cs + + + + ResXFileCodeGenerator + Strings.it.Designer.cs + Designer + + + MainForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + RegionPanel.cs + Designer + + + Strings.Designer.cs + Designer + ResXFileCodeGenerator + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + UserControl + + + RegionPanel.cs + + + + + True + True + Strings.it.resx + + + Component + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + + + + + Exclude + True + File + + + False + + + + + Exclude + True + File + + + False + + + + + Exclude + True + File + + + False + + + + + Exclude + True + File + + + False + + + + + Include + True + Satellite + + + False + + + + + Include + True + Satellite + + + False + + + + + Include + True + Satellite + + + + + + + + + \ No newline at end of file diff --git a/OnTopReplica/OnTopReplica.csproj.user b/OnTopReplica/OnTopReplica.csproj.user new file mode 100644 index 0000000..230b070 --- /dev/null +++ b/OnTopReplica/OnTopReplica.csproj.user @@ -0,0 +1,22 @@ + + + + publish\ + http://www.klopfenstein.net/public/Uploads/ontopreplica/|http://www.klopfenstein.net/download.aspx%3ffile=ontopreplica%252fsetup.exe/|http://www.klopfenstein.net/lorenz/programming/ontopreplica/|http://www.klopfenstein.net/lorenz/programming/|http://lorenz.klopfenstein.net/ + http://www.klopfenstein.net/lorenz.aspx/ontopreplica|http://www.klopfenstein.net/loader.php%3fsection=lorenz&page=on_top_replica|http://www.klopfenstein.net/loader.php%3fsection=lorenz&page=programming_on_top_replica + http://www.klopfenstein.net/public/Uploads/ontopreplica/|http://www.klopfenstein.net/lorenz/programming/ontopreplica/ + + + en-US + false + + + + + false + + + + + + \ No newline at end of file diff --git a/OnTopReplica/OnTopReplica.exe.manifest b/OnTopReplica/OnTopReplica.exe.manifest new file mode 100644 index 0000000..b9febc2 --- /dev/null +++ b/OnTopReplica/OnTopReplica.exe.manifest @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + Lightweight clone of a window. + + + + + + \ No newline at end of file diff --git a/OnTopReplica/Pair.cs b/OnTopReplica/Pair.cs new file mode 100644 index 0000000..b2da01a --- /dev/null +++ b/OnTopReplica/Pair.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica { + + /// + /// Simple tuple with two values. + /// + struct Pair { + public T1 Item1; + public T2 Item2; + } + +} diff --git a/OnTopReplica/PlatformSupport.cs b/OnTopReplica/PlatformSupport.cs new file mode 100644 index 0000000..8f7d816 --- /dev/null +++ b/OnTopReplica/PlatformSupport.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.Text; +using OnTopReplica.Platforms; +using System.Windows.Forms; + +namespace OnTopReplica { + abstract class PlatformSupport : IDisposable { + + public static PlatformSupport Create() { + var os = Environment.OSVersion; + + if (os.Platform != PlatformID.Win32NT) + return new Other(); + + if (os.Version.Major == 6) { + if (os.Version.Minor >= 1) + return new WindowsSeven(); + else + return new WindowsVista(); + } + else if (os.Version.Major > 6) { + //Ensures forward compatibility + return new WindowsSeven(); + } + else { + //Generic NT + return new WindowsXp(); + } + } + + /// + /// Checks whether OnTopReplica is compatible with the platform. + /// + /// Returns false if OnTopReplica cannot run. + public abstract bool CheckCompatibility(); + + /// + /// Initializes the application. Called once in the app lifetime. + /// + public virtual void InitApp() { + } + + /// + /// Gets the main OnTopReplica form. + /// + protected MainForm Form { get; private set; } + + /// + /// Initializes a form. Called once in the form lifetime. + /// + /// Form to initialize. + public virtual void InitForm(MainForm form) { + Form = form; + } + + /// + /// Prepares the app for shutdown. Called once before the program terminates. + /// + public virtual void ShutdownApp() { + } + + /// + /// Hides the main form in a way that it can be restored later by the user. + /// + /// Form to hide. + public virtual void HideForm(MainForm form) { + form.Hide(); + } + + /// + /// Gets whether the form is currently hidden or not. + /// + public virtual bool IsHidden(MainForm form) { + return !form.Visible; + } + + /// + /// Restores the main form to its default state after is has been hidden. + /// Can be called whether the form is hidden or not. + /// + /// Form to restore. + public virtual void RestoreForm(MainForm form) { + form.Show(); + } + + /// + /// Called when the form changes its state, without calling into or . + /// Enables inheritors to update the form's state on each state change. + /// + public virtual void OnFormStateChange(MainForm form) { + } + + #region IDisposable Members + + bool _isDisposed = false; + + public void Dispose() { + if (_isDisposed) + return; + + this.ShutdownApp(); + _isDisposed = true; + } + + #endregion + + } +} diff --git a/OnTopReplica/Platforms/Other.cs b/OnTopReplica/Platforms/Other.cs new file mode 100644 index 0000000..abd253d --- /dev/null +++ b/OnTopReplica/Platforms/Other.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace OnTopReplica.Platforms { + class Other : PlatformSupport { + + public override bool CheckCompatibility() { + MessageBox.Show(Strings.ErrorNoDwm, Strings.ErrorNoDwmTitle, + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + } +} diff --git a/OnTopReplica/Platforms/WindowsSeven.cs b/OnTopReplica/Platforms/WindowsSeven.cs new file mode 100644 index 0000000..b1d1db0 --- /dev/null +++ b/OnTopReplica/Platforms/WindowsSeven.cs @@ -0,0 +1,52 @@ +using System; +using System.Windows.Forms; +using OnTopReplica.Native; +using VistaControls.Dwm; + +namespace OnTopReplica.Platforms { + class WindowsSeven : WindowsVista { + + public override void InitForm(MainForm form) { + DwmManager.SetWindowFlip3dPolicy(form, Flip3DPolicy.ExcludeAbove); + DwmManager.SetExludeFromPeek(form, true); + DwmManager.SetDisallowPeek(form, true); + + SetWindowStyle(form); + } + + public override void InitApp() { + //Set Application ID + WindowsSevenMethods.SetCurrentProcessExplicitAppUserModelID("OnTopReplica"); + } + + public override void HideForm(MainForm form) { + form.Opacity = 0; + } + + public override bool IsHidden(MainForm form) { + return (form.Opacity == 0.0); + } + + public override void RestoreForm(MainForm form) { + if (form.Opacity == 0.0) + form.Opacity = 1.0; + form.Show(); + SetWindowStyle(form); + } + + public override void OnFormStateChange(MainForm form) { + SetWindowStyle(form); + } + + private void SetWindowStyle(MainForm form) { + if (!form.IsFullscreen) { + //This hides the app from ALT+TAB + //Note that when minimized, it will be shown as an (ugly) minimized tool window + Native.WindowMethods.SetWindowLong(form.Handle, WindowMethods.WindowLong.ExStyle, + (IntPtr)WindowMethods.WindowExStyles.ToolWindow); + } + } + + + } +} diff --git a/OnTopReplica/Platforms/WindowsVista.cs b/OnTopReplica/Platforms/WindowsVista.cs new file mode 100644 index 0000000..d8d1b60 --- /dev/null +++ b/OnTopReplica/Platforms/WindowsVista.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using VistaControls.Dwm; +using OnTopReplica.Properties; +using VistaControls.TaskDialog; + +namespace OnTopReplica.Platforms { + + class WindowsVista : PlatformSupport { + + public override bool CheckCompatibility() { + if (!VistaControls.OsSupport.IsCompositionEnabled) { + MessageBox.Show(Strings.ErrorDwmOffContent, Strings.ErrorDwmOff, MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + return true; + } + + NotificationIcon _icon; + + public override void InitForm(MainForm form) { + DwmManager.SetWindowFlip3dPolicy(form, Flip3DPolicy.ExcludeAbove); + + //Do not show in task bar, but display notify icon + //NOTE: this effectively makes Windows ignore the Flip 3D policy set above (on Windows 7) + //NOTE: this also makes HotKey registration critically fail on Windows 7 + form.ShowInTaskbar = false; + + //Install tray icon + _icon = new NotificationIcon(form); + } + + public override void ShutdownApp() { + if (_icon != null) { + _icon.Dispose(); + _icon = null; + } + } + + } + +} diff --git a/OnTopReplica/Platforms/WindowsXp.cs b/OnTopReplica/Platforms/WindowsXp.cs new file mode 100644 index 0000000..88d3895 --- /dev/null +++ b/OnTopReplica/Platforms/WindowsXp.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace OnTopReplica.Platforms { + class WindowsXp : PlatformSupport { + + public override bool CheckCompatibility() { + MessageBox.Show(Strings.ErrorNoDwm, Strings.ErrorNoDwmTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + } +} diff --git a/OnTopReplica/Program.cs b/OnTopReplica/Program.cs new file mode 100644 index 0000000..fe9d06c --- /dev/null +++ b/OnTopReplica/Program.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using OnTopReplica.Properties; +using System.Threading; +using System.Globalization; +using System.Drawing; +using System.IO; +using VistaControls.TaskDialog; +using OnTopReplica.Update; +using System.Reflection; +using OnTopReplica.StartupOptions; + +namespace OnTopReplica { + + static class Program { + + public static PlatformSupport Platform { get; private set; } + + static CultureInfo _languageChangeCode = Settings.Default.Language; + + static UpdateManager _updateManager; + + static MainForm _mainForm; + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(string[] args) { + //Hook abort handler + AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); + + //Initialize and check for platform support + Platform = PlatformSupport.Create(); + if (!Platform.CheckCompatibility()) + return; + Platform.InitApp(); + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + //Update settings if needed + if (Settings.Default.MustUpdate) { + Settings.Default.Upgrade(); + Settings.Default.MustUpdate = false; + } + + //Load startup options + var options = StartupOptions.Factory.CreateOptions(args); + string optionsMessage = options.DebugMessage; + if (!string.IsNullOrEmpty(optionsMessage)) { //show dialog if debug message present or if parsing failed + var dlg = new CommandLineReportForm(options.Status, optionsMessage); + dlg.ShowDialog(); + } + if (options.Status == CliStatus.Information || options.Status == CliStatus.Error) + return; + + bool mustReloadForm = false; + Point reloadLocation = new Point(); + Size reloadSize = new Size(); + + do { + //Update language settings + Thread.CurrentThread.CurrentUICulture = _languageChangeCode; + Settings.Default.Language = _languageChangeCode; + _languageChangeCode = null; + + _mainForm = new MainForm(options); + if (mustReloadForm) { + _mainForm.Location = reloadLocation; + _mainForm.Size = reloadSize; + } + + Application.Run(_mainForm); + + //Enable reloading on next loop + mustReloadForm = true; + reloadLocation = _mainForm.Location; + reloadSize = _mainForm.Size; + } + while (_languageChangeCode != null); + + //Persist settings + Settings.Default.RestoreLastPosition = reloadLocation; + Settings.Default.RestoreLastSize = reloadSize; + Settings.Default.Save(); + } + + /// + /// Forces a global language change. As soon as the main form is closed, the change is performed + /// and the form is reopened using the new language. + /// + public static bool ForceGlobalLanguageChange(string languageCode) { + if (string.IsNullOrEmpty(languageCode)) + return false; + + try { + _languageChangeCode = new CultureInfo(languageCode); + } + catch { + return false; + } + + return true; + } + + static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { + string dump = string.Format("OnTopReplica-dump-{0}{1}{2}{3}{4}.txt", + DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, + DateTime.UtcNow.Hour, DateTime.UtcNow.Minute); + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), dump); + + using (var s = new FileStream(path, FileMode.Create)) { + using (var sw = new StreamWriter(s)) { + sw.WriteLine("OnTopReplica Dump file"); + sw.WriteLine("This file has been created because OnTopReplica crashed."); + sw.WriteLine("Please send it to lck@klopfenstein.net to help fix the bug that caused the crash."); + sw.WriteLine(); + sw.WriteLine("Last exception:"); + sw.WriteLine(e.ExceptionObject.ToString()); + sw.WriteLine(); + sw.WriteLine("OnTopReplica v. {0}", Assembly.GetEntryAssembly().GetName().Version); + sw.WriteLine("OS: {0}", Environment.OSVersion.ToString()); + sw.WriteLine(".NET: {0}", Environment.Version.ToString()); + sw.WriteLine("Aero DWM: {0}", VistaControls.OsSupport.IsCompositionEnabled); + sw.WriteLine("Launch command: {0}", Environment.CommandLine); + } + } + } + + } +} diff --git a/OnTopReplica/Properties/AssemblyInfo.cs b/OnTopReplica/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c012e63 --- /dev/null +++ b/OnTopReplica/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("OnTopReplica")] +[assembly: AssemblyDescription("Real-time, always on top thumbnail of a window of your choice.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Lorenz Cuno Klopfenstein")] +[assembly: AssemblyProduct("OnTopReplica")] +[assembly: AssemblyCopyright("Copyright © Lorenz Cuno Klopfenstein 2010")] +//[assembly: AssemblyCopyright("Copyright © Lorenz Cuno Klopfenstein 2007")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("015090d1-7559-4c59-b9d1-e7e066c4a948")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("3.2.0.0")] +[assembly: AssemblyFileVersion("3.2.0.0")] diff --git a/OnTopReplica/Properties/Resources.Designer.cs b/OnTopReplica/Properties/Resources.Designer.cs new file mode 100644 index 0000000..14998d1 --- /dev/null +++ b/OnTopReplica/Properties/Resources.Designer.cs @@ -0,0 +1,329 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace OnTopReplica.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [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() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [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("OnTopReplica.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap back { + get { + object obj = ResourceManager.GetObject("back", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap clickforwarding { + get { + object obj = ResourceManager.GetObject("clickforwarding", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap close_new { + get { + object obj = ResourceManager.GetObject("close_new", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap desktop { + get { + object obj = ResourceManager.GetObject("desktop", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap flag_czech { + get { + object obj = ResourceManager.GetObject("flag_czech", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap flag_danish { + get { + object obj = ResourceManager.GetObject("flag_danish", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap flag_ita { + get { + object obj = ResourceManager.GetObject("flag_ita", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap flag_spanish { + get { + object obj = ResourceManager.GetObject("flag_spanish", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap flag_usa { + get { + object obj = ResourceManager.GetObject("flag_usa", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap fullscreen { + get { + object obj = ResourceManager.GetObject("fullscreen", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap groupmode { + get { + object obj = ResourceManager.GetObject("groupmode", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap icon { + get { + object obj = ResourceManager.GetObject("icon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Icon icon_new { + get { + object obj = ResourceManager.GetObject("icon_new", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Bitmap list { + get { + object obj = ResourceManager.GetObject("list", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap pos_bottomleft { + get { + object obj = ResourceManager.GetObject("pos_bottomleft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap pos_bottomright { + get { + object obj = ResourceManager.GetObject("pos_bottomright", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap pos_center { + get { + object obj = ResourceManager.GetObject("pos_center", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap pos_null { + get { + object obj = ResourceManager.GetObject("pos_null", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap pos_topleft { + get { + object obj = ResourceManager.GetObject("pos_topleft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap pos_topright { + get { + object obj = ResourceManager.GetObject("pos_topright", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap reduce { + get { + object obj = ResourceManager.GetObject("reduce", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap refresh { + get { + object obj = ResourceManager.GetObject("refresh", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap regions { + get { + object obj = ResourceManager.GetObject("regions", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap thumbs_up { + get { + object obj = ResourceManager.GetObject("thumbs_up", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap window_border16 { + get { + object obj = ResourceManager.GetObject("window_border16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap window_multiple16 { + get { + object obj = ResourceManager.GetObject("window_multiple16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap window_opacity { + get { + object obj = ResourceManager.GetObject("window_opacity", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap window_switch { + get { + object obj = ResourceManager.GetObject("window_switch", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap window16 { + get { + object obj = ResourceManager.GetObject("window16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap xiao_add { + get { + object obj = ResourceManager.GetObject("xiao_add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap xiao_arrow { + get { + object obj = ResourceManager.GetObject("xiao_arrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap xiao_component { + get { + object obj = ResourceManager.GetObject("xiao_component", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap xiao_delete { + get { + object obj = ResourceManager.GetObject("xiao_delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap xiao_down { + get { + object obj = ResourceManager.GetObject("xiao_down", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap xiao_help { + get { + object obj = ResourceManager.GetObject("xiao_help", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap xiao_ok { + get { + object obj = ResourceManager.GetObject("xiao_ok", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap xiao_up { + get { + object obj = ResourceManager.GetObject("xiao_up", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap xiao_wrench { + get { + object obj = ResourceManager.GetObject("xiao_wrench", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/OnTopReplica/Properties/Resources.resx b/OnTopReplica/Properties/Resources.resx new file mode 100644 index 0000000..89f2850 --- /dev/null +++ b/OnTopReplica/Properties/Resources.resx @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Assets\flag_ita.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\xiao_add.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\x-oblique.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\component.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\25.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\window_multiple16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\xiao_delete.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\regions_new.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\pos_null.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\window_opacity_new.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\thumbs_up.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\pos_topleft.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\pos_bottomleft.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\pos_topright.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\clickforwarding.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\newicon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\xiao_help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\back.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\xiao_up.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\window16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\flag_czech.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\pos_bottomright.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\window_switch.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\desktop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\flag_danish.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\reduce.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\xiao_ok.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\xiao_wrench.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\list.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\icon-new.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\fullscreen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\xiao_down.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\xiao_arrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\window_border16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\flag_usa.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\groupmode.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Assets\pos_center.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + + ..\Assets\flag_spanish.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/OnTopReplica/Properties/Settings.Designer.cs b/OnTopReplica/Properties/Settings.Designer.cs new file mode 100644 index 0000000..c47129a --- /dev/null +++ b/OnTopReplica/Properties/Settings.Designer.cs @@ -0,0 +1,169 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace OnTopReplica.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.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; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::OnTopReplica.StoredRegionArray SavedRegions { + get { + return ((global::OnTopReplica.StoredRegionArray)(this["SavedRegions"])); + } + set { + this["SavedRegions"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool AutoFitOnResize { + get { + return ((bool)(this["AutoFitOnResize"])); + } + set { + this["AutoFitOnResize"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("255")] + public byte Opacity { + get { + return ((byte)(this["Opacity"])); + } + set { + this["Opacity"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("(Default)")] + public global::System.Globalization.CultureInfo Language { + get { + return ((global::System.Globalization.CultureInfo)(this["Language"])); + } + set { + this["Language"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool MustUpdate { + get { + return ((bool)(this["MustUpdate"])); + } + set { + this["MustUpdate"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool ClickThrough { + get { + return ((bool)(this["ClickThrough"])); + } + set { + this["ClickThrough"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool FirstTimeClickThrough { + get { + return ((bool)(this["FirstTimeClickThrough"])); + } + set { + this["FirstTimeClickThrough"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool FirstTimeClickForwarding { + get { + return ((bool)(this["FirstTimeClickForwarding"])); + } + set { + this["FirstTimeClickForwarding"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool FullscreenAlwaysOnTop { + get { + return ((bool)(this["FullscreenAlwaysOnTop"])); + } + set { + this["FullscreenAlwaysOnTop"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool RestoreSizeAndPosition { + get { + return ((bool)(this["RestoreSizeAndPosition"])); + } + set { + this["RestoreSizeAndPosition"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] + public global::System.Drawing.Size RestoreLastSize { + get { + return ((global::System.Drawing.Size)(this["RestoreLastSize"])); + } + set { + this["RestoreLastSize"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] + public global::System.Drawing.Point RestoreLastPosition { + get { + return ((global::System.Drawing.Point)(this["RestoreLastPosition"])); + } + set { + this["RestoreLastPosition"] = value; + } + } + } +} diff --git a/OnTopReplica/Properties/Settings.settings b/OnTopReplica/Properties/Settings.settings new file mode 100644 index 0000000..565ed0e --- /dev/null +++ b/OnTopReplica/Properties/Settings.settings @@ -0,0 +1,42 @@ + + + + + + + + + True + + + 255 + + + (Default) + + + True + + + True + + + True + + + True + + + False + + + False + + + 0, 0 + + + 0, 0 + + + \ No newline at end of file diff --git a/OnTopReplica/Properties/app.manifest b/OnTopReplica/Properties/app.manifest new file mode 100644 index 0000000..c29c96a --- /dev/null +++ b/OnTopReplica/Properties/app.manifest @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OnTopReplica/ScreenPosition.cs b/OnTopReplica/ScreenPosition.cs new file mode 100644 index 0000000..1859a90 --- /dev/null +++ b/OnTopReplica/ScreenPosition.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.Drawing; + +namespace OnTopReplica { + /// + /// Describes a resolution independent position. + /// + enum ScreenPosition { + TopLeft, + TopRight, + BottomLeft, + BottomRight, + Center + } + + /// + /// Extension methods for ScreenPositions. + /// + static class ScreenPositionExtensions { + + /// + /// Sets the form's screen position in independent coordinates. + /// + /// + /// Position is set relative to the form's current screen. + /// + public static void SetScreenPosition(this MainForm form, ScreenPosition position) { + var screen = Screen.FromControl(form); + var wa = screen.WorkingArea; + + Point p = new Point(); + switch (position) { + case ScreenPosition.TopLeft: + p = new Point( + wa.Left - form.ChromeBorderHorizontal, + wa.Top - form.ChromeBorderVertical + ); + break; + + case ScreenPosition.TopRight: + p = new Point( + wa.Right - form.Width + form.ChromeBorderHorizontal, + wa.Top - form.ChromeBorderVertical + ); + break; + + case ScreenPosition.BottomLeft: + p = new Point( + wa.Left - form.ChromeBorderHorizontal, + wa.Bottom - form.Height + form.ChromeBorderVertical + ); + break; + + case ScreenPosition.BottomRight: + p = new Point( + wa.Right - form.Width + form.ChromeBorderHorizontal, + wa.Bottom - form.Height + form.ChromeBorderVertical + ); + break; + + case ScreenPosition.Center: + p = new Point( + wa.X + (wa.Width / 2) - (form.Width / 2) - (form.ChromeBorderHorizontal / 2), + wa.Y + (wa.Height / 2) - (form.Height / 2) - (form.ChromeBorderVertical / 2) + ); + break; + } + + form.Location = p; + } + + } + +} diff --git a/OnTopReplica/SidePanel.cs b/OnTopReplica/SidePanel.cs new file mode 100644 index 0000000..d3928cb --- /dev/null +++ b/OnTopReplica/SidePanel.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace OnTopReplica { + + /// + /// Represents a side panel that can be embedded in OnTopReplica. + /// + class SidePanel : UserControl { + + public SidePanel() { + Dock = DockStyle.Fill; + } + + /// + /// Gets the panel's parent form. + /// + protected MainForm ParentForm { get; private set; } + + /// + /// Raised when the side panel requests to be closed. + /// + public event EventHandler RequestClosing; + + protected virtual void OnRequestClosing() { + var evt = RequestClosing; + if (evt != null) + evt(this, EventArgs.Empty); + } + + /// + /// Is called when the side panel is embedded and first shown. + /// + /// Parent form that is embedding the side panel. + public virtual void OnFirstShown(MainForm form) { + ParentForm = form; + } + + /// + /// Is called before removing the side panel. + /// + /// Parent form that is embedding the side panel. + public virtual void OnClosing(MainForm form) { + } + + } +} diff --git a/OnTopReplica/SidePanels/GroupSwitchPanel.Designer.cs b/OnTopReplica/SidePanels/GroupSwitchPanel.Designer.cs new file mode 100644 index 0000000..248924d --- /dev/null +++ b/OnTopReplica/SidePanels/GroupSwitchPanel.Designer.cs @@ -0,0 +1,129 @@ +namespace OnTopReplica.SidePanels { + partial class GroupSwitchPanel { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonEnable = new System.Windows.Forms.Button(); + this.listWindows = new System.Windows.Forms.ListView(); + this.colName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.labelStatus = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.labelStatus); + this.groupBox1.Controls.Add(this.buttonCancel); + this.groupBox1.Controls.Add(this.buttonEnable); + this.groupBox1.Controls.Add(this.listWindows); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(228, 296); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = Strings.GroupSwitchModeTitle; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(152, 267); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(70, 23); + this.buttonCancel.TabIndex = 2; + this.buttonCancel.Text = Strings.GroupSwitchModeDisableButton; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.Cancel_click); + // + // buttonEnable + // + this.buttonEnable.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonEnable.Image = global::OnTopReplica.Properties.Resources.xiao_ok; + this.buttonEnable.Location = new System.Drawing.Point(12, 267); + this.buttonEnable.Name = "buttonEnable"; + this.buttonEnable.Size = new System.Drawing.Size(134, 23); + this.buttonEnable.TabIndex = 1; + this.buttonEnable.Text = Strings.GroupSwitchModeEnableButton; + this.buttonEnable.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonEnable.UseVisualStyleBackColor = true; + this.buttonEnable.Click += new System.EventHandler(this.Enable_click); + // + // listWindows + // + this.listWindows.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listWindows.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.colName}); + this.listWindows.FullRowSelect = true; + this.listWindows.GridLines = true; + this.listWindows.HideSelection = false; + this.listWindows.LabelWrap = false; + this.listWindows.Location = new System.Drawing.Point(6, 19); + this.listWindows.Name = "listWindows"; + this.listWindows.Size = new System.Drawing.Size(216, 225); + this.listWindows.TabIndex = 0; + this.listWindows.UseCompatibleStateImageBehavior = false; + this.listWindows.View = System.Windows.Forms.View.Details; + // + // colName + // + this.colName.Text = Strings.GroupSwitchModeWindows; + this.colName.Width = 220; + // + // labelStatus + // + this.labelStatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.labelStatus.Location = new System.Drawing.Point(3, 247); + this.labelStatus.Name = "labelStatus"; + this.labelStatus.Size = new System.Drawing.Size(219, 17); + this.labelStatus.TabIndex = 3; + this.labelStatus.Text = ""; + this.labelStatus.TextAlign = System.Drawing.ContentAlignment.BottomRight; + // + // GroupSwitchPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox1); + this.MinimumSize = new System.Drawing.Size(220, 220); + this.Name = "GroupSwitchPanel"; + this.Size = new System.Drawing.Size(228, 296); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonEnable; + private System.Windows.Forms.ListView listWindows; + private System.Windows.Forms.ColumnHeader colName; + private System.Windows.Forms.Label labelStatus; + } +} diff --git a/OnTopReplica/SidePanels/GroupSwitchPanel.cs b/OnTopReplica/SidePanels/GroupSwitchPanel.cs new file mode 100644 index 0000000..be82b0f --- /dev/null +++ b/OnTopReplica/SidePanels/GroupSwitchPanel.cs @@ -0,0 +1,74 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using OnTopReplica.Properties; +using System.Collections.Generic; +using OnTopReplica.MessagePumpProcessors; +using OnTopReplica.WindowSeekers; + +namespace OnTopReplica.SidePanels { + partial class GroupSwitchPanel : SidePanel { + + public GroupSwitchPanel() { + InitializeComponent(); + } + + public override void OnFirstShown(MainForm form) { + base.OnFirstShown(form); + + LoadWindowList(); + + labelStatus.Text = (ParentForm.MessagePumpManager.Get().IsActive) ? + Strings.GroupSwitchModeStatusEnabled : + Strings.GroupSwitchModeStatusDisabled; + } + + private void LoadWindowList() { + var manager = new TaskWindowSeeker(); + manager.Refresh(); + + var imageList = new ImageList(); + imageList.ColorDepth = ColorDepth.Depth32Bit; + foreach (var w in manager.Windows) { + var item = new ListViewItem(w.Title) { + Tag = w + }; + + if (w.Icon != null) { + imageList.Images.Add(w.Icon); + item.ImageIndex = imageList.Images.Count - 1; + } + + listWindows.Items.Add(item); + } + listWindows.SmallImageList = imageList; + } + + public override void OnClosing(MainForm form) { + base.OnClosing(form); + + if (_enableOnClose && listWindows.SelectedItems.Count > 0) { + List ret = new List(); + foreach (ListViewItem i in listWindows.SelectedItems) { + ret.Add((WindowHandle)i.Tag); + } + form.SetThumbnailGroup(ret); + } + else { + form.MessagePumpManager.Get().Disable(); + } + } + + bool _enableOnClose = false; + + private void Enable_click(object sender, EventArgs e) { + _enableOnClose = true; + OnRequestClosing(); + } + + private void Cancel_click(object sender, EventArgs e) { + OnRequestClosing(); + } + + } +} diff --git a/OnTopReplica/SidePanels/GroupSwitchPanel.resx b/OnTopReplica/SidePanels/GroupSwitchPanel.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/OnTopReplica/SidePanels/GroupSwitchPanel.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/OnTopReplica/SidePanels/RegionPanel.Designer.cs b/OnTopReplica/SidePanels/RegionPanel.Designer.cs new file mode 100644 index 0000000..1399de1 --- /dev/null +++ b/OnTopReplica/SidePanels/RegionPanel.Designer.cs @@ -0,0 +1,314 @@ +namespace OnTopReplica.SidePanels { + partial class RegionPanel { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.textRegionName = new OnTopReplica.FocusedTextBox(); + this.numH = new System.Windows.Forms.NumericUpDown(); + this.numW = new System.Windows.Forms.NumericUpDown(); + this.numY = new System.Windows.Forms.NumericUpDown(); + this.numX = new System.Windows.Forms.NumericUpDown(); + this.buttonDone = new System.Windows.Forms.Button(); + this.buttonReset = new System.Windows.Forms.Button(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.buttonDelete = new System.Windows.Forms.Button(); + this.buttonSave = new System.Windows.Forms.Button(); + this.comboRegions = new VistaControls.ComboBox(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numH)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numW)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numY)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numX)).BeginInit(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.textRegionName); + this.groupBox1.Controls.Add(this.numH); + this.groupBox1.Controls.Add(this.numW); + this.groupBox1.Controls.Add(this.numY); + this.groupBox1.Controls.Add(this.numX); + this.groupBox1.Controls.Add(this.buttonDone); + this.groupBox1.Controls.Add(this.buttonReset); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.label7); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.buttonDelete); + this.groupBox1.Controls.Add(this.buttonSave); + this.groupBox1.Controls.Add(this.comboRegions); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(184, 170); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = Strings.RegionsTitle; + // + // textRegionName + // + this.textRegionName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textRegionName.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.textRegionName.ForeColor = System.Drawing.SystemColors.ActiveCaptionText; + this.textRegionName.Location = new System.Drawing.Point(6, 44); + this.textRegionName.Name = "textRegionName"; + this.textRegionName.Size = new System.Drawing.Size(174, 20); + this.textRegionName.TabIndex = 11; + this.textRegionName.Visible = false; + this.textRegionName.ConfirmInput += new System.EventHandler(this.Save_confirm); + this.textRegionName.AbortInput += new System.EventHandler(this.Save_lost); + // + // numH + // + this.numH.Enabled = false; + this.numH.Location = new System.Drawing.Point(109, 93); + this.numH.Maximum = new decimal(new int[] { + 100000, + 0, + 0, + 0}); + this.numH.Minimum = new decimal(new int[] { + 100000, + 0, + 0, + -2147483648}); + this.numH.Name = "numH"; + this.numH.Size = new System.Drawing.Size(43, 20); + this.numH.TabIndex = 7; + this.numH.ValueChanged += new System.EventHandler(this.RegionValueSpinner_value_change); + // + // numW + // + this.numW.Enabled = false; + this.numW.Location = new System.Drawing.Point(109, 67); + this.numW.Maximum = new decimal(new int[] { + 100000, + 0, + 0, + 0}); + this.numW.Minimum = new decimal(new int[] { + 100000, + 0, + 0, + -2147483648}); + this.numW.Name = "numW"; + this.numW.Size = new System.Drawing.Size(43, 20); + this.numW.TabIndex = 6; + this.numW.ValueChanged += new System.EventHandler(this.RegionValueSpinner_value_change); + // + // numY + // + this.numY.Enabled = false; + this.numY.Location = new System.Drawing.Point(23, 93); + this.numY.Maximum = new decimal(new int[] { + 100000, + 0, + 0, + 0}); + this.numY.Minimum = new decimal(new int[] { + 100000, + 0, + 0, + -2147483648}); + this.numY.Name = "numY"; + this.numY.Size = new System.Drawing.Size(43, 20); + this.numY.TabIndex = 5; + this.numY.ValueChanged += new System.EventHandler(this.RegionValueSpinner_value_change); + // + // numX + // + this.numX.Enabled = false; + this.numX.Location = new System.Drawing.Point(23, 67); + this.numX.Maximum = new decimal(new int[] { + 100000, + 0, + 0, + 0}); + this.numX.Minimum = new decimal(new int[] { + 100000, + 0, + 0, + -2147483648}); + this.numX.Name = "numX"; + this.numX.Size = new System.Drawing.Size(43, 20); + this.numX.TabIndex = 4; + this.numX.ValueChanged += new System.EventHandler(this.RegionValueSpinner_value_change); + // + // buttonDone + // + this.buttonDone.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDone.Image = global::OnTopReplica.Properties.Resources.xiao_ok; + this.buttonDone.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonDone.Location = new System.Drawing.Point(108, 129); + this.buttonDone.Name = "buttonDone"; + this.buttonDone.Size = new System.Drawing.Size(70, 23); + this.buttonDone.TabIndex = 9; + this.buttonDone.Text = global::OnTopReplica.Strings.RegionsDoneButton; + this.buttonDone.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonDone.UseVisualStyleBackColor = true; + this.buttonDone.Click += new System.EventHandler(this.Close_click); + // + // buttonReset + // + this.buttonReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonReset.Location = new System.Drawing.Point(32, 129); + this.buttonReset.Name = "buttonReset"; + this.buttonReset.Size = new System.Drawing.Size(70, 23); + this.buttonReset.TabIndex = 8; + this.buttonReset.Text = global::OnTopReplica.Strings.RegionsResetButton; + this.buttonReset.UseVisualStyleBackColor = true; + this.buttonReset.Click += new System.EventHandler(this.Reset_click); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.ForeColor = System.Drawing.SystemColors.ControlDark; + this.label6.Location = new System.Drawing.Point(71, 96); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(38, 13); + this.label6.TabIndex = 9; + this.label6.Text = Strings.RegionsHeight; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.ForeColor = System.Drawing.SystemColors.ControlDark; + this.label7.Location = new System.Drawing.Point(71, 70); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(35, 13); + this.label7.TabIndex = 8; + this.label7.Text = Strings.RegionsWidth; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.SystemColors.ControlDark; + this.label3.Location = new System.Drawing.Point(6, 96); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(14, 13); + this.label3.TabIndex = 5; + this.label3.Text = "Y"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.ForeColor = System.Drawing.SystemColors.ControlDark; + this.label2.Location = new System.Drawing.Point(6, 70); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(14, 13); + this.label2.TabIndex = 4; + this.label2.Text = "X"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(6, 47); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(76, 13); + this.label1.TabIndex = 3; + this.label1.Text = Strings.RegionsCurrentRegion; + // + // buttonDelete + // + this.buttonDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDelete.Enabled = false; + this.buttonDelete.Image = global::OnTopReplica.Properties.Resources.xiao_delete; + this.buttonDelete.Location = new System.Drawing.Point(157, 18); + this.buttonDelete.Name = "buttonDelete"; + this.buttonDelete.Size = new System.Drawing.Size(23, 23); + this.buttonDelete.TabIndex = 3; + this.buttonDelete.UseVisualStyleBackColor = true; + this.buttonDelete.Click += new System.EventHandler(this.Delete_click); + // + // buttonSave + // + this.buttonSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonSave.Enabled = false; + this.buttonSave.Image = global::OnTopReplica.Properties.Resources.xiao_add; + this.buttonSave.Location = new System.Drawing.Point(134, 18); + this.buttonSave.Name = "buttonSave"; + this.buttonSave.Size = new System.Drawing.Size(23, 23); + this.buttonSave.TabIndex = 1; + this.buttonSave.UseVisualStyleBackColor = true; + this.buttonSave.Click += new System.EventHandler(this.Save_click); + // + // comboRegions + // + this.comboRegions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.comboRegions.CueBannerText = global::OnTopReplica.Strings.RegionsStoredRegions; + this.comboRegions.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboRegions.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.comboRegions.FormattingEnabled = true; + this.comboRegions.Location = new System.Drawing.Point(6, 19); + this.comboRegions.Name = "comboRegions"; + this.comboRegions.Size = new System.Drawing.Size(126, 21); + this.comboRegions.TabIndex = 0; + this.comboRegions.SelectedIndexChanged += new System.EventHandler(this.RegionCombo_index_change); + // + // RegionPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox1); + this.MinimumSize = new System.Drawing.Size(184, 170); + this.Name = "RegionPanel"; + this.Size = new System.Drawing.Size(184, 170); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numH)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numW)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numY)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numX)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button buttonDelete; + private System.Windows.Forms.Button buttonSave; + private VistaControls.ComboBox comboRegions; + private System.Windows.Forms.Button buttonDone; + private System.Windows.Forms.Button buttonReset; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.NumericUpDown numH; + private System.Windows.Forms.NumericUpDown numW; + private System.Windows.Forms.NumericUpDown numY; + private System.Windows.Forms.NumericUpDown numX; + private FocusedTextBox textRegionName; + } +} diff --git a/OnTopReplica/SidePanels/RegionPanel.cs b/OnTopReplica/SidePanels/RegionPanel.cs new file mode 100644 index 0000000..f281926 --- /dev/null +++ b/OnTopReplica/SidePanels/RegionPanel.cs @@ -0,0 +1,217 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using OnTopReplica.Properties; + +namespace OnTopReplica.SidePanels { + partial class RegionPanel : SidePanel { + + public RegionPanel() { + InitializeComponent(); + + //Copy settings into combo box + if (Settings.Default.SavedRegions != null) { + foreach (object o in Settings.Default.SavedRegions) { + comboRegions.Items.Add(o); + } + } + + _regionDrawnHandler = new ThumbnailPanel.RegionDrawnHandler(ThumbnailPanel_RegionDrawn); + } + + ThumbnailPanel.RegionDrawnHandler _regionDrawnHandler; + + public override void OnFirstShown(MainForm form) { + base.OnFirstShown(form); + + //Init shown region if needed + if (form.SelectedThumbnailRegion.HasValue) + SetRegion(form.SelectedThumbnailRegion.Value); + + form.ThumbnailPanel.DrawMouseRegions = true; + form.ThumbnailPanel.RegionDrawn += _regionDrawnHandler; + } + + public override void OnClosing(MainForm form) { + base.OnClosing(form); + + form.ThumbnailPanel.DrawMouseRegions = false; + form.ThumbnailPanel.RegionDrawn -= _regionDrawnHandler; + } + + void ThumbnailPanel_RegionDrawn(object sender, Rectangle region) { + SetRegion(region); + } + + #region Interface + + /// + /// Sets the current selected region to a specific instance of a stored region. + /// + /// A stored region instance or null to reset. + public void SetRegion(StoredRegion region) { + if (region == null) { + Reset(); + return; + } + + SetRegion(region.Bounds); + + //Select right combobox + if (comboRegions.Items.Contains(region)) { + comboRegions.SelectedItem = region; + } + } + + /// + /// Sets the current selected region to a specific region rectangle. + /// + /// The region boundaries. + public void SetRegion(Rectangle region) { + try { + _ignoreValueChanges = true; + + numX.Enabled = numY.Enabled = numW.Enabled = numH.Enabled = true; + + numX.Value = region.Left; + numY.Value = region.Top; + numW.Value = region.Width; + numH.Value = region.Height; + } + finally { + _ignoreValueChanges = false; + } + + OnRegionSet(region); + } + + /// + /// Resets the selected region and disables the num spinners. + /// + public void Reset() { + try { + _ignoreValueChanges = true; + + numX.Value = numY.Value = numW.Value = numH.Value = 0; + numX.Enabled = numY.Enabled = numW.Enabled = numH.Enabled = false; + + buttonSave.Enabled = false; + + comboRegions.SelectedIndex = -1; + } + finally { + _ignoreValueChanges = false; + } + } + + #endregion + + /// + /// Adds a new stored region. + /// + /// Region bounds. + /// Name of the region. + private void AddRegion(Rectangle rectangle, string regionName) { + var region = new StoredRegion(rectangle, regionName); + + int index = comboRegions.Items.Add(region); + comboRegions.SelectedIndex = index; + + if (Settings.Default.SavedRegions == null) + Settings.Default.SavedRegions = new StoredRegionArray(); + Settings.Default.SavedRegions.Add(region); + } + + /// + /// Internal event raised when a change occurs in the selected region. + /// + /// Region bounds. + protected virtual void OnRegionSet(Rectangle regionBounds) { + //Forward region to thumbnail + ParentForm.SelectedThumbnailRegion = regionBounds; + + buttonSave.Enabled = true; + } + + #region GUI event handlers + + private void Close_click(object sender, EventArgs e) { + OnRequestClosing(); + } + + private void Reset_click(object sender, EventArgs e) { + Reset(); + ParentForm.SelectedThumbnailRegion = null; + } + + private void Delete_click(object sender, EventArgs e) { + if (comboRegions.SelectedIndex < 0) + return; + + var origIndex = comboRegions.SelectedIndex; + Settings.Default.SavedRegions.RemoveAt(origIndex); + comboRegions.Items.RemoveAt(origIndex); + + if (comboRegions.Items.Count > 0) + comboRegions.SelectedIndex = 0; + } + + private void Save_click(object sender, EventArgs e) { + //Display textbox instead of button + buttonSave.Enabled = buttonDelete.Enabled = false; + textRegionName.Visible = true; + textRegionName.Focus(); + } + + private void Save_confirm(object sender, EventArgs e) { + if (!string.IsNullOrEmpty(textRegionName.Text)) { + AddRegion( + new Rectangle((int)numX.Value, (int)numY.Value, (int)numW.Value, (int)numH.Value), + textRegionName.Text + ); + } + + //Hide textbox and show button again + textRegionName.Visible = false; + textRegionName.Text = string.Empty; + + buttonSave.Enabled = buttonDelete.Enabled = true; + } + + private void Save_lost(object sender, EventArgs e) { + //Reset textbox + textRegionName.Visible = false; + textRegionName.Text = string.Empty; + + buttonSave.Enabled = buttonDelete.Enabled = true; + buttonSave.Focus(); + } + + // Used to signal to the value change handler that all events should be temporarily ignored. + bool _ignoreValueChanges = false; + + private void RegionValueSpinner_value_change(object sender, EventArgs e) { + if (_ignoreValueChanges) + return; + + OnRegionSet(new Rectangle((int)numX.Value, (int)numY.Value, (int)numW.Value, (int)numH.Value)); + } + + private void RegionCombo_index_change(object sender, EventArgs e) { + buttonDelete.Enabled = (comboRegions.SelectedIndex >= 0); + + if (comboRegions.SelectedIndex >= 0) { + //Load region + var region = comboRegions.SelectedItem as StoredRegion; + + if (region == null) + return; + + SetRegion(region.Bounds); + } + } + + #endregion + + } +} diff --git a/OnTopReplica/SidePanels/RegionPanel.resx b/OnTopReplica/SidePanels/RegionPanel.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/OnTopReplica/SidePanels/RegionPanel.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/OnTopReplica/StartupOptions/CliStatus.cs b/OnTopReplica/StartupOptions/CliStatus.cs new file mode 100644 index 0000000..a445e68 --- /dev/null +++ b/OnTopReplica/StartupOptions/CliStatus.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica.StartupOptions { + public enum CliStatus { + /// + /// No errors while parsing. + /// + Ok, + /// + /// User asked for help. + /// + Information, + /// + /// Error while parsing. + /// + Error + } + +} diff --git a/OnTopReplica/StartupOptions/CommandLineReportForm.Designer.cs b/OnTopReplica/StartupOptions/CommandLineReportForm.Designer.cs new file mode 100644 index 0000000..9a2ec68 --- /dev/null +++ b/OnTopReplica/StartupOptions/CommandLineReportForm.Designer.cs @@ -0,0 +1,116 @@ +namespace OnTopReplica.StartupOptions { + partial class CommandLineReportForm { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CommandLineReportForm)); + this.buttonOk = new System.Windows.Forms.Button(); + this.labelInstruction = new System.Windows.Forms.Label(); + this.txtDescription = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtCliArgs = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Location = new System.Drawing.Point(440, 200); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 0; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // labelInstruction + // + this.labelInstruction.AutoSize = true; + this.labelInstruction.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelInstruction.ForeColor = System.Drawing.SystemColors.HotTrack; + this.labelInstruction.Location = new System.Drawing.Point(12, 10); + this.labelInstruction.Name = "labelInstruction"; + this.labelInstruction.Size = new System.Drawing.Size(112, 21); + this.labelInstruction.TabIndex = 1; + this.labelInstruction.Text = "Command line"; + // + // txtDescription + // + this.txtDescription.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtDescription.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtDescription.Location = new System.Drawing.Point(12, 42); + this.txtDescription.Multiline = true; + this.txtDescription.Name = "txtDescription"; + this.txtDescription.ReadOnly = true; + this.txtDescription.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtDescription.Size = new System.Drawing.Size(503, 152); + this.txtDescription.TabIndex = 2; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(13, 205); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(60, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Arguments:"; + // + // txtCliArgs + // + this.txtCliArgs.Location = new System.Drawing.Point(79, 202); + this.txtCliArgs.Name = "txtCliArgs"; + this.txtCliArgs.ReadOnly = true; + this.txtCliArgs.Size = new System.Drawing.Size(355, 20); + this.txtCliArgs.TabIndex = 4; + // + // CommandLineReportForm + // + this.AcceptButton = this.buttonOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.ClientSize = new System.Drawing.Size(527, 235); + this.Controls.Add(this.txtCliArgs); + this.Controls.Add(this.label1); + this.Controls.Add(this.txtDescription); + this.Controls.Add(this.labelInstruction); + this.Controls.Add(this.buttonOk); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "CommandLineReportForm"; + this.Text = "Command line parameters"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Label labelInstruction; + private System.Windows.Forms.TextBox txtDescription; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtCliArgs; + } +} \ No newline at end of file diff --git a/OnTopReplica/StartupOptions/CommandLineReportForm.cs b/OnTopReplica/StartupOptions/CommandLineReportForm.cs new file mode 100644 index 0000000..90eea63 --- /dev/null +++ b/OnTopReplica/StartupOptions/CommandLineReportForm.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace OnTopReplica.StartupOptions { + public partial class CommandLineReportForm : Form { + + public CommandLineReportForm(CliStatus status, string message) { + InitializeComponent(); + + switch (status) { + case CliStatus.Information: + labelInstruction.Text = "Command line help"; + break; + + case CliStatus.Error: + labelInstruction.Text = "Command line parsing error"; + break; + } + + txtDescription.Text = message; + + txtCliArgs.Text = Environment.CommandLine; + } + + } +} diff --git a/OnTopReplica/StartupOptions/CommandLineReportForm.resx b/OnTopReplica/StartupOptions/CommandLineReportForm.resx new file mode 100644 index 0000000..b6de04b --- /dev/null +++ b/OnTopReplica/StartupOptions/CommandLineReportForm.resx @@ -0,0 +1,1574 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAYAgIAAAAEAIAAoCAEAZgAAADAwAAABACAAqCUAAI4IAQAgIAAAAQAgAKgQAAA2LgEAGBgAAAEA + IACICQAA3j4BABQUAAABACAAuAYAAGZIAQAQEAAAAQAgAGgEAAAeTwEAKAAAAIAAAAAAAQAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAMAAAAGAAAABwAAAAoAAAANAAAADwAA + ABEAAAAVAAAAGAAAABoAAAAdAAAAHgAAACAAAAAhAAAAIgAAACIAAAAjAAAAIwAAACIAAAAiAAAAIgAA + ACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAA + ACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAA + ACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAA + ACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAA + ACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAA + ACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAA + ACAAAAAfAAAAHgAAABwAAAAZAAAAFwAAABMAAAAQAAAADgAAAAsAAAAIAAAABwAAAAQAAAACAAAAAgAA + AAMAAAAEAAAABQAAAAkAAAALAAAADgAAABIAAAAWAAAAGQAAAB0AAAAgAAAAJAAAACcAAAAqAAAAKwAA + AC0AAAAvAAAALwAAADAAAAAwAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAA + AC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAA + AC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAA + AC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAA + AC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAA + AC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAvAAAALwAA + AC8AAAAvAAAALwAAAC8AAAAvAAAALwAAAC8AAAAuAAAALQAAACsAAAApAAAAJgAAACIAAAAfAAAAHAAA + ABgAAAAUAAAAEAAAAAwAAAAKAAAABwAAAAQAAAADAAAABAAAAAYAAAAIAAAADAAAAA8AAAATAAAAGAAA + AB0AAAAiAAAAJgAAACoAAAAuAAAAMQAAADQAAAA2AAAAOAAAADoAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOgAA + ADkAAAA4AAAANgAAADMAAAAwAAAALAAAACgAAAAlAAAAIAAAABsAAAAWAAAAEQAAAA4AAAAKAAAABwAA + AAQAAAAFAAAACAAAAAsAAAAPAAAAEwAAABkAAAAfAAAAJQAAACoAAAAvAAAANQAAADoAAAA+AAAAQQAA + AEQAAABGAAAASAAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAA + AEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAA + AEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAA + AEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAA + AEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAA + AEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABJAAAASQAA + AEkAAABJAAAASQAAAEkAAABJAAAASQAAAEkAAABIAAAARwAAAEUAAABDAAAAQAAAADwAAAA4AAAAMwAA + AC0AAAAoAAAAIgAAABwAAAAWAAAAEgAAAA0AAAAJAAAABQAAAAcAAAALAAAADQAAABIAAAAYAAAAIAAA + ACYAAAAtAAAANAAAADoAAABAAAAARgAAAEsAAABPAAAAUQAAAFQAAABWAAAAVwAAAFcAAABXAAAAVwAA + AFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAA + AFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAA + AFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAA + AFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAA + AFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAA + AFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAA + AFYAAABVAAAAUwAAAFAAAABOAAAASQAAAEQAAAA+AAAAOAAAADEAAAAqAAAAIwAAAB0AAAAWAAAAEAAA + AAsAAAAGAAAACAAAAA0AAAARAAAAFwAAAB8AAAAmAAAALgAAADcAAAA+AAAARgAAAEwAAABSAAAAVwAA + AFwAAABfAAAAYgAAAGMAAABkAAAAZQAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAA + AGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAA + AGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAA + AGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAA + AGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAA + AGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAA + AGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAYwAAAGMAAABhAAAAXgAAAFoAAABVAAAAUAAA + AEoAAABDAAAAOgAAADIAAAAqAAAAIwAAABwAAAAVAAAADgAAAAgAAAAKAAAAEAAAABUAAAAdAAAAJAAA + AC0AAAA2AAAAQAAAAEkAAABRAAAAWAAAAF4AAABkAAAAaQAAAGwAAABuAAAAcAAAAHEAAAByAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABwAAAAbwAAAG4AAABqAAAAZwAAAGIAAABcAAAAVQAAAE4AAABFAAAAPAAAADIAAAApAAAAIAAA + ABoAAAASAAAACQAAAA0AAAATAAAAGQAAACEAAAArAAAANQAAAD8AAABJAAAAUwAAAFwAAABlAAAAawAA + AHEAAAB2AAAAeQAAAHsAAAB9AAAAfwAAAH8AAAB+AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAA + AH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAA + AH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAA + AH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAA + AH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAA + AH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAA + AH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH0AAAB8AAAAfAAAAHcAAAB0AAAAbQAA + AGcAAABgAAAAWAAAAE8AAABFAAAAOgAAADAAAAAmAAAAHgAAABUAAAALAAAADwAAABYAAAAeAAAAJgAA + ADAAAAA8AAAASAAAAFQAAABeAAAAagAAAHQAAAB8AAAAgwAAAIcAAACLAAAAjAAAAI0AAACOAAAAjgAA + AI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAA + AI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAA + AI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAA + AI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAA + AI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAA + AI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAA + AI4AAACOAAAAjQAAAI0AAACLAAAAhwAAAIEAAAB6AAAAcgAAAGoAAABiAAAAWAAAAE0AAABCAAAANwAA + ACwAAAAiAAAAGQAAAA0AAAARAAAAGQAAACEAAAAqAAAANQAAAEIAAABPAAAAXgAAAG0AAAB8AAAAkAAA + AKAAAACkAAAAqAAAAKoAAACrAAAArAAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA + AK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA + AK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA + AK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA + AK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA + AK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA + AK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACsAAAAqwAAAKoAAAChAAAAlAAA + AIgAAAB9AAAAcwAAAGoAAABgAAAAVQAAAEkAAAA9AAAAMQAAACYAAAAdAAAADwAAABQAAAAbAAAAJQAA + AC4AAAA5AAAARwAAAFcAAABpAAAAgwAAALMMDAzWTk5O8FxcXOxZWVjrWVlY61lZWetaWVnrWllZ61pZ + WetbWlrrWlpa61paWutaWlrrW1pa61paW+taW1vrW1tb61tbW+tbW1vrW1tb61tbW+tbW1vqW1tb6ltb + W+pcW1zqXFtb6lxbW+pcW1vqXFtb6lxbW+pcW1vqXFtb6lxcXOpcXFzqXFxc6lxbW+pcW1vqW1tb6ltb + W+pbW1vqW1tb6lpaW+paWlrqWlpa6lpaWupaWlrqWlpa6lpaWupZWVrqWlla6lpZWepaWlrqWlpa6lpb + WutaW1rrWlta61pbWutaWlrrWlpa61taWutaWlrrWlpa61paWutaWlrrWlpa61paWutaWlrrWlpa61pa + WutaWlrrWlpa61paWutaWlnqWlpZ6lpZWepaWVnqWllZ6lpZWepaWVnqWllZ6lpaWepaWlnqWVlZ61pa + WepaWlnrWlpZ6lpaWupaWlrqWlpa6ltaWupbWlvqWlpa6lpaWupaWlrqWlpa6ltaWupaWlrqWlpa6lpa + WepaWlnqWlpZ6lpaWepbW1vrVFRU7RcXFuEAAADEAAAAngAAAIMAAAB4AAAAcgAAAGYAAABbAAAATwAA + AEMAAAA2AAAAKwAAACEAAAAQAAAAFgAAAB8AAAAoAAAAMgAAAEAAAABRAAAAZQAAAIEAAADLWVlY8ZmY + lc/HwburzsfBp8rGvafKxL2oycO7psbAuaXFvrilxL62pMO+taPBurKjvbiwo7+4r6G9tq6iu7Wtoby0 + rKG6s6yhubOrobeyqqG3s6qgt7KpoLeyqZ62saietK+mnrKupJ6zrqWes66lnrOupZ6zrqWes66lnrOt + pZ6zrKWesquknbKrpJ2yq6Sds6ylnrKspZ60raWdtK6lnbavp524saieurGpn7qzq5+7ta2fvLevnr63 + sZ/AubGfwbqxn8K6sp/FvbSew7yzoMS+tZ/EvrSfxL+1oMS/taHEv7WhxL+1ocW/tqLFv7aixsC4ocfA + uaHHwLmhx8C5ocfAuaHHwLmhyMG5ocjBuaHIwbmhyMG5ocjBuaHIwrqiycK6osnCuaDJwrmhycO7ocnD + u6HJw7uhycO7ocnDu6HJw7uhycK6ocnCuqHKw7uhycK7ocjCuqHHw7mgxsG4oMa+tqDEvbagxLy0nsO7 + sp7BurGew7yznsK7s5/EvLSfxb21nsW+tZ/Gv7igxsC5oMjDuqLJwrqiycO7os3GvqPIw7uloZ6cxWZl + ZO0JCQjdAAAAogAAAIQAAAB7AAAAbQAAAGAAAABUAAAASAAAADsAAAAvAAAAIwAAABIAAAAYAAAAIQAA + ACoAAAA1AAAARAAAAFgAAAB7BQUExHBvbu/Lx8Ktpp2Qd3xxY2RxZVhjcmdZY3JnW2JzZlhhcGZXYW1h + VmBqYFFeZ1xMXmRZSl1hV0hdYVZFXGBURFtdUEFaW01AWlhNP1lXTT1ZVUs7WFJKOlhSSTlYU0g5V1FH + N1dORTRWS0IxVkxBMVZMQTFWTEExVkxBMVZMQTFWTD8xVkw/MVZLPTBWSjwvVUo9MFZMPzFWTEAxVU5B + MVVRQzNVUkU0VVVIOVZZSztWWk09VltPQVdfU0VXYlVIV2NXSFdmWUlXaFpKV2pdTlhqX05YaWBPWGlf + TlhqYE9YamBPWWpgT1lrYVFZbGFSWmxhUlpuYVVabmFVWm9iVlpvYlZab2JWWnBjVlpyZVZacmVWWnJl + VlpyZVZacmVWWnNmV1xzZ1hcdGdYXHRnWF11altddWpbXXVqW111altddWpbXXVqW110aVtddmlaXXZq + Wlx1aVtddGdZXG9lV1twZFRabGBSWmpeUVlqXU1XZ1xMV2lcS1dpXUxXZltMWGleTlhrX09YbWFRWm1i + VFpvZFdbcmVYXHBkVltwZFdccGNVXHNpWluflIdszcfCn4WEg+kODg3XAAAAnQAAAIMAAABzAAAAZgAA + AFkAAABLAAAAPQAAADIAAAAmAAAAFAAAABoAAAAjAAAALQAAADkAAABJAAAAYQAAAI8cGxrmz83JwI2E + eG2Bd2ptioB1dJGIfHeUiYF5l46EepmQh3yakYh8mZKIe5aPhXuUjIJ6k4uAepGJf3mPiH14kId7d46E + e3aLgnh2ioN5doqDeHWKgnd0h4B1dISAdXSFgHV0hn90c4N8cXODe3FygnpvcoJ6b3KCem9ygnpvcoJ5 + b3KCd29ygndvcoJ3b3J/d21ygHducoJ3b3KDem9xhXxwcYZ8cXGGfXJyiYB1couCd3KMhHhyjYZ7c4+G + fXOSiX9zk4p/c5WMgHOWjYF0lo2CdJaPhHSWj4N0lo+EdJeQhXWXkIV1l5GFdpiRhnaYkYd2mZGIdpqR + iHaakIh2mpCIdpqQiHaakIh2m5GIdpySiHackoh2nJKIdpySiHackoh2nZOJd52UiXedlYl4nZWJeJ2W + i3idlot4nZaLeJ2Wi3idlot4nZaLeJ+YjXiflot4npaLeJ2Ui3iblIl3mpKIdpmQh3aYj4d2mJCEdJWN + gnSTjIJ0l4+EdJWNg3WVjoN1mJCEdZmRhXaakId2mpOId5qRiHaZj4Z1lIyCdJKJfnKLg3hvh3xwbH91 + Z2eCeGxi1NDLrjY1NOoAAAC0AAAAjAAAAHgAAABpAAAAXQAAAE4AAABAAAAANQAAACgAAAAUAAAAGQAA + ACMAAAAuAAAAOgAAAE0AAABkAAAAt4OCgeKupp+JiX9zcpGJf3iZk4d8o5yTg6qknYmwqqOMtK2nkLaw + qpK4sauTt7GqkrWvqZK0r6iRs62nkbOspY+xrKSPsaqkjq+po46vqqKOrqmija6poYyuqaGMrKigjKuo + oIyrqKCMq6Wdi6qlnYqqpZ2KqaOciqmjnIqpopyKqaKciqminIqpopyKqaKciqmjnIupo5yLqaKciqqk + nYqtpp6Kraaeiq6noIqvqaGKr6uii7GspIuzrKaLs66ni7Wvp4u3sKmLuLGqi7ewqYy3sKmMt7KrjLey + qoy3sqqMt7Krjbeyq423squNt7KrjbiyrI24sqyNuLKsjbmzrY65s62OubOtjrmzrY66tK2OurStjrq0 + rY66tK2OurStjru0rY67ta2PurWtj7q1rY+6ta6PurWuj7q1ro+6ta6PurWuj7q1ro+8t6+PvLWuj7y2 + ro+7ta6PubStj7m0rY65s6yOuLKsjbiyqoy4squMtbCpjLewqYu1samMtrCpjLeyq4y4sauNubOtjrq0 + rY64sauOtrGqjLOtpYmuqKCFpqCXgJ2Ui3mUjIF0joR5cIF3bGmknZR4lpST1wcHB8wAAACRAAAAfgAA + AGwAAABfAAAAUAAAAEIAAAA2AAAAKgAAABYAAAAcAAAAJQAAAC8AAAA8AAAAUAAAAGkAAADJ0tHP2pWM + g3eWjIJ6nZWNgKijm4m+saqOzLy2l9PFv6HZy8Wm3M/Kq97RzK3dz8ut3c/KrNzPyqvczsmr287JqtvN + yarazcep2s7IqdnMyKnZzMep2MzGqNjMxqjYzMan18vGp9XKxafVysWn1srFp9XKxabVysWm1MnEptTI + xKbUyMSm1MjEptPIxKbTyMSm08nEp9PJxKfUycWn1srFptbKxabWysam18vHptfMyKbXzcmn2M7Jp9nO + yqfZzsqn2c/Kp9vRy6fb0Mun2tDLp9rQzKfa0cyn2tHMqNrQzKjZ0M2o2dDNqNnQzKjZ0Myo2tDNqNrQ + zajZ0M6o2tDOqdrQzqna0M6p2tDPqdrRz6nZ0c+p2dHPqdnRz6nZ0c+p2NDOqdnRzqrZ0c6q2NHOqtjR + zqrY0c6q19HOqtfRzarX0c2q1tLOqtXRzarW0c2q1dHMqtTQzKnU0cyq1NDLqdTPzKnTz8uo08/KqNLO + yqjTz8qn0s7Jp9LOyqjTz8qn0s7KqNPQy6jU0cyp1NDNqtPPzajPzMqky8fFnsO/vpa5s7GLrqehhqOa + kXyXjoR2jIR5cYqBdWvf29jHExIS2gAAAJUAAACAAAAAbgAAAGAAAABSAAAARAAAADgAAAArAAAAFgAA + ABsAAAAlAAAAMAAAAD0AAABUAAAAbAAAAMjT0c/fnZOJe52Vi3+qo5yJvbStk6TJyrqi1NbKq9rc0LDf + 4dey4eTasuLl3LHh49yx4OTcseDj27Lg49uw4eLcseDi27Hg49uy4OLbsuDi2rLg4dqy4OHas+Di2rTh + 4dq04OHateDg2rXg4dq24OHatuDg2bbg4Nm24eDZtt/f2bfg39m44N/ZueDf2brg39q54N7auuDe2rrh + 39m74d/ZvOHf2b3h4Nm+4uHZveLh2sDj4trB5OLawuXj2sPl5NrF5eTaxubk2sbl49rG5eTaxuXi2sbl + 4trG5eHax+Xh2sjm4trJ5eLayuXi2srm4trM5uHazObh2s3n4NrO59/azuff2s7o39rQ6d/a0erf2tHr + 39rT697a0+ze2tXt3trX7d/b1+7g29nu4dvb7uLb3e7i293u4tve7uPb4e7j2+Xu5dvp7ufb7O7n2+7v + 6tvw7urb7+7s2+/u7Nvv7uza7u3s2u7t7Nrv7eza7u3s2u/t7Nru7eza7+7t2u3u7tru7e7a7+7w2u/t + 7tvw7uvb7u3l2uzr3Nbp59TR5ePKy93bv8LCvbWYsKuhh6GakXyVjIF1jYV6bt7d2swTExLaAAAAmAAA + AIEAAABvAAAAYQAAAFMAAABFAAAAOQAAACwAAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAydTS + 0d+hmZCAp5+XhbeyqpLTxL+fW9vm9jjg7f8/3ur/P97r/z/c6f8+2+f/Pdvn/z7b6P8+2+j/Qdzm/0Hc + 5v9B3Ob/Qtvm/0Pc5v9E3OX/Rtzk/0je5f9L3uX/TN/k/03f5P9Q3+T/Ud7k/1Hf4v9T3+P/VeDi/1bg + 4f9Y4OH/WuHh/1zh4P9e4eH/X+Hf/17h3/9g4d7/YuLe/2Pi3v9l4t7/Z+Te/2nj3v9q497/bebe/3Hm + 4P9y59//defh/3nn4v976OL/fOnj/37p4/+B6eP/guni/4Lq4f+G6+H/iezg/4rs3v+M7N//j+3e/5Pv + 3v+V8d//mPPe/5r13f+c9t3/nvjd/6L73P+k/Nv/qf3b/67+2/+w/9v/s//a/7X/2/+3/9v/vP/d/8T/ + 4P/N/+T/1v/n/9//7v/o//T/8P/3//f/+v/8//v////+//////////////////////////////////// + ///////////////////////////9////9v////D////n////2////87////C////t////67///+q/9PQ + xKy9ubOSraWdhJqTiXmRiX1w4N3azBMSEtoAAACYAAAAggAAAHAAAABiAAAAVAAAAEYAAAA6AAAALAAA + ABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADJ1NPR36WfloOspZ6KwLu0mt3Qy6xm2+LyQdvk/0bb + 4/9F2uP/Rtni/0fa4f9H2uH/SNvi/0nb4v9K2+D/S9vh/0vb3/9M29//Tdvf/03b3v9P3N3/Utze/1Pd + 3f9U3d3/Vt7d/1fe3P9X3dz/WN7b/1zf2v9e4Nn/YN/Z/2Dg2v9f39n/YN/X/2Hf1v9g4Nb/YuDW/2Th + 1f9m4dX/Z+LU/2rh0/9s4tP/beLT/27j0v9w5ND/ceXQ/3Ll0f9059D/debS/3jo1P976tX/f+zX/4Ts + 2f+F7tv/ifDc/43w3f+R8t7/kvXf/5P23/+W997/mvne/5z83v+f/d7/o/3g/6f+4f+r/+L/rf/j/6// + 4v+z/+P/uP/j/7z/5P/C/+b/yf7m/9L+6f/b/uv/5v7w/+/+9P/3/vn//P/9//////////////////// + ///////////////+///7/v//+P78//r+/v///v/////7///+8f/8/uf/+v7d//j+1P/2/sv/8/6//+/+ + tP/s/6z/7P+m/+z+o//s/6H/6f+j/+r/n//n/53/2tnOuMfCvpyzr6aKoJmPfJSMgnLg3dvNExIS2gAA + AJgAAACDAAAAcQAAAGMAAABUAAAARgAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbgAA + AMnU09Hfp6CYhbGro47FwLuf5djUtWLa3/Q62N7/Qdjd/0HY3f9B2dz/Q9na/0PZ2/9E2dv/Rdna/0Xa + 2f9H2tj/R9nY/0ja2P9I2tj/SNrY/0ra1v9L29X/TNvV/03c1f9Q3NX/UtzV/1Td1P9U3dP/Vd7S/1bd + 0f9W3dD/V97P/1fezv9Y3s3/Wd7M/1nezP9c3sv/Xd/K/1/fyv9h4Mn/Y+DJ/2Liyf9j48j/ZuTI/2jm + x/9p5sj/a+bI/2zox/9u6cf/cOrI/3HsyP9178f/d/DI/3nyyf999cv/gvjO/4f60f+L/df/k//a/5n/ + 3v+d/+L/o//k/6j/5P+t/uT/tP/k/7r+5f/B/uj/yv3t/9T+8v/d/vb/6f74//P++v/5//z/+//9//3/ + /v///////////////////////////////v////v////6////+f////b/+/3y/+v87v/g/ez/3v3p/9f8 + 4//i/d//6f3Q/+P+u//f/63/2P+k/9L/nf/N/5j/zv2V/8/9kv/Q/Y//0PyN/9P8jP/V+pD/wPac/6T3 + pv/Z3tbBzsnFo7mzrI+lnpR+mI+GdOHd3M0TEhLaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAA + AC0AAAAXAAAAHAAAACYAAAAyAAAAPgAAAFQAAABuAAAAydTT0eCqpJqGs66okcnFwKXq3Nm7bN/l9UXd + 5f9M3eX/Td3l/0zd4v9L297/SNvc/0Xa2f9F2dj/RNrV/0PZ0v9E2dL/RdnR/0TY0P9F2ND/RtnP/0na + zv9M3M//TtzP/1Hbzv9Q3Mz/TtvK/07Zyf9P2sn/UNrH/1Dbxv9S28X/VNvF/1XcxP9V3MT/Vt3E/1je + xP9Y3sP/Wd/C/1vhwv9c4sL/X+LB/2Dlwf9j5sD/ZebB/2Xowv9n6sH/aevC/2ruwf9s8cH/bvPC/3D2 + w/9y+cT/dvzE/3n+xv99/8j/gf/I/4f+zP+Q/s//mv7W/6v+3/+8/ur/yv3y/9b+9v/e/vn/5v77/+r+ + /P/t/v7/7P7///H////4///////////////////////////////////////+//3/+f/5//T/9P7n/+z/ + 2f/l/s7/3v/F/9D+wf+5+8L/ofrD/5n8xf+X+8b/l/rF/577yf+j+83/pvvH/7D9uv+8/af/yPyb/8v7 + lv/K+ZL/yfiP/8v2jP/S94//2viS/+T6kv/c+ZX/rfKe/93i2sfSzcqovbexkqihmICakYh14N3bzhMS + EtoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAdAAAAJwAAADIAAAA+AAAAVAAA + AG4AAADJ1NPR4KulnIa2sauSzMfEqO/h3sFc19n2MdLU/zjS1P850tT/OtPT/znS0f850dH/OdLP/znR + zf860sz/O9LM/zrSyv870cr/PNHJ/z3Syf8+0cf/PtHG/0LRxv9D0cX/QdDD/0HSwf9B0sH/RNLA/0XR + wP9G0sD/RtO//0bUvv9J1L3/Sta+/0zVvf9O1rz/Tti7/07Xu/9P2bz/Udu7/1Ldu/9V3br/VuG7/1jj + u/9Z5rv/Wum8/1ztvP9e8b7/YvW+/2X5v/9p/MH/b/3G/3X+yf98/s3/h/7U/5X93f+g/eT/p/3p/639 + 6f+z/ev/t/7s/7j+7v+z/e3/s/7r/7b+7v+9/vT/y/73/9z+/P/w////+//8//r/+//2/vf/7/7x/+b+ + 6f/e/uL/2P7f/9L/3f/P/tb/y/7N/8n/x/+//sD/r/26/6n9tv+j+7H/gfmx/2z4sv9o97P/aPi2/2j4 + tv9v+Lj/ffq//376wP97+8P/hfvL/4j6yP+k+r7/w/iy/9j5qP/d+Z7/2/eV/9r1j//U9IT/z/B5/83t + cP++5G7/4uTazdTQzqzAu7SVqqOagpyTinbh3tzPExIS2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAA + ADoAAAAtAAAAFwAAAB0AAAAnAAAAMgAAAD4AAABUAAAAbgAAAMnU09HgrqafiLizrJPNycap8OLfwlPU + 2fYlzNT/Lc3T/y3O0/8tzdH/LczQ/yzN0P8uztD/Ls7P/y/Nz/8wzM7/MM7M/zHMyv8wzMr/MM3I/zPM + x/8zzcf/Nc3H/zfOxv84zsX/Oc/F/zvPxf860MP/O9DD/zvQw/880MH/PNLA/z/Tv/9A1MD/Q9XA/0bW + v/9G2MD/R9nA/0fbwf9J38H/S+LB/03mv/9N6sH/Uu3D/1jxxf9f9Mn/Z/fM/2z50P90+tb/gPzc/4v+ + 4/+R/ej/kv3s/5T98P+Y/fL/mv3x/5f+7/+S/+r/jf/i/47/3v+P/97/lf/f/6L+5P+x/un/wP7t/8z+ + 8f/U/u7/1v7o/9H+3v/I/tP/vv/N/7b/x/+x/8T/rv+//67/uf+h/7b/i/+0/4T+sv+B/rH/g/2u/3/8 + r/9w+bD/Zfex/2Hyr/9c8K7/WfGx/2bzuP9t9bv/bve7/3j6vv9++8H/fvq+/4H7wf+S+8j/kvvM/5j7 + 1f+b/dT/qP3E/7T4o/+864X/u990/7bZbf+z1mr/sNFl/6/LX//j5NnO19PQrsG8tZasppyDnpWNd+Lf + 3M4TEhLaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAyAAAAPgAA + AFQAAABuAAAAydTT0uGtp6CKubSulc7Lxqrw4t/DVtbd9ijQ1/8v0Nf/L9DW/y/Q1v8x0dX/MdLU/zLR + 1P8y0NT/MtDT/zLR0P8z0tD/NNHP/zXSz/83087/OdTO/zrUz/881c7/PNXN/z3Wzf881sz/P9fL/z/W + yv9A2Mv/QdnL/0Payf9F3cr/R97K/0jhyv9I5Mv/SOfK/0nry/9N7s7/UvDP/1n10v9h+tf/afzb/3H9 + 4/97/ej/hP/u/4v/8/+N//b/jf/3/47/+P+Q//j/jv73/4j/8f+F/uz/gf/l/3//4f+B/tv/hP/Z/4z/ + 3v+X/+T/pv/t/7f+8//F/fb/0P3z/8/+6v/I/t7/vv/V/7P/yv+m/77/mv+0/5T/rv+S/6j/kP6k/5H8 + oP+S+p7/lfed/5b0nP+U8pz/kPGc/43vnv+G7Z//gOyf/37qof9566T/de2o/3jxsf+A9bn/jvXC/5n3 + yf+c+cz/qfrQ/6H7zP+S/Mf/lPrK/4/6yf+J+sT/lPrB/5b5vP+X+Lr/mfe3/5vyp/+k5pD/rtV6/7LL + b/+xym//rshr/+Tk2s7X1NCuwby2lq6mnoWgl4944+HdzxMTEtoAAACZAAAAgwAAAHEAAABjAAAAVQAA + AEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI1dPS4bCpoYq5s66VzsvHqvHk + 4MNW1dn3J87T/y/P1P8vztP/L8/S/zHP0v8x0ND/MdDQ/zLQ0P800dD/NdLP/zbUzv821M7/N9TO/znU + zv861c7/OtXN/zvWzP871sz/PNfN/z3Xzf9A2sz/QdzL/0Lezf9D38z/ReLL/0bmy/9I6M3/TuvS/1Tw + 1v9c9Nr/ZPfh/2r56P9z++3/e/vy/3z98/97/fX/fP30/3v98/96/fH/eP3t/3f96P90/eT/dP3e/3L+ + 2v9x/9b/c//R/3j+0P98/tH/gv/Z/4/+4f+d/uj/qP7r/7P96v+1/eT/sP7a/6j+z/+g/8b/l/+8/47/ + sv+K/6r/if2n/4j7pP+I96D/h/Sb/4jvl/+H7ZX/h+mR/4fnjv+F44z/huCJ/4jehf+J24P/kNuD/5je + h/+g5Iv/qOqO/6/wkv+39Zn/tveb/67zmP+q7Jv/seql/7brsv+x7bL/rfC2/6/0vv+w98L/qfe7/6P1 + sf+i9Kv/mvWi/5z0n/+e86L/m/Wn/5r0pv+c65X/nth+/6DEav+lu2P/4+Paz9jU0a/DvreYrqighaKa + kHnj4N3PExIS2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAA + AD4AAABUAAAAbQAAAMjU09LhsKqii7u1r5bOy8ir8ePhxFXU1vcnzdD/L87R/y/P0f8w0ND/M9DR/zPS + z/8z0tD/NNPQ/zPTzv810s3/NNPN/zbUzf821M3/ONbN/zrVzf87183/O9jM/zzZzP89283/P97M/0Lg + z/9G49D/TOfT/1Pr2P9a7t7/XvLk/2L16v9q+O//bvrx/2778f9r/PD/aPzt/2f96f9n/OT/Zvzg/2X9 + 3f9k/dj/ZP3V/2T90v9l/s7/af7K/2v+yP9s/sf/b/7I/3T+zP98/tH/h/7Y/5H+3v+a/+L/nf7d/5n/ + 0v+T/sX/iv66/4X9s/+D/K//gfqp/3/3pP9/86L/fvCe/4Dsmv+B6Zb/gOaS/4DikP+A343/gNyM/4Da + iv+A2Ij/gtiF/4bZhf+O3of/l+SK/57qjP+k747/qfKQ/6fxjP+i7ob/n+iD/53jgP+a3Hv/mth3/5nV + df+a0XL/mdBz/5rPcv+gznb/rNR+/7bdhP+85Yj/wO2M/77wkf+w8ZH/pu+Q/57ujv+c7o7/ou6Y/6Tx + m/+n8Jf/ouaI/5rOcP/i5NrO19TRr8S/uZmwqaKHopuSe+Ti3c8TEhLaAAAAmQAAAIMAAABxAAAAYwAA + AFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNTS0uKzrKOLu7awl9DM + yKvx4+DEVtXW9ynP0f8w0NL/MdHS/zHT0P8z0tD/M9LO/zPSzf8z0s7/MtTN/zTTzv811c//N9fP/znY + zv872s7/PNvR/z7d0/9C4dX/SeXZ/1Dp3f9V7uP/V/Hn/1316/9h9+//Yfru/1/66/9c+ej/Wvrj/1n5 + 3f9Y+dj/VvjV/1f50f9X+M7/WvjL/1v3yf9c9sb/XfXD/171wv9g9sH/Y/nB/2b8wf9r/sT/cP/H/3r/ + zv+C/9f/if7Y/4z+1f+L/Mz/gvu9/3z5sv9396z/dPWm/3Pxov9z7Z7/deqc/3jom/975Zj/fOGW/3re + k/9424//eteN/3jWif971ob/fNWG/37WhP+D2IT/i96J/5Pki/+Z6oz/n+6O/6Lvjf+e7Ir/l+aG/5Xg + gP+R23z/j9Z4/5DRd/+Qz3X/kMxz/5DKcf+Rx23/kcZq/5HDaP+TwWX/l8Bh/5m/Wv+bvlP/m71Q/52+ + U/+kwl3/q81q/7XZdP+6437/teh+/6voef+n6Xv/pumD/6zskv+y75v/r++a/+Tn38/X1NGwxL65mbCq + o4ilnpN85OLe0BMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAA + ADEAAAA+AAAAVAAAAG0AAADI1dPS4rOtpIy9ubGX0M3IrPHj4cVZ19j3KtHQ/zHSz/8v0s7/MNLN/zHT + zv8x083/NNTO/zbVz/8419H/O9rT/z7f1/9D5Nv/SOjg/03s5f9R7uj/UvLr/1T17f9W9+3/Vvbr/1H1 + 5/9Q9OH/TPPZ/0zx1f9L79D/S+7M/07syP9P7Mb/UerD/1Lqwv9T6cH/U+m//1Xovv9V57v/V+m6/1nr + uf9d77r/YvW//2j5xP9v/cr/d/7Q/33+0v+B/c7/gfrK/3v2v/9086//be6l/2rpoP9q5J3/a+Gb/2vf + mP9t3ZT/bduS/27Zkf9x15D/c9WP/3TTjf9304r/eNGI/3nSh/981Yb/gtiG/4veiP+S5Yv/lOqK/5fs + i/+Y7In/lOmG/47ggv+J13z/htJ4/4jOdf+IzHT/iclx/4rGb/+Kxm3/i8Nr/4vCav+NwGn/jL1o/427 + Zv+QumP/krpe/5e5Vv+cuVD/mrlO/5e6Tv+WuVL/k7ZV/5G1VP+Ss1P/lbRU/6C8XP+tyGT/t9Rp/7rc + a/+1327/suB5/7Lkjv+565//5efgz9jU0bDEv7qasquliKefln3j4d7QExIR2gAAAJkAAACDAAAAcQAA + AGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjV09LitK2mjL23 + spjRzcmt8uTixVbX1fcp0c3/M9PP/zTV0f8219P/OtrW/z3e2v9D4t7/R+bj/0rr6P9N7+z/UPPu/1H0 + 7v9Q9e3/TvHp/0vv4/9H7N3/Q+nV/0Hlz/9C5Mv/Q+HH/0bhxf9H38P/Sd7C/0ndwP9L3L//TNy+/03d + uv9O3bf/UNy3/1Hdtv9S37X/VeS2/1rruv9h8sH/Z/jH/2/7y/91/dD/dvvN/3f2xv9z8r3/be2w/2jo + pf9k4p//ZN2c/2Xamf9l2Jf/aNeU/2nVk/9p05D/adKN/2fQif9pzYb/acuF/23Nh/930Yj/fNWL/4Pa + jP+K4Y7/j+aN/5Dojf+S6Yv/keeI/4zhgv+G233/gdN6/3/Mdv+ByHP/gsZx/4PEb/+ExG7/hMJr/4PA + av+EvWj/hLxl/4a6Zf+Gt2P/h7di/4e1Yf+LtF//j7Ra/5W1Vf+Yt07/mLdI/5a3Sv+RtlD/j7ZT/5C2 + Vv+Ttlj/lbZY/5u2Wf+duFv/m7dZ/56zVv+jtVj/q7xa/7PFWf+4y1z/ts1i/7rUd//l5t7P2dXSscXA + vJuyraWJqKCWfeTi3tATEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAA + ACYAAAAxAAAAPgAAAFQAAABtAAAAyNXU0uK0raiOvreymdLOyq7x5OLGX9/d9zff3f9B5OH/Q+fk/0Lq + 5v9E6+j/RO3p/0Xu6f9G7OX/ROjg/0Pm2/9B4tb/P+HR/z/fzv8+38z/QN3J/0Daxv9A2cT/QdjB/0TW + v/9F1Lz/RdS7/0fTu/9J1Lr/SdS2/0vVtf9L1bT/TNex/07asf9U4Lb/Wui9/2DxxP9m98v/bPnO/3D4 + zv9u9MX/bO68/2jns/9i4af/YNye/13Ymf9f05b/YNOX/2LRlv9k0ZP/Y9CP/2XPjf9kzIr/ZMmI/2PH + hf9myYT/a86G/3XUh/972ov/g+KO/4zokf+M6JD/jOeP/43ki/+I3oT/gtZ+/33PeP95yXP/esZw/3vE + b/98wm3/fcFs/3++af9/vWf/f7tl/3+5ZP+At2P/gLdh/4G1YP+Ds17/g7Jd/4SwXf+Hslv/jLJX/5Oy + T/+Vtkn/lrdH/5G4Sf+Nt07/irZT/4u2WP+SuFr/lrpc/5q8Xv+evF//oL1d/6G9Xf+jvlz/p7xa/6e7 + WP+muVX/qrlU/6y3Uv+ttUz/tbVI/+bk2dDa1tSyx8G9nLStp4unoJh/5OLf0RMSEdoAAACZAAAAgwAA + AHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI1tTT47Sw + qI++ubSZ0c3KrvDi4MZj6eb3N+jk/z7o4P895d3/O+HY/zrd0/852c7/ONfL/znWyP871sj/PdfJ/z/Y + yv8+2Mr/QdnJ/0DXxf8/0r7/QdC7/0DQuv9B0bn/RNG4/0TQtv9E0bT/RtC0/0fRs/9J0rD/TNaw/1Dd + tv9Y5r//X+/H/2X0zP9p9c7/afHH/2Xrvv9h47P/Xtur/1zWov9b0p3/WtCZ/1zOlf9ezJT/YMyT/1/K + kf9hy5D/YcmN/1/Hif9fx4b/ZMiF/2nMh/9v1In/dNuL/33ijf+C55H/gOaO/4Hjif+C3oj/gdqG/3/V + gv9/0H//f8t6/3zIdf97xXL/esFu/3i/av95vmj/erxm/3q7ZP96uGP/fLdh/3y2X/9+tF7/frNd/3+y + Xf+BsFv/gbBa/4OwWv+GsFn/i7JU/5G0Tv+Vtkf/k7lF/4+8SP+JvFL/ibxZ/429YP+SwWT/mMRl/57F + Zv+ix2b/o8Zl/6LDYf+iwV3/o75a/6O9WP+kulb/pLhT/6S2UP+mtE7/qLRL/6mySv+ssUX/5eTa0NnX + 1LLGwr2dtq6ojKmimYDk4uDRExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAA + ABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjW1NPjtbCqj7+6tJrRzcqv8eTjx13c1Pcw1Mv/ONLK/zfR + x/840cf/N9HG/zjRxP850MX/OtLF/z3SxP88z8H/PM28/zzKuf89yrr/QM27/0HPvP9Bz7v/Qc65/0HO + tv9CzbP/Rc2w/0bPsP9J1LL/T926/1fmxP9d7cj/YvDM/2Lvyv9g6L//Xd+1/1rarP9X1ab/WNCi/1fN + nP9Xy5j/V8uX/1rJlf9cyJP/XceR/1/Gjv9exYz/YMSL/2LGiP9nzIr/bdON/3Tbjv954pH/feaS/3zm + jv944Iv/d9qG/3TTgP9xz3z/dM16/3bJef94yHr/fMd5/4HHd/+AxHT/fMJv/3q+a/94u2f/eLlj/3m3 + Yf96tWD/e7Rg/3y0Xv97s1z/fbJb/3+xWv+CsVn/g7FY/4OxV/+GsFf/i7NT/5C2Tv+Uu0n/k79K/43E + U/+Kxl7/i8Vn/5DGbP+Tx27/lshv/5jJbf+Zx2n/m8Rm/5vAZP+cv2D/nL9c/5+/WP+jv1b/psBW/6fD + U/+rw1L/rsJP/66/Tf+wvUn/r7tG/7C3Q//m5NnQ2tbVs8jEvp63saiMq6OagOTi4NETEhHaAAAAmQAA + AIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNbU + 0+O2sauQv7u0m9LOyq/y5uPHXdPM9y/Lw/81zcP/NszC/zbMwP80yr3/Nsi6/znEuP84xLb/Ose3/zzL + uv8/z7z/QM6+/0HQvv9Czrz/Qcu2/0HIsf9EyrD/RtCz/0nVuP9Q38D/VOjI/1rrzP9d68r/W+bD/1ff + t/9U163/VNKn/1TOpP9VyqD/VMme/1bInP9YyJn/VsaX/1fHk/9XxpH/WMaP/13Fjf9fx4z/Y8yN/2nT + kf9w25P/deGS/3rllf9545L/dN+L/3HYh/9w0oP/bs9//2/Le/9vyHf/bcZ0/3DDcv90w3L/dsNz/3rE + dP9/xXP/g8N0/4HCcP99vmr/e7tn/3q3Y/95tV//erVe/3u0Xf99tF3/f7Vb/3+1Wf+BtVj/g7ZZ/4e2 + WP+Lt1j/j7lW/5S9T/+Wwkz/lMhQ/4/NWv+Mz2r/itB1/4zNeP+Qy3X/k8p0/5XKcv+Xym//l8xp/5rM + Z/+ezmT/oM1i/6DKXv+hyFv/o8VX/6TBUv+kvU7/o7dL/6KxSf+iq0P/naQ+/5yeOv+cmTf/nJY2/+Th + 2dHc2dWzycS+nrexqo2rpZyB5OLg0hMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAA + ABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI1tTT47axq5HBvLWc0s/Lr/Lm5Mdbzsb3LcO4/zXD + uf84wrj/NsK2/zbEtv84xbn/Oca3/zjHt/88yLj/Pci3/z3Fs/8/w7D/QMax/0HMt/9H1b7/TNzD/1Dk + yf9U6c7/VujN/1blx/9T3r7/T9ax/07OqP9PyqP/UMqi/1HIof9Tx5//U8ed/1PFmf9TxJf/VsOV/1jD + k/9bxZT/X8iU/2LNk/9o1ZX/bNyV/3Hglv9z5Jf/dOSU/3LekP9v1or/btCH/23Og/9tzH7/bsp7/2/H + ef9ux3b/b8V0/2/Ecf9vwW//cMBt/3XAbv93wW//fcNx/4TDb/+Gw2//hMFr/4G+Z/9/vWT/fbpg/326 + Xf9+vF7/grtc/4a8XP+Jv1z/i8Fc/4/CWv+SxFr/l8VY/5nJVv+ZzlP/ldNW/4/VZf+J13T/idd//4vW + gf+P1n7/k9V7/5LSdf+TzXD/kshq/5HCZv+PvmD/j7la/4+0Vf+Nq0//i6JK/4qcRv+KmEH/i5Q9/4uS + O/+MkTj/jpA3/5OPNf+UjzT/lZAz/5ePMv+YjjD/5OLZ0dzZ1bTJxL6euLOrjqylnYLk4uDTExIR2gAA + AJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAA + AMjW1NPjtrGrksC8tp3T0Muw8+flx1vJwfcwv7T/N8K2/zXDtv82wrX/NsOz/zjBsv84wK//Ob+t/zu/ + rv8+xbT/Q9K+/0fZxP9M4cv/UOfS/1Hq0f9R5sz/UN/E/07Yuv9M0LD/SMmm/0jHo/9LxqL/TsWf/07F + nv9QxJz/UcGa/1HBmP9Vw5j/V8eY/1zMmf9h0Jv/aNef/27dn/9v4J7/ceOb/3LimP9v3pX/bdiP/2zT + iv9s0If/bM2C/23LgP9uyn7/b8l7/23Jev9vyHf/ccV0/3HFcv9xxG//csJt/3HAav9zv2n/eMFq/33E + bf+FxnH/jclx/47Lb/+Mymz/i8to/4nLZP+JzGL/is1h/4zNYv+R0GP/lNJi/5jRYP+b0GD/nNFc/5nV + W/+U2F7/jttk/4rabv+F1Xr/g9CC/4TLgP+GxHf/iL9t/4e4Zv+FsGD/gqdY/36hUP9+mkv/fpVH/32R + RP98j0D/f409/4GMPP+EjTn/h4w3/4iNNf+LjDX/jYwz/4+MMP+PjC7/kYot/5OLLf+UiSz/loks/5iJ + Kv/k4tnS3NrWtcnFv5+3squPr6ifgubj4tITEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAA + AC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNXU0+S3sayTwbu3nNPQzLDy5+XIXce/9zC9 + sP83v7H/N7+u/za9rv83vq7/OcGw/z3Jt/9C0b7/R9jE/0vgy/9P5M//TeLN/07hyP9O28P/S9S6/0jM + rv9Hx6X/SMek/0jGpf9JxqP/SsWg/0vDnP9OwZr/TsOb/1PHmv9YzZ7/XNKi/2TapP9q3qf/a+Gk/23i + o/9v4qD/cN+b/27alv9r15H/atKL/2nQif9rzof/bc6F/3DOgf9wzn//csx9/3LMef9yy3f/csp2/3PJ + cv9zxnH/dcdu/3THbP93yGv/e8tr/4DPa/+J023/kthx/5rcd/+h4Xz/oeF6/57gdP+a3m//ltxq/5PZ + Zv+U1WL/ltJe/5fQW/+Ry13/islf/4XLX/+Az17/fM5g/33HZP9/v2j/fbVs/32uZ/99qF7/f6NU/36d + Tv98mUj/e5VD/3qRP/97jjv/e445/3uMNv99jTP/f4wz/3+KMv+EiTD/hYgu/4WILf+Hhiv/iIYr/4uF + Kv+LhCr/jIQq/42EJ/+OhCf/j4Qn/5KEJ/+UhSf/lYUl/+Th2dLd2de1ysTAoLm0rI+wqaGE5uXi0hMS + EdkAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAA + AG0AAADI1dXT5LmzrZLBvLed1NHMsfLn5chcyLz3L7ys/ze/rv85xLL/Psu6/0LRwP9F1sX/SdvI/0nd + yf9J28P/SNe+/0rUu/9IzbT/Rser/0fGp/9IyKn/Ssqs/0rKqv9KyKb/Scah/0vDnf9Ox57/U82h/1fU + pf9e2qr/ZOCr/2Tiqv9o4qj/auKm/2zgo/9t3p3/bdyZ/27Ylf9w1pP/cNeP/2/UjP9w1Ir/cNOI/3PT + hv9y04T/ctN//3TRfP930Hr/eNB2/3nRdv9+1Xb/gtl3/4bedv+J4Xb/jOV3/5Dpd/+R6Xf/j+V0/5Tj + dP+a4XT/nd92/5/ddv+c13D/lc5l/43EWv+IvVP/hLZP/4C0Uv93tV//brlk/2m8Yv9svlz/dLtS/3q2 + Tf9/rkv/gaZK/3+hSf99nET/fJk//3yVO/97kzf/eZAz/3qPM/96jDD/fIou/3yILP97hyz/e4cr/3yF + Kv9+hSn/f4Mp/4GCJ/+Cgib/goEm/4SAJf+GgCb/h4Al/4h/Jf+JgCX/i38k/4yBJf+NgCX/kYEl/5OB + JP+SgSP/5eLZ0t3Z1rbLxcGhu7Suj7GrooTm5eLSExIR2QAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAA + ADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjV1dPkurStksO9t57U0cyx8ublyV/Q + wvc3zLv/Q9PB/0bWxv9H2cf/RdfC/0LRu/9Bzrb/Qsux/0TGrP9Ew6f/Q8Om/0fHq/9Ky67/S82y/0zM + sP9Nyab/T8mj/1POp/9X1az/Wtyw/17isf9h47D/Y+Os/2Xiqv9m4qf/aOGk/2vgof9q3p7/bd2c/3Hb + mf9z3Jf/dduV/3fbk/933Y//dd2N/3bdiv953Yn/fd6E/4Ddhf+C4Yb/h+WG/4rphv+O7Yb/ke2G/4/t + g/+O6X//jOJ5/4fbcv+D1W3/gc1n/37FX/98vVv/g7tZ/4e8Wf+Lu1j/jbpY/4m3Wf+Aslv/da9j/2mu + a/9fsHL/WrZ0/1+5af9tuFP/f7NC/4WvPf+GqDr/hKE4/3+ZN/97lDX/d5Ey/3aOLv92iy3/doos/3eJ + LP94iCv/eIcq/3mGKv95hSn/eIMn/3mCJ/95gSb/eYAl/3x/Jf99fSX/fHwj/358I/9/eyL/gXsi/4J7 + Iv+DeyL/g3wj/4Z7I/+IfSP/i30j/419JP+NfST/j34j/5B9Iv/k4dnT3NrYtszHwqG9t6+Qsqujhebk + 4tMTEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAA + AFQAAABtAAAAyNbV0+S6tK2Sw764ntTRzbLx5uPJatvP90DWxP9D077/Qcu2/z/Isf9Axq3/QMKq/0HA + qP9Cwaj/Q8Wq/0fIrf9Ky6//S82v/07Nq/9S0qr/V9ix/1zguP9h57z/Yuu8/2Hqt/9g6LP/Y+ev/2Pm + q/9j5ar/ZuWm/2rjpP9t5KD/cOOf/3TkoP945p3/fOab/4DonP+D6pv/huya/4fvmP+J8Jj/je+Y/4/t + lv+N6JH/i+OM/4nghv+F2oL/gdR8/3zLc/94w2n/crli/3KzXP9yrlj/catU/3CpUP9wp0//b6dN/3Kp + UP93rFf/eK9j/3iycv90t3//Z7eI/1+2iP9atn//W7Vt/2WxV/90sEP/gas1/4WnM/+DoDL/fpky/3iT + MP90jS//cIou/3GHLf9xhyr/c4Yq/3OGKf91hin/d4Uo/3eDKP93gif/eIEm/3Z/Jf92fiT/dn0j/3h8 + I/96eyP/e3oi/3x6Iv97eSH/fnkh/394If+AeiH/gXoh/4N5If+EeiL/hHoi/4Z7I/+HfCP/iX0j/418 + I/+PfST/kH0i/+Th2dPd2ti2zMjDob23sJGyqqOF5uTi0xMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAA + AEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI1tXT5Lu0rpPDv7mf1dLOsvPm + 5clj0L/3OMWu/0DErf8/xKz/QMOq/0HEqv9Dxqv/RMes/0bMrP9K0a3/UNSu/1TZsf9a4bn/YOq//2Tw + xP9l8sX/ZPHB/2Tvu/9j77j/ZO+0/2Tvs/9n7rD/au2r/2ztqv9y76n/d++p/3zyqP+A86f/hfSm/4ny + pf+N8aL/j+6i/47nnf+K4pf/hduR/4LTiP99zIL/eMV4/3K7cP9ttGj/arBh/2qtXP9rq1v/a6lX/2up + Vf9uqFP/bqZU/2ylU/9so1T/aaJY/2WgXf9joWL/YqVv/2GrfP9isIb/Y7iK/2m7hP9rt3H/brRb/3Kv + Rf92qjb/eqQx/32fMP97mS7/dpIt/3KMLf9uiCz/bIUr/2yEK/9tgyr/b4Mp/2+DJ/9xgib/coIm/3SC + Jf91gST/dYAk/3d/JP92fiP/d30j/3p7If95eiD/eXkg/3p5H/96eR//e3ge/3p3IP98eCD/f3cg/393 + IP+AeCD/gXkf/4J4IP+DeSH/hXkh/4Z5If+JeiL/inoh/417Iv+OeyH/5eHZ097c2bfNycOivbawkrOs + pIbm5OLTExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAA + AD4AAABUAAAAbQAAAMjW1dPkvLavlMO+uKDV0s2y8+fnyWTNvPg5xaz/Qciw/0TMsv9Hz7D/StOw/03Y + sv9Q3LT/VOG3/1rnv/9d7MT/YO7H/2TwyP9l8cb/aPDF/2vxw/9r8b7/bfK+/2/yu/9v8bb/c/K0/3by + sv969LD/fvKt/3zup/9966T/feei/3vgm/962ZP/edGO/3bKhv9zxIH/cLx6/225dP9ptW7/aLFp/2av + Zv9ormL/a61f/2usW/9qqln/aqhX/2mmVv9oo1b/ZaBZ/2SfWf9inWD/XZxi/12dZP9bn2j/V59q/1qj + a/9fqGz/Za1r/22wZv92tV3/fbZQ/3+xQv97qzn/d6Iy/3WZLv9zkCr/cIso/2+HKf9uhCn/bIQp/2qD + KP9qgij/bYIn/26AJv9vgCX/cYAk/3KAI/91gCP/d4Ei/3iAIv94fyH/en8f/3l9H/96fCD/enof/3l5 + H/94eB7/eXge/3h4Hv95eB7/e3cf/3t2Hv98dR7/fnYf/4B3IP+Adx//gXcf/4J4IP+EeCD/h3ch/4l3 + IP+JeCH/i3kh/416If/k4dnT3tvZt83Iw6O9uLGRs62khefl4tMTEhHZAAAAmQAAAIMAAABxAAAAYwAA + AFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNXU0+W+uLGVxL+6n9TR + zrPx5ubKa9nA90XWtP9Q27r/VN+7/1bivP9Z5cH/XebG/1/ox/9j6cj/ZerL/2bqy/9q68n/a+rF/23q + wv9x68D/c+7A/3Lvvv9y7Lj/ceas/3Dlq/9v4qf/atqf/2fRlf9lyY3/YcWJ/2DAhf9gu4D/YLZ5/2Kz + df9ksnP/ZrFv/2exbf9psmv/abFo/2isZP9mqWD/Zqdd/2elXP9mo1r/ZaFa/2KfXf9hm2D/X5th/1ya + Yf9ammL/Wppj/1ubY/9am2H/W55f/12fXf9doFn/YqJT/2mlT/9yqUz/e65K/4GzRf+BsDz/e6Y0/3Wa + L/9wkCr/bYcn/2yCJf9qgSb/bIIn/22CJv9tgib/bYEm/22AJf9vgCT/bn4j/3F/I/90fyP/coAi/3aA + Iv95fyH/e38g/3t+H/96fh7/e3we/3t7IP95eR7/eXge/3h3Hf94dx3/eHYd/3l2H/96dR3/fHUe/3x1 + Hv99dR7/fnUe/392Hv+AdiD/gHYe/4J3H/+Fdx//hncg/4l3IP+LeCH/jHgg/+Xh2tTf29m4zcrEor+5 + s5KyraaH5eXj1BMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAA + ADEAAAA+AAAAVAAAAG0AAADI1tXT5b62sZXEv7uh1dHPtPDm5sp54sj3WODB/2PhyP9m5Mr/ZeTM/2bi + yv9l4sj/ZeLE/2Tiwv9i47v/ZOCz/2bgsv9m4LL/aN+w/2rfsf9n2qf/YtKf/1/Om/9by5n/WcOR/1a6 + hv9TtoL/UrN+/1Wve/9VrXf/WKx0/1mrc/9crG//YKts/2Ksa/9mrGn/aKtm/2ipZP9np2L/ZKNf/2Cg + Xf9fnV//X5xg/12bYv9cmmP/XJlj/1qYYv9amGL/WZld/1qYW/9cmVv/XJtY/16bVf9fnFH/YpxN/2Ob + R/9pnkP/cqVA/3qpP/99qzz/fqg3/3mgMP91lir/c40o/22IJf9qgiT/bIEk/2uAJf9sgCX/aoEk/2yA + I/9tgCP/boAj/25+I/9wfiH/cn4h/3N+If91gCD/eIAg/3qAH/98fh7/fH4e/3t9Hf96fB3/enkd/3l4 + Hf95eB3/eHcd/3d2HP94dhz/eXUd/3p0Hf97dB3/e3Qd/3x0Hf99dR3/fnYd/391Hv+Adh7/gnYe/4J2 + Hv+Edx//iHYf/4p4H/+Jdx7/5OHa1N/d2rjPysWjvrmzk7Gtpojm5ePUExIR2gAAAJkAAACDAAAAcQAA + AGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjW1dPlvLexlsTA + u6HV0s+08Obly33hz/hZ3cT/Xt3C/1zevf9b3rj/Wty2/1resv9Y3K3/Wdmo/1vWpv9b1KT/WNCk/1XG + m/9TvZD/U7uO/1K9kv9UvpP/UreJ/1Gygv9RsX//UbB9/1GreP9Sp3P/UqZw/1Smbv9WpGr/WKNn/1ui + Zv9epGP/YqVi/2OlY/9lpWT/ZaNl/2GgZ/9dnWb/Wppj/1qZYv9dml//XJpg/1yZXv9cmVr/W5dZ/1yY + Vv9cmFX/XJdT/12YUP9gmE3/ZJlI/2SZRf9lmkD/apw9/3CfOf90oDb/dp0y/3adLv96nS3/epgq/3iS + J/9ziyX/bYQj/2l/I/9pfiL/aX4j/2t/Iv9tfyL/bX8i/25/If9wgCD/cn4f/3J+Hv90fR7/dn4e/3p+ + Hv97gB7/fIAd/3yAHP98fhz/fH0d/3t8Hf96ehv/eXgc/3h3Hf93dhz/eHQc/3h0HP94dRz/eXUc/3ly + G/95cxz/e3Mc/310Hf98dBz/fnUe/351Hv+AdR3/g3Yd/4Z1Hv+Hdh//iXcf/4l1Hv/k4trU39zauM7K + xaS9uLOUtK+oiOfl49QSEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAA + ACYAAAAxAAAAPgAAAFQAAABtAAAAyNbV1OW/ubOWxMC7odXTz7Tx5ufLdt/B+FHasv9Y2bL/V9eu/1jU + q/9WzaX/VMae/1C/lv9JupP/SLiR/0mxi/9KsIb/S7GG/020i/9PtYz/T66D/06sf/9OrX7/UK9//0+o + dv9Po2//T6Jt/1Cha/9Qn2b/Upxk/1SdY/9VnWH/WZxh/1mdZP9bn2b/XqBo/1+gav9goWb/YJ9k/12d + Yf9dml3/XJhb/12YWf9dmFj/XplW/16ZVP9dmVP/X5hQ/2CYTv9gl0v/YphG/2WYQv9omj//apo7/2ya + Nv9sljL/aZEu/2uSKv9zlSn/e5so/4CdJ/99lif/d5Am/3KIJP9rgCH/aX0h/2l8IP9pfSD/a34g/21/ + IP9ufx//b34f/3F+Hf9zfx3/c34c/3V+Hf92fhz/en8d/3yCHP9+ghv/fYAc/31+HP98fRz/fHsc/3p6 + HP95eBz/eXYc/3h1G/94dBv/eHQb/3hzG/95chv/eXIb/3lyG/96chv/e3Ib/3xyG/9+cxz/f3Md/4B0 + Hf+DdB3/hXQd/4V0Hf+HdR//iHUe/+Ti2tTf3Nq5zsrFpMC6s5S0sKiJ5uXj1RMSEdoAAACZAAAAgwAA + AHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI1tXU5b65 + s5bEwryg1dPPtPLo6Mty0LT4S8Kg/029nP9JuZf/R7aT/0WxkP9ErYv/RauI/0Wog/9GqoH/RamB/0ir + g/9IqH//SKZ7/0qlef9Kp3z/Tap9/02kdf9NoHH/TKFt/02ia/9PnGX/UJlh/0+aYf9PlmP/UJZl/1CX + ZP9TmGX/V5tm/1udZf9dn2T/YKBj/2KhYf9joF3/YZ1a/2CYWP9emVb/YJlV/2GZVP9gmVL/YJhP/2CY + TP9il0j/ZJdF/2SXQv9olz7/a5k7/2yZN/9pkzD/ZYsr/2SGJv9niSb/cJAm/3mVJP+AmyT/f5kl/3qT + I/91jCP/b4Qg/2p8H/9pex3/aHse/2p8Hv9sfR7/bn0c/29+HP9yfR3/c38b/3V/G/90fhz/dX4c/3d/ + G/99gBz/foIc/3+CGv9+ghr/fn8b/319G/98exv/enka/3l3Gf95dhv/eHQb/3dzGv93cxr/d3Ea/3ly + G/95chv/eXIb/3pyG/97chv/fHIb/31zG/9/chz/f3Ic/4JzHf+Ecxz/hXQd/4d1Hv+HdB3/5OLZ1d7c + 2rnPysWkv7u0lbOwqInm5ePVExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAA + ABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjW1dTlvbi0l8XCvaLW09C18urqy2S7ovg7rYv/RLCO/0Ov + jP9DrIn/RKiF/0Slgv9EpH7/QqB7/0Khef9DoHb/RKB1/0addP9In3T/SaF0/0mgc/9Lnmz/TZ9s/02h + bP9MnWj/S5hl/02YZ/9LlmT/SpNj/02TZf9NlGT/UZZh/1WYYf9aml//Xp1f/2CgXv9joV3/ZaJd/2Wg + Wv9jnFf/YZpU/2CZUf9imlH/ZZtP/2SYTP9kl0f/ZpZE/2aWQP9plz7/apg7/22XN/9pkTD/ZIoq/2CE + Jv9igyT/Z4Uk/26KI/91jyP/fJUk/3+YJf99liT/eY8h/3SJIP9tgh3/aXod/2h6HP9pexz/bHoc/258 + HP9vfRn/cH0Z/3J+HP91gRz/dYAa/3WAGf94fhr/fIAc/3+CGv+Agxv/f4Ma/3+CGf9/fxn/fn4a/318 + Gv97eRn/eXcZ/3l2Gf94dBv/d3Ma/3dzGf93cRr/eXEb/3lyG/96cBn/enAZ/3twGf98chv/e3Ea/39y + HP9/chz/gnEb/4RzHP+Dchv/hXMc/4VyG//l4tnV4N3buc7Lx6a/vbaWta+piufl49UTEhHZAAAAmQAA + AIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNbW + 1OW+uLSXxcK+otbTz7Xz6+vLZred+DumhP9CqYf/Q6eE/0Gkgf9BoX3/Qp94/0CbdP9BmXP/Q5pw/0OZ + bP9EmW3/RJpt/0ecbf9ImWj/Spto/0ufbP9LnWr/Spdo/0ubaf9KmGn/SpNm/0uVY/9MlGL/T5Nf/1GU + Xf9Tllz/WJhc/1ybXP9gnlr/Y6Ba/2aiWf9po1j/aKFW/2adUv9lmk//ZZlM/2eaS/9pm0n/Z5lE/2mY + QP9qlz//bJg8/2yYOP9nkDL/ZIgr/2GDJ/9ggiP/Y4Mj/2aCI/9shCL/dIki/3mOIf99kyL/f5Yj/3yT + If94jSD/c4ce/2x/G/9peRv/ankb/2t5Gf9sehr/bnwa/3B9GP9wfhj/c4Aa/3WDGv92ghr/d4EY/3qA + GP99ghr/gIQa/4GEGf+Bgxr/gYIZ/4CBGf9/gBj/fnwY/3x5Gf97eBr/encZ/3h1Gv95dBn/eHMY/3hx + Gf93cBn/eHEa/3lwGf95cBn/eXAZ/3pwGf98cRv/fXAa/31wGv+AcRv/gnEa/4NyG/+Fcxz/hXIb/+Xi + 2tXg3du6zszHpr+8tpa2r6mK5+Xj1hISEdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAA + ABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI1tbV5b+8tZfGwr2j19TRtvTs7MxksZX4OZ56/0Gi + f/9Aon3/QZ94/0Kcdf9CmnL/QJhw/0GTa/9Bkmf/Q5Vn/0OYaf9ElGX/RpRl/0aZaP9ImWv/R5Vn/0mZ + af9KnGv/SZdk/0uXY/9Nl2L/TZNf/06TXP9QlFv/U5NZ/1WWWf9amVj/X5tX/2OeV/9moVb/aaNX/22k + U/9solL/ap5N/2maSf9pmkf/a5pE/22ZQv9tmT//bpk8/26YOP9qkjP/Y4gs/2CEKP9igiX/ZIIj/2WC + Iv9ngSH/an8g/3CEH/93iB7/eo0e/36SIf9/lCH/fI8g/3eJH/9yhBz/bXsa/2p4Gf9reRj/a3oY/257 + Gf9vfRn/cH4W/3KAFv91ghj/d4QZ/3aDGf94gBf/fIEX/32DGP+AhRj/goYY/4SEGf+Dgxn/goIY/4GA + GP9/fRf/fXoY/3x4Gf97dxn/eXQZ/3l0Gf94chn/d3EY/3ZwF/93cRj/eXEY/3lwGf95bxj/eW8Y/3tw + Gf99cBr/fXAa/4BwGv+CcRv/g3Ia/4RxGv+EcRn/5eLZ1eDd3LvQzMemwr23lrexq4vn5ePWEhIR2gAA + AJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAA + AMjW1tXlwLy1mMbEvqPX1NG29OzszGSukPg4mnT/P5x3/0Gedv9CnXT/Qppx/0GVa/9Ckmf/Q5Jn/0KT + Z/9CkGT/RI9j/0SSaP9FlWr/RZFl/0iTaP9Mm2r/TJdl/0uVY/9OmWP/TZZf/06TXP9QlFz/T5NZ/1CS + V/9Vk1b/WJZV/1yYVP9gmlX/ZZ9T/2qhUv9to1L/b6RP/2+hSv9tnkb/a5pD/2yaQf9vmj//cZo8/3KZ + Ov9ukzT/ZYst/2OFJ/9jgyX/ZYIl/2SAI/9mgCH/aIAf/2mAHf9vfhz/coIc/3aIHf97jR//fpIe/3+R + H/97ix7/eIgd/3GCGv9sexn/a3kY/2t6GP9texn/b3sZ/3B9F/9xfxb/c4EX/3eEGP96gxn/eYEY/3qA + F/99ghf/f4QX/4KFF/+Ehhj/hIQX/4ODGP+Cghj/gYAY/399F/99ehf/e3gY/3p2F/95dBf/eHMY/3dy + GP93chf/d3AX/3hwF/95cBn/eG8Y/3hvGP95bxj/enAZ/3xvGf98bxn/fHAZ/39xGf+CcBn/hHEa/4Rx + Gf/l4tnW4N3cu9HMx6bDvbiXuLOsi+fl49YSEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAA + AC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNfW1eXAvLWYx8O+o9fU0bb07O3MY6qL+DiW + bf9BnHT/Qpxz/0Gab/9Cl2v/Q5Rp/0KTZv9DjmT/QYxj/0GOZv9DkWb/RY9j/0WQYv9HlWX/SZVk/0mS + X/9NmGL/Tphh/02UW/9Oll3/UJRb/1GRVv9Sk1f/U5JU/1eSU/9ZlVH/XJhQ/2KbUP9nnk7/baFO/3Kj + Tf90o0n/dKFF/3CdQv9umj7/cJo8/3ScO/9xmTb/a48v/2WIKf9lhSf/ZoQl/2aDIv9ngiD/aIAe/2l/ + Hf9rfhz/bH4b/29+G/9ygxv/dogc/3uMHf99kBz/fpAd/3qKHP93hxv/cIEY/2t7Gf9rehj/bHoY/258 + F/9wfhX/cH4U/3J/Ff91gRf/eoUY/3yEGP97ghj/fIEX/36DF/+BhRf/hIYY/4SGGP+Fhhj/hIQY/4OB + F/+CgBj/gH0X/356Fv98eBj/eXUX/3l0F/94cxj/d3IX/3ZxF/93cBf/eHAX/3dvF/94bxj/eG8Y/3hu + GP95bxj/e24Y/3xvGf98bxn/f3AZ/4FvGf+EcRr/g3AZ/+Xh2dbg3ty70c3JpsS/uJe5tKyL5+Xj1hIS + EdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAA + AG0AAADI19bV5cC8tpnHw76j19TRtvTs7cxiqon4OJZo/0Cabf9Cm23/Qplt/0GWav9BkWf/Qo1j/0CN + Y/9CjWH/Q41f/0OLX/9Gj2D/SJFf/0eOXv9JkV3/S5de/0uSWv9PlFv/TpZc/1CSVv9Sk1b/VJNU/1WQ + Uv9XklH/WJJP/1uVT/9gmEv/ZZxJ/2ygSf9xo0j/d6RF/3qkQv94okH/dp89/3OZOf9ylzb/bpQy/2mN + LP9piij/aIgn/2iEJP9ogyL/aIIf/2qAHf9rfxz/bH8b/21+Gv9tfBn/b34Z/3OBGP92hxr/eYob/32Q + HP99jxr/eosa/3eIGv9wgBj/bHsY/2x6F/9ufBf/b30X/3B+Ff9xfxX/dIEU/3mDFv98hRf/fYQX/3uC + Fv98ghX/foQW/4KGFf+GiBb/hocX/4aGF/+GhRb/hIEY/4OAF/+BfhX/f3oV/3x3F/97dhb/eXQW/3lz + F/93chb/d3EW/3hwF/94cBf/d28W/3huFv94bhb/d20W/3luF/97bhj/fG8Y/35uGP+Abxj/gG8Z/4Jw + Gf+Cbxf/5eLZ1uHe3LvRzsmmxL+4l7myrIzn5eTWEhIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAA + ADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjX1tXlv723msjEv6XY1dK39e3tzWOo + hPg5lGX/QZlr/0KZbf9Dl2z/QpNp/0KQZf9CjGH/Qoxd/0SLXP9Filz/Rotd/0eLW/9Hi1n/SZBb/0qP + WP9NkFb/UJRZ/0+TVv9RkVb/U5VW/1KSUf9Uk1D/VpBN/1eSTP9Zk0z/X5ZJ/2SaRv9snUX/cqBF/3ak + Qf97pj//faY9/32kPP95njf/cJQx/2uOLP9qjCn/bYwn/22LJP9rhyD/bIMg/2yBHv9sgB3/bX8c/25+ + Gv9ufRn/b3wX/257Fv9vfRf/c4IZ/3eGGf96ihv/fpAb/32PG/96jBn/d4gY/3B/F/9texb/bnsU/29+ + FP9xfxX/cX8U/3KBFP93ghT/fIQV/36HF/9+hBX/fYIV/32CFf9/hhX/g4YV/4eIFf+Hhxb/h4YV/4aF + Fv+Eghf/gn8V/4F+FP9+exP/fXcV/3x2Ff96dBX/enMW/3hxFP94cRX/d28W/3dvFv93bxb/d28W/3du + Fv93bRb/eW4V/3ptF/96bhb/fW8X/39uF/+Abxf/gHAZ/4JvF//l49rW4d/cvNLNyafDvriYuLKsjebl + 5NcSEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAA + AFQAAABtAAAAyNfW1eXAvbeax8W/pdjV0rf07O7NZKeD+DiRZP9Clmr/RJlr/0OXaP9Dk2T/RJBg/0SN + Xv9EiVr/RIlY/0WKWf9Fh1f/R4pW/0mMVf9Ji1T/TI5U/0+RVP9QjlP/UpNS/1KSUf9Uk0//VZVN/1WS + S/9Ykkr/WpJH/16WRf9lmUP/bJ1B/3KfQf92oj7/e6U8/4GnPP+Epzn/fqE1/3KVL/9rjCj/a4wm/26M + Jf9xjSL/cIoi/26GIP9uhB3/boEc/25/G/9ufhn/cH8W/299Ff9uehb/bnoW/3B+F/9zgxj/eIkZ/3uO + Gf9/khr/fY8a/3qNGP93hxf/cH4V/258E/9vfRT/cH4U/3OAFf90gBX/dIEU/3mDE/99hxT/f4cW/36G + FP99hBT/f4MT/4KHFf+FiBb/iIkV/4iIFf+GhhX/hoQW/4WCFv+CgBT/gH0U/398E/99eBT/fHYW/3p0 + Ff95cxX/eXIV/3hxFf93bxb/d28V/3dvFv93bhX/d20V/3dtFf94bRX/eW0W/3ltFf99bhb/f20W/39t + Fv9/bhf/gW4W/+bi2tbh3ty80c3JqMO+uJm6tK6N5+bl1hISEdoAAACZAAAAgwAAAHEAAABjAAAAVQAA + AEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI1tXV5sG9t5rIxb+l19bSt/Tt + 7s1jo4H4O5Bi/0SWZ/9ElmX/RZVj/0WUYf9Djlz/RYpY/0SJV/9Eh1X/RYZS/0mJU/9JiFL/SohP/02N + Uf9NjE//To1O/1KQUP9Tj0z/VZNN/1STSf9Yk0n/WpRH/16WRv9hl0P/ZJpC/2qbQP9vnT3/dKA7/3uj + Of+Bpzj/hKg3/3+jMv94mS7/cJAo/2yKJP9uiiP/cowi/3ONIP9zih7/cYYe/3CFGf9ygxj/cYEX/3B/ + Ff9vfhT/bn0U/256Fv9uexT/cX8W/3WFF/95ixf/fpAY/4GTGP9+jxf/fo8X/3mIFv9wfRT/b30T/3F+ + Ff9yfhb/dIAV/3iCFP95ghX/fIYU/4GKFf+AiBX/foQT/32DEv9/hRP/hYgV/4mKFv+HiBX/h4gU/4eH + FP+GgxX/hIEV/4OAE/+BfRP/f3wU/316Ev98eBT/enQT/3lzFP95cxT/eXMU/3hxFP94bxX/eG8V/3dt + Ff93bRX/d20V/3htFf95bRX/eW0V/3xtFf9+bRb/fm0W/39uF/+AbRX/5uLa1uHe3LzQzcmoxL+6mb21 + r43o5+XWEhIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAA + AD4AAABUAAAAbQAAAMjX1dXmw723msjFv6XY1dK39OzvzWWkfvg7jlv/RJRi/0eXY/9JlmD/RZBc/0aN + Wf9GjFb/Q4ZQ/0SEUP9IiE//SYVN/0mGTv9LiEz/TIdJ/0+MS/9PjUr/Uo1K/1WPSv9WkEf/WpZF/16X + Rf9hm0P/ZJtC/2aaQP9omz7/bZs7/3OeOf96ojf/g6Y2/4GmMv99oiz/epsp/3mVKP9yjyT/bYki/3KK + If92jB7/dYse/3WJHP91hxn/coQZ/3OCF/9ygRX/b34U/3B+FP9vfRT/bnsV/257E/9xfxX/doUW/3qL + Fv+AkRf/gJMY/36PFv+CkBj/eIcV/3B+FP9wfxX/cn8T/3OAE/93gRP/eYIU/3yEE/+AiRT/gYsU/4GJ + E/9+hBP/fYMS/4CGE/+GiRT/iIkT/4mKFP+HiBT/h4cV/4aEFP+EgRP/g4AT/4F9E/9+ehL/fHoR/3t3 + Ev96dBP/enMU/3lzFP95chP/eHAU/3hvFP93bhT/d20V/3dtFf93bBX/eG0V/3ltFf95bBX/em0V/3xs + Ff9+bRb/f24X/4BtFf/m4trX4d7dvdHOyajFv7qZvLWvjejn5dYSEhHZAAAAmQAAAIMAAABxAAAAYwAA + AFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNbW1ebDvbeaycXApdfW + 0bf07u/NZqJ6+DyOWP9Gll//RpVc/0iVWv9Hklr/RYxX/0WIUP9Ghk7/R4RL/0qCS/9Lhkr/SoVK/0yG + R/9OiUf/T4hG/1CKR/9TjEP/V5FD/12XRP9jnEP/Zp5B/2aeQP9mnD3/aZo6/22aOf9znzj/e6Y1/36m + Mv98oS//eJsq/3qaJf98mST/epUm/3OOIv9xiR7/dYod/3iMGv96jBr/eYoZ/3eHGf91hBj/dIMW/3KB + FP9wfxP/cH0U/298E/9ufBP/bnwT/3OCE/94iBT/fI0V/4KTFv+Bkhb/gpEV/4aUFv95hxX/cIAU/3KB + E/90gRP/d4IS/3mCEv95gxL/fIUS/4KKEv+EjBP/gooR/3+GEv9/hBH/gocS/4iKE/+JixL/iYoS/4iI + Ev+HhhP/hoUT/4SCEv+DgBP/gX0Q/396EP99ehD/fHcS/3t0E/97dRH/e3MT/3pyFP95cRT/eHAT/3dv + E/93bhT/d24U/3dsFP94bBT/eW0V/3htFP95bRX/em0V/31sFf99bRb/gG0V/+bi2tfi3929087KqMTA + upm7ta6N6efl1hISEdkAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAA + ADEAAAA+AAAAVAAAAG0AAADI1tbV5sK+uJvJxcCl19bRt/Pu781mo3j4PIxU/0aTWP9Jlln/SJVY/0aR + Vf9GjVL/R4hO/0iDSf9Igkf/S4RI/0uDRv9NhEX/TIVF/06EQ/9QiEL/U4xA/1yTQf9gmkD/ZZ9A/2if + Pv9lnjz/ZZs7/2mYOf9umzj/dqQ2/3mpMf93oy3/dZkq/3WVJ/96mST/fpoi/36aJP98lCP/dYwd/3SJ + G/93ihr/eo0Z/3uNGf96ixj/eYgY/3aEFf90hBX/coIU/3F/FP9wfhP/bn0T/298Ev9wfhP/dYYS/3uL + FP9/jxT/hpQV/4aTFP+FlBX/iJUW/3eGE/91gRH/dYMS/3iEEf96hBH/e4US/3yFEf9/iBH/hIwT/4aN + FP+DihH/gIYR/4GFEP+GhxD/iYsR/4mLEf+JihL/iIkQ/4aHEf+FhRL/hIIS/4OBEf+Bfg//f3sR/315 + Ef98dxH/e3YQ/3t2EP96dRL/e3QT/3lxFP95cBP/eHAS/3duE/93bhT/eW4T/3htE/94bRP/eG0U/3ts + E/99axX/fWwV/31tFv+AbhT/5uLb1+Lf3b3TzsqpxMC6mbu2sI7p5+XWEhIR2QAAAJkAAACDAAAAcQAA + AGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjX1tXmw764m8jF + v6bY1tK49O7wzmiidPg/i0//R5JV/0iUVP9KlFT/SZBR/0qMTf9Kh0r/SYRG/0mCRP9KgUP/TYNC/0yC + QP9Og0D/UIc//1qOPv9gmD7/ZJw+/2efPP9mnTv/Zps4/2aZOP9qmTj/c6E1/3itNf93qS//b5kp/26Q + Jv90kCP/eZUi/3+aIP+AmSL/gJkg/36TIP93ixv/dYob/3qMGP98jBn/fY0Z/36MGP98hxb/eIUV/3aE + E/9zgRX/c4EU/3J/Ev9wfhH/cX4R/3OAEv95hhL/gIwT/4STFf+Jlxb/hpQW/4qXFf+KlhX/eYUS/3iC + Ef95hBD/e4YS/32GEv99hxL/f4cS/4KLEP+HjxL/ho4S/4OKEf+Ahw//gYcO/4aKD/+JixD/iYsQ/4mL + EP+HiBD/h4UR/4aEEf+DghD/gX8P/4B9Dv9+ehH/fXgR/3x2EP97dxH/e3YQ/3x0Ev99cxP/e3IS/3tx + Ev96bxP/eW4S/3luEv95bhT/eG0T/3htE/94bRP/e20T/31sE/98bRP/fm4V/4BuE//m4tvX4d/dvdLO + y6rFwLuavLawjunn5dYSEhHZAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAA + ACYAAAAxAAAAPgAAAFQAAABtAAAAyNfW1ebCvribx8XAptjW0rn07e/OaKBw+ECJS/9JkVH/SpNR/0yU + Uf9NkE//S4xJ/0yHRv9MgkP/S4FA/0uAP/9LgT7/ToQ9/1WKPP9clTz/Yps8/2aePf9mmzr/Zpk4/2OY + Nf9mmDX/bZw1/3erNf94tDL/b58s/2yMJ/9siCX/cI0i/3eTIP99lyD/gJkf/4ObHv+BmB3/f5Me/3mM + Gv94iRj/eYsY/3+NF/+Cjhj/gYsX/3+IFf97hRT/doQT/3SCFP90gRP/cn8R/3J/Ef9yfxH/doIT/32I + E/+CjhP/iJUU/4uYFf+IlRT/j5wU/4qVFP98hRL/e4US/3yFEf9+hxL/focS/3+HEf+AiRD/hI4R/4qQ + E/+HjhL/gooP/4KHDv+DiA//h4sP/4mLD/+Jiw//iIsQ/4iIEP+IhRD/hYMR/4OBEP+CgBD/gH0P/356 + D/98eBD/fHcP/352EP9+dxD/fXUP/310EP98cxD/e3IS/3twE/96bxP/eW4S/3htEv94bRL/eG0T/3ht + E/96bRP/fGwT/3xsE/9+bhX/gG4T/+bi29fh392+0s7LqsXAu5q9tq+O6efl1hISEdkAAACZAAAAgwAA + AHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI19bV5sK/ + uZzGxb+m19XSufTt785soHD4QopJ/0iQTP9LlE7/TJVO/02QTP9MjUf/TYdD/02DQv9MgD//ToA8/1OG + PP9ZkDr/YJk5/2WeOf9knTn/Ypg4/2OUNv9llDL/aZky/3OmMv95uTP/c7Av/2mRKP9mgiX/a4Uj/3GL + If91kCD/fJQe/3+YH/+CmR//hZwc/4SaHP+DlB3/fIsZ/3qIGP99ixf/g44V/4SPFv+CjBX/f4gU/3uG + Ev95hBP/d4IS/3Z/Ef90fxD/c4AR/3aCEf96hhL/gIsT/4WSFP+LlxX/jJoT/4qXEv+TnxX/iJMT/32H + Ef99hxL/fokR/4CKEP+Aig//gIgR/4OMEP+JkBL/ipES/4eNEf+EiQ7/g4cM/4aJDv+Kiw//iowQ/4mL + D/+Jig7/iYgO/4eFEP+GgxH/hIAP/4N/D/+BfRD/f3oP/314D/9+eA//fncP/353EP9+dxD/fXYP/3x0 + Ef97chL/e3IR/3pwEv96cBL/eW4Q/3ttEP97bRL/e20S/3ttEv98bBP/fWwT/39uFP+AbxL/5ePb1+Lf + 3b7TzsuqxcC7mry2r4/p5+XWEhIR2QAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAA + ABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjX1tXmw764m8jFwKbW1dK58+3wzmudbPhDiEP/S5BL/0qU + S/9LlEr/T5JI/06LRP9OhkH/TIM9/1CDPP9YjDv/YJc6/2SdOf9lnTj/ZJg3/2OUNP9hkDL/Y5Ix/2ye + L/92tTL/eb8w/2yiK/9kgiT/ZoAi/2eFIv9tiCD/c40f/3eRH/99lB7/gpgd/4eaHP+Imxr/hpkc/4SU + Hv97ixn/eogX/4CLFv+DjxX/hI8V/4KMFP9/iBP/e4YT/3qEEv94gRH/d4AQ/3aBD/90gRD/eIMR/3yI + Ef+CjRP/iZQU/42aEv+NmxP/jJkS/5WgFf+GkRL/fogR/3+HEf9/iQ//gIsP/4GLD/+BiQ//hY0Q/4uT + Ef+MlBH/h40R/4WJD/+EiA3/iIoO/4uLDv+LjA//iYoO/4mJDf+Ihw3/hoUO/4WDD/+EgA//g34O/4F8 + Dv+Aeg3/fngO/354Dv9+eA7/f3YP/393EP9+dg//fXQQ/31zEf98cxD/fHER/3twEv97bxL/fG0R/3xt + Ef98bRH/fG0S/3xsEv99bRT/gG8T/4FwEv/l49vX4t/dvtPOyqrFwLubvLawkOnn5dYSEhHZAAAAmQAA + AIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNfW + 1ebDv7mcyMbBptjW07nz7fDOa55o+ESHQP9Lj0f/TZRH/06VRv9QkEP/UIs//1GIPv9Uizv/XZM7/2ac + Of9mnzj/Y5w2/1+TNf9ejjH/X44v/2eSL/9xqzD/eMMy/3G6Lv9kjib/Ynsg/2R/If9mgyH/aYce/3CK + Hv92jR7/eZEe/4CVHf+DmRr/h5kZ/4ebGf+KmRv/iJUf/36LF/99iBX/gYsV/4SNFP+FjhX/gosU/3+J + E/97hhL/eYMR/3iDEP93gg//d4EP/3eCD/95hBH/fokR/4WQEf+LlhL/kJwR/4+bEv+RnBL/lqEU/4SO + EP9/ig//gIoO/4GMDv+DjBD/g4sP/4OKD/+HjxD/jJQQ/4uTEf+GjRH/hIkO/4aJDP+IjA3/i40N/4yN + Dv+Kiw3/iYkN/4iHDf+HhQ3/hYQM/4SADv+Dfw//gX0N/4B6DP9+eAz/f3kO/354Df+Cdw7/gncP/4J2 + D/+BdRD/gHQP/4B0Dv9/chD/f3AR/31uEf99bhH/fG0Q/3xtEf98bRH/fG0R/35uE/+AcBL/gXAS/+bj + 29ji392908/KqsXBu5u9uLGP6Obl1xIREdkAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAA + ABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI19bV5sO/uZzJxsGm2NbTufTu8c5snGb4RIY9/02Q + RP9Ok0T/UZND/1GQQf9TkT7/XZU8/2KcPP9moTr/Zp43/2GXM/9ejzH/W4sw/1+LLv9pmC3/dr0x/3bK + Mv9qqSv/YYEj/2F7IP9kgSD/ZoIg/2eFH/9uhx3/cowd/3ePHf9+kRz/gZYa/4WYGf+KmRj/i5oX/4yZ + HP+KlR//gYsV/3+IFP+BjBT/hI8S/4SOE/+CihL/gIgQ/32GEv97hRD/eoMP/3qDD/95gw//eYMP/3yG + EP+BixH/h5IR/46ZEv+TnRL/kZsT/5WfE/+VnxH/go0P/4GLDv+Diw//hI4O/4SMD/+Diw7/hYwP/4yQ + EP+PlBH/jJIQ/4iMEP+Gig3/h4kN/4qMDP+NjQ3/jYwO/4mKDP+IiA3/ioUM/4iFDP+Egw3/g38N/4J+ + Dv+Aew3/f3kN/354Df9+eA3/f3gN/4J4Df+CeA7/gncP/4F1D/+AdA7/gHQO/39yEP9+cBD/fm8Q/31u + Ef99bRD/fG0Q/3xtEP9+bRL/gXAS/4JyEf+DchH/5uPb2OHg3b7Sz8urxsO8m725sY/o5uXXEhER2QAA + AJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAA + AMjZ19bnwr64m8rGwabZ19O59O7yzmybY/hFhzn/TY5A/0+RP/9SlkH/WZpA/2GiP/9opDz/Z6M5/2Ka + NP9ekjH/XIsv/1yJLf9hjCz/bKUt/3bPMv9xxy//Y5Qn/2F6Iv9ifSL/ZIAh/2WBIP9ogx7/bIQd/3GH + Hv90jB3/epAd/3+TGv+Clhn/h5kY/42bGP+NmhX/jpoc/4uVIf+AihT/fogS/4KNFP+FjhL/ho4R/4KK + EP9/iBD/fYUR/3yFD/97gw7/e4MO/3qDDv97gw7/fogP/4SOD/+KlA//kJsR/5WfEv+SnBH/maES/5Kc + EP+CjQ//g4wO/4SMDv+Gjg//ho0O/4WMDf+Hjw7/jpQQ/5CWEP+MkhD/iIwP/4WKDP+Jiwz/jo0N/5CM + DP+PjAz/jIoK/4uHC/+KhAv/hoQL/4OBDf+Dfw7/gX0M/397C/9+egz/f3gM/4F3DP+CeQ3/gngN/4J4 + Df+CeA3/gHYO/4B1Dv9/dA7/f3MO/39yEP9+cBH/fW8P/3xuD/98bRD/fW0Q/39vEv+BcBH/gnIS/4V0 + D//m5NrY4uDevtTRzKvHw72bu7avjuno5tkTEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAA + AC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNrY1+jCvbecysbBqNnX07n07/LObJtg+ESF + NP9NjD3/VJc+/12kQP9mq0D/aas8/2ikN/9imDP/XI0w/1uJLf9diiz/Y5It/2+2L/9x1zH/ZrIt/2GF + Jf9ifCL/ZIEg/2SBH/9lgR7/aIEd/2qDHv9uhRv/cYob/3eMGv98kBv/gJMa/4eWGf+Jmhj/jZoW/46a + FP+Qmh7/jJUh/4GKEf+AiBL/g4oR/4WNEv+FjRD/gooO/4CJD/99hg7/fIQP/3uDD/97gw7/e4MO/3uE + D/+BiQ7/h5AP/42XD/+TnhD/l6AP/5OcD/+cpBL/kZkQ/4WODf+Gjgz/hY4M/4ePDv+Gjg7/hYwN/4mP + Dv+Plg7/kJcP/4uQDv+Hig7/hokM/4qLDP+OjQz/kY0N/4+LDP+NiQv/jIcL/4mEC/+Hgwr/hYEL/4F9 + Df+AfAz/f3oL/355C/+AeQz/gncM/4N4DP+CeA3/g3gN/4N3Dv+CdQ3/gnUN/4JzDf+Acw7/f3IO/4Bw + Dv9/bw//fW4O/3xuDv9+bg7/gHAQ/4BxEP+CcxH/hnUR/+bk29jj4N6+1NHMq8bDvZy5tK6N6unn2hMS + EdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAA + AG0AAADI2djX6MG9t5zKxsGn2dfTuvTv8s9rmV74RYUx/1SWO/9gpj7/Z7E//2mvPf9mpTn/YJgz/16O + L/9ciCz/X4os/2idLv9xyjH/bNIx/2CYKf9deyP/YX4i/2WDIf9lgx//Z4Ie/2iCH/9qgh3/bYMd/3CG + G/9zihn/eIwZ/32QGv+Ekxf/ipYY/4yaF/+QmhX/kJoT/5GaHv+MlCD/f4gR/4CHEv+EihH/hY0Q/4OM + D/+Ciw//gIkM/36GDf99hQ7/e4QN/3uEDf97hAz/foUN/4KKDf+JkQ7/kJgP/5WdEP+Wng7/lJwP/52k + Ev+Olg7/ho4N/4aODP+Ijwz/iI8M/4eODf+IjQ7/jJMO/5GYDf+Qlg7/i44O/4eJDf+JiQv/jYwL/4+O + Cv+RjAv/kIoM/4yIC/+Lhgv/iYQL/4iBCv+EgAr/gX0M/4B8DP+AeQr/f3gK/4F4DP+Bdwv/gngM/4J4 + Df+Ddwz/hHcM/4N1Df+CdA3/gXQN/4B0Dv9/cg3/gHAN/39wDv9+bw//fW8P/35vD/+AcBD/gnIP/4R1 + EP+GdxH/5uTb2OPg3r7U0MurxsS9nLi0rY7q6efaExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAA + ADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjZ2NfowL24ncnHwqjZ1tO59O7yz3Cd + XPhPkjL/YKc7/2auO/9nrjv/Y6U4/16ZNP9bkS//XIst/2COLP9qrS7/cNoy/2bDLf9bgyP/Wncj/15+ + Iv9igSD/ZYIf/2eDIP9ogx//aoId/2qCHP9sghz/cYUZ/3WKGP96jBj/gJAY/4eTF/+Klhb/jZkV/5GY + Ff+QmRL/kpsf/4uUH/9/hxD/gIcS/4OJEP+Fiw//hIwP/4GKDv+AiA3/f4YN/36FDP98hAv/e4QL/3yE + C/9/hwv/hIwO/4uSDv+SmRD/mJ8Q/5idDv+ang7/nqQQ/4uUDv+Gjg3/ho4M/4mPDP+Jjwz/iI0L/4mP + Df+PlQ7/lJkN/5CVDf+Jjg7/h4oM/4yKDP+Qjgz/kI4K/5GNC/+Pigv/jIgL/4uGC/+JhAr/iIEK/4R/ + Cf+BfQv/gHwM/4F5Cv+CeAv/gngM/4J4DP+CeAz/gngM/4N4DP+Edwz/g3YN/4J1Df9/dQz/f3MN/4Bz + Df+AcAz/fnAM/31vD/9/bw//f28P/4BwD/+Ccw//hXYR/4d4EP/m5NvY4+Dev9TQy6vIxL2cubStjurp + 59oTEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAA + AFQAAABtAAAAyNnY1+jBvbidyMfCqdnW1Lrz7fLPd6pc+FmeMP9jqTj/Y6k2/2CjNv9dmzX/XJUx/12Q + Lv9ili7/bsAx/2zhMv9grir/WHgj/1l4IP9bfCH/Xn8f/2SCHv9mgh7/aYMe/2qCHP9rghr/a4QY/2+E + Gv9zhhr/d4oY/32NF/+DkBX/h5QU/4uWFP+OmBX/kZgV/5GYE/+UmSH/jJId/4GJDP+Bhw7/hIkP/4WL + Dv+Fiw7/g4gM/4KHDf+AhQz/foUL/32EC/99hAv/fYUL/4CIC/+GjQ3/jZQN/5SbD/+ZoQ7/l54N/56i + Dv+eog//jJEN/4mPDP+Kjwz/i5AN/4qPDP+Kjgv/jZAM/5GWDf+UmQ3/kZUN/4qNC/+JiQv/j4wL/5KO + Cf+Sjgr/ko0L/5CKCv+OiAn/i4cJ/4mECv+HgQr/hn8K/4N9Cv9/fAr/gXkJ/4J4Cf+CeQv/g3gL/4R5 + Cv+EeAz/hHgM/4N3C/+Ddg3/gnUN/4F1DP+Bcw3/gHIM/4BxDf9+bwz/fm4N/35vDP9/cAz/gXIN/4N0 + D/+FdhD/h3kO/+bk2tji4N6/1NDLq8XDvZ24s62O7Onn2hMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAA + AEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI2djX6MO+uJzJx8Ko2NbTuvLs + 8s96sFv4V58t/1ygM/9cnjT/W5w0/1yaM/9flzD/ZqIw/27TNP9p2zH/XJon/1dxIf9ZeSD/WHog/1x6 + IP9ffh3/Y4Ee/2aCHP9oghz/aYEb/2uBGP9sghn/boQZ/3KHF/95ihf/fo0V/4OPFP+GkxP/i5YT/5CX + FP+SmRT/kJcT/5OXIf+Mkhr/gYgK/3+GDf+DiA7/hYwO/4WLDf+DiQ3/gYcK/4CFCv99hQr/foQJ/36E + Cf+AhAv/g4kK/4iPDP+QlQ3/mJwN/5ygDf+anQ3/oaQO/5yeDf+MkAz/i48L/4uQDP+LkAz/jI4M/4yP + C/+OkQ3/kpcN/5SZDP+Okgz/iYwL/4uJCv+Qjgr/kpAJ/5KPCv+RjQr/kIoK/46ICf+Lhwn/iIMI/4eC + Cf+Gfwr/gnwJ/357CP+AeQj/gXkI/4F5Cf+CeQr/gnkK/4N4Cf+DeAv/hHgM/4J1C/+CdQv/gXQM/39z + Df9+cgz/f3EL/35vDP9+bgv/fnAM/4ByDf+CdA7/hHYQ/4Z3Ef+HeQ//5uTa2OPg3r/T0MusxsO8nbu0 + ro3r6efaExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAA + AD4AAABUAAAAbQAAAMjZ2dfow7+5nMvIw6fa2NS68+zzz3erWfhRlCr/VZUw/1eXMv9anDL/YJ8x/2my + Mv9u4Df/Zc0y/1qJJv9XciH/WXoh/1p7H/9aeR7/Xnoe/2F+Hv9kgR3/aIQa/2qDGv9qghn/bIMX/22C + GP9vhBj/dIgW/3qKFf9+jRX/hJEU/4iVE/+MmBP/kZkU/5GZEv+QlxL/k5cj/4uQGf+Ahgr/gIYO/4SJ + Df+Giw3/hooN/4SIC/+Chwr/gIUK/3+GCv9/hQr/gIUK/4GGCf+Fiwv/i5EM/5GXDf+anQ3/naAO/5ue + Df+ipg3/lpwL/4uRC/+LkAv/i5EL/4yRCv+Mjwv/jJAL/5CUC/+WmQv/lZkL/46RCv+Liwr/josK/5KO + Cv+Tjwr/k44K/5KMCv+Qigr/jogJ/4yGCf+KhAn/h4EI/4R+Cf+DfAn/gHsI/4F5CP+Begj/gnoJ/4J5 + Cv+DeQr/g3gJ/4N3Cv+Ddwz/gnYL/4J1C/+BdAz/gHIM/39xC/9/cAv/fm8L/39vDP9/cAz/gHIN/4J0 + Dv+FdhD/h3kQ/4l7D//n5NvY4+Dev9PRy6vIxL2cubStjuro5tsTEhHaAAAAmQAAAIMAAABxAAAAYwAA + AFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNnZ1+jDv7mcy8fDp9rY + 1Lr07/TPdKJV+E2IJf9VkC7/V5cw/1+jMv9qwDb/bOk5/2C/MP9Zgif/WHYk/1p6If9Zeh//W3kd/1t4 + HP9dehv/Yn4d/2aBG/9pgxj/bIIY/2uDF/9sghf/boIW/3KDFv91hxT/e4oU/4CNFP+HkRP/ipUS/4+X + E/+RmBH/kZgP/4+WEf+TmSL/iI8V/3+FCP+Bhgz/hIoN/4aKC/+FiQr/g4cJ/4OHCf+BhQj/f4QJ/3+E + Cf+AhQn/g4cJ/4eMCv+Nkwv/lJkM/5ufDP+coA3/nJ8M/6OmDv+TmQv/i5IK/4uRCv+Nkgv/jpEK/4yQ + Cv+OkQr/k5gK/5qaC/+Wlgz/j48K/42MCf+QjQj/k44K/5SQCf+Ujwn/kowJ/4+KCP+Nhwj/jIYJ/4qD + CP+HgQj/hH8I/4N8CP+Cewj/gXoH/4J6B/+DeQj/g3kH/4N5CP+DeAn/gncJ/4N3Cf+BdQr/gHQK/4Bz + C/9/cwv/fnIL/31xCv99bwr/fnAM/39wC/+Bcwz/g3UN/4V3Dv+Ieg//inwO/+bk2tji4N6/1NHMq8fD + vJ23sayQ6ejm2xMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAA + ADEAAAA+AAAAVAAAAG0AAADI2djX6MS+up3MxsOp2tfUuvTv9M9xnFT4TIQl/1iQLv9gozH/a882/2vo + Of9gsS//WYQm/1l/JP9afSH/W3of/1t6Hv9beRz/W3gb/117Gv9hfhv/Z4EZ/2qDGP9sghf/a4MX/22C + Ff9vghT/coMV/3WGE/98ixT/go0T/4aREv+MlBL/kJYR/5GXEP+Rlw//kJYR/5OYIf+HjhL/gIUJ/4GF + DP+Eig3/howL/4aJCv+Ehwn/g4cJ/4GFCP+AhAn/gIQI/4CFCP+Dhwn/h40J/4+UC/+Ymgv/naAM/5yg + DP+eoA3/oaUN/5KXCf+LkQn/jJEK/42RCv+NkQr/jJEJ/4+UCv+VmQr/mpoL/5WUC/+Qjgr/jowJ/5KO + CP+Ujwn/lJEH/5SPCf+SjQj/kIsI/46ICP+MhQj/ioMI/4eCB/+EgAb/g3wH/4F6CP+Begf/gnoH/4N5 + B/+DeQb/g3kI/4N4Cf+DeAn/g3cJ/4F1Cv+AdAr/fnML/35zC/99cQr/fXAK/31vCv99cAv/fnEL/4F0 + DP+Ddg3/hXgN/4h7D/+KfA3/5uTa2eLg3r/U0MysxsG8nrexrJDp6ObbExIR2gAAAJkAAACDAAAAcQAA + AGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjZ2NfoxL66nczH + xKna1tO69O/zz3GaVPhNhiT/XaIv/2jWN/9o5Dn/XKUt/1mGJ/9Zhib/WYIi/1t9H/9beh3/XHoc/115 + G/9deBr/XnoZ/2F+Gv9ogRj/bIMW/2uCFv9rghb/boEU/3CBE/9zgxT/d4cT/3qLEv+CjhP/h5AR/4uT + Ef+Olg//kZYQ/5CWDv+PlRH/lJgh/4eMEf9+hQf/gYYL/4aKC/+Gigr/hokK/4SHCf+Dhwn/goYJ/4GF + Cf+Chgj/gYUH/4OJBv+Jjwf/kpUH/5qbCf+foQz/nKAL/6CkCv+hpAr/kJQJ/42QCf+NkAn/jpEK/42R + Cv+Okgn/k5UJ/5qYC/+ZmQr/k5MK/4+NCf+PjAj/ko4I/5SRBv+UkQf/k48I/5GLB/+Qign/jogI/4yF + CP+JgQj/hoEH/4N/Bf+DfAf/gnsI/4F6Bv+Aegf/gnkI/4J3B/+DeAj/gncJ/4N4Cf+Bdgj/gXQK/4Bz + Cf+Acwv/f3IK/31wCP99bwn/fW8J/39wCv9/cgv/gHMK/4N1DP+Gdw3/iHoN/4t+Df/n5drZ4uHev9LP + y6zFv7yft7KskOro5tsTEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAA + ACYAAAAxAAAAPgAAAFQAAABtAAAAyNnY1+jDvrqdzMfEqNrW1Lr17vPPcp1S+FWfJf9k3DX/YNk1/1qZ + LP9ZiSj/W4wn/1qHJP9ZgiD/WXwd/1t5HP9cehv/XXka/114Gv9gexn/ZX4X/2iBFv9rghb/a4IV/2yB + Ff9wgBT/cYET/3OEEv95hxH/fYsR/4ONEP+IjxH/i5IP/4+WD/+Qlg3/j5YK/5CVEP+TliD/hooO/4GD + B/+BhQr/hYkL/4WJCf+FiQj/hIcI/4OGCf+ChQf/goUH/4KFB/+ChQf/hYoI/4uQCP+Ulgf/m50I/5+g + DP+cnwv/pKYK/56hC/+Skwj/kZII/5GRCP+Skgn/kZAK/5GRCf+Wlgv/mpoK/5maCv+Tkgj/j40I/5GM + CP+Ujwj/l5EI/5aRCP+Tjgj/kYwI/5CLB/+OiAf/i4QI/4mCB/+HgAX/hX4G/4J8Bf+CfAb/gXsE/4B6 + Bf+Cegf/gngG/4J4Bv+Cdwf/gncI/4F2CP+AdAn/f3QJ/35zCP99cgn/fHAJ/3tvCP98cAn/fXEJ/39y + Cf+BdAr/hHcN/4Z6DP+Iew3/in0N/+bk2tni4d6/0s/LrcXAvJ+3sqyQ6ejm2xMSEdoAAACZAAAAgwAA + AHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI2djX6MO+ + up7Lx8Sp2tbUu/Ts8896ulX4Wt0r/1rKMf9VjSj/V4op/1mQKP9aiiX/Wocj/1mAH/9Zexz/XHob/114 + G/9ceBr/XHcY/196F/9lfRX/aIAV/2uCFv9tgRX/boEU/29/Ev9xgRL/c4QQ/3qGD/9/ihH/g4wR/4iP + EP+Lkg7/j5YN/4+WC/+QlAj/kZUR/5KWIf+EiA3/gYQH/4KFCf+Fhwr/h4gJ/4aIB/+Fhwj/hIUI/4KF + B/+DhQf/goUH/4KFCP+Iigf/j5AI/5aYCP+cngj/n6EL/52fCv+mpwv/nZwL/5GSB/+RkQf/kpII/5KS + CP+RkAj/k5EJ/5iWC/+bmwn/mJcI/5KQBv+QjQf/ko4G/5WRCP+XkQb/lpAH/5ONCP+Riwj/kIoF/46H + Bv+Mgwj/iYMG/4iABv+Ffgf/hHwF/4F8Bf+CeQb/gnkH/4J4B/+DeQj/gngH/4J3B/+Cdwb/gXYJ/390 + Cf9+cwn/fHEI/3twCP97cAj/e28I/3pvCP99cgr/gHMJ/4N1C/+Edw7/hnoN/4h9DP+Kfw3/5uXb2eLg + 3r/Sz8utxcC8n7exq5Hp6ObbExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAA + ABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjZ2dfow767nsvHw6na1tS69Ojy0HzoWvhQuCX/UYIl/1aG + Jf9ZkCf/Wo4m/1uLI/9ahSH/WoAd/1t8G/9beRn/XHgZ/1x4GP9cdxf/XnkW/2R8Ff9ofxT/bIEU/26B + E/9tgBH/boAQ/3CCEP90gw7/e4YP/3+KEP+EjRH/iJAO/4yTDf+OlQv/jpUJ/4+UCP+QkxD/kZUh/4OI + C/+AhAb/gYUI/4SICP+Ghwf/hocG/4WGBv+Dhgb/goQH/4KEBv+BhAb/hIYH/4mMBv+Rkgb/mJoG/52e + B/+enwn/np8J/6WnCv+amgf/kpEI/5KSCP+TkQf/kpII/5KRB/+Vkwj/mZgJ/5qbCv+WlAn/kY4H/5CM + CP+Tjgf/lpAH/5aRBv+Wjwf/lI0I/5KKB/+QiAX/jYYH/4uECP+IggX/hn8F/4V9B/+EfAX/g3wF/4N6 + Bv+DeQX/gngF/4N4CP+Bdgb/gXYG/4F2Bv9/dQf/fXMI/3xyCP98cQn/e3AI/3pvB/96bwf/em8I/31y + Cf9/cgj/gnYK/4R4DP+FeQz/iX0N/4p/Df/m5dvZ4uDfwNLOy67Fv7yft7KskOro5tsTEhHaAAAAmQAA + AIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNnZ + 1+jCv7ueysfDqdjX07v17fPQcaxQ+Ep2G/9UfyT/Vooj/1qPJf9ajiX/XIsi/1uGIP9bgB3/XXwb/1x5 + Gf9ceBj/XHgW/1x3Fv9geRb/ZHsU/2h+E/9tgRP/bYAS/21/EP9vgA//cYIO/3eED/98hg7/f4kP/4SN + Dv+IkQ3/i5MM/42UCv+PlQr/j5MI/5CTE/+RlR//g4gI/4CEBv+ChQj/hYgH/4eIB/+Ghwb/hIYG/4OG + Bv+ChAb/goQG/4OFB/+Fhwf/i40G/5OTB/+amwb/np8H/5+gCP+iogj/p6cK/5iXCP+Tkgj/k5MI/5SS + CP+Skgj/k5EH/5aUCP+amQj/mpkJ/5WTCP+Rjgf/kI0G/5SPB/+XkQf/l5EG/5eRB/+Ujgb/kosG/5CJ + B/+Nhwf/i4MG/4iBBv+GfwX/hX0F/4R8BP+EfAT/g3sE/4N7A/+DegT/gnkG/4J3Bv+AdQX/gXYG/4B1 + Bv99cwf/e3EH/3twB/97cAf/em8H/3pvB/97cQf/fXMI/4F1CP+Ddwr/hHkL/4Z7C/+Kfg3/in8M/+Xl + 2tng397A0s3KrsXAu5+3sqyQ6ujm2xMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAA + ABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI2dnX6MK/up7LyMSp2tfUu/Xw89BvjEv4SnYa/1KC + If9WiSL/Wo8j/1qPI/9ciyH/XIUf/1yBHf9cfBv/XXgY/1t3F/9beBX/XHcU/2F2Ff9lehP/aX0T/2x/ + Ef9tfw//bX4P/29/Dv9wgA3/doMN/3qGDf+AiA3/g4wN/4eQC/+KkQr/jpMJ/4+UCP+Nkgf/kZMU/5GU + Hv+Chwb/foMF/4OEBv+Ghgb/iYgG/4eGBf+EhQX/hIUG/4OEBv+DhAb/g4UG/4eHBf+OjQX/lZUG/5ub + B/+goQX/oJ8G/6WjB/+lpAj/lpQF/5ORBv+Ukwf/lJMH/5SSB/+Ukwb/lpYH/5yaCP+amAf/lJIE/5GN + BP+Sjgb/lpEG/5eSB/+YkQb/l5AF/5ONBP+RiwX/j4gF/4yGBf+LhAX/iIEF/4Z+Bf+FfQT/hHwD/4R8 + A/+DewT/g3sE/4J7A/+CeQT/gXcF/4F2Bv+Bdgb/f3MF/31yB/97cQb/e3EF/3pvBv96bwf/enAH/3xy + Bv9/cwf/gXUJ/4N3Cv+Fegr/h3wM/4l+DP+LgQr/5eXa2eDf3cDSzsquxcG8n7eyrJDp6ObbExIR2gAA + AJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAA + AMja2dfow7+6nsvIxKna19W89fD10G+RS/hJdxj/UoEg/1aIIf9ajyD/XJAg/12LH/9chR//XIEc/1x8 + GP9ceRb/W3YW/112FP9fdBT/YXcU/2R6E/9ofRH/bH8Q/21/EP9tfg//bn4O/3F/Df94gg3/e4UO/3+I + DP+DjAz/h48L/4yRC/+PlAr/j5MH/5CRBv+SlBX/kJId/4GGBf9/ggX/goMF/4SGBP+IhwX/h4YF/4SF + Bf+DhAX/g4QG/4OEBv+DhQT/h4kE/4+NBf+WlQX/m5wG/6CiBv+foAX/paUG/6OiB/+Vkwb/k5IG/5ST + B/+Ukwf/lJIH/5WTBf+Zlwb/nJoH/5mVBv+TkAX/kY4E/5SPBf+XkQb/mJEG/5iRBv+Wjgb/lIwF/5KK + Bf+PiAb/jIUH/4uCBv+IgQX/hn4F/4V9A/+EfAP/hHwD/4N7BP+DewT/gnkF/4J4Bv+AdgT/gXYG/350 + Bf99cwX/fHIH/3txBv96bwf/eW4G/3lvBv96cQX/fHIH/31zB/9/dQn/gncK/4V6Cv+HfAv/iX4N/4uB + C//m5NrZ4t/dwNHOy67FwbyftbCrkeno5tsTEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAA + AC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNrZ1+jFv7yezMjEqdrX1bz18PXQbpBJ+Eh1 + F/9SgB//Vocg/1mPH/9ckCD/XIwe/1yFH/9bgBv/WnsY/1t3Fv9bdhb/XnUU/190Ff9hdhP/ZHkS/2h8 + Ef9rfBD/bX4Q/21+D/9vfQ7/dH8N/3iCDf97hA3/f4gL/4OLC/+Ijgn/ipEK/4yTCP+Pkgf/kY4I/5KU + Gf+Okhz/gYUE/3+BBf+ChAX/hIcE/4iGBf+GhQT/hIUG/4OEBv+DhAb/g4QG/4OFBf+IiQT/j5AF/5eW + B/+enQX/oaIG/6CgBP+npwb/n58F/5SSBv+UkQb/k5EG/5SSB/+Tkgb/lZQF/5uZBv+bmgj/lZIF/5GO + A/+SjgT/lJAF/5eRBv+YkQb/mJEG/5WOBP+Tiwb/kYkF/4+HBf+LhAb/ioEG/4eABf+FfgX/hHwD/4R8 + BP+EfAX/hHwF/4N7A/+CeQX/gXcG/393BP9+dgP/fXQF/3xzBP97cQX/e3EG/3puB/95bgb/eW8G/3px + Bf98cgf/fXMH/351CP+CeAj/hHkK/4Z8C/+Ifw3/jIEL/+bk2tng3t7B0c7LrsXBvZ+3squR6ujm2xMS + EdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAA + AG0AAADI2tjX6MTAvJ7MyMWp29jWvPXw9dBtkEj4R3QX/1GAHv9Whx7/Wo8g/1yRIP9cjB3/XIYc/1yA + G/9cehj/W3YW/1x0Ff9dcxX/XnQV/2F1Ev9jeRH/Z3wQ/2p7D/9sfBD/bnwN/298Df90fg3/d4EN/3qE + DP9+iAv/hIoK/4iNCv+KkAn/jZIJ/42RCP+Ojwj/k5Qc/46RG/+BgwL/f4AG/4KCBP+EhQT/h4UF/4aF + Bf+ChAb/goMF/4KDBf+DhAX/hIUF/4uKBf+RkAb/mJgG/5+eBv+goQb/oKAF/6inBv+cmwX/k5EG/5OQ + Bf+UkQb/lJEG/5SRBv+WlQb/m5kH/5mYBv+Tkgb/kY4E/5ONBv+Vjwb/mJEG/5iRBv+XjwX/lIwF/5KL + Bv+QiQf/joUG/4qCBf+JgQX/h4AF/4V+A/+EfAP/hHwD/4R7Bf+EfAX/g3sD/4J5BP+BdwX/fncF/311 + BP99cwX/e3EF/3twBf96bwX/d28G/3ZuBf93bwX/eXEF/3xxBv98cgb/f3YH/4B3CP+Eewn/hn0K/4iA + Cv+Mgwn/5uPa2uDf3cDS0MquxMG8oLayrJLq6ObbExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAA + ADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMja2dfoxcC8ns3Jxanb2Na89vD20G6O + SfhIdBX/UX8d/1WGHf9bjR7/XJAe/12MHf9bhhr/XH8Z/117F/9cdxX/XXMU/15zFP9echP/X3QS/2N3 + Ef9oeg//a3wO/2x9Dv9tew3/bnsN/3J+DP91gAv/eoMM/3+HCv+DiQr/ho0J/4mPCf+MkAr/jI8J/4uO + B/+TlR3/jY8Z/3+BAv9/fwX/goIE/4KEA/+GhAT/hYQG/4KDBf+Cgwb/goIG/4KDBf+Hhgb/jYsF/5OR + Bf+ZmAX/n58G/5+fBv+hoQb/p6UG/5mXBP+SkAX/lJEG/5SRBv+TkAb/lJEF/5iVBv+bmAb/mJYF/5KQ + Bf+QjAb/k4sH/5eQBf+YkQb/mJAG/5WOBv+TjAb/kYoH/4+HBv+NhAf/ioIG/4mBBf+GfwT/hHwD/4R8 + A/+EfAP/g3sE/4N7BP+DegT/gXgF/4B2BP9+dQT/fHMF/3tyBP97cQb/em8F/3duBP90bgX/dG4F/3Ru + Bf93cAX/enIH/31zB/9/dgf/gHgI/4N7Cf+FfAn/iYAI/4uDCf/l49ra4N/ewdHPy67EwLugtrKrkuro + 5tsTEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAA + AFQAAABtAAAAyNrZ1+jFwLyfzcnFqdvY1rz28PbQcI1I+Eh0FP9Rfhz/VYUe/1qNHf9djx7/XYwc/1yH + Gf9dgBn/XHsW/1t3FP9ccxT/XnMU/15yE/9edBH/YncQ/2d5D/9qfA3/a3wN/2x8Df9tfA3/c30L/3WA + DP96ggv/f4YK/4SJCv+HjQn/iI8J/4qPCP+Ljwn/io4I/5KWIP+Ljhb/f4EC/35/BP+BggT/g4QD/4OE + BP+DhAT/goMF/4KDBv+Cggb/goMF/4eGBv+NiwX/lJIF/5uYBv+fnwb/n54G/6SiB/+lpQf/lZMF/5KQ + Bf+TkAX/lJEG/5OQBf+UkQX/mZQF/5qXBv+WkwX/ko0G/5CLB/+TjAf/l5AF/5iRBv+XjwX/lY0F/5OL + Bv+RigX/j4YG/4yDBv+JgQX/iIAF/4V9BP+EfAP/hHwD/4N7A/+DewT/g3sE/4N5Bv+Bdwb/gHYE/390 + BP98cwT/enEE/3pwBf93bgT/dG4F/3RuBf90bgX/dG4F/3VvBP93cQb/fHMH/392B/+BeAj/gXoI/4R9 + Cf+JgQj/i4QJ/+Xk2trg397B0c/LrsTAu6C2sqyS6ejm2xMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAA + AEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI2tnX6MXAvJ/NyMWq29jWvPbx + 9tBvjUf4R3IV/1F9Hf9VhR7/Wo0d/12QHf9djRv/XIgZ/12BFv9cexb/W3YU/1xzE/9echP/XnET/2Bz + EP9kdhD/aHkP/2t7DP9rewz/bHwM/2x8DP9xfQv/dn4L/3mDCP9/hQn/g4kJ/4eMCf+IjQr/io8I/4uP + CP+LjQj/k5Yi/4uMFP9/gAD/fn8E/4GCA/+DhAP/g4QE/4OEBP+Cggb/goIG/4KCBv+CgwX/h4YG/46M + Bf+Ukwb/nJoF/5+fBv+fngb/o6QF/6GiBv+TkQX/k5AG/5OQBf+UkQb/k5AG/5WSBv+ZlQb/mZYF/5SR + Bf+RjQb/kosG/5ONBf+XkAX/mJEG/5aPBv+UjAj/kokH/5CHBv+OhQb/jIMG/4mBBf+IgAX/hX0E/4R8 + A/+EfAT/g3sE/4N7BP+DewT/gnkF/4B2Bv9/dAX/fXQF/3xyBv93cQT/dnAE/3RuBP90bgX/dG4F/3Ru + Bf90bgX/dXAE/3dyBf95dAf/fnYH/4F4CP+Bewn/hH0L/4mCCv+Kgwj/5eTa2uDg3sHRz8uuw8C7obWy + rJPq6ObbExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAA + AD4AAABUAAAAbQAAAMjZ2NfpxcC8n83Jxarc2ta89vH20G+MR/hIcRT/UHwc/1SEG/9ZjBz/W5Ac/12M + G/9dhxj/XYAW/1x7Fv9bdhT/W3MT/11xEv9dcRH/X3IQ/2R1D/9peQ3/a3oN/2p6C/9rewz/bHoL/298 + Cv91fwr/eoII/36FCf+CiQn/howJ/4iOCP+Ljgn/io0I/4qNCP+UliT/iYsS/32AAP99fgP/gYEE/4KD + A/+CgwT/goME/4GBBf+BgQX/gYEF/4KCBv+HhwX/jo0F/5WTBf+cmwX/oJ8G/6CdBf+mpgX/n54F/5OP + Bf+TkAb/lJAF/5SQBf+Tjwb/lpMF/5mVBv+ZlQb/lI8E/5GLBf+SigX/lI0F/5eQBv+XkAX/lo0G/5OL + B/+RiQX/j4YE/42EBf+LggX/iIAF/4Z+BP+EfAP/hHwD/4N7BP+DewT/g3sE/4N7BP+CeAX/gXYG/390 + BP98cwX/e3EF/3dwBP90bgP/dG4E/3NtBP9zbQT/c20E/3VvBf93cQX/d3IF/3l0B/97dQf/f3gH/4J6 + CP+Ffgj/ioMJ/4mAB//l5Nra4N/dwdHNyq/DwLuhtbKsk+ro5tsTEhHaAAAAmQAAAIMAAABxAAAAYwAA + AFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNnY1+nGwbyfzsvGqdza + 1rz28fXQb4tG+ElyEv9SfBr/VYQb/1qMG/9dkBv/Xowb/12HGP9dgBf/XHsW/1p2E/9bchL/XHES/11x + Ef9fchD/ZHUP/2d4Df9qeQ3/anoM/2t7DP9teQz/cXsJ/3V/Cv95ggn/foUI/4GICf+GjAn/iY0I/4qO + Cf+KjQf/io0J/5SWJ/+IiQ//fYAA/31+A/+BgQT/goMD/4KDBP+BggT/gYEF/4GBBf+BgQX/gYIG/4mI + Bf+RjQX/lpQH/52bBv+hngb/oJ0F/6imBv+cmAX/k48E/5OQBv+VkAb/lY8F/5aPBf+ZkwX/mpUG/5eT + BP+TjQX/kYsE/5KKBf+VjQX/mJAG/5ePBf+WjQb/lIsG/5GIBf+PhgX/jIMF/4qCBf+IfwX/hn0E/4R8 + Av+EfAP/g3sE/4N7BP+DewT/gnoF/4F4Bf+AdQX/f3QE/3xzA/97cQX/d3AE/3NtA/9zbQT/c20E/3Fr + BP9ybQT/dG8F/3dwBf93cgX/eXQG/3p2B/98eAf/gXoJ/4aBB/+Iggf/hXsH/+Xj2trg3t3C0c3Kr8PA + u6G1sqyT6efm3BMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAA + ADEAAAA+AAAAVAAAAG0AAADI2djX6cfDvp7Py8aq3drWvPfy99BwikX4SXER/1N8Gf9Wgxn/Wowa/2CP + Gf9fjBn/XYYZ/1yAF/9cexb/WnYT/1pyEv9dcBL/XG8Q/2BxEP9kdA7/ZncM/2l4DP9peQz/ankL/2t5 + Cv9xfAr/dX4J/3iBCP99hQj/gYgI/4WKCP+JjAj/i44I/4qMBv+KjQr/lJUp/4aGDf99fgD/fH4E/3+A + BP+BggT/gYIE/4CCBP+AgQT/gIAE/4GBBf+Dgwb/i4kE/5KPBf+Ylgf/nZwF/6GeB/+gnwX/qKQH/5mU + Bf+Tjgb/kpAG/5SOBf+Vjwb/lZAF/5iSBf+alAX/lZAE/5KKBv+RiQb/k4wG/5eOBf+XjgX/lo4G/5WM + Bf+TiQb/kYYE/4+EBv+Lgwb/iYEF/4d+Bf+EfAT/g3wD/4R7BP+DewX/g3sE/4N7A/+CeAb/gHYF/350 + BP99cwX/fHID/3pwBP93bwP/cm4D/3JsBf9ybQX/cGsD/3FtBP9zbgX/d3EE/3dzBf95dQX/enYG/3t3 + B/+Aewj/hoEH/4aBCP+Aegb/5OLZ2uDe3cLRzcqvw8C7obWyrJTp5+bcExIR2gAAAJkAAACDAAAAcQAA + AGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjZ2Nfpx8O+oM/K + xqvd2da89/L30G+KRfhJbxH/U3oZ/1WCGf9aixn/X48Y/16LGP9dhxj/XH8W/1x7E/9bdRL/XHER/11v + EP9dbg//YHAP/2NzDf9mdgz/aHgM/2l4DP9pdwv/a3gJ/3B7Cf91fQj/eIAI/32EB/+Bhwj/hIkJ/4iL + CP+LjAf/iIwH/4uMDP+VlSr/hIUK/3x9Av97fAT/f4EE/4GCBP+BggT/gIAD/39/BP+AgAP/gIAE/4WD + BP+MiAX/k5AG/5iYBf+enQX/n5wH/6KgBv+mogb/l5EE/5SNBv+Ujgb/lI0G/5ONBv+VkAX/l5MF/5iT + Bv+UjwX/kYkF/5GJBv+UjAb/lo4G/5iOBv+XjAb/lIoG/5GHBv+PhQX/jYUF/4qCBv+IgAT/hn4D/4R7 + Av+DegT/g3oD/4N6A/+CegP/gXkD/4F4BP+AdQT/fXQF/3xzBf96cAT/eXAE/3VuA/9ybQP/cGwD/3Bs + A/9wbAP/cW0E/3NvBP91cQX/dnIE/3h0Bv96dgb/fHkH/4F9Bv+GgAb/gn4H/3x4Bv/k4tna4N/ewtHP + y6/EwbyhtbKslOnn5twTEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAA + ACYAAAAxAAAAPgAAAFQAAABtAAAAyNnY1+nHw72gz8rHq93a17z38vbQbotF+EhuD/9Rehj/VoEY/1uJ + GP9ejhf/XowW/1yHF/9cgBb/XXoU/110Ev9ccBH/XXAP/11vDv9fbw7/YnIN/2V1Df9odwv/aXcL/2t3 + C/9vdwn/cnoJ/3R9B/94fwj/fIQH/4CGB/+FiQj/iIoJ/4mLB/+HiwX/i4sP/5SVKv+ChAf/fHwB/3t7 + A/9/gAT/gIAE/4CABP+AgAT/f38D/39/A/+BgQX/hoMF/4yJBf+SkAb/mZgG/6CdBf+fmwX/paEH/6Ke + Bv+TjgT/k40F/5OMB/+UjQj/k4wH/5aQBf+ZkgX/lpEG/5KMBP+QiAX/kYgF/5SMBv+VjAf/mIwI/5WK + Bv+SiAX/kIYG/46EBf+Nggb/ioEG/4h/Bf+GfQT/g3sC/4R6A/+DeQP/hHoD/4J4BP+BdwX/gHYE/4B1 + BP99cwT/fHIE/3pwBP91bwT/dG4E/3JtBP9wawP/b2oD/3BsA/9xbQT/cm8E/3NxBP91cgX/dnMG/3l1 + Bv98eQf/gn0I/4R/B/99egj/eXQG/+Ti2drg4N7C0c/Lr8PAu6K1sqyU6efm3BMSEdoAAACZAAAAgwAA + AHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI2dnX6cfD + vaDPyser3drYvPfy99FuiUT5SG4P/1J5GP9WgBf/WogY/16OF/9fixb/XYcX/1yAFv9eeRP/XXUR/1xx + D/9cbw7/XG8N/19vDf9icgz/ZXUL/2h2DP9odgv/anYK/293Cf9xeQj/dHwH/3iABv98gwb/f4YH/4SJ + CP+Hign/iIoI/4iJBf+LjBH/lJQp/4CDBP97fAL/e3sF/35+BP+AgAT/gIAE/4B/BP9/fgT/f38E/4CA + BP+Ggwb/jYoF/5SRBf+blwb/oJwH/5+bBv+logb/n5sF/5KMBf+RjAf/kowH/5OMB/+TjQf/lpAF/5iR + BP+Vjwb/kYoF/5CHBv+Qhwb/lIoG/5eLB/+Xiwf/lIkF/5GHBf+PhQX/jYMF/4uBBP+KgQX/iH8E/4V7 + Bf+EegT/g3kD/4J4BP+DeAX/gncF/4F3Bf+AdQX/f3QE/31zBP97cgP/eW8D/3htBf90bQT/cWwD/29q + A/9vagP/cGwD/3FtBP9ybwT/c3AD/3RxBP92cwb/eXQG/3x7Bv+Afgb/gH0H/3t3CP94cgf/5OPa2uDg + 3sLRz8uvw8C7orWyrJTp5+bcExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAA + ABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjZ2dfpx8O9oM/MyKvd29i89/L30W6IRPlHbQ7/UngW/1Z/ + F/9aiBf/XY4Y/16KFv9chhb/XoEW/115E/9ddBD/W3AO/1tuDf9cbgz/X3AN/2JyDP9ldAv/Z3UL/2h2 + C/9qdgr/a3YJ/3F5Cf90fAf/eIAG/3yDB/9/hQb/hIkI/4iKCP+Iigj/h4gF/4yNFf+UlCj/gIME/3t8 + A/97fAT/fX8E/4CAA/+AgAT/fn4D/359BP9/fgT/gIAE/4eDBP+Oiwb/lJIF/5uYBf+gnAb/n5sG/6ak + Bf+blgb/kYwG/5GLB/+TjAf/kosG/5KLBv+WkAX/l5EE/5ONBv+PiAb/kIcG/5CHB/+UiQb/losH/5aK + Bv+ThwX/kYUG/4+DBf+MgwX/i4EE/4uBBf+JgAP/hHoE/4R6BP+DeQX/gngF/4J3Bv+CdwX/gXcF/4B0 + Bf9/cwT/fHME/3pxA/94bgT/dm0E/3JsBP9xawP/b2oD/29qA/9vawL/cW0D/3JvBP9zcAP/c3EE/3Zz + Bf94dQb/fXwF/39+B/97eAj/d3QH/3VxBv/k4tra4N/dwtDOyrDFwLuiuLKslOnn5twTEhHaAAAAmQAA + AIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNnZ + 1+nIxL+g0M3Jq93b2L338/fRbYdD+UdsDf9ReBb/VX0W/1uIF/9djBb/XooW/12HFf9egBT/XXoR/1x0 + D/9bbg7/W24N/1ttDP9ebg3/YXEL/2RzCv9mdAv/aHUK/2h0Cf9rdgn/cHgI/3R7B/93gAf/eoIH/3+E + B/+FiQj/iIoH/4iKCP+FhwT/jo4Y/5KSKP+AgQL/ensD/3l7BP99fgT/gH8D/39/BP9/fgT/fn0D/39+ + BP+BgAT/iIMD/4+LBf+Vkwb/nJkF/5+bBv+fmwb/p6QG/5aSBP+Riwb/kooG/5KLBv+RigX/k4wF/5aQ + Bf+VjwT/kYoE/46FBv+OhQb/kIcH/5SKB/+WigX/lYkF/5KGBv+QhAX/jIIF/4uBBf+LgQX/i4AE/4h+ + A/+DegP/g3kE/4N4Bv+Cdwb/gXcF/4F2Bf+AdQX/f3QE/31zA/97cQT/enAE/3huA/90bgT/cmsD/3Fr + BP9vagP/b2oD/29rAv9xbgP/cm8D/3JvA/90cQT/dnQE/3h3Bf9+fQX/fXsG/3h1B/92cgj/c24G/+Ti + 2trf393C0M7KsMXAu6K3sqyU6efm3BMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAA + ABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI2dnY6cnFv6DRzcmr3dvYvffz99Fth0L5RmwL/1B2 + FP9WfhX/XIcX/1+LFv9eihX/XYcT/16AEv9cfA//XHMO/1tuDv9abQ3/WmwL/1xuDP9hcAz/ZHIK/2V0 + Cv9odQv/Z3MJ/2x1B/9veAf/c3wH/3Z/CP96ggb/gIUI/4OICP+HiQj/hogH/4SFAv+PkBz/kJIm/35/ + AP94eQX/enoG/319Bf9+fQT/fn4E/319A/99fAP/fn0F/4CABP+JhQX/kIwE/5WUBf+dmgb/n5sG/6Cd + B/+loAb/lI4E/5CKBv+RiQf/kYkH/5GKBf+SjQP/lJAE/5ONBv+QiAX/joUG/4+GBv+Rhwf/k4oG/5aK + Bv+ThwX/kIYF/46EBf+Lggb/in8G/4uBBf+LgQT/hnwE/4N4A/+Bdwb/gncF/4F4Bf+AdgX/gXYF/390 + BP9/cwT/fHME/3lxA/94bwX/d24E/3JsBP9ybAT/cWoD/29rA/9vagP/cGwD/3FsBP9wbQT/c28D/3Ry + A/92dAT/enkF/318Bv96eAb/dXIG/3RwB/9xbAX/4+LZ2uDf3cLRzsqwxcC7oreyrJTp5+bcExIR2gAA + AJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAA + AMjb2tnoy8bAoNHOyKve29i9+PP40W6GQvlFagv/T3YU/1V9Ff9ahhX/XosV/16KFP9ehRH/XIAS/1t7 + D/9acw//Wm0M/1trDf9bawz/XG0M/19vDP9kcQr/ZXMK/2VyCP9ncwj/aXUH/3B4B/9zewf/dnwI/3yB + B/+AhAf/g4cG/4aIB/+Fhgb/hIQD/4+QIf+OkCP/fX4A/3d4Bf95egX/fX0E/359A/98fQL/fH0D/318 + BP9/fQX/g4AE/4iGBP+QjAT/lpQG/5yaBf+dmQb/o54H/6KcBf+Riwb/kIoF/5GJBv+QiAb/kYkF/5KM + BP+TjgT/kowG/42GBf+NhAX/j4UG/5KHB/+TiAX/lYgF/5KHBv+PhAX/jYIE/4qABf+KgAT/i4EF/4qA + BP+FeQP/gncF/4F3Bf+BdwX/gXcF/4B2BP9/dAT/f3QE/31zBP97cQP/em8E/3hvBP90bQT/cmsE/3Br + BP9vawT/b2oD/3BrA/9wbAP/cW0E/3BtA/9ybwP/c3EE/3Z0Bf96eQb/e3sH/3d0Bv9zcQX/cm0G/29p + Bf/j4tna4N/dwtHOyrDFwLuit7KtlOnn5t0TEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAA + AC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNva2ejLxsGh0M7JrN7b2b348/jRbIVB+UZp + Cv9QdRT/VHwU/1qEFf9eihT/XokT/1yGEP9dgBH/XHgQ/1tzD/9abQ3/WWsN/1lqDP9bbQv/YG0L/2Ny + Cf9kcwn/ZXII/2dzCP9rdAb/b3cF/3J5B/91fAj/fIEF/4CEBv+ChQX/hIYE/4WGBv+EhAL/kZIl/4yO + If99fQD/d3gE/3h6BP98fAT/fXwE/3x8BP97fAT/e3wE/399Bf+EgAT/ioYE/5COA/+YlQX/nZkF/5yY + BP+loAb/nZcG/5CKBf+PiAX/kYkF/5CIBf+RiAX/kYoG/5KMBv+QiAX/jYQG/4yDBP+PhQb/kYYG/5KI + Bf+Thgb/kIQF/46CBv+MgQX/iX8E/4l/A/+LgQX/iH8E/4J4Bf+CdwX/gXcF/4F3Bf+AdQX/f3QE/390 + BP9+cwT/fHMD/3lwA/95bwT/d24D/3JsA/9yawT/cGoD/29qA/9vagP/cGsE/3BsA/9vbAP/cG0D/3Fv + Av9zcgT/dnUF/3l5Bv94dgX/c3EF/3JvBv9wbAX/bmcG/+Pi2drg393C0c7KsMTAvKK2sq2V6efm3RMS + EdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAA + AG0AAADI29rZ6MvHwqHRzsqs39zZvfj0+NFthED5RmgL/1B0E/9UexL/WYMU/12JE/9diBL/XIUQ/11/ + EP9ceBD/W3IP/1psDv9Yagz/WWoL/1xrCv9gbgv/Y3EJ/2RyCf9lcgj/Z3II/2t0Bf9vdwb/cnkH/3R8 + B/97gAX/f4MG/4GEBP+DhQT/hIUF/4KDAv+Rkyf/iosd/3x8AP92dgX/eHkE/3t8BP98fAT/e3wE/3p7 + A/97fAT/fnwE/4WAA/+KhgT/kY4E/5iVBP+bmQX/m5gF/6SgBf+YlAX/jokF/46HBv+PhwX/j4cG/5CI + Bf+Rigb/kosG/46GBf+Mgwb/jIIF/4+EBv+RhQb/k4cG/5GGBf+PhAX/jYEF/4qABP+JfgP/iYAD/4uB + BP+GfAT/gXcF/4F3Bf+BdwX/gHYE/4B2Bf9/dAT/f3QE/31zBP97cQP/enAD/3duBf90bQT/cmsE/3Jr + BP9wagP/b2oD/29qA/9vagP/b2wD/29sA/9wbQP/cW8C/3NxA/93dQX/eHkF/3VzBP9ybwX/cW0H/29p + Bv9sZQX/4+LZ2uHf3MLRzsqwxMC8o7ayrZXp5+bdExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAA + ADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMjb2tnoy8fCodPPyqzf3Nm9+PT40W6E + QflFZgv/UHIT/1R5Ev9YghP/W4gS/1yIEv9cgw//XH4O/1x4Dv9bcw7/Wm0N/1hqDP9Zagv/XGoK/15u + Cv9icQj/ZHIJ/2RxCP9ncgf/a3MG/252Bf9xeAf/c3wG/3t/Bf9/gwb/gYQE/4OEBP+DhAT/goMD/5KT + LP+IiBr/enoA/3R1BP94eAT/ensE/3t8BP96ewT/eXoE/3p7Bf99fAT/hYED/4uIBP+SjgT/mZUE/5uY + Bv+bmAb/o6AE/5OOA/+NiAX/jYYG/4+GBv+Phgb/kIgF/5GKBv+RiQX/jYUE/4yCBv+Ngwf/j4QG/5GE + Bv+Thgb/kYUF/46DBP+MgAT/iX4D/4l+BP+KgQT/ioED/4R6BP+BdgX/gXYF/4B2BP+AdgT/f3UE/390 + BP9+cwP/fHME/3txBf96cAT/dm8E/3JtBP9yawT/cGoD/3BqA/9vagP/b2oD/29rA/9vbAP/b2wD/29t + A/9xbwP/dHEC/3h2BP93dgX/cnAF/3BuBf9vawb/bWYH/2pkBP/j4tna4d/dw9HNyrDEwLyjtrKtlenn + 5t0TEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAA + AFQAAABtAAAAyNrZ2enLx8Oh08/MrN/d2r349fjRbYNB+UVmCf9OcRL/U3cT/1Z/Ev9ahxH/XIcR/12C + D/9bfg3/XHgN/1tyDf9ZbQv/WGkM/1ppC/9cagr/X20I/2JxCP9icQf/ZHEI/2ZyBv9rcwX/bnUG/3F3 + B/92ewX/fH8G/36ABf+AgwX/goMD/4OEBP+CggX/k5Mw/4aHF/95eQD/dHQE/3d3Bf95egX/ensE/3p6 + Bf95eQX/eXoG/3x8BP+EgQP/jIkD/5OPBf+alQX/nJcG/56ZBv+gnQX/j4sE/4yHBP+Lhgb/jocF/4+F + Bf+QiAT/kYkF/4+HBf+KgwX/iYIF/4yDBv+Pgwb/kIUG/5GGBv+PgwT/jYEE/4t/BP+IfQP/iH0D/4yB + Bf+IfwX/gXgD/4B2Bf+AdQX/gHUF/4B1Bf9/dAT/f3QF/31zBP97cgP/enAE/3luBP92bQP/c20E/3Jr + BP9vagP/b2oD/29qA/9vawL/cGwD/3BsA/9vbAP/cG4D/3FvA/9zcgL/d3cE/3RzBf9vbQX/bWwD/21o + Bf9rZQf/aGEE/+Lh2dvh393D0c3KsMTAvKO2sq2V6ejm3RMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAA + AEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI2trZ6cvIxKLTz8yt4N3avfj1 + +NFsgkD5RWQJ/05vEf9RdRH/Vn0Q/1qEEf9chRD/XIEQ/1x9D/9cdg7/XHEO/1lsDP9YaAr/WmkK/1xq + Cf9fbQj/YXAH/2JwB/9icAb/ZXAG/2pxB/9tdQb/cHkG/3Z8Bf96fwT/fYAD/3+CBP+CggT/gYID/4CC + Bf+TlDH/g4UT/3Z5AP9zdAT/eHYE/3l5Bf95eQX/eHgE/3l5Bf95eQX/fXsD/4WCBP+MiQP/k48E/5uW + Bv+alQX/oJsG/56aBP+NiQP/i4UF/4yEBv+MhQb/jYUE/4+HA/+PhwT/jYQE/4iBBf+IgAT/ioID/46D + BP+QhQT/j4UE/42BA/+LfwT/iX4E/4d8A/+KfwT/jIEF/4Z8Bf9/dQP/f3QE/4B1Bf9/dAT/f3QE/35z + BP99cgP/e3ED/3pwBP96cAT/eG0E/3RsBP9ybAP/cWoD/29qA/9vagP/b2oD/25rA/9vbAP/b2sC/29s + A/9wbQP/cXAC/3R0A/91dQP/b24D/2xrBP9raQT/a2UE/2ljBf9mYQX/4uDZ2+Hf3cPRzcqwxL+8o7ay + rZXp6ObdExIR2gAAAJkAAACDAAAAcQAAAGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAA + AD4AAABUAAAAbQAAAMja2tnpzMjEodTQzKzg3dq9+PX40WuBP/lEYwj/T24R/1FzEP9VfQ//WoMP/1yE + D/9agRD/W3wO/1t1D/9ccQ3/WmwK/1hoCv9ZaAn/XGoJ/19sCf9hbQn/Ym8H/2JwBv9lcAb/anEH/21y + B/9xeAj/dXsH/3p8BP99gQT/foEE/3+BBP9+gQL/gYIH/5SUMv+Bgw7/dXgB/3JzBP93dQX/eHgF/3h5 + BP94eAT/eHgE/3h4BP9+fAT/hoIF/42JA/+UkAT/mZUH/5eTBf+hnQT/mpUF/4yIBP+LhAX/i4QF/4qE + BP+LhQX/j4cD/46HBP+KggX/h38D/4d/BP+KggP/jYIE/46CBP+NggT/ioAE/4l/A/+HfQT/hnwE/4t/ + BP+KgAT/g3kD/350BP9/dAT/f3QE/390BP9+cwP/fnME/31yBP96cAT/enAE/3lvA/91bgP/c2wF/3Jr + BP9xagP/b2oD/29qA/9vaQP/b2oD/29sAv9uawL/b2wD/3BtBP9ycQP/dXQD/3JyAv9sawP/a2oD/2lm + BP9oZAX/ZmIE/2RgA//i4Nnb4d/dw9HNyrDEv7yjtrKtleno5t0TEhHaAAAAmQAAAIMAAABxAAAAYwAA + AFUAAABHAAAAOgAAAC0AAAAXAAAAHAAAACYAAAAxAAAAPgAAAFQAAABtAAAAyNra2enMyMSh1NDMrODe + 27359fnRbIE/+URjB/9NbBD/UXIQ/1Z6D/9ZgRD/W4MP/1uAD/9cewz/XXYL/1xxDP9abAr/WGgJ/1lo + Cv9baQj/XmsJ/2BtB/9hbwb/Ym8G/2VvBf9qcQb/bHQF/3B2Bv90eQb/eX0E/3x/BP99gAT/foED/31/ + Av+Bgwr/lJQ0/3+BDf91dwP/cnEE/3Z1BP93dwX/eHcF/3d3BP93dwT/eHgF/358A/+GgwT/jYkE/5SQ + Bf+YlQX/l5QF/6GeBf+UkAT/i4UE/4uEBf+LgwX/ioIF/4qEBP+MhgT/jIUE/4iABP+GfwP/h4AE/4qB + BP+NggT/joIE/42BBf+KgAX/iH4E/4Z8A/+GfQP/ioAE/4d9Bf+AdgT/f3QE/390BP9/dAT/f3QF/35z + A/99cgT/fHEF/3pwBP96cAX/dW4E/3RtBP9zbAT/cGoD/3BqA/9vagP/bmoC/29rA/9vawP/bmsD/25r + Av9vbAP/cG4E/3NyA/90cwP/b24D/2tqA/9raQP/aWUE/2diBf9lYAX/ZF4D/+Lg2dvi393D0c7KsMS/ + vKO2sq2V6ejm3RMSEdoAAACZAAAAgwAAAHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAA + ADEAAAA+AAAAVAAAAG0AAADI2trZ6c7JxaHV0cys4d7bvvn2+dFsgT/4RGEG/01sD/9RcQ//VXkO/1iA + EP9bgg//XH8O/1x6Df9ddgr/W3EL/1psCv9YaAn/WWgK/1ppB/9dagj/X2wG/2FvBf9ibwb/ZG8F/2lw + Bv9scwX/cHYG/3R5Bv94fAT/e34D/3yABP9+gQP/fH4B/4KDDP+TlDP/fX8K/3R1A/9xcQT/dHUE/3d3 + Bf93dwX/d3YE/3d2BP94dwX/fnwE/4aDA/+OigT/lZAG/5eTBP+YlAX/n50E/5GMBP+KgwX/ioMF/4qD + Bv+JgQb/ioIE/4qEBP+KggP/h34D/4Z9A/+HfwX/ioAE/42CBf+OggT/i4AF/4l+BP+HfAT/hHsD/4Z9 + A/+KgAT/hXwF/311BP9/dAT/f3QE/390BP9/dAX/fXID/3xwBP97cAX/enAD/3lvA/90bQT/cmwE/3Js + BP9xaQP/bmoD/29qA/9uagP/bmsC/29rA/9uawP/bmsC/29sA/9xbgP/c3MC/3NyA/9sbAL/a2gC/2lm + A/9nYwT/ZGEF/2NfBP9iXAL/4uHZ2+Lf3cPRzcqxxL+8o7ayrZXp6ObdExIR2gAAAJkAAACDAAAAcQAA + AGMAAABVAAAARwAAADoAAAAtAAAAFwAAABwAAAAmAAAAMQAAAD4AAABUAAAAbQAAAMja2tnpzsnGodXR + zKzh3tu++fb60WyAPvhEYAX/TWsN/09wD/9VeA//WX4O/1yADv9cfg7/WnoM/1x2Cv9bcAn/WWsJ/1dn + Cv9YZwj/WmgG/11pCP9ebAj/YG4F/2FuBf9jbgb/aHAF/21zBv9udgb/dHgE/3h7Bf97fgP/fIAD/32A + A/97fQD/g4UQ/5GRMv97fQb/dHQE/3BxBf9zcwT/dnYE/3Z1BP92dQP/dnUE/3l3Bf9/fAT/h4QE/46K + BP+VkAb/lpIE/5qWBf+emwT/jogD/4mDBf+IggX/iIEF/4mABP+KgwT/ioME/4eAA/+FfAL/hnwE/4h+ + BP+KgAT/i4EF/4uABP+JfgT/h30D/4V7BP+EegX/iH8D/4qABP+DeQP/e3MD/31zBP9+cwT/fnMD/35z + A/99cQX/e3AF/3pwBP94bwP/d24D/3NtBP9ybAT/cmoE/3BpAv9uaQL/bmkC/25qAv9tagL/bmsD/25r + A/9uawL/b2wD/3FuA/90cwP/cG8C/2tpAv9oaAH/Z2QC/2ViBP9iYAP/YV4E/19aAv/i4dnb4d7dw9HN + yrHEv7yjt7Ktluno590TEhHaAAAAmQAAAIMAAABxAAAAYwAAAFUAAABHAAAAOgAAAC0AAAAXAAAAHAAA + ACYAAAAxAAAAPgAAAFQAAABtAAAAyNva2enQy8ai1tPOreHe27759frRa389+ENgBf9Nag3/UG8N/1N3 + D/9YfA//W38N/1t9Df9Zegz/XHYK/1twCf9Zagn/V2cJ/1ZlB/9aZgf/W2kG/11rBv9gbQX/YG0E/2Nt + Bf9obwX/bHIG/291Bv90eAT/eHkG/3p8BP98gAL/fH4C/3l7AP+EhhX/kJAx/3t8A/9xcwP/cHAF/3N0 + BP92dAX/dXQE/3V0BP91dAT/eHcF/399BP+GhAT/j4oF/5WRBP+VkAX/nJgF/5qXA/+MhQX/iYIF/4iB + Bf+GgAb/iIAF/4iBBP+HgAX/hX0E/4R8A/+GfAP/iH4E/4qABP+KgAT/iYAE/4l+BP+FfAP/g3oE/4V6 + Bf+KfwX/iH0F/391Bf98cgT/fXME/35zBP99cwT/fXID/3xxBf96cQX/eW8D/3dtBP90bgX/c20E/3Jr + A/9vagL/bmoD/25pAv9uaQL/bmoC/25rA/9uawP/bmsD/25rAv9wbQL/cnED/3NyBP9tbAP/amgC/2Zm + Av9kYwT/Y2AD/2JfBP9gXQT/XlgD/+Lh2dvh3t3D0c3KscTAvKS4sq2X6ejn3RMSEdoAAACZAAAAgwAA + AHEAAABjAAAAVQAAAEcAAAA6AAAALQAAABcAAAAcAAAAJgAAADEAAAA+AAAAVAAAAG0AAADI29rZ6dDL + xqHW086s4d/cvvr2+tFrfz34Ql4G/0xpDf9Pbg3/VHUO/1h7Dv9afwz/W3wM/1p5C/9adgn/Wm8I/1lq + CP9WZgn/VmUH/1lmCP9caAf/XmoG/2BrBv9hawb/Y24E/2hwBP9scQX/b3QE/3N3BP93egX/ensD/3p+ + A/97fgP/eHsA/4aGGv+Ojy//eXwC/29xA/9vcQT/c3QE/3V0BP91dAT/dHMD/3V0BP93eQP/gH0D/4iE + BP+PiwX/k5AF/5OPBP+dmQX/l5IF/4iBBf+HgAX/h4EF/4aABP+GfwT/hn8D/4V9A/+DegP/gnoD/4R8 + A/+GfwT/iX4E/4l+BP+IfgP/iH0D/4R6BP+DeQP/hnsE/4p/BP+DewX/e3MF/3xyA/99cgP/fXID/3ty + A/97cQT/enAE/3pwBP94bgT/d20F/3NtBP9yawP/cmoD/29pAv9uaQL/bWgC/21qAv9tagP/bWoD/21q + Av9uawP/bmsC/3BtAv9zcgP/cXAD/2tqA/9oZgP/ZWQE/2NiBP9hXgP/YFwD/15bAv9bVwH/4eDZ2+Hf + 3cTRzsuyxcC8pLeyrZbp6OfdExIR2gAAAJgAAACCAAAAcAAAAGIAAABUAAAARgAAADoAAAAtAAAAFgAA + ABsAAAAlAAAAMAAAAD4AAABUAAAAbQAAAMjb2tnp0MzHodbTz63h39y9+fb60mp+PPlBXQX/S2gN/09s + Df9Tcw3/V3oN/1p8DP9afAz/WnkK/1pzCf9abgn/WWoI/1ZmCP9WZQf/WWYI/1xoB/9daQj/XmoG/2Bs + Bv9jbQT/Z28F/2lxBf9vdAT/cncD/3Z6A/93fAP/eX0C/3p9Av93egD/iIke/4yMLP94eQH/bnED/25w + A/9ycgT/dHMF/3RzBf90cwP/dXQD/3l5BP+BfgT/iIQE/4+LBP+TjwX/lI8E/56ZBf+RjgT/hoEE/4Z/ + Bf+GfgT/hX0E/4V+A/+FfQP/gnoE/4F4Bf+CeAX/hXsE/4Z+BP+IfgT/iX4F/4h9A/+FegT/g3gD/4N4 + A/+HfAP/ioAE/4B4A/96cQP/e3ID/3txBP97cQT/e3EE/3pwBP96cAT/enAE/3huBP93bQX/c2wF/3Jr + A/9vagP/bmkD/21oAv9uaQP/bWkD/21pA/9saAH/bWoC/25rA/9vbAP/cnAC/3JxA/9tbQP/aWcC/2dl + A/9lYwP/Yl8E/2FdA/9fWwP/XVkD/1pWAf/i4Nnb4d7dw9HPy7LFwLykt7Ktluno590TEhHaAAAAmAAA + AIIAAABwAAAAYgAAAFQAAABGAAAAOQAAACsAAAAWAAAAGwAAACUAAAAwAAAAPQAAAFMAAABsAAAAyNva + 2enQzMeh1tLOreDe2r349PrRan47+UJdAv9LaA7/Tm0N/1JzDP9WeQz/WnsM/1p7DP9ZeAr/WnMJ/1pu + Cf9Zagj/VWUH/1ZlB/9YZgj/WmcH/1xpCP9eagb/X2wF/2JsBP9obgb/anEF/250A/9zdwP/dXoC/3h8 + Av96fAL/enwD/3Z5AP+JiyP/i4so/3Z4AP9tbwL/bm8D/3JxBf9zcwX/c3IF/3RzBf91dAP/eXkD/4F/ + BP+IhQX/kIwF/5KPBf+UkAT/nZgF/46JBP+GfwT/hn8F/4Z+BP+DfAX/g3wE/4J7A/+AeQX/gHgF/4N5 + Bf+FewT/hnwE/4h+BP+HfgP/hnwD/4R6BP+CeAT/hHkD/4l/BP+IfgT/fXUD/3tyA/96cQT/e3EF/3tx + Bf96cAT/enAE/3pwBP95bwX/eG4E/3VsBf9ybAX/cGoD/29qA/9taQP/bWgC/25pA/9taAP/bWkD/2xp + Av9tawP/bWsE/29tA/9ycAT/cG4E/2poA/9oZgP/ZmQD/2RhA/9hXgT/X10C/1xZAv9bWAP/WVUC/+Hf + 2Nrg3tzC0c3LssTAvKS3sq2W6ejn3RMSEdoAAACXAAAAgQAAAG8AAABhAAAAUwAAAEUAAAA5AAAALAAA + ABYAAAAbAAAAJQAAAC8AAAA8AAAAUgAAAGsAAADI3Nva6dDMxqHU0s2s393ZvPfz+M5rfjv4Q10C/0tn + Df9Oawz/UHEL/1V3C/9Zegv/WXoL/1h3Cf9acwn/Wm4I/1hpB/9VZQf/VWQG/1dlBv9ZZgf/XGgG/15q + Bv9fawT/Y2wE/2htBf9qcAP/bXQD/3J3A/91eQL/d3wD/3l7A/95ewP/dXgA/4mLJ/+IiSX/dHYA/2xv + Av9tbwP/cHAD/3JyBP9zcgT/c3IE/3R0BP95eAP/gH4E/4mGBv+Piwb/kI0F/5WSBf+blwX/i4UF/4Z+ + BP+EfQT/g3wF/4F7Bf+BegT/f3gF/353BP9/dwT/gnkG/4N8A/+FfQT/hn4D/4V9A/+EewP/g3kE/4F3 + Bf+DegT/iX8E/4V8A/98cQT/e3AE/3pwBP97cQX/enAE/3pwBP96cAT/eG8E/3dtBf91bQT/cmwD/3Fq + A/9vagP/bmkC/21oAv9taAL/bGgC/2xoAv9saAL/bWkC/21rA/9sawL/bm4C/3FvA/9ubQP/aWcD/2hl + A/9lYgT/Y2AE/2FdA/9eWwL/W1kC/1pXAv9YVAL/397X19/c28DQzMmxw8C7pLeyrpfp6OfdExIR2gAA + AJcAAACBAAAAbgAAAGAAAABSAAAARAAAADgAAAArAAAAFAAAABkAAAAjAAAALgAAADoAAABPAAAAaQAA + AMjc29rp0MvGodTQy6rd2ti59PD0yWp8O/dDWwL/TGYM/09pDP9Rbgz/VHUK/1h6Cv9YeAr/WHUJ/1px + B/9Ybgf/VmgG/1VlBv9VZAb/V2UG/1pmBv9cZgb/XWkG/19rBP9jbAT/aG0D/2pwA/9scwT/cHYC/3Z3 + BP92eQX/eHoD/3h6Af91dwD/iowr/4aHIf9zdQH/am0D/21uBP9wcAP/cXED/3JyBP9zcgT/dHME/3l5 + A/+AgAX/iYYG/4+LBP+QjAP/lpME/5eTBf+IgQX/hH0E/4J9BP+BfAT/gHoF/4B5Bv99dgT/fXUE/391 + BP+CeAT/g3sE/4V8A/+FfAP/hHoE/4N5BP+BdwX/gHYE/4V7BP+IfwT/f3cE/3lvBP96cAT/enAE/3pw + BP96cAT/eXAD/3hvBP92bwT/c20D/3NsBP9xagP/b2oD/29qAv9uaQL/bWgC/21oAv9saAL/bGgC/2xo + Av9taQL/bGoC/2xrA/9vbwL/b28D/2ppAv9oZgL/ZmUC/2NiA/9hXwT/YVwD/11ZAv9bWAP/WVUC/1dS + Av/c2tPT3NnYvc7Lx67Dv7ujt7Kuluno590TEhHaAAAAlQAAAH8AAABsAAAAXwAAAFAAAABCAAAANgAA + ACkAAAAUAAAAGgAAACIAAAAsAAAAOAAAAE0AAABnAAAAx9zb2unPy8Sf0s3JqNnX1LXw7PDCaHo69UJb + Av9MZAv/TmkL/1BsC/9Vcwv/V3cK/1d3Cv9XdQj/WXIH/1dtB/9WaAb/VGQF/1NkBv9XZAb/WmUG/1xn + B/9daAT/YGoE/2JrA/9mbAP/aW8C/2xxBP9vdQP/c3cE/3Z4BP94eQT/eHgE/3R3AP+LjS//g4Uc/3N1 + AP9pbQL/bW0D/29vA/9vbwP/cHAD/3FyA/90cwT/eXkE/4CABf+Jhgb/jowF/46LBv+WkwX/k48E/4Z/ + Bf+DfQX/gnwE/4F7Bf+AeQb/fncF/3l0BP97dQT/fncE/4B4BP+DewP/hXsF/4V6BP+DeAX/g3cF/4B2 + Bf+AdwX/h34E/4Z+Bf99cwT/em8E/3pwBP96bwP/em8D/3pwBP94bwP/dm8E/3RuBf9zbgT/cmwD/3Bq + A/9uaQL/bmkC/25oA/9saAL/bGgC/2xoAv9saAL/bGgC/2xoA/9raQL/bWwC/3BvAv9tbAP/Z2YC/2Zl + A/9kYwP/YmAC/19eA/9eWwT/W1kB/1lWAv9XVAT/VVEB/9fWzszY1tS4y8fEq8K9uKG2sq2V6ejn3RMS + EdoAAACTAAAAfAAAAGkAAABcAAAATgAAAEAAAAA0AAAAKAAAABIAAAAYAAAAIAAAACkAAAA1AAAASgAA + AGMAAADG29rZ6M3JxJ/Oysam19PPsOzn67hgcy32OFQA/0BcAP9CXwD/RWUA/0prAP9MbgD/TG0A/01t + AP9QagD/TWQA/0xgAP9KWwD/SlsA/01bAP9QXAD/Ul4A/1VgAP9VYAD/V2IA/1xkAP9hZwD/ZGoA/2dt + AP9rbwD/bnAA/29xAP9vcAD/bG8A/4SHJf94egv/aWwA/2FjAP9jZgD/ZmcA/2dnAP9oaAD/aWkA/2xs + AP9xcgD/e3oA/4KBAP+HhQD/iIUA/5KPAP+HgwD/e3QA/3p0AP96dAD/eXIA/3ZvAP9xbAD/cGwA/3Ns + AP92bwD/eXEA/3xzAP99cwD/fXIA/3twAP96bwD/eW0A/3txAP+AeAD/fHQA/3FpAP9yaAD/cmgA/3Fn + AP9xZwD/cmgA/3FnAP9tZwD/bGYA/2tlAP9qYwD/Z2IA/2ZhAP9mYQD/ZGAA/2RgAP9jYAD/ZGAA/2Rg + AP9jXwD/Y2AA/2NiAP9mZgD/amcA/2NhAP9fXQD/XVsA/1tZAP9ZVwD/VVUA/1NRAP9RTgD/UEwA/05L + AP9MSAD/0c/GxNPQzrLIxMCnwLu2n7Wwq5bp6OfdExIR2QAAAI8AAAB5AAAAZgAAAFcAAABKAAAAPAAA + ADEAAAAmAAAAEAAAABUAAAAeAAAAJgAAADEAAABGAAAAXgAAAMXb2tnpy8fDn8vGwqLTz8qp3dnVssnK + u8fGybbRy9C82M7SvtzQ1cDg0tfB4tPYweLT18Hi0tjB4tPXweLT1sHi09XB4tLUwOLS1MDi0tTB4tPU + weLT1cDi1NXA4tTVwOLU1sDi1dbB4tbXweLX18Hi19jB4tjYweLY2MHi2NjB4tjYwOLY18Di3dzJ4dnZ + xOHX1r/h1tW/4dbWwODW1r/g19a/39bWv9/W1r/f19a/39jXv9/Z2L/f29m/39vZv9/c2r/e3ty/3tva + v97Z17/e2de/3tnXv97Z17/e2Na/3tfWvt7X1r/e2Na+3tjWv97Z17/e2de+3trXv97a177f2de/39nW + v9/Z1r/f2de+39rZv9/Z2L/f19bA39fWv9/Y1b/f2NW/39jVv9/Y1b/f2NW/4NjVv+DX1b/g19W+4NfU + vuDW1b/g1tW/4NbVv+DW1L/g1tS/4NbUvuDV077g1dO+4NXTvuDV077g1NO+4dXUvuHV1L7h1NO+4dPS + vuHT0r7h09G+4dLRvuHS0b3h0M+94M7Mu93LybjZx8W008G+rcvSzsu2y8fFq8O/vKO9uLSdtrGrlevp + 5twTEhHYAAAAiwAAAHIAAABgAAAAUwAAAEYAAAA4AAAALQAAACMAAAAOAAAAEwAAABsAAAAjAAAALgAA + AEEAAABWAAAAxdLRz93LxsGcyMTAn87KxaTU0Mqq3trYsOPg4Lfn5OS+6ubowuzo6sXs6evG7Onrxuzp + 68bs6evG7Onrxuzp68bs6evG7Onrxuzq68bs6evG7errxuzp68fs6evH7Onrx+zq68br6uvG7Orrxuzq + 68bs6uvG7Orrxuzq68bs6erG7Onqxuvo6sbq6OjF6efpxero6sTq6OnE6+jpw+ro6cPo5ufC6ebnwejl + 58Lo5ufB6Obnwefk58Hn5OfB5+Tnwefk58Hm5efA5uXnwOfl58Dn5efA5+XnwOfm58Dn5ufA5+bnwOfm + 58Dn5ufA6ObnwOfm58Dn5efA5+bnwefm58Hn5ufB5+bnwefm58Hn5efC6Obnwejm58Hp5ufB6Obnwujm + 58Lo5ufC6Obnwujm6MPo5ujD6Obow+jm6MPo5+jD6ejpw+ro6cPq6OnD6ujpw+ro6cPp5+jD6efow+fl + 58Tn5efE5+XnxOfl58Tm5ebE5uXmxObl5sTm5ebE5uXmxObl5sTn5ebF5+Xmxefl5sXn5ObE5OLiwuDf + 4L7d29q419TUscvHxavFwb2lwLu3oLq1sZu3sayV4uDf0REQENYAAACEAAAAbQAAAFoAAABNAAAAQQAA + ADUAAAAqAAAAIAAAAA0AAAASAAAAGQAAACAAAAApAAAAOgAAAE8AAACtcG9u5NzZ1a/EwLmYy8fBoM7J + xKPRzsmo1dLOrdfU0LDZ1dOz3NfVtdzZ1bbc2dW23NnVttzZ1bbb2NW23NnVttzY1bbb2NW23NnVttvY + 1bbc2dW23NjUttvY1Lfa2NS33NnVttzZ1bbb2dW23NnVttzZ1bbc2dW229nUttvZ1Lbb2NS22tfVtdvX + 1LXZ1tO02tbTs9nW07HZ1dOy2NXRsdfU0LDX1NCw1tLQsNXTz6/V08+v1dPOrtXSzq7V0s6u1dLOrtXS + zq7W0s6u1tLOrtbSzq7W0s6u1tLOrtbSzq7W0s6u1tLOrtbSzq7W0s6u1tLOrtbSzq7V086v1dPPr9XT + z7DW0tCw1tLQsNbT0LDX1NCw19TQsNfU0LDX1NCw19TQsNfU0LHX09Cx19PQsdfT0LHX1NCx19XRsdjV + 0rHY1dKx2NXSsdjW0rHY1dKx2NXRsdfU0LHX09Cx1tLPstbSz7LW0s+z1dHPs9TRzrPU0c2z1NHNs9TR + zrPU0c2z1NHOtNTRzrTU0c601NHOtNPQzbPRzsyzz8zJsMzJxazIxcGpw7+8o8C7t6C9uLOdtK+qldLN + yaaHhoXfBQUFxAAAAHkAAABkAAAAUwAAAEYAAAA7AAAAMAAAACYAAAAdAAAACwAAAA8AAAAVAAAAHAAA + ACUAAAAyAAAARwAAAHkSERDm29nX19DMxpzDvreXysS+ncrIwqDNyMSjzsvFpc/Lx6bRzcin0c3Ip9HN + yKfRzcin0c3Ip9LOyKfSzsin0s7Ip9LOyKfRzcin0s7Ip9LOyKfSzsin0s3IqNHNyajRzsin0c7Ip9HO + yKfRzsin0c7Ip9HOyKfRzsmn0c7Jp9HMx6fQzMimz8vHps/LxaXPy8WkzsrFos7JxKPMxsOizMbBocvH + waDKx8GgycXAoMnFvp/Jxb+fyca/n8nFv5/JxL+fycS/n8nEv5/Jxr+eycW/nsnFv57Jxb+eycW/nsnF + v57Jxb+eycW/nsnGv57Jxr+fyca/n8nGwKDJxcCgycXBocnFwaHJxcGhysbBoMzGwaHMxsGhzMbBocvH + waHLxsGhy8XCosvFwqLLxcKiy8XCoszJw6LNycSizcnEos3JxKLNycSizcjEos3Hw6LNx8OizMfCosvG + waPJxcGjycXBo8jEwaTIxMCkx8S/pMfEv6THxMCkyMTApMfDv6XHw7+lx8O/pcfDv6XHw7+lx8O/pcXB + vaXDwLykwr66o7+7t5+9ubWdu7axnLSvqZW+urSV4+DeyyspKO0AAAChAAAAbAAAAFoAAABLAAAAQAAA + ADUAAAArAAAAIgAAABkAAAAJAAAADQAAABMAAAAZAAAAIQAAACoAAAA6AAAAXgMCAqdVVVT13tzZz+fk + 3arHwruWwr63lcPAuZbFwbuXx8G8mMfCvJjHwbyYx8G8mMfBvJjHwryYyMO8mMjDvJjIw7yYyMO8mMfC + vJjIw7yYyMO8mMjDvJjIxLyZx8S9mcfEvJnHw7yYx8O8mMfDvJjHw7yYxsG7mMbBu5jGwbuYxsC6l8XA + upbDvrmVw764lcG8tpTBu7WTwLu0k765spK+ubGQvbexj763sY+9uLGPvbiwjry4r467t6+Ou7evjru2 + r467tq+Ou7avjru3r468tq+Ovbavjb22r428tq+NvLavjby2r428tq+Nu7avjru2r467tq+OvLawj7y2 + sJC8tbCQvLawkL23sZC+ubGPvrixkL64sZC+uLGQvriykb63spG+t7KRvreykb63spG/ubOQwLu0kcC7 + s5HAu7ORwLuzkcG6tJLBubSSwbm0kr+5s5K+uLKTvLexk7u2sZS7trGUurWwlLm1sJS4ta+UurWvlLm1 + sJW5tK+VubSvlbm0r5W5tK+VubSvlbizr5W4s66WuLOulrezrpa3sq2VtrCrlLSvqpK3sa2T1tHOpOPi + 38hsbGrzCQgIwQAAAHsAAABfAAAATgAAAEIAAAA4AAAALwAAACUAAAAeAAAAFQAAAAgAAAALAAAAEAAA + ABQAAAAbAAAAIwAAAC4AAABLAAAAYQAAAKk3NzfxgoF/4eHg3tH39vPS8vHu0vPx79Lz8u/S8/Hv0vPx + 79Lz8e/S8/Hv0vPy79Lz8u/S8/Lv0vPy79Lz8u/S8/Lv0vXy79L08u/S8/Lv0vPy79Lz8u/S8/Lv0vPy + 79Lz8u/S8/Lv0vPy79Ly8e7S8/Hu0vPw7tLz8O/S8/Hu0fLx7tDx8O3Q8e/tz/Hu7NDv7uvQ7+3rz/Du + 687w7evO8O3rzu/t687w7uvO7+3rzu/t687v7evO7+3rzu/t687v7evO7+3rzu/t687v7erN7+3qzfHt + 683y7uzM8u7szPLu7M3y7uzN8e7szfDt7M7x7ezO8e3szvHu7M7x7+zO8e/szvHv7M7x7+zO8e/szvLv + 7M7z7+3O8+/tzvPv7c7z7+3O8+/tzvPw7c7z8O3O8/DtzvPw7c7z8O3O8+/tz/Pw7c/z8O3P8vDsz/Lv + 7M/y7+zP8e7sz/Hu7M/x7uzP7+7r0PHu7M/x7uvQ8O3r0PDt69Dw7evQ8O3r0PDt69Dw7evQ8O3r0fDt + 69Hw7evR8O3r0fDt69Dw7evR8/Dt0Ojl49CPjYzdQD8/8gEBAcMAAAB5AAAAXwAAAFAAAABCAAAAOQAA + ADAAAAAoAAAAIAAAABkAAAASAAAABgAAAAgAAAANAAAAEAAAABUAAAAcAAAAJAAAADcAAABMAAAAYAAA + AIYEAwO9KSko6TEwMOMvLy7jLy8u4y8uLuMvLi7jLy4u4y8uLuMvLi7jLy4u4y8uLuMvLi7jLy4u4y8u + LuMvLi7jLy4u4y8uLuMvLi7jLy4u4y8uLuMvLi7jLy4u4y8uLuMvLi7jLy4u4y8vLuMvLy7jLy4u4y8u + LuMvLy7jLy8u4y8vLuMwLy7jLy8u4y8vLuMvLy7jMC8u4zAvLuMwLy7jLy8u4y8vLuMvLy7jLy8u4y8v + LuMvLy7jLy8u4y8vLuMvLy7jLy8u4y8vLuMvLy7jMC8v4zAvL+MwLy/jMC8v4zAvL+MwLy/jMC8v4zAv + L+MwLy/jMC8v4zAvL+MwLy/jMC8v4zAvL+MwLy/jMC8v4zAvL+MwLy/jMC8v4zAvL+MwLy/jMC8v4zAv + L+MwLy/jMC8v4zAvL+MwLy7jMC8u4zAvLuMwLy/jMC8v4zAvL+MwLy/jMC8v4zAvL+MwLy7jMS8v4zAv + LuMwLy7jMC8u4zAvLuMwLy7jMC8u4zAvLuMwLy/jMC8v4zAvL+MwLy/jMC8v4zAvL+MxMDDjLS0s5woJ + CMwAAACWAAAAdAAAAFsAAABOAAAAQgAAADgAAAAwAAAAKAAAACIAAAAbAAAAFAAAAA4AAAAHAAAACAAA + AAwAAAAQAAAAFQAAABsAAAAiAAAALAAAADkAAABGAAAAUAAAAGAAAABsAAAAcAAAAHIAAABzAAAAdQAA + AHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAA + AHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHcAAAB2AAAAdgAA + AHYAAAB3AAAAdwAAAHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAA + AHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAA + AHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAA + AHcAAAB3AAAAdwAAAHcAAAB3AAAAdwAAAHYAAAB3AAAAdgAAAHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAA + AHYAAAB2AAAAdgAAAHYAAAB2AAAAdgAAAHUAAAB0AAAAbAAAAGAAAABXAAAATAAAAEIAAAA4AAAAMQAA + ACsAAAAkAAAAHwAAABkAAAATAAAADgAAAAUAAAAGAAAACQAAAAwAAAAQAAAAFQAAABoAAAAhAAAAKAAA + ADEAAAA4AAAAPwAAAEMAAABIAAAASwAAAEwAAABOAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAA + AFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAA + AFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAA + AFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAA + AFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAA + AFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAA + AFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAATwAA + AE0AAABJAAAARQAAAD4AAAA4AAAAMwAAAC0AAAAoAAAAIwAAAB0AAAAYAAAAEwAAAA4AAAAKAAAABAAA + AAUAAAAHAAAACQAAAAwAAAAPAAAAFAAAABgAAAAdAAAAIgAAACYAAAArAAAALgAAADEAAAAzAAAANQAA + ADYAAAA3AAAAOAAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAA + ADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAA + ADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAA + ADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAA + ADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAA + ADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAA + ADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANgAAADMAAAAyAAAALgAAACoAAAAnAAAAIwAA + AB8AAAAbAAAAFgAAABEAAAAOAAAACwAAAAgAAAACAAAAAwAAAAUAAAAHAAAACQAAAAsAAAAPAAAAEwAA + ABUAAAAYAAAAHAAAAB8AAAAhAAAAJAAAACYAAAAnAAAAKAAAACkAAAAqAAAAKQAAACkAAAApAAAAKQAA + ACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAA + ACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAA + ACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAA + ACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAA + ACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAA + ACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAA + ACkAAAAoAAAAJgAAACUAAAAjAAAAIAAAAB4AAAAaAAAAFwAAABQAAAARAAAADQAAAAoAAAAJAAAABgAA + AAEAAAACAAAAAwAAAAQAAAAHAAAACAAAAAsAAAAOAAAAEAAAABEAAAAVAAAAFwAAABkAAAAcAAAAHQAA + AB0AAAAfAAAAHwAAACAAAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAA + AB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAA + AB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAA + AB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAA + AB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAA + AB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAA + AB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAdAAAAHQAAABsAAAAYAAAAFgAA + ABMAAAARAAAADwAAAA0AAAAJAAAABwAAAAcAAAADAAAAAQAAAAEAAAACAAAAAwAAAAQAAAAFAAAABwAA + AAkAAAALAAAADAAAAA4AAAAQAAAAEgAAABQAAAAVAAAAFQAAABcAAAAXAAAAGAAAABcAAAAXAAAAFwAA + ABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAA + ABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAA + ABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAA + ABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAA + ABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAA + ABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAA + ABcAAAAXAAAAFwAAABUAAAAVAAAAEwAAABEAAAAPAAAADgAAAAwAAAAKAAAACAAAAAYAAAAFAAAABAAA + AAIAAAABAAAAAQAAAAEAAAACAAAAAwAAAAMAAAAFAAAABgAAAAcAAAAIAAAACgAAAAsAAAAMAAAADQAA + AA8AAAAPAAAADwAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAA + ABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAA + ABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAA + ABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAA + ABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAA + ABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAA + ABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAPAAAADwAAAA4AAAANAAAACwAA + AAsAAAAJAAAACAAAAAYAAAAFAAAABAAAAAMAAAADAAAAAQAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAA + AAIAAAADAAAABAAAAAQAAAAFAAAABwAAAAcAAAAIAAAACQAAAAkAAAAJAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAkAAAAJAAAACQAAAAcAAAAHAAAABgAAAAUAAAAEAAAABAAAAAIAAAACAAAAAgAA + AAEAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAIAAAADAAAAAwAAAAQAAAAFAAAABQAA + AAYAAAAHAAAABwAAAAcAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAA + AAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAA + AAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAA + AAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAA + AAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAA + AAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAA + AAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAAcAAAAHAAAABQAA + AAUAAAAFAAAABAAAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEA + IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA4AAAAXAAAAIAAAACcAAAArAAAALAAA + ACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAA + ACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAA + ACwAAAAsAAAALAAAACwAAAArAAAAJwAAAB8AAAAXAAAADQAAAAYAAAAGAAAADgAAAB0AAAAtAAAAPQAA + AEgAAABOAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAA + AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAA + AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABOAAAASAAAAD0AAAAtAAAAHAAAAA0AAAALAAAAGQAA + ADAAAABHAAAAWwAAAGkAAABwAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAA + AHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABxAAAAcQAAAHEAAABwAAAAaQAAAF0AAABIAAAALwAA + ABgAAAARAAAAJAAAAEEAAABsCgoLpBgYGLIWFxe0FxcXtBcXF7QXFxe0FxcXtRcXGLQXFxi0FxgYtBcY + GLQXGBi0GBgYtBcYGLQXFxi0FxcXtBcXF7QXFxe0FxcXtBcXF7QXFxe1FxcXtRcXF7UXFxe0FxcXtBcX + F7QXFxe0FhcXtBYWF7QWFhe0FhYWtBYWF7QXFxe0FxcXtBcXF7QXFxe0FxcXtBcXF7QYGBi1AQECpgAA + AHkAAABfAAAAQQAAACQAAAAXAAAALAAAAF05OTe7joiApZOMgpSRiICTjIR6kod/dZCEe3KPgHlvjn54 + bY18dWuMeXJni3lyZ4t5cWeLeG5mi3lvZot7cmiKgHdsi4N7coyIf3aMjIJ4jIyFeo2NhnuOjYd8j4+H + fo+Qh3+PkYh/j5KJf4+SiYCPk4uAkJOMgpCTjIKQlIyCkJOLgZCPiH6OjIR6jYuCeIyMg3mNj4d9jpGJ + gI+SioCOfnlzshcXF7UAAABxAAAAUAAAAC4AAAAbAAAAMAkJCYmSjIasnpWJcLKmnYW/s6yQvbKrkbqv + p4+3rKWNtaujjLOqoYuxp5+KsKWdia6knYmuo52JrqKdiq+knYmypp+JtKqjibitp4q7saqKvLKri7yz + q4u7s6yMvLOtjLyzrYy9s66NvbSujb21ro29ta6OvLaujru2ro68tq6Ovbevjry1ro66s6yMuLKri7ex + rIu5s6+Mu7SyjbStqYaelY10n5WIbGdlYb0AAACJAAAAVgAAADMAAAAcAAAAMhESEpKpoZqlsriymXPd + 4+tx4Ofyc+Dn83Xg5/N24ObzeeHl83zi5fJ/4uTyguPk8oXj4vKH4+LyieTg8ozl3/KP5d/yk+bf8pfo + 4PKc6eLyoOrj8qTs4vKo7uLzrfDi8rLz4fK29uHzvPjh88T64fPO++Tz3vvq8+z78/P5+/nz//v98//7 + /vP/+/3y//v38vz77fL3++Lz9vvR8/P5vu7V1rm7qaKbdX98d7UAAACRAAAAWQAAADYAAAAdAAAAMxAQ + EJGwqKKsws7JsEjd5P882d//Pdna/z7Z1/8/2dX/QdnT/0ba0v9K29D/S9vO/07by/9Q3Mn/U9zH/1be + xf9a4cP/XeTC/2Lowv9o78T/cPXH/336zv+M/db/nf/g/7L/6v/F//H/2v/5/+///f/3//z/+f/8//r/ + +v/y/+v/4f/e/7/92v+3/dn/wv7O/8r/sf/V/Zv/2vyO/9f9jP/Q5r7WvbOxgn57d7gAAACRAAAAWgAA + ADcAAAAdAAAAMw8PD5G0q6avxtLPtjzT2f8v0NP/MtDR/zPPz/800Mv/N9DJ/zrQyP880cX/PdLD/0DV + wf9F2cL/St7E/1LlyP9b7M3/ZvLT/3H42P97/d3/gv/g/4v/5P+Z/+j/qf/r/7n/7P/E/+f/x//b/7// + zP+0/L//pfm1/5n3r/+M9qv/ePWs/3P3uP+C+sP/hf3J/5D9y/+q+7n/uO2R/7XXZ//P2a3Zxb27iIB9 + ebkAAACRAAAAWgAAADcAAAAdAAAAMw8PD5G1rqiwx9PQtzjS1f8sz9D/MdDP/zLRzv811M7/OdfP/z/b + 0f9E4dX/TOjY/1Pu3P9a9OD/YPni/2X74f9q/N//bv7d/3T/2/96/9r/gf/X/4r+1P+Q/Mv/kfi//43z + sP+F7p//gOmT/4Hmjf+G5Yr/j+WI/5bmh/+a5ob/nOKG/57ahv+k14n/qdyM/6zmkP+k7pT/n/CW/6Hi + hf/K27fayL+9i4J/e7oAAACRAAAAWgAAADYAAAAdAAAAMw8PD5G3r6qxydXRuT7Y1/8z2dX/Ot3Y/0Di + 3P9F6N//SOrg/0nq2/9M6tb/TujQ/0/myf9R58P/VerB/1zwwv9k9cL/a/fA/2/yuf9w6q//buKh/2vb + lf9r2Y3/dNmM/33bi/+C24f/h9uC/4jafv+K1Hr/ic10/4fFbf+Ivmj/jLhg/5K3Vf+Ttkv/lLVO/5m2 + Vf+kvl3/rsti/7HXbf/S4LzbysLAjYOAfLsAAACQAAAAWgAAADYAAAAdAAAAMw8PD5G4sKyzytfTukbh + 3P853tb/PNvR/z/azf8/2Mj/QNTC/z/Quf9D0bb/Ste4/1Leuv9a5L3/X+S5/1/esP9f1qL/X8+X/2HM + kP9lz4z/bNOJ/3HWiP9314T/ftWD/4PRf/9+yHP/eb5o/3m4Y/97s1//f7Bc/4WwVv+MtVH/j7xS/5DA + W/+TxGT/nMVl/6HDYP+kwFj/qLtS/6mzQP/Qz6LczcfHkISBfrwAAACQAAAAWgAAADYAAAAdAAAAMw8P + D5G5sq60y9bSuz/Kwf8yxLf/NsO0/zvHtv9Bzbv/RtXA/0vZv/9O2rv/Udaz/1PQqf9VyqH/WMia/13L + lf9j0JL/adOQ/27VjP9w04b/cM5+/3DHdf9wwm//e8Nx/4bGcf+CwWX/gb9e/4i/Xv+Mw1z/kMdc/5DM + Yf+Mz27/i8tz/47BbP+PuWD/kbJU/5KoSf+WokH/mJw6/5aRKv/Iw5vc0MzKkYWCf70AAACQAAAAWgAA + ADYAAAAdAAAAMg8PD5G6s6+2zNbRvELFuP84xrb/QM27/0XSvf9J1L3/StK3/0vMrP9MyKT/Ucug/1rR + of9j2KH/a9ye/3Dcl/9x2o//c9eI/3fVgf961Xz/ftV2/4DUcP+F02r/ldRu/5nTbv+JyWX/gcZi/4PH + XP+FwlT/grdU/32pVf98nUn/fJM8/3uLNP98hi//gIMr/4SBKP+IgCf/i4Em/4x8Gv/GvZbd08/Nk4eE + gb0AAACQAAAAWgAAADYAAAAdAAAAMg8PD5G8tbC2ztnTvUrQvv8+yrT/Qsqv/0fMrf9P07H/WN22/1/l + t/9j6rT/au2v/3Lsqf956qP/gead/4LilP+A3Ir/f9N+/33Mc/97xGn/d7th/3KyXf9vr2H/d7Zx/3O4 + cP9pr1n/cadC/3icNP90ji//coYq/3SDJv92giT/d38j/3h8If96eiD/fHgg/4B4IP+DeSD/h3oi/4h2 + F//Eu5be1tHQlYeEgb4AAACQAAAAWgAAADYAAAAdAAAAMg8PD5G8tbG4z9nTvlbXvf9S2rv/WuK//2Hp + wv9o7ML/be2//2zps/9p4KX/adWX/2nMjP9txIH/cLx3/22zbf9nqWP/ZKJd/2GdW/9dmlv/XJlc/1yc + W/9lpVn/drBT/3imO/9xjyf/b4Qk/2yAJf9sfiT/cH4j/3aAIv96fx//ense/3l4Hv95dx3/e3Ue/351 + Hv+Adh//hHcf/4VyFf/Dupbe19PSl4eFgr8AAACQAAAAWgAAADYAAAAdAAAAMg8PD5G9trO40dvVv2Te + v/9Y17P/Vs+o/1PHnP9Tv5T/U7mO/1KzhP9Qqnb/UKFr/1OeZv9anmP/YKFk/2CfYv9cmV3/XJhc/1yY + V/9emFD/ZJpH/2eYOv9wmS//fZ0p/3aPJP9qfSH/an0h/25/IP9yfh7/dX4d/3yAHf99fxz/e3oc/3l2 + HP94dBv/eXMc/3tzHP99dBz/gnQd/4JvEv/CuZXe2NTUmIiGg8AAAACQAAAAWgAAADYAAAAdAAAAMg8P + D5C9t7W50NjSwE+3lv9Bq4f/QqF9/0KddP9FnXL/SJ5w/0uebf9Lmmf/TJVi/1CUYP9ZmV//YqFe/2Wf + Wf9imVL/ZZlM/2eYQ/9olDn/Zo0s/2aFJP90jSL/f5Yj/3KHH/9peRz/bHsb/3F+Gv91gRr/eoAa/4CD + Gv9/gBn/fHsa/3l2Gv94chn/eHEa/3lxGf98cRr/gHIb/4BsEP/BuJTf2dbWmoiGg8AAAACQAAAAWgAA + ADYAAAAdAAAAMg8PD5C+ura60NbQwUmjgP8/nHP/QpVs/0GRZv9EkmX/R5Vn/0uYZv9NlmH/T5Nb/1SU + V/9fmlT/a6JT/26hTP9tm0P/b5g7/2iOL/9khCX/Zn8g/26AHf97jR7/fZAe/3GBG/9reRj/b3wX/3SB + F/95gxj/foMX/4SGGP+Dghj/fnwY/3p2GP93chj/d3AY/3hvGP96bxj/fXAZ/31qDv/BuJTg3NjXm4mH + hMEAAACQAAAAWgAAADYAAAAdAAAAMg8PDpC/ure70NbPwUmedP9Al2r/Qo9k/0OLX/9FjF3/SZBc/06T + Wv9Qk1b/U5JR/1qTTP9onEj/eKVE/3qhPf9vlDH/bIwo/2mDIf9rgBz/bX0Z/3B+GP96ixr/fI4a/3F/ + F/9ufBb/cn8V/3qEFf99gxb/gYUW/4eHFv+Fgxb/f3wV/3t1Fv94chb/d28W/3duFv94bhb/fG4X/3to + DP/AuJTg3dnYm4mHhMEAAACQAAAAWgAAADYAAAAdAAAAMg8ODpC/u7i70NbPwkuabf9ClGH/RI1a/0WH + U/9JiFH/TItP/1GOTv9XlEr/XZdG/2aZQP92ojz/gaY1/3eYLP9uiiP/c4oe/3KEGv9wfxX/bnsU/3KA + Fv99jxj/fo8Y/3KAFP9yfhT/eIMU/4CIFP9+hRP/hogU/4iIFP+FgxT/f3wT/3x2E/95cxT/eHAU/3dt + Ff93bRX/e20V/3hmCv/At5Pg3dnanYqIhcEAAACQAAAAWgAAADYAAAAdAAAAMg4ODpDAvLm80dbPwk6Y + Y/9Gk1b/R4pQ/0iCSP9Kgkb/UIhD/1uUQv9kmz7/ap87/3OhNf94nSz/fZok/3mSIP92ihv/e4wZ/3aF + Fv9xgBT/bnwS/3aFE/+DkxX/hZIV/3aDEv94gxL/f4cS/4SMEv+BhxH/iYoR/4iJEv+EgxL/gHwQ/3x3 + Ef97dBL/eXET/3duE/94bRP/eWwU/3dlCf/At5Ph3trbnYqIhcIAAACQAAAAWgAAADYAAAAdAAAAMg8O + DpDAvLm80dbNw1GUWP9Jkk3/TIhH/0yAP/9Vizz/YJc6/2WYN/9upTX/cKAv/22OJf93kSD/g5oe/3+S + HP97ixf/go0W/3qGFP90gBL/c38R/3+LE/+LmRT/ipUU/3yGEf9+iBH/hY0R/4aNEf+FiQ7/iYsP/4iI + D/+EgRD/f3wP/314D/99dhD/fHMR/3pvEv95bRL/em0S/3dmB//AuJLh3trbnouIhsIAAACQAAAAWgAA + ADYAAAAdAAAAMg8ODpDAvLq80tXNw1SSUP9LkEP/U44//16VOv9hlDT/ZZgx/26sL/9qmCf/ZYIg/3CJ + Hv9/lRz/ipsa/4WSGv+AixX/hI0T/3yGEv94gQ//eYMQ/4aSEv+SnhL/i5YR/4CKD/+Ciw7/ipEQ/4iN + D/+Jiw3/i4wN/4iGDP+EgQ7/gHsN/394Df+BeA//gHUP/35yEP99bhH/fG0R/3loBv/BuZLh39zcn4uJ + hsIAAACPAAAAWgAAADYAAAAdAAAAMg8PD5HBvLq90tXMxFWRR/9Znz3/ZaM6/2CPMP9koC7/aa4t/2WN + JP9kfR//a4Qd/3eNG/+Flhj/j5sX/4iSGv+CihL/g4wQ/32GDv96gg7/focO/42XEP+XoBD/jZUP/4WN + Df+Hjg3/j5QP/4iMDv+NjAz/jooM/4mECv+Cfwz/f3oL/4F4DP+DeA3/gnUN/4BzDv9+bw//fW4P/3xr + BP/Cu5Lh39zcn4uJhsMAAACQAAAAWgAAADYAAAAdAAAAMg8PD5HAvLu+09bMxGOjQv9hpjb/X5cx/2Wu + Lv9ipCn/XH4h/2WAHv9qghz/b4Ua/32NF/+LlhX/kpoW/4mQGP+CiA//g4sN/3+GDP98gwv/g4oM/5Sb + Dv+coQ//jZMN/4iODP+MkQz/kJYN/4uLDP+Rjgr/j4oL/4mDCf+CfQr/gHkK/4J4C/+DeAz/g3YN/4Bz + Df9/bw3/fm8N/35uA//DvZLh3tzcoIuJhsMAAACPAAAAWgAAADYAAAAdAAAAMg8PD5HCvbu91NjMxF+Z + O/9boTD/Zr4z/16YKP9YdR//X3sd/2iDG/9sghj/coUX/4COFP+NlxP/kpkW/4iOFf+CiAz/hYkM/4CF + Cv9/hQn/iI4L/5qeDf+doQ3/jZIL/4uQC/+RlQv/kpQL/46MCf+Ujwn/j4kJ/4mDCP+DfQn/gXkI/4N5 + CP+DeAr/gnYL/39yDP9+bwv/gHEM/4BxAv/EvpHh39vcoIuIhcQAAACPAAAAWgAAADYAAAAdAAAAMg8P + D5DCvby+09TLxGCiOf9hwTH/W5cp/1l3H/9beBv/YXwZ/2uDF/9tgRX/dYUT/4OOEv+Plg//kpcT/4eM + Ev+DiAr/hYkJ/4KFCP+Bhgj/jpII/56hC/+doAv/jZEJ/46RCv+WmAr/k5EJ/5KOCP+Ujwj/j4kI/4mC + B/+DfQb/gXoG/4N5B/+Cdwn/gXQK/35xCv99bwn/gHIL/4FzAP/Ev5Hi3drboYqIhcQAAACPAAAAWgAA + ADYAAAAdAAAAMg8PD5DBvLy/1dzMxWG4N/9WkSX/WoUi/1t8HP9cdxn/YnsW/2uBFP9vgBH/d4UQ/4WN + EP+OlQv/kZUQ/4aKEP+Dhgf/hYgH/4KEB/+Ehgf/lJUH/6GiCv+cnQn/kZEH/5OSCP+ZmAn/ko8I/5WQ + B/+Vjwf/j4gH/4mCBv+EfQX/gnoF/4J4Bv+Cdgf/fnQI/3twCP97cAj/gXQK/4F1AP/Ev5Hi3djbooqI + hcQAAACPAAAAWgAAADYAAAAdAAAAMg8PD5DBvr2/1NbLxlmELP9Wih//XIkg/1x7Gf9cdhb/Y3kU/2x/ + Ef9ufw7/eYQN/4SNDP+Nkwj/kZQQ/4WJDf+EhQX/hoYF/4KEBv+GhwX/mJgG/6OkBv+bmgf/k5EH/5aV + Bv+Zlwf/ko8F/5eRBv+VjgX/jocG/4iBBf+EfAT/g3sE/4J4Bf9/dQb/fHIG/3pvBv97cQb/gnYJ/4J3 + AP/Ev5Di3NnbooqIhcQAAACPAAAAWgAAADYAAAAdAAAAMg8PDpDDvr2/1NXLxleCKf9Xixz/XIoe/1t6 + GP9ddBX/Y3cS/2t8D/9vfQ3/eYIM/4SLC/+MkQj/kJIS/4SGDP+DhAP/hYUF/4KDBf+KiQX/m5oG/6Ok + Bf+YlgX/k5AG/5iWBv+Wkwb/lI8F/5iRBv+Tiwb/jYQG/4d/BP+EfAP/g3sE/4B4Bf99dAT/enAF/3du + Bv96cQb/gHYI/4J3AP/EwI/j3Nnbo4qIhcUAAACPAAAAWgAAADYAAAAdAAAAMg8PDpDDv77A1dXMxliA + KP9Wihv/XYob/1x6Fv9dchP/YnUQ/2t7Dv9tfAz/eIEL/4SKCv+Kjwf/jpET/4KECf+BggP/g4MF/4KC + Bv+NiwX/nZwF/6KiBv+VkwX/k5AG/5iVBv+Tjwb/lY4G/5ePBv+QiQb/i4IG/4V9BP+DfAP/g3oF/391 + Bf96cQT/dW4E/3RuBf94cQb/f3cI/4F5AP/EwY7j29nbpIqIhcUAAACPAAAAWgAAADYAAAAdAAAAMg8O + DpHEwL7A1dbMxll+Jv9XiRj/XooZ/1t6Ff9bcBL/YnMP/2l5DP9segv/d4AJ/4OJCP+KjQf/jpAV/4CC + CP+AgQP/gYIE/4GBBf+PjQX/n50G/6GeBf+Ujwb/lZAG/5iTBf+SiwX/lo4F/5WMBv+PhgX/iIAF/4R7 + A/+DewT/gngF/350BP93cAT/cm0E/3JtBP93cgX/fHcH/4B5AP/Bvo3j29jbpImIhcYAAACPAAAAWgAA + ADYAAAAdAAAAMg4ODpDEwL/A1tbMxll8I/9YhhX/XooY/1x5FP9cbxD/YXEN/2h3DP9teAr/dn8I/4GH + CP+Jiwf/jY4V/36AB/9/gAT/f4AD/4KBBP+Sjwb/oJ4G/56ZBv+SjAf/lY8G/5WQBf+RiQb/l4wG/5OJ + Bf+NgwX/h34E/4N6A/+DeQT/gHYE/3xyBP91bgT/cGsD/3FtBP91cQX/e3gG/3t3AP+9uo3j3NrbpYmI + hcYAAACPAAAAWgAAADYAAAAdAAAAMg4ODpDFwb/A1tfNx1d6If9XhBP/XokW/115Ev9bbg3/X3AM/2d0 + C/9sdgn/dX0H/4GGB/+IiQf/jI0W/3x+Bf9+fgP/fn4D/4OABP+UkQX/oZ4G/5qUBv+RiQf/lY4F/5KL + Bf+Qhwf/looG/5CFBf+LgQX/hnwE/4J4Bf+BdgX/fnME/3pwBP9zbAT/b2oD/3FtA/90cQT/e3oF/3Nw + AP+6uI3j3drbpYqIhcYAAACPAAAAWgAAADYAAAAdAAAAMg8ODpDHw8HB1tfNx1Z4H/9XghL/XogT/1x5 + EP9abA3/Xm4L/2VyCf9qdQf/dXwH/4GEBv+Ghwb/i4sY/3p7Bf98fQT/fHwD/4SBBP+VkwX/oZ0G/5WP + Bv+QiAX/k40F/4+HBf+Rhgb/k4cF/4yCBf+KgAT/hHkE/4F3Bf+AdQT/fHIE/3ZuBP9wawT/b2oD/3Bs + A/9zcQP/eXgF/21pAP+5tY3j3drbpYqIhsYAAACPAAAAWgAAADYAAAAdAAAAMg4ODpDHw8LB2NjOx1Z1 + H/9Vfw//XYYR/1x3Dv9Zag3/XmwK/2NxCP9qcwb/dHsG/3+DBf+EhQb/iYkZ/3h4A/96ewT/enoE/4WC + BP+XlAT/npsF/4+KBf+Phgb/kIkF/4yDBf+RhQb/kIMF/4p/BP+IfwP/gXcF/4B1BP9+cwT/enAE/3Ns + BP9wagP/b2oD/29sA/90cgP/dHMF/2diAP+2s4zj3drcpoqIhsYAAACPAAAAWgAAADYAAAAdAAAAMg4O + DpDHxMPB2NjOx1VyHf9Teg3/XIQQ/1x2Df9ZaQv/XWsI/2JwB/9pcQb/c3kG/36BBP+ChAf/hocZ/3V2 + Av94eAX/eXgE/4aDA/+ZlAX/m5cF/4yFBf+NhgX/jYUE/4mABP+PgwT/i4AE/4l+BP+FewT/f3QE/390 + BP98cgT/d24E/3JrA/9vagP/b2sD/29sA/9zcwP/bm0D/2FdAP+0sozj3drcpoqIhsYAAACPAAAAWgAA + ADYAAAAdAAAAMg4ODpDJxcTB2dnPx1RvG/9Sdgz/W4EO/1x1C/9ZaQn/W2kH/2BuBf9ocQX/cncG/3t+ + A/+Aggj/hIUY/3JzAv92dgX/eHcE/4iEBP+YlAX/lpIE/4iCBf+KgwX/iIAD/4h/BP+NgQT/h30E/4d+ + BP+BeAT/f3ME/31yBP96cAT/dG0E/3BqA/9uagP/bmsD/3BtA/9xcQP/aWcC/1xYAP+zsIvj3trcpoqI + hsYAAACPAAAAWgAAADYAAAAdAAAAMg4ODpDKx8XB2drQyFNtGf9Rcgv/W34N/1t0Cv9YaAj/WmcH/19s + Bv9mbwX/cXYE/3l8Av9/gQr/goIW/3BxAv91dAT/d3YE/4mFBP+YlAX/kYwF/4Z/Bf+GfwT/g3sE/4h+ + BP+JfgT/hXsD/4Z8BP99dAT/fXIE/3txBP93bgT/cWsD/25pAv9tagL/bWoC/3FvA/9tbAP/ZGID/1dU + AP+xrovk39vcqIqIhscAAACPAAAAWgAAADYAAAAbAAAAMQ4ODo/Kx8XB2NjOxlFpFv9NbQb/V3oJ/1hx + Bv9UZQT/V2QE/1xoA/9kbAH/bnMA/3Z5AP99fwr/fX4S/2xtAP9xcAH/dnUB/4iFAv+VkQL/i4QB/4F7 + Av9/eAH/f3cC/4R7Af+EegH/g3gB/4J4Af94bwH/eW8C/3duAf9yawL/bWgA/2tnAP9rZwD/a2kA/25t + AP9mZQD/YF0A/1JOAP+uq4nj3tvcp4qIhscAAACNAAAAWAAAADUAAAAYAAAALBAPD4zKxsS/0tHHvVZt + Hf5TcA//XHsQ/111Dv9aag3/XWkO/2NtDP9qcQr/c3gL/3p8Cv+Bgxf/foEa/3BxCP91dAv/e3sM/42L + Df+XlA3/ioQN/4R+Df9/eQz/g3wM/4iAC/+GfAz/iH8M/4J5DP99dAz/fXQM/3lzDP91bwv/cm0K/3Ft + Cf9xbQr/cnEK/3FwCv9paAv/ZGIK/1ZSB/+ppofa2NXVoYyKiMYAAACJAAAAUgAAADAAAAAUAAAAJAsL + C4K/vLi/1dHLo8zNwMHS1MbM1NbHztXWx87U1cfO1dXHztXVx8/W1sfO2NfHztjXx87Z18jO19bHzNXU + xcvV08PK1dTDydfVw8nY1sPJ1tTDyNbTw8jV08PJ1tPDydfUw8nW08PK19TEytbUxMrW08PK1tPEy9bT + xMvW1MXL1tPFy9XSw8vU0cPM09HCzNLRwszRz8LM0c7CzMnHu8XGwruwzcjEmYSCgMYAAAB7AAAARgAA + ACgAAAAOAAAAGgAAAFNpaGbH2NTOsuDc2avi3duv4t3br+Pe26/j3tuv49/br+Lf27Dh39uv4d7br+Hd + 26/g29qu3trYrNzY1qnb1tOo2dXSp9jU0afY09Gn2NXRptnU0aba1NGl2dXRptnU0qfZ1NOo2tbUqNvW + 1Kjb1tSp3NbVqd3Y1qnd2dap3dfWqtrW1KrY1NOs19TSrNfT0qzX09Ks19PSrdbRz6vQy8envrq2vTEx + MLgAAABXAAAANQAAAB4AAAAJAAAAEgAAACcAAABnMzMyq09OTbRMS0qzS0tKtExLSrRMS0q0TEtKtExL + SrRLS0q0S0tKtEtLSrRLS0qzS0pJs0pJSbNLSkizSkpJs0pKSLNKSkizSkpIs0tJSLNLSkmyS0pJsktK + SbNLSkmzS0pJs0tKSbNMSkmzTEpJs0xKSbNMSkmzTEpJs0tKSbNLSkmzS0pJs0tKSbNLSkmzS0lJs0tK + SbRNTEu2Hh0dowAAAF4AAAA4AAAAJQAAABMAAAAFAAAACwAAABYAAAAhAAAALQAAADcAAAA6AAAAOgAA + ADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAA + ADsAAAA7AAAAOgAAADsAAAA6AAAAMwAAACsAAAAhAAAAFQAAAAsAAAACAAAABAAAAAkAAAAOAAAAEwAA + ABcAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAA + ABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAA + ABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAYAAAAFwAAABMAAAAOAAAACAAAAAQAAAAAAAAAAQAA + AAIAAAAEAAAABwAAAAkAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA + AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACQAAAAcAAAAEAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAAAAA4AAAAfAAAALQAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAA + ADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAA + ADIAAAApAAAAGQAAAAoAAAAMAAAAJAAAAEQAAABhAAAAawAAAGsAAABrAAAAawAAAGwAAABsAAAAbAAA + AGwAAABsAAAAbAAAAGwAAABsAAAAawAAAGsAAABrAAAAawAAAGsAAABrAAAAawAAAGsAAABrAAAAbAAA + AGwAAABsAAAAaAAAAFcAAAA7AAAAGgAAABcAAAA+ExMSkD07OKo7ODWpODUyqDczMKg1Mi+nNDEupzMw + LaczMC2nMzAtpzQxLqY2MzCnODUypzk2M6c5NzOoOjc0qDs3Nag7ODWoOzg1qDs4Nag7ODWoOzg1qDk3 + NKc4NTKnOTYypzs5Nqg5NzSuCQkJlwAAAFsAAAAuAAAAHAYGBmmCfHamr6adhbevp5GyqqKQraWdjami + mYumn5aKpJyUiaSalImkm5OJqJ+Xia6lnoq0qqOKta2li7WtpYy1rqaNtq6njbawpo22saeOt7Opj7mz + q4+8squPua+ojLWsp4u4rquNt62oiaiek3llYVysAAAAfAAAADoAAAAeEA8PdbClnqGF19nWY+Hn9mng + 5PZs3+L1cOHh9XXi3/V44t31e+La9X/j2PWE5Nf1iefX9ZDr2fWY8Nv1o/Tf9bL35PXB+un11Pzu9eX9 + 8vX2/fn1/v759fX99vXu/PL18P3e9fD9x/bu/bfzy860qIiBfp0AAACHAAAAPQAAAB4ODg1zvbGsrmza + 3uwp09b/MtLR/zTSzf8508r/PdTH/0HXxf9H3MX/UOPI/1rry/9m89D/c/vV/4P/3f+Z/+X/s//s/8f/ + 6v/P/9//yf7R/7z8yP+p/Lz/jfq+/5D9yf+f/8T/ufyk/8Dre//P17a/j4iIowAAAIYAAAA+AAAAHg4O + DXPAtK+xadjZ6yfR0f811tP/O9vV/0Hg1v9H5tf/T+vX/1fx1v9f99f/af3X/3L/1f96+8//f/XF/4Xx + uP+J7ar/humY/4Tmi/+I4oT/jN5//4/YfP+U0Hj/nc12/6HVfv+j4ob/p+SD/8/YvcGTjIumAAAAhgAA + AD4AAAAeDg4Nc8G2srNx4dzrMtzV/z/c0v9C3dD/RNvI/0jcwf9P377/V+O7/1zjtP9h3qn/Zdmd/2nW + kv9s1In/ctOC/37SgP9+y3X/fsJr/4G7Zf+Ft13/i7hY/5G9WP+Vv1r/nL5a/6W8Vf+uv1H/09S0w5SQ + kKgAAACFAAAAPgAAAB4ODg5zw7m1tW/RyewuxLb/PMq4/0PQvP9I0rj/TNCv/1PPqP9az6H/YdCZ/2fS + j/9u1In/c9OB/3bPd/99y3D/jcxw/4XEZP+Ewl//i8Vb/4vDX/+IvmP/h7Rd/4qpUP+PoEL/kpg4/5aQ + K//OyKrFmJWVqwAAAIUAAAA+AAAAHg4ODXPEura2ddTG7DjKs/9H0LX/Udi4/1netf9f4a7/aeWo/3bl + of994Zb/fNmH/3vPeP96x23/d79l/3q+af+Bwm//dbZY/3mrQ/94mzn/dY40/3eFLP94fiT/enoh/395 + IP+EeSD/inod/83FqcabmJisAAAAhQAAAD4AAAAeDg4Nc8W7uLiE4MztUNy6/1zfuP9j37X/Zdyq/2LP + lf9jwoP/arl4/2uxbf9kpWP/YJ1c/16aWP9fmlL/bKNM/3aiO/9tiCb/bH8j/258If91fh//en0e/3l4 + Hf95dRz/fHQd/4B2Hv+GdRr/zcWqx5yamq0AAACFAAAAPgAAAB4ODg5zxr27uYDOtu1DtY//R6mB/0ik + ef9LonP/S5pn/06UYP9aml//Yp5c/2CYVP9jmEv/ZJQ8/2aMK/93kyP/d40g/2l6Hf9ufRz/dX8b/36B + G/9/fxr/eXca/3hyGv96cRr/fXIb/4JxF//MxKrJnZubrwAAAIUAAAA+AAAAHg4ODnPHwL66draa7jiU + av9Bj2T/RJFj/0qWY/9Nk13/U5JV/2SdUf9xo0r/bpk8/2qNLf9mgSH/bH4b/3yNHf90hRv/bHoX/3SB + Fv97gxf/g4YX/4OBF/97dxf/d3EX/3hvF/96bhj/f20U/83FqsmfnJ2wAAAAhQAAAD4AAAAeDg4Oc8jB + wLx4sZHuO5Bd/0SJWP9IiVP/T45R/1aUTP9hl0X/dqM9/3ueMv9wjCT/cIUc/259Fv9wfhb/fY4Y/3WE + Fv9xfhT/fIUU/4CGFP+HiBX/hIEU/3x4E/94cRX/d24V/3htFf98axH/zMWqyqCenrEAAACFAAAAPgAA + AB4ODg5zyMLBvHuvhu5AjU3/SIJH/06GQv9bkj//aKA8/3CeMv96mif/e5Qf/3mLGf96hxb/cH4S/3aD + E/+GlRX/fIkT/3uEEv+DixH/hYkQ/4mKEf+DgRH/fXgQ/3t0Ev95bxP/eGwT/3pqDv/MxarLoZ6fsgAA + AIUAAAA+AAAAHg4ODnPJw8K9fat87kaMP/9XjTz/YJQ1/2qjMv9qmCn/bYkg/4CWHP+FlRr/gYwV/36I + Ev92gBD/gYwR/5CcE/+DjRD/hIwP/4iPEP+Jiw3/iYkO/4N/Dv9+eA7/gHcP/35yEP97bRH/e2sM/83G + qsyhn6CzAAAAhQAAAD4AAAAeDg4Oc8jCw76Dr3PuV5w0/2OcMv9lpCz/ZZAk/2d/Hf91ihr/ipkY/4yV + Gf+DixH/f4gO/3uDDf+LlA//lp4Q/4ePDf+LkQ7/i48O/46MC/+Khgv/gX0L/4F4DP+Ddw3/gXQO/35u + Dv9/bgr/z8mqzKGfoLMAAACFAAAAPgAAAB4ODg5zyMPEvomzbe5apyv/YqYs/1uAIP9kfRv/bYMZ/3yM + Fv+PmBT/jJIW/4OJDf+Bhgr/gIYK/5WaDf+ZnQ3/ipAL/5GVDP+Pjwr/ko0K/4uFCf+CfAj/gnkJ/4N3 + C/+Acwz/fm8L/4FyCP/QyqrNoZ+gswAAAIUAAAA+AAAAHg4ODnPJwsW+ib9r7leoJf9afyD/XHca/2iB + F/9wghT/gIwR/5CXD/+KjxH/hIcJ/4OGCP+FiQj/nJ4K/5mbCv+PkQn/lpYK/5OPCP+Tjgj/ioQH/4N8 + Bv+CeQf/gnYI/31yCf98cAn/g3YG/9DKqc2gnZ+1AAAAhQAAAD4AAAAeDg4Oc8nExr+Fr2TvUYYZ/1t+ + HP9ddxb/aX4S/3GBD/+Ciw3/kJUL/4mMD/+EhgX/g4UG/4qLBv+goQf/mZgH/5WTB/+WlAf/lZAG/5SN + Bv+Kggb/hHwE/4J5Bf9/dQb/enAH/3xxB/+EeAX/z8qozp+dn7UAAACEAAAAPgAAAB4ODg5zy8XHv4Ke + X+9ShhT/XH8Z/15zE/9oeg//cX4N/4GJCv+Okgv/iIoO/4ODA/+CgwX/j44F/6GhBv+XlAX/lpQG/5WR + Bf+XkAb/kYkG/4iABf+EfAP/gXgF/3tyBP92bgX/e3IG/4N6A//Py6fOn52ftQAAAIQAAAA+AAAAHg4O + DnPLxsjAg55d71OFEf9dfxb/XXER/2d3Df9vfAr/gIcI/4yQDP+Ghw3/gIEC/4GBBf+TkQX/oZ8G/5WQ + Bv+XkgX/lI4F/5aOBv+OhQX/hX0E/4N7BP9/dQX/dm8E/3JtBP93cwX/gXsB/87Kp8+fnZ+2AAAAhAAA + AD4AAAAeDg4Oc8zHycCDnFzvU4MN/11+FP9dbw//ZnQM/295Cf9+hQf/i40N/4OEDP9+fgL/gYAE/5eU + Bv+fmwb/k40G/5WPBf+Tigb/lIkG/4uCBf+EewT/gngE/31yBP9zbAP/cGwD/3ZzBP98eAD/ysemz5+d + n7cAAACEAAAAPgAAAB4ODg5zzcnKwYKaWe9TgQr/XX4R/1tsDP9jcgr/bXcH/32CBv+Jiw3/gIEM/3t7 + A/+CgAT/mpYF/5uVBv+Rigb/kYoF/5KHBv+QhAX/iX8E/4J3Bf9/dQT/eXAE/3BrBP9wbAP/dnQD/3Rx + AP/HxKbPoJ6gtwAAAIQAAAA+AAAAHg4ODnPPyszBgpdZ71B8B/9cfA//WmoL/2FvCP9sdQb/fIAE/4eI + Dv99fgz/eHgD/4KABP+blwX/lI8F/46GBf+NhAX/kIQF/4yABP+FewT/f3UE/31yBP91bQT/b2oD/29s + A/90cwP/a2gA/8XBptCgnqC3AAAAhAAAAD4AAAAeDg4Oc9HMzsGBlFbvTnYE/1x5Df9aaQn/X2wG/2py + Bv95fQP/hIUO/3l6C/91dQP/g4AE/5qWBf+OiAX/ioIE/4mABP+LgAT/iH0E/4F3BP9+cgT/eW8E/3Fr + A/9uagP/cG0D/29vAv9jXwD/w8Cm0KGeoLgAAACEAAAAPgAAAB4ODg5z0s7Pwn6RU/FKbgD/WXUH/1Vl + Bf9baAP/Z28B/3V4AP9/gQz/c3QF/3FwAP+DgAH/lZEB/4aAAf+CegH/hHsA/4Z7AP+DeQD/e3EA/3lv + Af9zawH/bGcA/2toAP9ubAD/aGYA/1pXAP/BvqXRop+guAAAAIQAAAA9AAAAGhAPD3HRzM69g5JZ7FNy + DP9hexT/Xm0S/2RvEf9vdg//e38O/4WHHf93ehP/eHgP/4yKEf+XkxH/iIIR/4R9EP+KgRD/ioAR/4d/ + EP+AdxD/fXYQ/3dyD/90cA7/dHEO/3V0D/9sag//X1wM/725o8qjoKG3AAAAgAAAADgAAAARCAgIX7e0 + sL3e3dK13NzOxd7ez8bd3M/G3t3Pxt/ez8bh3s/G4N3Pxd3azMLc2crB3drJv93ayb/c2Mm/3NjIv93Z + yb/d2crB3drKwd3YysHd2cvB3drMwtzYysLa1snD2dbIw9jVycTT0MTA19LMqoqHhbsAAABpAAAAKwAA + AAsAAAAqLy4tj3t5d698eXmte3h4rXt5eK17eXitenl4rXp4eK15d3eseHV2q3d1dap2dHSpdXN0qXZ0 + dKl3dHSodnR1qXd1dap3dXWqeHV2qnh2dqp5dnaqeHV1q3Z0dat2dHSsdnR0rHh2dqxubGqwGhkZiAAA + ADgAAAAaAAAABQAAAA4AAAAdAAAAMAAAADUAAAA1AAAANQAAADUAAAA1AAAANQAAADUAAAA1AAAANQAA + ADUAAAA1AAAANQAAADYAAAA1AAAANQAAADUAAAA1AAAANQAAADUAAAA1AAAANQAAADUAAAA1AAAANQAA + ADQAAAAlAAAAGAAAAAsAAAABAAAAAwAAAAYAAAAKAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAA + AAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAA + AAwAAAAMAAAADAAAAAoAAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAcAAAAaAAAAMQAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAA + ADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADgAAAAnAAAADwAAABUAAABKDAsKhg8N + DI8ODAuODQsKjg0LCo4MCwqODAsKjg0LCo4NCwuODQwLjg4MC44ODAyODgwMjg0MDI4NDAyODQwMjg0M + C44MDAuODg0NjwkJCY4AAABhAAAAKgAAACYyMC6KmpSMnKGclZ2alY6blZGKmZKOhpeQi4SXkYqEl5WO + iJeclZCYoJmTmJ+ak5mgm5SaoJ2UmqKelZumn5mbq5+bm6ebl5mkmpeZpZyYlo+Hf5YgHx6XAAAAQgAA + AC9kWVWRm9nZy1vg5fRi3t/0Zt7c9Gze2fNw3tXzdeHT833l0/OH7NbzlPPb86f55PTB/O702v/y9Oj/ + 8/Tv//P04f/u9Nj/6/Pj/8706Puu8svNtKc9OjuaAAAASgAAAC5pXVqVid3d4CPS1P8x1ND/ONjP/z/d + z/9I5c//VO7S/2L41v9y/9j/gP/Y/5T91P+k+sr/qPa3/6TyqP+b757/jOmb/5Ppo/+j8qH/seyH/87T + ub1APD6aAAAASgAAAC1qXluWjuHd4C/a1P8/3NL/RN7O/0rgyP9U5MP/XOe9/2Tlsf9q4KT/btuU/3XY + if99037/fMpv/4LDaP+KwGH/ksBd/5m/Wv+hwFv/rMhg/9HSub5BPkCcAAAASQAAAC1rYF6XkNnR4S/H + t/9Bzrn/SdO3/1DTrv9c1qb/Z9ec/27Wjv901IH/d890/4LLcP+IyG3/gcBc/4a7VP+EtFb/g6pR/4ie + RP+NlDb/lo4t/87HrsFDQkSdAAAASQAAAC1rYF+YmuDS4kXXuf9Y3rv/YuO2/2XepP9v15T/d82F/3K+ + c/9ts2b/aqxe/3SyXv91qUv/cZQy/3GHKv92gCT/eHke/3l1HP9/dRz/iXgf/87Hr8NFREaeAAAASQAA + AC1rYmKZn9vI40a+l/9OtIn/Ua5//0+hbf9Wm2L/YZ5e/2CYVP9glEj/Y441/3aWKP9wgx7/a3oc/3V+ + G/9+gBr/enga/3hyGv97cRr/hHQc/87HsMVFRUafAAAASQAAACxtZmaalsWu5DeQZP9CjGD/SZJf/06R + WP9dmFD/cqJI/26VNv9phSP/bX4a/3qLG/9vfhj/c38W/36EF/+FhRf/fXkW/3dwF/94bhb/gHAX/8/I + scZHRkifAAAASQAAACxtZ2ibmcKl5TyLUv9Hg0z/Uo1I/2GaQ/9ynjf/fJsp/3WKHP9ygRb/cn8U/3+P + Fv91ghP/fYcT/4WJEv+HhhP/fnoS/3lxE/93bRP/fG0U/8/IssdHRkifAAAASQAAACxtZ2mbnL+b5UWK + Pv9YjDr/Zp40/2uXKv92kR//g5Ua/4GMFf94gxH/fYkR/4yYE/+BihD/h44Q/4mLDv+GhA7/f3kO/391 + EP97bhD/fW0R/9DJsslHR0mgAAAASQAAACxsZ2ucosKS5lidMP9joS3/ZI8k/2mBG/+Bkhf/jZYY/4OK + EP98hAz/ipIO/5ObD/+Ijw3/jZEN/46LC/+GgQr/gXkL/4N3Df9/cAz/gXEO/9HMsslHR0mgAAAASQAA + ACxtZ2ycpsqN5linJv9bgyD/Y3sZ/3GEFv+JkxL/jpMT/4OIC/+AhQn/lJgL/5aaC/+Pkwv/k5EJ/5GM + Cf+GgAj/gnkI/4J2Cv99cAn/g3UL/9LMsspHRkmhAAAASAAAACxtaG2do8WJ5lGJGf9beBn/ZnwT/3SD + D/+KkQz/jI8O/4SFBv+Ehgb/m5wH/5iYB/+VlAf/lZEH/5KLBv+GfwX/gnkF/390B/96bwb/hXkJ/9HM + sMtHRkmhAAAASAAAACxuaW6dobWE51GDEf9cdxX/ZngQ/3SADP+Ijgr/iowN/4GCBP+HhwX/np0F/5eU + Bv+Wkwb/lo8G/4+HBv+FfQT/gXkE/3lwBP92bwT/hHsH/9HNr8xGRkmhAAAASAAAACxuam6dorWD51KC + Df9cdhP/ZHQN/3J9Cf+Hiwn/h4gN/35/A/+KiQX/n5wG/5WQBv+VjgX/lYsG/4uCBf+DewT/f3UE/3Nt + A/9zbwP/gHsG/87Lr8xGRkmiAAAASAAAACxva2+dorSB51J/Cf9cdA//YXAL/3F6B/+FiAn/hIQN/3t7 + A/+OiwT/nJgG/5KLBv+SiQb/kYYF/4h+BP+BdwX/e3EE/3BrA/9ybwL/eHYE/8vIr81HRkmiAAAASAAA + ACxwbXGeorGB51B6BP9bcg3/X2wI/293Bv+ChQj/f4AN/3h4A/+QjAT/lpEF/42FBf+OgwX/jIEE/4R5 + BP9+cwT/dm0E/29qA/9xbwL/b2wD/8jFr81IR0miAAAASAAAACxyb3Keoa5+6UtwAP9YbQb/WmcD/2px + AP99fwT/eHkJ/3NyAP+OiwH/jogB/4R8AP+HfQD/hXsA/31yAP94bgD/b2kA/2xoAP9tawD/Yl8A/8bD + rs9IR0mjAAAASAAAACl0cXScprGE41Z1D/9idhb/ZG8U/3R6Ef+Ehhj/fn8Z/3x8Ev+WkxP/jokT/4eA + E/+NgxP/ioET/4N6E/99dhL/dnIR/3d0Ef9zchH/ZmMP/sbCsMlLSkuiAAAARAAAABhKSEeN09HJw9DR + w8rR0MPK0dDDy9PRw8rU0cPK0c7Bx8/MvsXQzb3E0My9xM/MvcTQzL3F0c2+xdDMvsbQzb/Gz8y/x83K + vcjMyb3Jyse8xsK+uLwtLSyQAAAALgAAAAgAAAAyJCMjbSwrLHErKitwKyorcCoqK3AqKStwKSkqcCko + Km8oKCpvKSgqbykoKm8pKCpvKSgqbykpKm8qKSpvKikqcCkoKnApKCpwKyoscR0cHG8AAAA6AAAAFAAA + AAIAAAAFAAAACAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAA + AAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAsAAAAKAAAABAAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAA + AEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAA + AEEAAABBAAAAQSgAAAAUAAAAKAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAJgAA + AEMAAABIAAAARwAAAEcAAABHAAAARwAAAEcAAABHAAAARwAAAEcAAABHAAAARwAAAEcAAABHAAAARwAA + AEcAAAA0AAAAFQAAACIWFRN0PzUxlDwwLJI4LSqQNiwokDUqJ481KiiPOC4rkDowLpA5MS6RODEvkTcx + L5E1Mi+RNjIvkTQwLpA0MDCQNjIylRAPDoQAAAA5AAAAPXd1cJyfzsy9k8rIxZLGwsOTxL7BlMG6wZjD + usGhyr/BqtHEwrTWycPC2c/D0dzTxN7e2MTg3tnE2NvRwtvbwcPS0bOsX1xYnAAAAFYAAAA9jI+Mqk/h + 5v8w2Nn/O9zW/0Tg1f9O6NT/XPLX/2382v+A/9//nP/j/7b/3v/B/8//vf3D/6f5vf+n+8L/vP+m/9Pv + qOh1b3CeAAAAVwAAADyNkI2tUuHd+jbZ0v9B3c//SeDJ/1XmxP9g6r3/auix/3Hhof973ZH/gNZ//3/N + b/+Gx2f/jsVj/5jEYv+gyF//xdeT5nh0daIAAABWAAAAPI6Rjq5X1cf6Pc66/0zXuv9V2a//ZNqk/27Y + lP9z04L/dsxy/4HJcP+CwmX/gbdR/4KtTv+Bo0n/hpc8/4uJJ/+4rm3nfHp7pQAAAFYAAAA8kZOQsGvg + xvpT17H/X9ep/2DMkv9rwYD/bbVw/2eoYf9lolT/c6hL/3CVM/9vgyX/dX4g/3h4HP95chv/fG8T/7Gj + aOh/fX6nAAAAVgAAADySlJCyYruZ+0Gccf9Jmmv/TJJf/1yYV/9om03/ZI86/2iGJf94jB3/bXsY/3R/ + GP+Agxn/fXoY/3dxGf93axD/rqFm6YB/gKgAAABVAAAAPJKUj7Nfpnv7QIVS/02MT/9cl0n/c6A7/3eV + Kv9wgxr/cH4V/3uLF/90gBT/f4YU/4eHFP9/exP/eHAU/3NnC/+rnmPqgoCCqQAAAFUAAAA8kpOPs2aj + Z/tPiTz/Ypo2/2yXK/98lR//gpAY/3uFEv97hxH/iJUS/4GKEf+IjA//iIcO/4B7Dv99dBD/dmgH/6uf + YeqDgYOqAAAAVQAAADyTk4+0da9X+1+gLP9kjiP/bYMa/4mVF/+JkBT/foUM/4mQDv+SmQ7/ipAN/4+O + DP+KhQr/gXkL/4N2DP96awP/rqNg6oOBg6sAAABVAAAAPJSVj7V2uE37WIcd/2J6F/91hhP/jZUR/4iM + Dv+BhQf/k5YJ/5eZCv+Tkwn/lI8I/4qDB/+Cegf/gXUJ/3lsAP+xp17rgoCDrAAAAFUAAAA8lJSPtXCd + QfxYexX/ZHkS/3eDDf+MkQz/hogJ/4SEBf+amgb/mZcG/5aTBv+Vjgb/iYEF/4J6BP97cQX/d20A/7Gq + XOuBgIOtAAAAVQAAADyVlJC1cZg8/Fl7Ef9jdA7/dX8J/4qNDP+Cgwj/hIQE/52aBv+XkgX/lY8F/5KJ + Bv+GfgT/gHYE/3RtBP9zbgD/r6pa7IGAg64AAABVAAAAPJaVkLZxlTj8WXkM/2BvC/9zfAf/h4oM/35/ + B/+GhAP/nJcG/5OMBv+TiQb/jYMF/4N5Bf98cgT/cGsD/3BtAP+no1nsgoCDrgAAAFUAAAA8l5aStm+P + NPxXdgj/XmsI/3F4Bf+EhQv/eXkH/4eFBP+XkgX/jIQF/42DBf+IfQT/f3QE/3ZuBP9vawP/a2oA/56a + WOyCgIOuAAAAVQAAADyZmJS4ZYIm/01qAP9TYAD/Z24A/3h6AP9tbQD/goAA/4qDAP9+dgD/gngA/3tx + AP90aQD/amMA/2dlAP9dWwD/kY5P8ISDha8AAABVAAAAM5eVkbGyvY7jo7B16aasd+mwsnXouLd66LCv + dOa8uXPlvLdz5beyc+W7tHPmt7F05rOudOavq3Pmrqty56akcei/u5vWe3l5rQAAAEgAAAASKikoaG5r + bpFtam6PbGptj2tpbY9pZ2yOaGZqjGZkaYtmZGmLZ2Vqi2dlaoxoZmuMaWdrjGlna41nZmqNaWdrjmVj + ZJAdHBtrAAAAHwAAAAMAAAAJAAAAFQAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAA + ABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAAA4AAAAGAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAA + AEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEoAAAAEAAAACAA + AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAEAAAABXAAAAVQAAAFUAAABVAAAAVQAA + AFUAAABVAAAAVQAAAFUAAABVAAAAVQAAAFcAAABMAAAAHwQEBD5WVFCVc3JuoWpqZp5nZ2KdZmRgnGpo + Y51wbmmdcXBrnnRybZ95dHGffnRzn3txb558dXCdTUpFmAABAVQXDg1Qj7m4w1jj5vRe3tv0ZuHY9G/n + 1vN/8tr0k/zi9LH/6vTP/+n02//i9M//3fTK/9n03/+58qenk68DAQRlGQ8OToS7uc8u29f/OtvP/0Xg + yf9U6sX/Ze69/3Lrrv+C5Z7/idyI/4rUd/+Mzm//ls5v/6/YdP+lp5O7BAIGYhkPEE+KubLQP9bB/1Db + vf9b3K3/a9mb/3HQhP9yxnD/fcRq/322VP9+p0b/gJtA/4WOMf+ZkDP/pJ+MvQUFCGMYEBJPkbqu0U7K + pP9WwJL/WbN7/2asa/9moVn/ZZdE/3OYNP9tgiH/dX0c/3p4Gf93bxf/insl/6SejcAFBgljGRMWUI6r + m9M+kWL/R4tX/1aUT/9vnUH/bo0q/22AGf93hhf/c34V/4KGFf+AfRb/dm4U/4V3If+ln47BBgYJYxkU + GFCQqJHUS41G/12UOv9tmC7/gJYe/3yIFP96hRH/hJAS/4KKEP+Jig//gX0P/3txD/+Edhz/paCPwwYG + CWMYFBlQlqyJ1F6jMP9jjSL/c4cY/4yVFf+BiA7/iI8N/5GYDf+NkQz/jYkK/4J7Cv+BdAr/iXoX/6ei + j8QGBgljGBQaUJeuhdVYjx//YngV/3uIEP+Nkg7/g4UI/5OVB/+YmQj/lZII/4+IBv+DegX/fXIF/4p+ + E/+no47FBgYJYxkWG1CVo4HVV4IV/2J1EP96hAr/iowL/4KCBP+YlgX/mJUG/5aQBf+MhAX/gngE/3Zu + A/+HgBH/pqONxgYGCWMZFhxQlqJ/1liAD/9gcAz/d38I/4aHC/+AgAT/mZUG/5SNBv+SiAb/iH0E/31z + BP9wawH/gH4P/6OhjMYGBgpjGhcdUJagftdTdwb/W2oF/3J4Av99fgj/fXsA/5OOAf+KggH/in4B/4B1 + AP91bAD/bWkA/3RyCf+gnYzIBwcKZBoYHVGhqIrWZoIc/216Hf+Bhhv/iYoh/42LGv+blhv/koob/5SK + G/+LgRv/gXsa/357F/98eiL/paKUxwcHCmMGBgcxenl0oJydkbaZmI20mpmNtZmXjLOYloiwmJaIsJiV + iLCZlomxmZWKsZiVirKWlImzmZeNtGpoZp0BAQE9AAAABQAAAB4AAAAqAAAAKQAAACkAAAApAAAAKQAA + ACkAAAApAAAAKQAAACkAAAApAAAAKQAAACsAAAAjAAAACgAArEEAAKxBAACsQQAArEEAAKxBAACsQQAA + rEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEE= + + + \ No newline at end of file diff --git a/OnTopReplica/StartupOptions/Factory.cs b/OnTopReplica/StartupOptions/Factory.cs new file mode 100644 index 0000000..1644a0d --- /dev/null +++ b/OnTopReplica/StartupOptions/Factory.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.ComponentModel; +using OnTopReplica.Properties; + +namespace OnTopReplica.StartupOptions { + class Factory { + + static Factory() { + //Custom type conversion attributes + TypeDescriptor.AddAttributes(typeof(Size), new TypeConverterAttribute(typeof(SizeConverter))); + TypeDescriptor.AddAttributes(typeof(ScreenPosition), new TypeConverterAttribute(typeof(ScreenPositionConverter))); + TypeDescriptor.AddAttributes(typeof(Rectangle), new TypeConverterAttribute(typeof(RectangleConverter))); + } + + public static Options CreateOptions(string[] args) { + var options = new Options(); + + LoadSettings(options); + + ParseCommandLine(args, options); + + return options; + } + + private static void LoadSettings(Options options) { + if (Settings.Default.RestoreSizeAndPosition) { + options.StartLocation = Settings.Default.RestoreLastPosition; + options.StartSize = Settings.Default.RestoreLastSize; + } + } + + private static void ParseCommandLine(string[] args, Options options) { + var cmdOptions = new NDesk.Options.OptionSet() + .Add("windowId=", "Window handle ({HWND}) to be cloned.", id => { + options.WindowId = new IntPtr(id); + }) + .Add("windowTitle=", "{TITLE} of the window to be cloned.", s => { + options.WindowTitle = s; + }) + .Add("windowClass=", "{CLASS} of the window to be cloned.", s => { + options.WindowClass = s; + }) + .Add("v|visible", "If set, only clones windows that are visible.", s => { + options.MustBeVisible = true; + }) + .Add("size=", "Target {SIZE} of the cloned thumbnail.", s => { + options.StartSize = s; + }) + .Add("position=", "Target {COORDINATES} of the OnTopReplica window.", s => { + options.StartLocation = new Point(s.Width, s.Height); + options.StartScreenPosition = null; + }) + .Add("screenPosition=", "Resolution independent window position on current screen, with locking (TR|TL|C|BR|BL).", pos => { + options.StartLocation = null; + options.StartScreenPosition = pos; + }) + .Add("r|region=", "Region {BOUNDS} of the original window.", region => { + options.Region = region; + }) + .Add("o|opacity=", "Opacity of the window (0-255).", opacity => { + options.Opacity = opacity; + }) + .Add("clickForwarding", "Enables click forwarding.", s => { + options.EnableClickForwarding = true; + }) + .Add("chromeOff", "Disables the window's chrome (border).", s => { + options.DisableChrome = true; + }) + .Add("h|help|?", "Show command line help.", s => { + options.Status = CliStatus.Information; + }); + + List values; + try { + values = cmdOptions.Parse(args); + } + catch (NDesk.Options.OptionException ex) { + options.DebugMessageWriter.WriteLine(ex.Message); + options.DebugMessageWriter.WriteLine("Try 'OnTopReplica /help' for more information."); + options.Status = CliStatus.Error; + } + + if (options.Status == CliStatus.Information) { + cmdOptions.WriteOptionDescriptions(options.DebugMessageWriter); + } + } + + } +} diff --git a/OnTopReplica/StartupOptions/Options.cs b/OnTopReplica/StartupOptions/Options.cs new file mode 100644 index 0000000..1d0cd11 --- /dev/null +++ b/OnTopReplica/StartupOptions/Options.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.IO; +using OnTopReplica.WindowSeekers; + +namespace OnTopReplica.StartupOptions { + + /// + /// Represents startup options that can be set via CLI scripting (or other stuff). + /// + class Options { + + public Options() { + Status = CliStatus.Ok; + Opacity = 255; + DisableChrome = false; + MustBeVisible = false; + } + + #region Position and size + + public Point? StartLocation { get; set; } + + public ScreenPosition? StartScreenPosition { get; set; } + + public Size? StartSize { get; set; } + + #endregion + + #region Window cloning + + public IntPtr? WindowId { get; set; } + + public string WindowTitle { get; set; } + + public string WindowClass { get; set; } + + public Rectangle? Region { get; set; } + + public bool MustBeVisible { get; set; } + + #endregion + + #region Options + + public bool EnableClickForwarding { get; set; } + + public byte Opacity { get; set; } + + public bool DisableChrome { get; set; } + + #endregion + + #region Debug info + + StringBuilder _sb = new StringBuilder(); + TextWriter _sbWriter; + + public CliStatus Status { get; set; } + + /// + /// Gets a debug message writer. + /// + public TextWriter DebugMessageWriter { + get { + if (_sbWriter == null) { + _sbWriter = new StringWriter(_sb); + } + return _sbWriter; + } + } + + /// + /// Gets the debug message. + /// + public string DebugMessage { + get { + if(_sbWriter != null) + _sbWriter.Flush(); + return _sb.ToString(); + } + } + + #endregion + + #region Application + + public void Apply(MainForm form) { + //GUI + form.IsChromeVisible = !DisableChrome; + form.Opacity = (double)Opacity / 255.0; + + //Thumbnail cloning + WindowHandle handle = null; + if (WindowId.HasValue) { + handle = WindowHandle.FromHandle(WindowId.Value); + } + else if (WindowTitle != null) { + var seeker = new ByTitleWindowSeeker(WindowTitle) { + OwnerHandle = form.Handle, + SkipNotVisibleWindows = MustBeVisible + }; + seeker.Refresh(); + + handle = seeker.Windows.FirstOrDefault(); + } + else if (WindowClass != null) { + var seeker = new ByClassWindowSeeker(WindowClass) { + OwnerHandle = form.Handle, + SkipNotVisibleWindows = MustBeVisible + }; + seeker.Refresh(); + + handle = seeker.Windows.FirstOrDefault(); + } + if (handle != null) { + form.SetThumbnail(handle, Region); + } + + //Size + if (StartSize.HasValue) { + form.ClientSize = StartSize.Value; + } + + //Position + if (StartLocation.HasValue) { + form.Location = StartLocation.Value; + } + else if (StartScreenPosition.HasValue) { + form.PositionLock = StartScreenPosition.Value; + } + + //Other features + if (EnableClickForwarding) { + form.ClickForwardingEnabled = true; + } + } + + #endregion + + } + +} diff --git a/OnTopReplica/StartupOptions/RectangleConverter.cs b/OnTopReplica/StartupOptions/RectangleConverter.cs new file mode 100644 index 0000000..00c8608 --- /dev/null +++ b/OnTopReplica/StartupOptions/RectangleConverter.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; +using System.Drawing; +using System.Text.RegularExpressions; + +namespace OnTopReplica.StartupOptions { + class RectangleConverter : TypeConverter { + + public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { + if (value != null) { + var sVal = value.ToString(); + return Convert(sVal); + } + else + return base.ConvertFrom(context, culture, value); + } + + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { + return sourceType == typeof(string); + } + + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { + return destinationType == typeof(Rectangle); + } + + public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) { + if (value != null && destinationType == typeof(Rectangle)) { + var sVal = value.ToString(); + return Convert(sVal); + } + else + return base.ConvertTo(context, culture, value, destinationType); + } + + static Regex _sizeRegex = new Regex("^\\D*(?\\d*)\\s*,\\s*(?\\d*)\\s*,\\s*(?\\d*)\\s*,\\s*(?\\d*)\\D*$", + RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.Singleline); + + private Rectangle Convert(string s) { + var match = _sizeRegex.Match(s); + + var x = match.Groups["x"]; + var y = match.Groups["y"]; + var width = match.Groups["width"]; + var height = match.Groups["height"]; + + if (match.Success && x.Success && y.Success && width.Success && height.Success) { + var xVal = int.Parse(x.Value); + var yVal = int.Parse(y.Value); + var widthVal = int.Parse(width.Value); + var heightVal = int.Parse(height.Value); + + return new Rectangle(xVal, yVal, widthVal, heightVal); + } + else + throw new ArgumentException("Cannot convert '" + s + "' to rectangle."); + } + + } +} diff --git a/OnTopReplica/StartupOptions/ScreenPositionConverter.cs b/OnTopReplica/StartupOptions/ScreenPositionConverter.cs new file mode 100644 index 0000000..18ca1a5 --- /dev/null +++ b/OnTopReplica/StartupOptions/ScreenPositionConverter.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; + +namespace OnTopReplica.StartupOptions { + class ScreenPositionConverter : TypeConverter { + + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { + if (sourceType == typeof(string)) + return true; + + return base.CanConvertFrom(context, sourceType); + } + + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { + if (destinationType == typeof(ScreenPosition)) + return true; + + return base.CanConvertTo(context, destinationType); + } + + public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { + var sValue = value.ToString(); + + switch (sValue) { + case "TL": + return ScreenPosition.TopLeft; + case "TR": + return ScreenPosition.TopRight; + case "BL": + return ScreenPosition.BottomLeft; + case "BR": + return ScreenPosition.BottomRight; + case "C": + return ScreenPosition.Center; + default: + throw new ArgumentException("Invalid screen position value '" + sValue + "'."); + } + } + + public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) { + if (destinationType == typeof(ScreenPosition)) + return ConvertFrom(context, culture, value); + + return base.ConvertTo(context, culture, value, destinationType); + } + + } +} diff --git a/OnTopReplica/StartupOptions/SizeConverter.cs b/OnTopReplica/StartupOptions/SizeConverter.cs new file mode 100644 index 0000000..9dd018e --- /dev/null +++ b/OnTopReplica/StartupOptions/SizeConverter.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; +using System.Drawing; +using System.Text.RegularExpressions; + +namespace OnTopReplica.StartupOptions { + + class SizeConverter : TypeConverter { + + public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { + if (value != null) { + var sVal = value.ToString(); + return StringToSize(sVal); + } + else + return base.ConvertFrom(context, culture, value); + } + + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { + return (sourceType == typeof(string) || sourceType == typeof(Size)); + } + + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { + return (destinationType == typeof(Size) || destinationType == typeof(string)); + } + + public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) { + if (value == null) + return base.ConvertTo(context, culture, value, destinationType); + + if (destinationType == typeof(Size)) { + var sVal = value.ToString(); + return StringToSize(sVal); + } + else if (destinationType == typeof(string)) { + if (value is Size) { + Size sValue = (Size)value; + return string.Format("{0}, {1}", sValue.Width, sValue.Height); + } + + return value.ToString(); + } + else + return base.ConvertTo(context, culture, value, destinationType); + } + + static Regex _sizeRegex = new Regex("^\\D*(?\\d*)\\s*,\\s*(?\\d*)\\D*$", + RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.Singleline); + + private Size StringToSize(string s) { + var match = _sizeRegex.Match(s); + + var x = match.Groups["x"]; + var y = match.Groups["y"]; + + if (!match.Success || !x.Success || !y.Success) + throw new ArgumentException("Cannot convert '" + s + "' to coordinates pair."); + + var xVal = Int32.Parse(x.Value); + var yVal = Int32.Parse(y.Value); + + return new Size(xVal, yVal); + } + + } + +} diff --git a/OnTopReplica/StoredRegion.cs b/OnTopReplica/StoredRegion.cs new file mode 100644 index 0000000..f8337a1 --- /dev/null +++ b/OnTopReplica/StoredRegion.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Serialization; +using System.Drawing; + +namespace OnTopReplica { + + [Serializable] + public class StoredRegion : IXmlSerializable { + + public StoredRegion() { + } + + public StoredRegion(Rectangle r, string n) { + Bounds = r; + Name = n; + } + + public Rectangle Bounds { + get; + set; + } + + public string Name { + get; + set; + } + + public override string ToString() { + return Name; + } + + + #region IXmlSerializable Members + + public System.Xml.Schema.XmlSchema GetSchema() { + return null; + } + + public void ReadXml(System.Xml.XmlReader reader) { + if (reader.MoveToAttribute("name")) + Name = reader.Value; + else + throw new Exception(); + + reader.Read(); + + XmlSerializer x = new XmlSerializer(typeof(Rectangle)); + Bounds = (Rectangle)x.Deserialize(reader); + } + + public void WriteXml(System.Xml.XmlWriter writer) { + writer.WriteAttributeString("name", Name); + + XmlSerializer x = new XmlSerializer(typeof(Rectangle)); + x.Serialize(writer, Bounds); + } + + #endregion + } + +} diff --git a/OnTopReplica/StoredRegionArray.cs b/OnTopReplica/StoredRegionArray.cs new file mode 100644 index 0000000..1a948c6 --- /dev/null +++ b/OnTopReplica/StoredRegionArray.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections; +using System.Xml.Serialization; + +namespace OnTopReplica { + + public class StoredRegionArray : ArrayList, IXmlSerializable { + + #region IXmlSerializable Members + + public System.Xml.Schema.XmlSchema GetSchema() { + return null; + } + + public void ReadXml(System.Xml.XmlReader reader) { + this.Clear(); + XmlSerializer x = new XmlSerializer(typeof(StoredRegion)); + while (reader.ReadToFollowing("StoredRegion")) { + object o = x.Deserialize(reader); + + if (o is StoredRegion) + this.Add(o); + } + } + + public void WriteXml(System.Xml.XmlWriter writer) { + XmlSerializer x = new XmlSerializer(typeof(StoredRegion)); + foreach (StoredRegion sr in this) { + x.Serialize(writer, sr); + } + } + + #endregion + + } + +} diff --git a/OnTopReplica/StoredRegionComparer.cs b/OnTopReplica/StoredRegionComparer.cs new file mode 100644 index 0000000..cfc9438 --- /dev/null +++ b/OnTopReplica/StoredRegionComparer.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections; + +namespace OnTopReplica { + + /// + /// Compares two StoredRegions based on their name. + /// + class StoredRegionComparer : IComparer { + + #region IComparer Members + + public int Compare(object x, object y) { + StoredRegion a = x as StoredRegion; + StoredRegion b = y as StoredRegion; + + if (a == null || b == null) + return -1; //this is wrong, but anyway + + return a.Name.CompareTo(b.Name); + } + + #endregion + + } +} diff --git a/OnTopReplica/Strings.Designer.cs b/OnTopReplica/Strings.Designer.cs new file mode 100644 index 0000000..c310233 --- /dev/null +++ b/OnTopReplica/Strings.Designer.cs @@ -0,0 +1,1342 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace OnTopReplica { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Strings { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Strings() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [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("OnTopReplica.Strings", typeof(Strings).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Abort update process.. + /// + internal static string AboutButtonCancelTT { + get { + return ResourceManager.GetString("AboutButtonCancelTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Show details about OnTopReplica.. + /// + internal static string AboutButtonExpanderTT { + get { + return ResourceManager.GetString("AboutButtonExpanderTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Reset all OnTopReplica settings.. + /// + internal static string AboutButtonResetTT { + get { + return ResourceManager.GetString("AboutButtonResetTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Update OnTopReplica now.. + /// + internal static string AboutButtonUpdateTT { + get { + return ResourceManager.GetString("AboutButtonUpdateTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <html> + /// <head> + /// <style type="text/css"> + ///body { + /// font-family: Segoe UI, Arial, sans-serif; + /// font-size: 0.8em; + /// margin: 0; + ///padding: 0.75em; + ///} + ///h1 { + /// font-size: 1.4em; + /// font-weight: bold; + /// + /// margin: 1em 0 0.4em 0; + /// padding: 0; + ///} + ///p { + /// margin: 0.5em 0 0.5em 1em; + /// padding: 0; + ///} + ///a { + /// font-weight: bold; + /// color: blue; + ///} + ///a:hover { + /// color: red; + ///} + /// </style> + /// </head> + /// + /// <body> + /// + /// <h1>License</h1> + /// + /// <p><b>OnTopReplica</b> is licensed under the <a href="http://opensource.org/licenses/ms-rl.html">Microsoft Reciprocal [rest of string was truncated]";. + /// + internal static string AboutDetails { + get { + return ResourceManager.GetString("AboutDetails", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OnTopReplica. + /// + internal static string ApplicationName { + get { + return ResourceManager.GetString("ApplicationName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Reset window completely?. + /// + internal static string AskReset { + get { + return ResourceManager.GetString("AskReset", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to &Reset + ///All settings will be lost.. + /// + internal static string AskResetButtonOk { + get { + return ResourceManager.GetString("AskResetButtonOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Can be used to reset all settings if you lost control over the window or moved it beyond the screen boundary.. + /// + internal static string AskResetContent { + get { + return ResourceManager.GetString("AskResetContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Reset. + /// + internal static string AskResetTitle { + get { + return ResourceManager.GetString("AskResetTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Reset settings?. + /// + internal static string AskSettingReset { + get { + return ResourceManager.GetString("AskSettingReset", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to This will erase all settings of OnTopReplica, returning it to the original state right after installation (all saved information, like stored regions, will be lost).. + /// + internal static string AskSettingResetContent { + get { + return ResourceManager.GetString("AskSettingResetContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Reset settings. + /// + internal static string AskSettingResetTitle { + get { + return ResourceManager.GetString("AskSettingResetTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Download OnTopReplica {0}?. + /// + internal static string AskUpdate { + get { + return ResourceManager.GetString("AskUpdate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cancel update + ///OnTopReplica will prompt you the next time it is started.. + /// + internal static string AskUpdateButtonCancel { + get { + return ResourceManager.GetString("AskUpdateButtonCancel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Download + ///Install OnTopReplica {0}.. + /// + internal static string AskUpdateButtonOk { + get { + return ResourceManager.GetString("AskUpdateButtonOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The new version can be downloaded and installed from the official website.. + /// + internal static string AskUpdateContent { + get { + return ResourceManager.GetString("AskUpdateContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Installed version: {0} + ///Available version: {1}. + /// + internal static string AskUpdateExpanded { + get { + return ResourceManager.GetString("AskUpdateExpanded", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Update available. + /// + internal static string AskUpdateTitle { + get { + return ResourceManager.GetString("AskUpdateTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to &Cancel. + /// + internal static string ButtonCancel { + get { + return ResourceManager.GetString("ButtonCancel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Created by: Lorenz Cuno Klopfenstein.. + /// + internal static string CreatedBy { + get { + return ResourceManager.GetString("CreatedBy", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Draw regions using mouse.. + /// + internal static string DrawRegions { + get { + return ResourceManager.GetString("DrawRegions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Details. + /// + internal static string ErrorDetailButton { + get { + return ResourceManager.GetString("ErrorDetailButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Details on Windows Aero. + /// + internal static string ErrorDetailsAero { + get { + return ResourceManager.GetString("ErrorDetailsAero", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Aero is only available on Windows Vista Home Premium or higher.. + /// + internal static string ErrorDetailsAeroInfo { + get { + return ResourceManager.GetString("ErrorDetailsAeroInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Desktop Composition' is not enabled.. + /// + internal static string ErrorDwmOff { + get { + return ResourceManager.GetString("ErrorDwmOff", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You must enable desktop composition, by selecting 'Windows Aero' as the theme used by Windows. + /// + ///To do so, right-click on the desktop and click on Personalize.. + /// + internal static string ErrorDwmOffContent { + get { + return ResourceManager.GetString("ErrorDwmOffContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error details. + /// + internal static string ErrorGenericInfoButton { + get { + return ResourceManager.GetString("ErrorGenericInfoButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error: . + /// + internal static string ErrorGenericInfoText { + get { + return ResourceManager.GetString("ErrorGenericInfoText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to It appears that the selected window has been closed or is not valid anymore.. + /// + internal static string ErrorGenericThumbnailHandleError { + get { + return ResourceManager.GetString("ErrorGenericThumbnailHandleError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error. + /// + internal static string ErrorGenericTitle { + get { + return ResourceManager.GetString("ErrorGenericTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Desktop Composition' is not supported on your Operating System. + ///You must run this application on Windows Vista Home Premium or better.. + /// + internal static string ErrorNoDwm { + get { + return ResourceManager.GetString("ErrorNoDwm", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Desktop Composition unsupported. + /// + internal static string ErrorNoDwmTitle { + get { + return ResourceManager.GetString("ErrorNoDwmTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No thumbnail loaded.. + /// + internal static string ErrorNoThumbnail { + get { + return ResourceManager.GetString("ErrorNoThumbnail", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to create thumbnail.. + /// + internal static string ErrorUnableToCreateThumbnail { + get { + return ResourceManager.GetString("ErrorUnableToCreateThumbnail", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to fit window.. + /// + internal static string ErrorUnableToFit { + get { + return ResourceManager.GetString("ErrorUnableToFit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to check for updates.. + /// + internal static string ErrorUpdate { + get { + return ResourceManager.GetString("ErrorUpdate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to It appears that OnTopReplica wasn't installed using 'ClickOnce'. You'll have to update manually (visit <a href="http://ontopreplica.codeplex.com">OnTopReplica's homepage</a>).. + /// + internal static string ErrorUpdateContent { + get { + return ResourceManager.GetString("ErrorUpdateContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OnTopReplica was unable to check whether an updated version is available. Make sure you are connected to the Internet. If you are, the website may be temporarily down.. + /// + internal static string ErrorUpdateContentGeneric { + get { + return ResourceManager.GetString("ErrorUpdateContentGeneric", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mode. + /// + internal static string FullscreenMode { + get { + return ResourceManager.GetString("FullscreenMode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Always on top. + /// + internal static string FullscreenModeAlwaysOnTop { + get { + return ResourceManager.GetString("FullscreenModeAlwaysOnTop", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Forces OnTopReplica to stay always on top.. + /// + internal static string FullscreenModeAlwaysOnTopTT { + get { + return ResourceManager.GetString("FullscreenModeAlwaysOnTopTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Click through. + /// + internal static string FullscreenModeClickThrough { + get { + return ResourceManager.GetString("FullscreenModeClickThrough", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OnTopReplica will behave like a transparent overlay that lets your clicks through to the windows below.. + /// + internal static string FullscreenModeClickThroughTT { + get { + return ResourceManager.GetString("FullscreenModeClickThroughTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Standard. + /// + internal static string FullscreenModeNormal { + get { + return ResourceManager.GetString("FullscreenModeNormal", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Behaves like an ordinary window. You can bring other windows above OnTopReplica.. + /// + internal static string FullscreenModeNormalTT { + get { + return ResourceManager.GetString("FullscreenModeNormalTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OnTopReplica fullscreen. + /// + internal static string FullscreenTitle { + get { + return ResourceManager.GetString("FullscreenTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Disable. + /// + internal static string GroupSwitchModeDisableButton { + get { + return ResourceManager.GetString("GroupSwitchModeDisableButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Enable Group mode. + /// + internal static string GroupSwitchModeEnableButton { + get { + return ResourceManager.GetString("GroupSwitchModeEnableButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Select multiple windows to enable.. + /// + internal static string GroupSwitchModeStatusDisabled { + get { + return ResourceManager.GetString("GroupSwitchModeStatusDisabled", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Group switch mode is enabled.. + /// + internal static string GroupSwitchModeStatusEnabled { + get { + return ResourceManager.GetString("GroupSwitchModeStatusEnabled", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Group switch mode:. + /// + internal static string GroupSwitchModeTitle { + get { + return ResourceManager.GetString("GroupSwitchModeTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows. + /// + internal static string GroupSwitchModeWindows { + get { + return ResourceManager.GetString("GroupSwitchModeWindows", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Homepage: www.codeplex.com/ontopreplica.. + /// + internal static string Homepage { + get { + return ResourceManager.GetString("Homepage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Do you want to enable "click forwarding"?. + /// + internal static string InfoClickForwarding { + get { + return ResourceManager.GetString("InfoClickForwarding", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to If this mode is enabled, OnTopReplica will forward all left mouse clicks to the window that is being cloned (this will allow you to do basic mouse operations on the cloned window without having to activate it). + /// + ///To exit this mode, push ESC.. + /// + internal static string InfoClickForwardingContent { + get { + return ResourceManager.GetString("InfoClickForwardingContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Click forwarding. + /// + internal static string InfoClickForwardingTitle { + get { + return ResourceManager.GetString("InfoClickForwardingTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Enable Click-Through mode?. + /// + internal static string InfoClickThrough { + get { + return ResourceManager.GetString("InfoClickThrough", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Click-through only works if it has been enabled in the Resize submenu and if the window is semi-transparent.. + /// + internal static string InfoClickThroughDetails { + get { + return ResourceManager.GetString("InfoClickThroughDetails", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to In this mode the fullscreen window will behave as a partially transparent overlay, allowing you to click on the other windows behind it. + /// + ///To return to normal mode anytime, activate OnTopReplica by clicking on the task bar (or the tray icon).. + /// + internal static string InfoClickThroughInformation { + get { + return ResourceManager.GetString("InfoClickThroughInformation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No, thank you. + ///You can enable click-through later. + /// + internal static string InfoClickThroughNo { + get { + return ResourceManager.GetString("InfoClickThroughNo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Use Click-Through. + /// + internal static string InfoClickThroughOk { + get { + return ResourceManager.GetString("InfoClickThroughOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Click-Through mode. + /// + internal static string InfoClickThroughTitle { + get { + return ResourceManager.GetString("InfoClickThroughTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OnTopReplica has been updated.. + /// + internal static string InfoUpdated { + get { + return ResourceManager.GetString("InfoUpdated", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to In order to use the updated version of OnTopReplica you'll have to restart the application.. + /// + internal static string InfoUpdatedContent { + get { + return ResourceManager.GetString("InfoUpdatedContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Update successful. + /// + internal static string InfoUpdatedTitle { + get { + return ResourceManager.GetString("InfoUpdatedTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OnTopReplica is up to date.. + /// + internal static string InfoUpToDate { + get { + return ResourceManager.GetString("InfoUpToDate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No update available. + /// + internal static string InfoUpToDateTitle { + get { + return ResourceManager.GetString("InfoUpToDateTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Language. + /// + internal static string Language { + get { + return ResourceManager.GetString("Language", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to About.... + /// + internal static string MenuAbout { + get { + return ResourceManager.GetString("MenuAbout", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Hides the main window and displays the "about" box.. + /// + internal static string MenuAboutTT { + get { + return ResourceManager.GetString("MenuAboutTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Advanced. + /// + internal static string MenuAdvanced { + get { + return ResourceManager.GetString("MenuAdvanced", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Chrome. + /// + internal static string MenuChrome { + get { + return ResourceManager.GetString("MenuChrome", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Toggles the display of the window chrome.. + /// + internal static string MenuChromeTT { + get { + return ResourceManager.GetString("MenuChromeTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Enable Click forwarding. + /// + internal static string MenuClickForwarding { + get { + return ResourceManager.GetString("MenuClickForwarding", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Enable "click forwarding" to the cloned window.. + /// + internal static string MenuClickForwardingTT { + get { + return ResourceManager.GetString("MenuClickForwardingTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Enable Click-Through. + /// + internal static string MenuClickThrough { + get { + return ResourceManager.GetString("MenuClickThrough", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OnTopReplica will behave like a transparent overlay that lets your clicks through to the windows below.. + /// + internal static string MenuClickThroughTT { + get { + return ResourceManager.GetString("MenuClickThroughTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Close. + /// + internal static string MenuClose { + get { + return ResourceManager.GetString("MenuClose", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Closes OnTopReplica.. + /// + internal static string MenuCloseTT { + get { + return ResourceManager.GetString("MenuCloseTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 2:1 Double. + /// + internal static string MenuFitDouble { + get { + return ResourceManager.GetString("MenuFitDouble", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Fullscreen. + /// + internal static string MenuFitFullscreen { + get { + return ResourceManager.GetString("MenuFitFullscreen", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 1:2 Half. + /// + internal static string MenuFitHalf { + get { + return ResourceManager.GetString("MenuFitHalf", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 1:1 Fit to window. + /// + internal static string MenuFitOriginal { + get { + return ResourceManager.GetString("MenuFitOriginal", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 1:4 Quarter. + /// + internal static string MenuFitQuarter { + get { + return ResourceManager.GetString("MenuFitQuarter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Glass. + /// + internal static string MenuGlass { + get { + return ResourceManager.GetString("MenuGlass", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Toggles "glass mode" on and off.. + /// + internal static string MenuGlassTT { + get { + return ResourceManager.GetString("MenuGlassTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Group Switch mode. + /// + internal static string MenuGroupSwitch { + get { + return ResourceManager.GetString("MenuGroupSwitch", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OnTopReplica will automatically clone a window from an user defined group, switching to the one least recently activated to the foreground.. + /// + internal static string MenuGroupSwitchTT { + get { + return ResourceManager.GetString("MenuGroupSwitchTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 100% (opaque). + /// + internal static string MenuOp100 { + get { + return ResourceManager.GetString("MenuOp100", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sets OnTopReplica to be completely opaque.. + /// + internal static string MenuOp100TT { + get { + return ResourceManager.GetString("MenuOp100TT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 25%. + /// + internal static string MenuOp25 { + get { + return ResourceManager.GetString("MenuOp25", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sets OnTopReplica to 25% opacity.. + /// + internal static string MenuOp25TT { + get { + return ResourceManager.GetString("MenuOp25TT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 50%. + /// + internal static string MenuOp50 { + get { + return ResourceManager.GetString("MenuOp50", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sets OnTopReplica to 50% opacity.. + /// + internal static string MenuOp50TT { + get { + return ResourceManager.GetString("MenuOp50TT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 75%. + /// + internal static string MenuOp75 { + get { + return ResourceManager.GetString("MenuOp75", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sets OnTopReplica to 75% opacity.. + /// + internal static string MenuOp75TT { + get { + return ResourceManager.GetString("MenuOp75TT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Opacity. + /// + internal static string MenuOpacity { + get { + return ResourceManager.GetString("MenuOpacity", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Open. + /// + internal static string MenuOpen { + get { + return ResourceManager.GetString("MenuOpen", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Displays OnTopReplica.. + /// + internal static string MenuOpenTT { + get { + return ResourceManager.GetString("MenuOpenTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bottom Left. + /// + internal static string MenuPosBottomLeft { + get { + return ResourceManager.GetString("MenuPosBottomLeft", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bottom Right. + /// + internal static string MenuPosBottomRight { + get { + return ResourceManager.GetString("MenuPosBottomRight", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Center. + /// + internal static string MenuPosCenter { + get { + return ResourceManager.GetString("MenuPosCenter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Disabled. + /// + internal static string MenuPosDisabled { + get { + return ResourceManager.GetString("MenuPosDisabled", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Position lock. + /// + internal static string MenuPosition { + get { + return ResourceManager.GetString("MenuPosition", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Automatically position OnTopReplica on the current screen.. + /// + internal static string MenuPositionTT { + get { + return ResourceManager.GetString("MenuPositionTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Top Left. + /// + internal static string MenuPosTopLeft { + get { + return ResourceManager.GetString("MenuPosTopLeft", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Top Right. + /// + internal static string MenuPosTopRight { + get { + return ResourceManager.GetString("MenuPosTopRight", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Quit fullscreen mode. + /// + internal static string MenuQuitFullscreen { + get { + return ResourceManager.GetString("MenuQuitFullscreen", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recall last position and size. + /// + internal static string MenuRecall { + get { + return ResourceManager.GetString("MenuRecall", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Toggles whether OnTopReplica should store its last position and size and use them when it is restarted.. + /// + internal static string MenuRecallTT { + get { + return ResourceManager.GetString("MenuRecallTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Minimize. + /// + internal static string MenuReduce { + get { + return ResourceManager.GetString("MenuReduce", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Minimizes OnTopReplica to the task bar (or the tray).. + /// + internal static string MenuReduceTT { + get { + return ResourceManager.GetString("MenuReduceTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Select region.... + /// + internal static string MenuRegion { + get { + return ResourceManager.GetString("MenuRegion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Switches to "region mode", that allows you to select a limited region of the source's window as thumbnail.. + /// + internal static string MenuRegionTT { + get { + return ResourceManager.GetString("MenuRegionTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Reset window. + /// + internal static string MenuReset { + get { + return ResourceManager.GetString("MenuReset", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Resets OnTopReplica settings and its main window.. + /// + internal static string MenuResetTT { + get { + return ResourceManager.GetString("MenuResetTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Resize. + /// + internal static string MenuResize { + get { + return ResourceManager.GetString("MenuResize", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Switch to window. + /// + internal static string MenuSwitch { + get { + return ResourceManager.GetString("MenuSwitch", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Switches to the source window and hides OnTopReplica.. + /// + internal static string MenuSwitchTT { + get { + return ResourceManager.GetString("MenuSwitchTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Select window. + /// + internal static string MenuWindows { + get { + return ResourceManager.GetString("MenuWindows", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to - none -. + /// + internal static string MenuWindowsNone { + get { + return ResourceManager.GetString("MenuWindowsNone", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Displays a list of window you can select as thumbnail source.. + /// + internal static string MenuWindowsTT { + get { + return ResourceManager.GetString("MenuWindowsTT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to - whole -. + /// + internal static string MenuWindowsWholeRegion { + get { + return ResourceManager.GetString("MenuWindowsWholeRegion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Current region:. + /// + internal static string RegionsCurrentRegion { + get { + return ResourceManager.GetString("RegionsCurrentRegion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Delete. + /// + internal static string RegionsDeleteButton { + get { + return ResourceManager.GetString("RegionsDeleteButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Done. + /// + internal static string RegionsDoneButton { + get { + return ResourceManager.GetString("RegionsDoneButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Height. + /// + internal static string RegionsHeight { + get { + return ResourceManager.GetString("RegionsHeight", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Reset. + /// + internal static string RegionsResetButton { + get { + return ResourceManager.GetString("RegionsResetButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Save. + /// + internal static string RegionsSaveButton { + get { + return ResourceManager.GetString("RegionsSaveButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Stored regions. + /// + internal static string RegionsStoredRegions { + get { + return ResourceManager.GetString("RegionsStoredRegions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Regions:. + /// + internal static string RegionsTitle { + get { + return ResourceManager.GetString("RegionsTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Width. + /// + internal static string RegionsWidth { + get { + return ResourceManager.GetString("RegionsWidth", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Right-click here to start.... + /// + internal static string RightClick { + get { + return ResourceManager.GetString("RightClick", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to A lightweight, real-time, always on top thumbnail of a window of your choice.. + /// + internal static string Slogan { + get { + return ResourceManager.GetString("Slogan", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OnTopReplica automatically checks for updates. No information is logged at any point.. + /// + internal static string UpdateDisclaimer { + get { + return ResourceManager.GetString("UpdateDisclaimer", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Update now!. + /// + internal static string UpdateNow { + get { + return ResourceManager.GetString("UpdateNow", resourceCulture); + } + } + } +} diff --git a/OnTopReplica/Strings.cs.resx b/OnTopReplica/Strings.cs.resx new file mode 100644 index 0000000..0d381ff --- /dev/null +++ b/OnTopReplica/Strings.cs.resx @@ -0,0 +1,456 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Přerušit aktualizaci. + + + Zobrazit podrobnosti o aplikaci OnTopReplica. + + + Resetovat nastavení OnTopReplica. + + + Aktualizovat OnTopReplica. + + + <html> + <head> + <style type="text/css"> +body { + font-family: Segoe UI, Arial, sans-serif; + font-size: 0.8em; + margin: 0; +padding: 0.75em; +} +h1 { + font-size: 1.4em; + font-weight: bold; + + margin: 1em 0 0.4em 0; + padding: 0; +} +p { + margin: 0.5em 0 0.5em 1em; + padding: 0; +} +a { + font-weight: bold; + color: blue; +} +a:hover { + color: red; +} + </style> + </head> + + <body> + + <h1>Licence</h1> + + <p><b>OnTopReplica</b> je šířena pod <a href="http://opensource.org/licenses/ms-rl.html">Microsoft Reciprocal License (Ms-RL)</a> licencí.</p> + <p>Původní zdrojový kód je možné nalézt na <a href="http://www.codeplex.com/ontopreplica">domovské stránce projektu na serveru CodePlex</a>.</p> + + <h1>Autoři a zásluhy</h1> + + <p>Původní inspirací pro OnTopReplica byla aplikace <a href="http://insentient.net">Switcher</a> a další aplikace založeny na DWM.</p> + + <p>Všechny Vista ovládací prvky jsou součástí <a href="http://www.codeplex.com/windowsformsaero">knihovny WindowsFormsAero</a> pro .NET.</p> + + <p>Některé ukázkové kódy byly převzaty z <a href="http://www.ookii.org">Ookii</a> ze serveru Channel9.</p> + + <p>Třída NativeToolstripRenderer byla převzata z <a href="http://wp.asztal.net/2007/12/vista-style-menus-in-dotnet/">asztal.net</a>.</p> + + <p>Některé ikony pocházejí z <a href="http://www.vistaico.com">VistaICO.com</a> a balíčku ikon Xiao.</p> + + </body> +</html> + + + OnTopReplica + + + Resetovat nastavení okna? + + + &Resetovat +Všechna nastavení budou ztracena. + + + Operace "Resetovat okno" je vhodná k inicializaci všech nastavení pokud jste například ztratili kontrolu nad oknem nebo jej přesunuli mimo viditelnou plochu obrazovky. + + + Resetovat + + + Resetovat nastavení? + + + Operace "Resetovat nastavení" smaže veškerá uživatelská nastavení aplikace OnTopReplica a vrátí nastavení do stejného stavu jako po instalaci (všechny uložené informace, jako například uložené výřezy oken, budou ztraceny). + + + Resetovat nastavení + + + Instalovat OnTopReplica {0}? + {0} update version + + + Zrušit aktualizaci +Aplikace OnTopReplica vás vyzve k aktualizaci při dalším startu. + + + Pokračovat +Instalovat OnTopReplica {0}. + {0} update version + + + Nová verze bude automaticky stažena a nainstalována. + + + Nainstalovaná verze: {0} +Dostupná verze: {1} + {0} installed version number +{1} online available version number + + + Nové aktualizace jsou k dispozici + + + &Storno + + + Autor: Lorenz Cuno Klopfenstein. + + + Označte výřez pomocí myši. + + + Podrobnosti + + + Podrobnosti k Windows Aero + + + Windows Aero je k dispozici pouze na systémech Windows Vista Home Premium a vyšších. + + + Funkce 'Desktop Composition' není povolena. + + + Pro pokračování je nutné povolit funkci "Desktop Composition" výběrem tématu 'Windows Aero' v nastavení vzhledu Windows. + +Uvedené lze provést například kliknutním pravým tlačítkem myši na plochu a zvolením akce "Přizpůsobit". + + + Podrobnosti k chybě + + + Chyba: + + + Zvolené okno bylo zavřeno nebo již není platné z jiných důvodů. + + + Chyba + + + Funkce 'Desktop Composition' není ve vašem systému podporována. +Tuto aplikaci je možné spouštět pouze na systémech Windows Vista Home Premium a vyšších. + + + Funkce Desktop Composition není podporována + + + Náhled nebyl nahrán. + + + Nelze vytvořit náhled. + + + Nelze vložit okno. + + + Kontrola aktualizací se nezdařila. + + + Zdá se, že aplikace OnTopReplica nebyla nainstalována pomocí 'ClickOnce'. Aktualizaci musíte provést ručně (navštivte <a href="http://ontopreplica.codeplex.com">domácí stránku aplikace OnTopReplica</a>). + + + Režim + + + Vždy na vrchu + + + Nastaví aplikaci OnTopReplica, aby zůstávala vždy na vrchu. + + + Proklikávání + + + Aplikace OnTopReplica se bude chovat jako průhledná vrstva přes kterou bude možno proklikávat do podložených oken. + + + Standardní + + + Aplikace OnTopReplica se bude chovat jako běžné okno. Jiná okna mohou překrýt okno aplikace. + + + Aplikace OnTopReplica přes celou obrazovku + + + Domácí stránka: www.codeplex.com/ontopreplica. + + + Přejete si povolit "přeposílání kliknutí"? + + + V tomto režimu aplikace OnTopReplica přeposílá kliknutí levého tlačítka myši do zdrojového okna (je tedy možné provádět základní ovládání zdrojového okna bez nutnosti jej aktivovat). + +Ukončit režim "přeposíání kliknutí" je možné opětovným vyvolání položky v menu. + + + Přeposílání kliknutí + + + Povolit "Proklikávání" v celoobrazovkovém režimu? + + + "Proklikávání" funguje pouze pokud je povoleno v menu a okno má nastavenou průhlednost. + + + V tomto režimu se bude okno roztažené přes celou obrazovku chovat jako poloprůhledná vrstva, přes kterou bude možné "proklikávat" na podložená okna. + +K návratu do standardního režimu je možné přejít kdykoli dvojklikem na ikonu v oznamovací oblasti (traye). + + + Ne. +Režim "Proklikávání" je možné zvolit později v menu + + + Používat "Proklikávání" + + + Režim "Proklikávání" + + + Aplikace OnTopReplica byla aktualizována. + + + Pro použití aktualizací je potřeba aplikaci OnTopReplica restartovat. + + + Aktualizace proběhla úspěšně + + + OnTopReplica je aktuální. + + + Žádná aktualizace není k dispozici. + + + Jazyk + + + O aplikaci... + + + Skryje hlavní okno a zobrazí informace "O aplikaci". + + + Okraj + + + Přepínač, který definuje, zda má aplikace OnTopReplica viditelný okraj okna. + + + Přeposílání kliknutí + + + Zapne "přeposílání kliknutí" do zdrojového okna. + + + Proklikávání + + + Aplikace OnTopReplica se bude chovat jako průhledná vrstva přes kterou bude možno proklikávat do podložených oken. + + + Zavřít + + + Ukončí aplikaci OnTopReplica. + + + 2:1 Dvojnásobná + + + Celá obrazovka + + + 1:2 Poloviční + + + 1:1 Jako zdroj + + + 1:4 Čtvrtinová + + + Glass efekt + + + Přepíná "glass efekt" okna. + + + 100% (neprůhledné) + + + Nastaví aplikaci OnTopReplica jako neprůhlednou. + + + 25% + + + Nastaví průhlednost na 25%. + + + 50% + + + Nastaví průhlednost na 50%. + + + 75% + + + Nastaví průhlednost na 75%. + + + Průhlednost + + + Otevřít + + + Zobrazí aplikaci OnTopReplica. + + + Dolní levý roh + + + Dolní pravý roh + + + Umístění + + + Automatická pozice aplikace OnTopReplica vzhledem k obrazovce. + + + Horní levý roh + + + Horní pravý rok + + + Opustit celoobrazovkový režim + + + Ukládat pozici a velikost okna + + + Přepínač, který definuje, zda si má aplikace OnTopReplica ukládat poslední pozici a velikost okna a obnovovat tyto údaje po restartování aplikace. + + + Minimalizovat do traye + + + Minimalizuje aplikaci OnTopReplica jako ikonu v systémové oblasti. + + + Vybrat výřez... + + + Přepne do režimu "výřezu", který umožní zvolit pouze část okna jako náhled. + + + Resetovat nastavení okna + + + Resetuje nastavení a pozici okna aplikace OnTopReplica. + + + Velikost + + + Přepnout do okna + + + Přepne do zdrojového okna a skryje aplikaci OnTopReplica. + + + Vybrat okno + + + - žádné - + + + Zobrazí seznam oken, které je možné použít jako zdroj. + + + - celé okno - + + + Aktuální výřez: + + + Smazat + + + Hotovo + + + Výška + + + Reset + + + Uložit + + + Uložené výřezy + + + Výřezy: + + + Šířka + + + Začněte klepnutím sem pravým tlačítkem myši... + + + Nenáročný a instantní náhled libovolného otevřeného okna (nebo jeho výřezu) v systému. + + + Aplikace OnTopReplica automaticky kontroluje dostupné aktualizace. Během této operace nedochází k žádnému přenosu či ukládání uživatelských informací. + + + Zkontroluj aktualizace + + \ No newline at end of file diff --git a/OnTopReplica/Strings.da.resx b/OnTopReplica/Strings.da.resx new file mode 100644 index 0000000..c15bad8 --- /dev/null +++ b/OnTopReplica/Strings.da.resx @@ -0,0 +1,451 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuller updateringen + + + Vis detaljer om OnTopReplica. + + + Nulstil alle OnTopReplica indstillinger. + + + Opdater OnTopReplica nu. + + + <html> + <head> + <style type="text/css"> +body { + font-family: Segoe UI, Arial, sans-serif; + font-size: 0.8em; + margin: 0; +padding: 0.75em; +} +h1 { + font-size: 1.4em; + font-weight: bold; + + margin: 1em 0 0.4em 0; + padding: 0; +} +p { + margin: 0.5em 0 0.5em 1em; + padding: 0; +} +a { + font-weight: bold; + color: blue; +} +a:hover { + color: red; +} + </style> + </head> + + <body> + + <h1>Licens</h1> + + <p><b>OnTopReplica</b> er licenseret under <a href="http://opensource.org/licenses/ms-rl.html">Microsoft Reciprocal License (Ms-RL)</a>.</p> + <p>Dem originale kildekode kan findes på <a href="http://www.codeplex.com/ontopreplica">projektets hjemmeside på CodePlex</a>.</p> + + <h1>Credits</h1> + + <p>OnTopReplica er inspireret af <a href="http://insentient.net">Switcher</a> og andre DWM baserede applikationer.</p> + + <p>Alle Vista funktioner er del af <a href="http://www.codeplex.com/windowsformsaero">WindowsFormsAero biblioteket</a> for .NET.</p> + + <p>Lidt eksempel kode er taget fra <a href="http://www.ookii.org">Ookii</a> på Channel9.</p> + + <p>NativeToolstripRenderer class er taget fra <a href="http://wp.asztal.net/2007/12/vista-style-menus-in-dotnet/">asztal.net</a>.</p> + + <p>Lidt ikoner fra <a href="http://www.vistaico.com">VistaICO.com</a> og Xiao ikon sættet.</p> + + </body> +</html> + + + OnTopReplica + + + Nulstil vinduet helt? + + + &NulstilAlle ændringer vil blive tabt. + + + Kan bruges til at nulstille alle indstillinger hvis du mister kontrollen over vinduet eller hvis det er flyttet uden for skærmen. + + + Nulstil + + + Nulstil indstillinger? + + + Dette nulstiller OnTopReplica til standard indstillingerne (alle gemte informationer, som gemte områder, vil blive slettet). + + + Nulstil indstillingerne + + + Installer OnTopReplica {0}? + {0} update version + + + Annuller opdateringenOnTopReplica påminder dig igen næste gang det startes. + + + FortsætInstaller OnTopReplica + {0} update version + + + Den nye version vil automatiskt blive downloaded og installeret. + + + Installeret version: {0} +Tilgængelig version: {1} + {0} installed version number +{1} online available version number + + + Opdatering tilgængelig. + + + &Annuller + + + Lavet af: Lorenz Cuno Klopfenstein. + + + Tegn områder med musen + + + Detaljer + + + Detaljer om Windows Aero + + + Windows Aero er kun tilgængelig op Windows Vista Home Premium eller højere. + + + Windows Aero effekter er ikke slået til + + + Du skal aktiverere "Windows Aero" som tema i Windows.For at gøre dette skal du højreklikke på skrivebordet og vælge personlige indstillinger. + + + Fejl detaljer. + + + Fejl: + + + Vinduet du har valgt er lukket eller er ikke gyldigt mere. + + + Fejl + + + Windows Aero effekter er ikke understøttet af dit styresystem. +Dette program kræver Windows Vista Home Premium eller bedre. + + + Skrivebords komposition ikke understøttet + + + Ingen miniature indlæst. + + + Kan ikke lave miniature + + + Kunne ikke passes til vinduet. + + + Kan ikke søge efter opdateringer. + + + OnTopReplica blev ikke installeret ved hjælp af 'ClickOnce'. Du bliver nødt til at opdatere manuelt (besøg <a href="http://ontopreplica.codeplex.com">OnTopReplica's hjemmeside</a>). + + + Tilstande + + + Altid øverst + + + Får OnTopReplica til altid at være øverst. + + + Klikke igennem + + + OnTopReplica vil opføre sig som en gennemsigtig film der lader dig klikke igennem til de underliggende vinduer. + + + Standard + + + Opfører sig som et almindeligt vindue. Du kan trække andre viduer ind over OnTopReplica. + + + OnTopReplica fuld skærm + + + Hjemmeside: www.codeplex.com/ontopreplica. + + + Ønsker du at aktivere "click forwarding"? + + + Hvis denne funktion er aktiveret vil OnTopReplica vidersende alle venstr museklik til det klonede vindue (dette gør dig i stand til at udføre basis musefunktioner i det klonede vindue uden at skulle aktivere det). + +For at afslutte denne funktion skal du højreklikke på OnTopReplica og deaktivere "Click forwarding" i menuen. + + + Click forwarding + + + Ønskes gennem klik i fuldskærms tilstand? + + + Gennem klik virker kun hvis det er blevet aktiveret i gendan undermenuen og hvis vinduet er delvist gennemsigtigt. + + + I denne tilstand vil fuld skærm vinduet opføre sig som et delvist gennemsigtigt lag, hvilket gør dig i stand til at klikke på de underliggende vinduer. + +For at komme tilbage til normal tilstand, dobbeltklik på OnTopReplica ikonet i meddelelsesområdet på proceslinjen. + + + Nej. +Du kan aktivere gennem klik senere. + + + Brug gennem klik. + + + Gennem klik tilstand + + + OnTopReplica er blevet opdateret. + + + For at benytte den opdaterede udgave af OnTopReplica skal du genstarte programmet. + + + Opdatering fuldført + + + OnTopReplice er opdateret. + + + Ingen opdateringer er tilgængelige + + + Sprog + + + Om... + + + Skjuler hoved vinduet og viser om boxen. + + + Krom + + + Vælger Chrome kanten rundt om vinduet til/fra + + + Click forwarding + + + Aktiver "click forwarding" til det klonede vindue + + + Klikke igennem + + + OnTopReplica vil opføre sig som en gennemsigtig film der lader dig klikke igennem til de underliggende vinduer. + + + Luk + + + Lukker OnTopReplica. + + + 2:1 dobbelt + + + Fuld skærm + + + 1:2 halv + + + 1:1 Pas til vinduet + + + 1:4 kvart + + + Glas + + + Vælger "glas tilstand" til/fra + + + 100% (uigennemsigtig) + + + Sæt OnTopReplica til at være helt uigennemsigtig. + + + 25% + + + Sætter OnTopReplica til 25% uigennemsigtighed. + + + 50% + + + Sætter OnTopReplica til 50% uigennemsigtighed. + + + 75% + + + Sætter OnTopReplica til 75% uigennemsigtighed. + + + Uigennemsigtighed + + + åben + + + Viser OnTopReplica. + + + Nederst venstre + + + Nederst højre + + + Position + + + Sæt OnTopReplica automatiskt på den aktuelle skærm. + + + Øverst venstre + + + Øverst højre + + + Afslut fuldskærm tilstand. + + + Gendan sidste position og størrelse + + + Vælger om OnTopReplica skal gemme sidst brugte størrelse og position, til næste gang det starter op. + + + Minimer til systembakken. + + + Minimere OnTopReplica til systembakken. + + + Vælg område... + + + Skifter til "område tilstand", der tillader dig at vælge et begrænset område af kildens vindue som miniature. + + + Nulstil vinduet + + + Nulstiller OnTopReplica indstillingerne og hoved vinduet. + + + Genskab + + + Skift til vindue + + + Skifter til kilde vinduet og gemmer OnTopReplica. + + + Vælg vindue + + + - ingen - + + + Viser en liste af vinduer du kan bruge som miniature kilde. + + + - hele - + + + Aktuelt område: + + + Slet + + + Færdig + + + Højde + + + Nulstil + + + Gem + + + Gemte områder + + + Områder: + + + Bredde + + + Højreklik her for at starte... + + + En letvægts, live, miniature udgave af et vindue du vælger, der altid er øverst. + + + OnTopReplica checker automatiskt for opdateringer. Der bliver ikke registreret nogen data på noget tidspunkt. + + + Opdater nu! + + \ No newline at end of file diff --git a/OnTopReplica/Strings.de.resx b/OnTopReplica/Strings.de.resx new file mode 100644 index 0000000..f50a611 --- /dev/null +++ b/OnTopReplica/Strings.de.resx @@ -0,0 +1,15 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/OnTopReplica/Strings.es.resx b/OnTopReplica/Strings.es.resx new file mode 100644 index 0000000..a628960 --- /dev/null +++ b/OnTopReplica/Strings.es.resx @@ -0,0 +1,478 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancela el progreso de actualización. + + + Muestra detalles acerca de OnTopReplica. + + + Reinicia la configuración de OnTopReplica a sus valores iniciales. + + + Actualiza OnTopReplica ahora. + + + <html> + <head> + <style type="text/css"> +body { + font-family: Segoe UI, Arial, sans-serif; + font-size: 0.8em; + margin: 0; +padding: 0.75em; +} +h1 { + font-size: 1.4em; + font-weight: bold; + + margin: 1em 0 0.4em 0; + padding: 0; +} +p { + margin: 0.5em 0 0.5em 1em; + padding: 0; +} +a { + font-weight: bold; + color: blue; +} +a:hover { + color: red; +} + </style> + </head> + + <body> + + <h1>Licencia</h1> + + <p><b>OnTopReplica</b> cuenta con licencia <a href="http://opensource.org/licenses/ms-rl.html">Microsoft Reciprocal License (Ms-RL)</a>.</p> + <p>El código fuente original se encuentra en <a href="http://www.codeplex.com/ontopreplica">la página inicial del proyecto en CodePlex</a>.</p> + + <h1>Créditos</h1> + + <p><a href="http://insentient.net">Switcher</a> y otros programas basados en DWM inspiraron OnTopReplica.</p> + + <p>All Vista controls are part of the <a href="http://www.codeplex.com/windowsformsaero">WindowsFormsAero library</a> for .NET.</p> + + <p>Some example code taken from <a href="http://www.ookii.org">Ookii</a> on Channel9.</p> + + <p>NativeToolstripRenderer class taken from <a href="http://wp.asztal.net/2007/12/vista-style-menus-in-dotnet/">asztal.net</a>.</p> + + <p>Some icons from <a href="http://www.vistaico.com">VistaICO.com</a> and the Xiao icon set.</p> + + </body> +</html> + + + OnTopReplica + + + ¿Reiniciar la ventana? + + + &Reiniciar +Todos los ajustes se perderán. + + + Puede ser usado para reiniciar todos los ajustes si se ha perdido el control sobre las ventanas o se ha movido más allá de los bordes de la pantalla. + + + Reiniciar + + + ¿Reiniciar los ajustes? + + + Esta acción borrará todos los ajustes de OnTopReplica tras la instalación, volviendo a la configuración inicial (toda la información guardada, como las regiones personalizadas se perderán). + + + Reiniciar ajustes + + + Descargar OnTopReplica {0}? + {0} update version + + + Cancelar actualización +OnTopReplica le preguntará la próxima vez que se ejecute. + + + Descargar +Instalar OnTopReplica {0} + {0} update version + + + La nueva versión puede ser descargada e instalada del sitio oficial. + + + Versión instalada: {0} +Versión disponible: {1} + {0} installed version number +{1} online available version number + + + Actualización disponible + + + &Cancelar + + + Creado por: Lorenz Cuno Klopfenstein. + + + Crea una región utilizando el ratón. + + + Detalles + + + Detalles en Windows Aero + + + Windows Aero sólo está disponible en Windows Vista o 7, en su versión Home Premium o superior. + + + La Composición de Escritorio no está activada. + + + Debe activar la Composición de Escritorio seleccionando "Windows Aero" como tema utilizado en Windows. + +Para ello, click derecho en el escritorio y buscar la opción en Personalizar. + + + Detalles del error + + + Error: + + + Parece que la ventana seleccionada ha sido cerrada o ya no es válida. + + + Error: + + + La Composición de Escritorio no está soportada en su Sistema Operativo. +Es necesario utilizar Windows Vista o 7 en su versión Home Premium o superior. + + + Composición de Escritorio no soportada + + + No se ha clonado ninguna ventana. + + + Imposible clonar la ventana. + + + Imposible adaptar la ventana. + + + No se ha podido buscar actualizaciones. + + + Parece que OnTopReplica no ha podido ser instalado mediante "ClickOnce". Tendrá que actualizar manualmente visitando <a href="http://ontopreplica.codeplex.com">la homepage del progetto</a>. + + + OnTopReplica no ha podido comprobar si hay una actualización disponible. Asegúrese de que está conectado a Internet. Si lo está, quizá la página oficial está temporalmente no disponible. + + + Modo + + + Siempre encima + + + OnTopReplica permanece siempre encima. + + + Click a través + + + OnTopReplica se comporta como una ventana transparente a través de la cual puede clickar lo que se encuentra detrás. + + + Ventana standard + + + OnTopReplica se comporta como una ventana corriente de Windows, por lo tanto puede estar en segundo plano. + + + OnTopReplica a pantalla completa + + + Desactivar + + + Activar el modo en grupo + + + Seleccionar varias ventanas para activar. + + + Modo en grupo activado + + + Modo en grupo: + + + Ventanas + Column Header of list, simply refers to available windows to be cloned + + + Sitio oficial: www.codeplex.com/ontopreplica. + + + Desea activar el "Click en la ventana clonada"? + + + Si este modo está activado, OnTopReplica permitirá hacer click en la ventana clonada (de esta forma se podrán hacer operaciones básicas con el ratón sin tener que activar la ventana original). + +Para salir de este modo, pulsar ESC. + + + Click en la ventana clonada + + + Activar el modo Click a través? + + + Click a través solo funciona si se ha activado y la ventana es semi-transparente. + + + En este modo, la ventana clonada se volverá ventana parcialmente transparente, permitiendo hacer click en las otras ventanas de detrás. + +Para volver al modo normal en cualquier momento, activar OnTopReplica clickando en la barra de tareas (o en el icono del sistema). + + + No, gracias. +Se podrá activar Click a través más tarde + + + Utilizar Click a través + + + Modo Click a través + + + OnTopReplica ha sido actualizado. + + + Para poder utilizar la versión actualizada de OnTopReplica se ha de reiniciar la aplicación. + + + Actualización correcta. + + + OnTopReplica está actualizado. + + + No hay actualizaciones disponibles + + + Idioma + + + Acerca de + + + Oculta la ventana principal y muestra la ventana de "Acerca de" + + + Avanzado + + + Marco + + + Activa o desactiva el marco de la ventana. + + + Activar Click en la ventana clonada + + + Activa "Click en la ventana clonada" en la ventana que se ha clonado. + + + Activar Click a través + + + OnTopReplica se comporta como una ventana transparente a través de la cual puede hacer click sobre lo que se encuentra detrás. + + + Cerrar + + + Cierra OnToopReplica + + + 2:1 Doble + + + Pantalla completa + + + 1:2 Mitad + + + 1:1 Tamaño original + + + 1:4 Un cuarto + + + Efecto vidrio + + + Activa o desactiva el efecto vidrio. + + + Modo en grupo + + + OnTopReplica clonará automáticamente una ventana de un grupo definido, eligiendo la que no ha estado en primer plano durante más tiempo. + + + 100% (opaco) + + + OnTopReplica será totalmente opaco. + + + Establece OnTopReplica al 25% de opacidad. + + + Establece OnTopReplica al 50% de opacidad. + + + Establece OnTopReplica al 75% de opacidad. + + + Opacidad + + + Abrir + + + Muestra OnTopReplica. + + + Abajo a la izquierda + + + Abajo a la derecha + + + Posición + + + Posiciona automáticamente OnTopReplica sobre el monitor actual. + + + Arriba a la izquierda + + + Arriba a la derecha + + + Salir del modo pantalla completa + + + Restaurar última posición y tamaño + + + Activa o desactiva si OnTopReplica debe guardar la última posición y tamaño y usarla cuando se reinicie. + + + Minimizar + + + Minimiza OnTopReplica a la barra de tareas (o de sistema). + + + Seleccionar región + + + Activa o desactiva "Seleccionar región", que permite seleccionar una región específica de la ventana clonada. + + + Reiniciar ventana + + + Reinicia los ajustes de OnTopReplica y la ventana principal + + + Cambiar tamaño + + + Ir a la ventana original + + + Activa la ventana original y ocuta OnTopReplica. + + + Seleccionar ventana + + + - ninguna - + + + Muestra una lista de ventanas que se pueden clonar. + + + - entera - + + + Región actual: + + + Borrar + + + Hecho + + + Altura + + + Reiniciar ventana + + + Guardar + + + Regiones guardadas + + + Regiones: + + + Anchura + + + Click derecho para empezar... + + + Una copia ligera de la ventana en tiempo real de una ventana a su elección. + + + OnTopReplica busca actualizaciones automáticamente. + + + Actualizar ahora! + + \ No newline at end of file diff --git a/OnTopReplica/Strings.fi.resx b/OnTopReplica/Strings.fi.resx new file mode 100644 index 0000000..f50a611 --- /dev/null +++ b/OnTopReplica/Strings.fi.resx @@ -0,0 +1,15 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/OnTopReplica/Strings.it.Designer.cs b/OnTopReplica/Strings.it.Designer.cs new file mode 100644 index 0000000..e69de29 diff --git a/OnTopReplica/Strings.it.resx b/OnTopReplica/Strings.it.resx new file mode 100644 index 0000000..3010b1f --- /dev/null +++ b/OnTopReplica/Strings.it.resx @@ -0,0 +1,490 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annulla il processo di aggiornamento. + + + Mostra dettagli su OnTopReplica. + + + Resetta tutte le impostazioni di OnTopReplica. + + + Aggiorna OnTopReplica ora. + + + <html> + <head> + <style type="text/css"> +body { + font-family: Segoe UI, Arial, sans-serif; + font-size: 0.8em; + margin: 0; +padding: 0.75em; +} +h1 { + font-size: 1.4em; + font-weight: bold; + + margin: 1em 0 0.4em 0; + padding: 0; +} +p { + margin: 0.5em 0 0.5em 1em; + padding: 0; +} +a { + font-weight: bold; + color: blue; +} +a:hover { + color: red; +} + </style> + </head> + + <body> + + <h1>Licenza d'utilizzo</h1> + + <p><b>OnTopReplica</b> è rilasciato sotto la licenza <a href="http://opensource.org/licenses/ms-rl.html">Microsoft Reciprocal License (Ms-RL)</a>.</p> + <p>Il codice sorgente originale del programma è disponibile sulla <a href="http://www.codeplex.com/ontopreplica">homepage del progetto su CodePlex</a>.</p> + + <h1>Credits</h1> + + <p>OnTopReplica è stato inspirato da <a href="http://insentient.net">Switcher</a> ed altre applicazioni basate su DWM.</p> + + <p>I controlli utente specifici per Windows Vista sono parte della libreria <a href="http://www.codeplex.com/windowsformsaero">WindowsFormsAero</a> per .NET.</p> + + <p>Qualche riga di codice d'esempio presa da <a href="http://www.ookii.org">Ookii</a> su Channel9.</p> + + <p>La classe NativeToolstripRenderer è stata presa da <a href="http://wp.asztal.net/2007/12/vista-style-menus-in-dotnet/">asztal.net</a>.</p> + + <p>Alcune delle icone sono state prese da <a href="http://www.vistaico.com">VistaICO.com</a> e dal set di icone Xiao.</p> + + </body> +</html> + + + OnTopReplica + + + Ripristinare completamente la finestra? + + + &Ripristina +Tutte le impostazioni saranno perse. + + + Può essere usato se si è perso il controllo della finestra o si è spostata oltre ai bordi dello schermo. + + + Ripristino + + + Resettare impostazioni? + + + Questa procedura resetterà tutte le impostazioni di OnTopReplica e cancellerà tutte le informazioni memorizzate (come, ad esempio, le regioni salvate). + + + Reimposta + + + Scaricare OnTopReplica {0}? + {0} update version + + + Annulla aggiornamento +OnTopReplica si aggiornerà in un secondo momento. + + + Continua +Scarica OnTopReplica {0}. + {0} update version + + + Sarà possibile scaricare la nuova versione ed installarla. + + + Versione installata: {0} +Versione disponibile: {1} + {0} installed version number +{1} online available version number + + + Aggiornamento disponibile + + + &Annulla + + + Creato da: Lorenz Cuno Klopfenstein. + + + Disegna una regione usando il mouse. + + + Dettagli + + + Dettagli su Windows Aero + + + Windows Aero è disponibile soltanto su Windows Vista Home Premium o superiore. + + + Il servizio di Desktop Composition Aero non è attivo. + + + È necessario attivare la "composizione del desktop" (DWM) selezionando "Windows Aero" come tema utilizzato da Windows. + +Per farlo, clicca col tasto destro del mouse sul desktop e poi su Personalizza. + + + Dettagli errore + + + Errore: + + + Sembra che la finestra selezionata sia stata chiusa o che non sia più valida. + + + Errore + + + La "composzione del desktop" non è supportata dal tuo sistema operativo. +È necessario utilizzare Windows Vista o superiore per avviare OnTopReplica. + + + Desktop Composition (DWM) non supportato + + + Nessuna finestra clonata al momento. + + + Impossibile clonare la finestra + + + Impossibile adattare la finestra. + + + Impossibile controllare gli aggiornamenti. + + + Sembra che OnTopReplica non sia stato installato usando 'ClickOnce'. Sarà necessario aggiornare manualmente il programma visitando <a href="http://ontopreplica.codeplex.com">la homepage del progetto</a>. + + + Non è stato possibile controllare se esiste una versione più aggiornata di OnTopReplica. Verificare di essere connessi ad Internet. Se la connessione è attiva, è possibile che il sito ufficiale sia temporaneamente offline. + + + Modalità + + + Sempre in cima + + + OnTopReplica sarà sempre la finestra sopra a tutte le altre. + + + Click through + + + OnTopReplica si comporterà come uno schermo trasparente, che permette di cliccare sulle finestre al di sotto. + + + Normale + + + Si comporta come una finestra normale. Puoi portare altre finestre sopra OnTopReplica. + + + OnTopReplica a pieno schermo + + + Disattiva + + + Abilita modalità + + + Seleziona più finestre per attivare. + + + Modalità Gruppo attivata. + + + Modalità Gruppo di finestre: + + + Finestre + Column Header of list, simply refers to available windows to be cloned + + + Sito internet: www.codeplex.com/ontopreplica. + + + Attivare la modalità di inoltro dei clic? + + + In questa modalità, OnTopReplica inoltrerà tutti i clic del pulsante sinistro sul clone della finestra alla finestra originale (questo permetterà di interagire in maniera basilare con la finestra clonata, senza averla in primo piano). + +Per uscire da questa modalità, usa il tasto ESC. + + + Inoltro dei clic + + + Attivare la modalità Click-Through? + + + La modalità "Click-Through" funziona solo se l'opzione è stata attivata e se la finestra è semitrasparente. + + + In questa modalità la finestra clonata si comporterà come una maschera semitrasparente che permette di cliccare sulle finestre dietro di essa. + +Per tornare alla modalità normale in qualsiasi momento, attiva OnTopReplica (dalla barra delle applicazioni). + + + No, grazie. +Puoi abilitare il Click-Through in futuro + + + Abilita Click-Through + + + Modalità Click-Through + + + OnTopReplica è stato aggiornato. + + + Per utilizzare la nuova versione di OnTopReplica è necessario riavviare l'applicazione. + + + Aggiornamento completato + + + La versione più aggiornata è già installata. + + + Nessun aggiornamento disponibile + + + Lingua + + + A proposito di... + + + Nasconde la finestra principale e mostra una schermata di informazioni. + + + Avanzate + + + Bordo + + + Abilita o disabilita il bordo della finestra. + + + Inoltro dei clic + + + Attiva la modalità di "inoltro dei clic" alla finestra clonata. + + + Abilita Click-Through + + + OnTopReplica si comporterà come una schermata trasparente, permettendo di cliccare sulle finestre al di sotto di essa. + + + Chiudi + + + Termina OnTopReplica. + + + 2:1 Doppio + + + Tutto schermo + + + 1:2 Metà + + + 1:1 Clone esatto + + + 1:4 Quarto + + + Effetto vetro + + + Abilita o disabilita l'effetto vetro. + + + Modalità Gruppo di finestre + + + OnTopReplica clonerà automaticamente una finestra di un gruppo, scegliendo quella che non è stata in primo piano da più tempo. + + + 100% (opaco) + + + Imposta OnTopReplica come finestra completamente opaca. + + + 25% + + + Imposta l'opacità di OnTopReplica al 25%. + + + 50% + + + Imposta l'opacità di OnTopReplica al 50%. + + + 75% + + + Imposta l'opacità di OnTopReplica al 75%. + + + Opacità + + + Apri + + + Attiva la finestra di OnTopReplica. + + + In basso a sinistra + + + In basso a destra + + + Blocco posizione + + + Posiziona automaticamente OnTopReplica sul monitor corrente. + + + In alto a sinistra + + + In alto a destra + + + Esci da tutto schermo + + + Ripristina posizione e grandezza + + + Imposta se, al prossimo avvio di OnTopReplica, debbano essere ripristinati i valori di grandezza e posizione della finestra alla chiusura. + + + Minimizza + + + Riduce OnTopReplica ad un'icona nella barra delle applicazioni. + + + Seleziona regione... + + + Passa alla modalità di "selezione di regione", che permette di limitare la porzione di finestra che viene clonata. + + + Reimposta finestra + + + Reimposta OnTopReplica e la sua finestra principale. + + + Ridimensionamento + + + Vai alla finestra originale + + + Mostra la finestra originale e nasconde OnTopReplica. + + + Seleziona finestra + + + - nessuna - + + + Mostra una lista di finestre che è possibile clonare. + + + - intera - + + + Regione corrente: + + + Cancella + + + Chiudi + + + Altezz. + + + Reset + + + Salva + + + Regioni memorizzate + + + Regioni: + + + Largh. + + + Clic destro qui per iniziare... + + + Una copia leggera, in tempo reale e sempre in primo piano di una finestra a tua scelta. + + + OnTopReplica controlla automaticamente se sono presenti aggiornamenti. + + + Aggiorna! + + + Disabilitato + + \ No newline at end of file diff --git a/OnTopReplica/Strings.no.resx b/OnTopReplica/Strings.no.resx new file mode 100644 index 0000000..f50a611 --- /dev/null +++ b/OnTopReplica/Strings.no.resx @@ -0,0 +1,15 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/OnTopReplica/Strings.pt.resx b/OnTopReplica/Strings.pt.resx new file mode 100644 index 0000000..f50a611 --- /dev/null +++ b/OnTopReplica/Strings.pt.resx @@ -0,0 +1,15 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/OnTopReplica/Strings.resx b/OnTopReplica/Strings.resx new file mode 100644 index 0000000..98e0e0f --- /dev/null +++ b/OnTopReplica/Strings.resx @@ -0,0 +1,493 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Abort update process. + + + Show details about OnTopReplica. + + + Reset all OnTopReplica settings. + + + Update OnTopReplica now. + + + <html> + <head> + <style type="text/css"> +body { + font-family: Segoe UI, Arial, sans-serif; + font-size: 0.8em; + margin: 0; +padding: 0.75em; +} +h1 { + font-size: 1.4em; + font-weight: bold; + + margin: 1em 0 0.4em 0; + padding: 0; +} +p { + margin: 0.5em 0 0.5em 1em; + padding: 0; +} +a { + font-weight: bold; + color: blue; +} +a:hover { + color: red; +} + </style> + </head> + + <body> + + <h1>License</h1> + + <p><b>OnTopReplica</b> is licensed under the <a href="http://opensource.org/licenses/ms-rl.html">Microsoft Reciprocal License (Ms-RL)</a>.</p> + <p>The original source code can be found on the <a href="http://www.codeplex.com/ontopreplica">project's homepage on CodePlex</a>.</p> + + <h1>Credits</h1> + + <p>OnTopReplica was inspired by <a href="http://insentient.net">Switcher</a> and other DWM based applications.</p> + + <p>All Vista controls are part of the <a href="http://www.codeplex.com/windowsformsaero">WindowsFormsAero library</a> for .NET.</p> + + <p>Some example code taken from <a href="http://www.ookii.org">Ookii</a> on Channel9.</p> + + <p>NativeToolstripRenderer class taken from <a href="http://wp.asztal.net/2007/12/vista-style-menus-in-dotnet/">asztal.net</a>.</p> + + <p>Some icons from <a href="http://www.vistaico.com">VistaICO.com</a> and the Xiao icon set.</p> + + </body> +</html> + + + OnTopReplica + + + Reset window completely? + + + &Reset +All settings will be lost. + + + Can be used to reset all settings if you lost control over the window or moved it beyond the screen boundary. + + + Reset + + + Reset settings? + + + This will erase all settings of OnTopReplica, returning it to the original state right after installation (all saved information, like stored regions, will be lost). + + + Reset settings + + + Download OnTopReplica {0}? + {0} update version + + + Cancel update +OnTopReplica will prompt you the next time it is started. + + + Download +Install OnTopReplica {0}. + {0} update version + + + The new version can be downloaded and installed from the official website. + + + Installed version: {0} +Available version: {1} + {0} installed version number +{1} online available version number + + + Update available + + + &Cancel + + + Created by: Lorenz Cuno Klopfenstein. + + + Draw regions using mouse. + + + Details + + + Details on Windows Aero + + + Windows Aero is only available on Windows Vista Home Premium or higher. + + + Desktop Composition' is not enabled. + + + You must enable desktop composition, by selecting 'Windows Aero' as the theme used by Windows. + +To do so, right-click on the desktop and click on Personalize. + + + Error details + + + Error: + + + It appears that the selected window has been closed or is not valid anymore. + + + Error + + + Desktop Composition' is not supported on your Operating System. +You must run this application on Windows Vista Home Premium or better. + + + Desktop Composition unsupported + + + No thumbnail loaded. + + + Unable to create thumbnail + + + Unable to fit window. + + + Unable to check for updates. + + + It appears that OnTopReplica wasn't installed using 'ClickOnce'. You'll have to update manually (visit <a href="http://ontopreplica.codeplex.com">OnTopReplica's homepage</a>). + + + OnTopReplica was unable to check whether an updated version is available. Make sure you are connected to the Internet. If you are, the website may be temporarily down. + + + Mode + + + Always on top + + + Forces OnTopReplica to stay always on top. + + + Click through + + + OnTopReplica will behave like a transparent overlay that lets your clicks through to the windows below. + + + Standard + + + Behaves like an ordinary window. You can bring other windows above OnTopReplica. + + + OnTopReplica fullscreen + + + Disable + + + Enable Group mode + + + Select multiple windows to enable. + + + Group switch mode is enabled. + + + Group switch mode: + + + Windows + Column Header of list, simply refers to available windows to be cloned + + + Homepage: www.codeplex.com/ontopreplica. + + + Do you want to enable "click forwarding"? + + + If this mode is enabled, OnTopReplica will forward all left mouse clicks to the window that is being cloned (this will allow you to do basic mouse operations on the cloned window without having to activate it). + +To exit this mode, push ESC. + + + Click forwarding + + + Enable Click-Through mode? + + + Click-through only works if it has been enabled in the Resize submenu and if the window is semi-transparent. + + + In this mode the fullscreen window will behave as a partially transparent overlay, allowing you to click on the other windows behind it. + +To return to normal mode anytime, activate OnTopReplica by clicking on the task bar (or the tray icon). + + + No, thank you. +You can enable click-through later + + + Use Click-Through + + + Click-Through mode + + + OnTopReplica has been updated. + + + In order to use the updated version of OnTopReplica you'll have to restart the application. + + + Update successful + + + OnTopReplica is up to date. + + + No update available + + + Language + + + About... + + + Hides the main window and displays the "about" box. + + + Advanced + + + Chrome + + + Toggles the display of the window chrome. + + + Enable Click forwarding + + + Enable "click forwarding" to the cloned window. + + + Enable Click-Through + + + OnTopReplica will behave like a transparent overlay that lets your clicks through to the windows below. + + + Close + + + Closes OnTopReplica. + + + 2:1 Double + + + Fullscreen + + + 1:2 Half + + + 1:1 Fit to window + + + 1:4 Quarter + + + Glass + + + Toggles "glass mode" on and off. + + + Group Switch mode + + + OnTopReplica will automatically clone a window from an user defined group, switching to the one least recently activated to the foreground. + + + 100% (opaque) + + + Sets OnTopReplica to be completely opaque. + + + 25% + + + Sets OnTopReplica to 25% opacity. + + + 50% + + + Sets OnTopReplica to 50% opacity. + + + 75% + + + Sets OnTopReplica to 75% opacity. + + + Opacity + + + Open + + + Displays OnTopReplica. + + + Bottom Left + + + Bottom Right + + + Position lock + + + Automatically position OnTopReplica on the current screen. + + + Top Left + + + Top Right + + + Quit fullscreen mode + + + Recall last position and size + + + Toggles whether OnTopReplica should store its last position and size and use them when it is restarted. + + + Minimize + + + Minimizes OnTopReplica to the task bar (or the tray). + + + Select region... + + + Switches to "region mode", that allows you to select a limited region of the source's window as thumbnail. + + + Reset window + + + Resets OnTopReplica settings and its main window. + + + Resize + + + Switch to window + + + Switches to the source window and hides OnTopReplica. + + + Select window + + + - none - + + + Displays a list of window you can select as thumbnail source. + + + - whole - + + + Current region: + + + Delete + + + Done + + + Height + + + Reset + + + Save + + + Stored regions + + + Regions: + + + Width + + + Right-click here to start... + + + A lightweight, real-time, always on top thumbnail of a window of your choice. + + + OnTopReplica automatically checks for updates. No information is logged at any point. + + + Update now! + + + Center + + + Disabled + + \ No newline at end of file diff --git a/OnTopReplica/Strings.ru.resx b/OnTopReplica/Strings.ru.resx new file mode 100644 index 0000000..f50a611 --- /dev/null +++ b/OnTopReplica/Strings.ru.resx @@ -0,0 +1,15 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/OnTopReplica/ThumbnailPanel.cs b/OnTopReplica/ThumbnailPanel.cs new file mode 100644 index 0000000..44d3979 --- /dev/null +++ b/OnTopReplica/ThumbnailPanel.cs @@ -0,0 +1,447 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using VistaControls.Dwm; +using VistaControls.ThemeText; +using System.Drawing; +using System.Windows.Forms.VisualStyles; +using OnTopReplica.Native; + +namespace OnTopReplica { + + class ThumbnailPanel : Panel { + + //DWM Thumbnail stuff + Thumbnail _thumbnail = null; + Rectangle _regionCurrent; + + //Labels + ThemedLabel _labelGlass; + + public ThumbnailPanel() { + InitFormComponents(); + } + + private void InitFormComponents() { + BackColor = Color.Black; + + //Themed Label + _labelGlass = new ThemedLabel { + Dock = DockStyle.Fill, + ForeColor = SystemColors.ControlText, + Location = Point.Empty, + Size = ClientSize, + Name = "labelGlass", + Text = Strings.RightClick, + TextAlign = HorizontalAlignment.Center, + TextAlignVertical = VerticalAlignment.Center + }; + this.Controls.Add(_labelGlass); + } + + #region Properties and settings + + /// + /// Gets or sets the region that is currently shown on the thumbnail. When set, also enabled region constrain. + /// + public Rectangle SelectedRegion { + get { + return _regionCurrent; + } + set { + _regionCurrent = value; + ConstrainToRegion = true; + } + } + + bool _regionEnabled = false; + + /// + /// Gets or sets whether the thumbnail is constrained to a region or not. + /// + public bool ConstrainToRegion { + get { + return _regionEnabled; + } + set { + _regionEnabled = value; + UpdateThubmnail(); + } + } + + bool _drawMouseRegions = false; + + /// + /// Gets or sets whether the control is is "region drawing" mode and reports them via events. + /// + public bool DrawMouseRegions { + get { + return _drawMouseRegions; + } + set { + //Set mode and reset region + _drawMouseRegions = value; + _drawingRegion = false; + + //Cursor change + Cursor = (value) ? Cursors.Cross : Cursors.Default; + + //Refresh gui + UpdateThubmnail(); + _labelGlass.Visible = !value; + this.Invalidate(); + } + } + + /// + /// Gets the target opacity of the thumbnail, depending on the control's state. + /// + protected byte ThumbnailOpacity { + get { + return (_drawMouseRegions) ? (byte)130 : (byte)255; + } + } + + /// + /// Gets or sets whether the control should report clicks made on the cloned thumbnail. + /// + public bool ReportThumbnailClicks { + get; + set; + } + + /// + /// Gets the thumbnail's original size. + /// + public Size ThumbnailOriginalSize { + get { + if (_thumbnail != null && !_thumbnail.IsInvalid) { + if (_regionEnabled) + return _regionCurrent.Size; + + return _thumbnail.SourceSize; + } + else + throw new Exception(Strings.ErrorNoThumbnail); + } + } + + #endregion + + #region GUI event handling + + protected override void OnResize(EventArgs eventargs) { + base.OnResize(eventargs); + UpdateThubmnail(); + } + + protected override void WndProc(ref Message m) { + base.WndProc(ref m); + + //Check whether this is a hit-test on "client" surface + if (m.Msg == WM.NCHITTEST && m.Result.ToInt32() == HT.CLIENT) { + //Check whether clicks must be reported + if(!DrawMouseRegions && !ReportThumbnailClicks /*&& !InputMethods.IsKeyPressed(VirtualKeyState.VK_SHIFT)*/){ + m.Result = new IntPtr(HT.TRANSPARENT); + } + } + } + + #endregion + + #region Thumbnail interface + + /// + /// Creates a new thumbnail of a certain window. + /// + /// Handle of the window to clone. + public void SetThumbnailHandle(WindowHandle handle) { + if (_thumbnail != null && !_thumbnail.IsInvalid) + _thumbnail.Close(); + + //Get form and register thumbnail on it + Form owner = this.TopLevelControl as Form; + if(owner == null) + throw new Exception("Internal error: ThumbnailPanel.TopLevelControl is not a Form."); + + _labelGlass.Visible = false; + + _thumbnail = DwmManager.Register(owner, handle.Handle); + ConstrainToRegion = false; //this also invokes a thumbnail update + } + + /// + /// Disposes current thumbnail and enters stand-by mode. + /// + public void UnsetThumbnail() { + if (_thumbnail != null && !_thumbnail.IsInvalid) + _thumbnail.Close(); + + _thumbnail = null; + _labelGlass.Visible = true; + } + + /// + /// Gets whether the control is currently displaying a thumbnail. + /// + public bool IsShowingThumbnail { + get { + return (_thumbnail != null && !_thumbnail.IsInvalid); + } + } + + int _padWidth = 0; + int _padHeight = 0; + Size _thumbnailSize; + + /// + /// Updates the thumbnail options and the right-click label. + /// + private void UpdateThubmnail() { + if (_thumbnail != null && !_thumbnail.IsInvalid){ + try { + Size sourceSize = ThumbnailOriginalSize; + _thumbnailSize = ComputeIdealSize(sourceSize, Size); + + _padWidth = (Size.Width - _thumbnailSize.Width) / 2; + _padHeight = (Size.Height - _thumbnailSize.Height) / 2; + + var target = new Rectangle(_padWidth, _padHeight, _thumbnailSize.Width, _thumbnailSize.Height); + Rectangle source = (_regionEnabled) ? _regionCurrent : new Rectangle(Point.Empty, _thumbnail.SourceSize); + + _thumbnail.Update(target, source, ThumbnailOpacity, true, true); + } + catch { + //Any error updating the thumbnail forces to unset (handle may not be valid anymore) + UnsetThumbnail(); + return; + } + } + } + + /// + /// Computes ideal thumbnail size given an original size and a target to fit. + /// + /// Size of the original thumbnail. + /// Size of the client area to fit. + private Size ComputeIdealSize(Size sourceSize, Size clientSize) { + double sourceRatio = (double)sourceSize.Width / (double)sourceSize.Height; + double clientRatio = (double)clientSize.Width / (double)clientSize.Height; + + Size ret; + if (sourceRatio >= clientRatio) { + ret = new Size(clientSize.Width, (int)((double)clientSize.Width / sourceRatio)); + } + else { + ret = new Size((int)((double)clientSize.Height * sourceRatio), clientSize.Height); + } + + return ret; + } + + #endregion + + #region Region drawing + + //Set if currently drawing a window (first click/drag was initiated) + bool _drawingRegion = false; + //Set if drawing was suspended because the mouse left the control + bool _drawingSuspended = false; + Point _regionStartPoint; + Point _regionLastPoint; + + public delegate void RegionDrawnHandler(object sender, Rectangle region); + + public event RegionDrawnHandler RegionDrawn; + + protected virtual void OnRegionDrawn(Rectangle region) { + //Fix region if necessary (bug report by Gunter, via comment) + if (region.Width < 1) region.Width = 1; + if (region.Height < 1) region.Height = 1; + + var evt = RegionDrawn; + if (evt != null) + evt(this, region); + } + + /// + /// Raises a RegionDrawn event, given a starting and an ending point of the drawn region. + /// + protected void RaiseRegionDrawn(Point start, Point end) { + if (_thumbnailSize.Width < 1 || _thumbnailSize.Height < 1) //causes DivBy0 + return; + + //Compute bounds + int left = Math.Min(start.X, end.X); + int right = Math.Max(start.X, end.X); + int top = Math.Min(start.Y, end.Y); + int bottom = Math.Max(start.Y, end.Y); + + //Clip to boundaries + left = Math.Max(0, left); + right = Math.Min(_thumbnailSize.Width, right); + top = Math.Max(0, top); + bottom = Math.Min(_thumbnailSize.Height, bottom); + + //Compute region rectangle in thumbnail coordinates + var startPoint = ClientToThumbnail(new Point(left, top)); + var endPoint = ClientToThumbnail(new Point(right, bottom)); + var final = new Rectangle( + startPoint, + new Size(endPoint.X - startPoint.X, endPoint.Y - startPoint.Y) + ); + + //Update region + SelectedRegion = final; + OnRegionDrawn(final); + } + + protected override void OnMouseDown(MouseEventArgs e) { + if (DrawMouseRegions && e.Button == MouseButtons.Left) { + //Start new region drawing + _drawingRegion = true; + _drawingSuspended = false; + _regionStartPoint = _regionLastPoint = e.Location; + + this.Invalidate(); + } + + base.OnMouseDown(e); + } + + protected override void OnMouseUp(MouseEventArgs e) { + if (DrawMouseRegions && e.Button == MouseButtons.Left) { + //Region completed + _drawingRegion = false; + _drawingSuspended = false; + RaiseRegionDrawn(_regionStartPoint, _regionLastPoint); + + this.Invalidate(); + } + + base.OnMouseUp(e); + } + + protected override void OnMouseLeave(EventArgs e) { + _drawingSuspended = true; + + this.Invalidate(); + + base.OnMouseLeave(e); + } + + protected override void OnMouseEnter(EventArgs e) { + _drawingSuspended = false; + + this.Invalidate(); + + base.OnMouseEnter(e); + } + + protected override void OnMouseMove(MouseEventArgs e) { + if (_drawingRegion && e.Button == MouseButtons.Left) { + //Continue drawing + _regionLastPoint = e.Location; + + this.Invalidate(); + } + else if(DrawMouseRegions && !_drawingRegion){ + //Keep track of region start point + _regionLastPoint = e.Location; + + this.Invalidate(); + } + + base.OnMouseMove(e); + } + + Pen penRed = new Pen(Color.FromArgb(255, Color.Red), 1.0f); + + protected override void OnPaint(PaintEventArgs e) { + if (_drawingRegion) { + //Is currently drawing, show rectangle + int left = Math.Min(_regionStartPoint.X, _regionLastPoint.X); + int right = Math.Max(_regionStartPoint.X, _regionLastPoint.X); + int top = Math.Min(_regionStartPoint.Y, _regionLastPoint.Y); + int bottom = Math.Max(_regionStartPoint.Y, _regionLastPoint.Y); + + e.Graphics.DrawRectangle(penRed, left, top, right - left, bottom - top); + } + else if (DrawMouseRegions && ! _drawingSuspended) { + //Show cursor coordinates + e.Graphics.DrawLine(penRed, new Point(0, _regionLastPoint.Y), new Point(ClientSize.Width, _regionLastPoint.Y)); + e.Graphics.DrawLine(penRed, new Point(_regionLastPoint.X, 0), new Point(_regionLastPoint.X, ClientSize.Height)); + } + + base.OnPaint(e); + } + + #endregion + + #region Thumbnail clone click + + protected override void OnMouseClick(MouseEventArgs e) { + base.OnMouseClick(e); + + if (_thumbnail == null) + return; + + //Raise clicking event to allow click forwarding + if (ReportThumbnailClicks) { + OnCloneClick(ClientToThumbnail(e.Location), e.Button, false); + } + } + + protected override void OnMouseDoubleClick(MouseEventArgs e) { + base.OnMouseDoubleClick(e); + + if (_thumbnail == null) + return; + + //Raise double clicking event to allow click forwarding + if (ReportThumbnailClicks) { + OnCloneClick(ClientToThumbnail(e.Location), e.Button, true); + } + } + + /// + /// Is raised when the thumbnail clone is clicked. + /// + public event EventHandler CloneClick; + + protected virtual void OnCloneClick(Point location, MouseButtons buttons, bool doubleClick){ + var evt = CloneClick; + if(evt != null) + evt(this, new CloneClickEventArgs(location, buttons, doubleClick)); + } + + #endregion + + /// + /// Convert a point in client coordinates to a point expressed in terms of a cloned thumbnail window. + /// + /// Point in client coordinates. + protected Point ClientToThumbnail(Point position) { + //Compensate padding + position.X -= _padWidth; + position.Y -= _padHeight; + + PointF proportionalPosition = new PointF( + (float)position.X / _thumbnailSize.Width, + (float)position.Y / _thumbnailSize.Height + ); + + //Get real pixel region info + Size source = (_regionEnabled) ? _regionCurrent.Size : _thumbnail.SourceSize; + Point offset = (_regionEnabled) ? _regionCurrent.Location : Point.Empty; + + return new Point( + (int)((proportionalPosition.X * source.Width) + offset.X), + (int)((proportionalPosition.Y * source.Height) + offset.Y) + ); + } + + } + +} diff --git a/OnTopReplica/Update/UpdateCheckCompletedEventArgs.cs b/OnTopReplica/Update/UpdateCheckCompletedEventArgs.cs new file mode 100644 index 0000000..6482835 --- /dev/null +++ b/OnTopReplica/Update/UpdateCheckCompletedEventArgs.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OnTopReplica.Update { + class UpdateCheckCompletedEventArgs : EventArgs { + + public UpdateInformation Information { get; set; } + + public bool Success { get; set; } + + public Exception Error { get; set; } + + } +} diff --git a/OnTopReplica/Update/UpdateInformation.cs b/OnTopReplica/Update/UpdateInformation.cs new file mode 100644 index 0000000..f605223 --- /dev/null +++ b/OnTopReplica/Update/UpdateInformation.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Serialization; +using System.IO; +using System.Xml; + +namespace OnTopReplica.Update { + + /// + /// Contains information about the latest OnTopReplica update available. + /// + public class UpdateInformation { + + Version _latestVersion; + + /// + /// Gets the latest available version of the software. + /// + [XmlIgnore] + public Version LatestVersion { + get { + return _latestVersion; + } + set { + _latestVersion = value; + } + } + + [XmlElement("latestVersion")] + public string LatestVersionInternal { + get { + return _latestVersion.ToString(); + } + set { + _latestVersion = new Version(value); + } + } + + /// + /// Indicates when the latest version was released. + /// + [XmlElement("latestVersionRelease")] + public DateTime LatestVersionRelease { get; set; } + + /// + /// Gets the URL of the page that allows the user to download the updated installer. + /// + [XmlElement("downloadPage")] + public string DownloadPage { get; set; } + + /// + /// Deserializes an UpdateInformation object from a stream. + /// + public static UpdateInformation Deserialize(Stream source) { + var serializer = new XmlSerializer(typeof(UpdateInformation)); + var info = serializer.Deserialize(source) as UpdateInformation; + return info; + } + + public static string Serialize(UpdateInformation information) { + var serializer = new XmlSerializer(typeof(UpdateInformation)); + var sb = new StringBuilder(); + using(var writer = new StringWriter(sb)){ + serializer.Serialize(writer, information); + } + return sb.ToString(); + } + + } + +} diff --git a/OnTopReplica/Update/UpdateManager.cs b/OnTopReplica/Update/UpdateManager.cs new file mode 100644 index 0000000..ea138e7 --- /dev/null +++ b/OnTopReplica/Update/UpdateManager.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; +using System.Net.Cache; +using System.IO; +using System.Reflection; +using VistaControls.TaskDialog; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; + +namespace OnTopReplica.Update { + + class UpdateManager { + + const string UpdateManifestUrl = "http://www.klopfenstein.net/public/Uploads/ontopreplica/update.xml"; + + public void CheckForUpdate() { + ThreadPool.QueueUserWorkItem(new WaitCallback(o => { + //Build web request + var request = (HttpWebRequest)HttpWebRequest.Create(UpdateManifestUrl); + request.AllowAutoRedirect = true; + request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; + request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache); + + try { + //Begin request + var response = request.GetResponse(); + var info = UpdateInformation.Deserialize(response.GetResponseStream()); + + OnUpdateCheckSuccess(info); + } + catch (Exception ex) { + OnUpdateCheckError(ex); + return; + } + })); + } + + public event EventHandler UpdateCheckCompleted; + + protected virtual void OnUpdateCheckError(Exception ex) { + var evt = UpdateCheckCompleted; + if (evt != null) { + evt(this, new UpdateCheckCompletedEventArgs { + Success = false, + Error = ex + }); + } + } + + protected virtual void OnUpdateCheckSuccess(UpdateInformation information) { + var evt = UpdateCheckCompleted; + if (evt != null) { + evt(this, new UpdateCheckCompletedEventArgs { + Success = true, + Information = information + }); + } + } + + /// + /// Handles the results of an update check. Must be called from main GUI thread. + /// + /// The retrieved update information. + /// Determines if the lack of updates should be notified to the user. + public void HandleUpdateCheck(Form parent, UpdateInformation information, bool verbose) { + if (information == null) + return; + + var currentVersion = Assembly.GetExecutingAssembly().GetName().Version; + + if (information.LatestVersion > currentVersion) { + //New version found + var dlg = new TaskDialog( + string.Format(Strings.AskUpdate, information.LatestVersion), + Strings.AskUpdateTitle, + Strings.AskUpdateContent) { + CustomButtons = new CustomButton[] { + new CustomButton(Result.OK, string.Format(Strings.AskUpdateButtonOk, information.LatestVersion)), + new CustomButton(Result.Cancel, Strings.AskUpdateButtonCancel) + }, + UseCommandLinks = true, + CommonIcon = TaskDialogIcon.Information, + ExpandedInformation = string.Format(Strings.AskUpdateExpanded, currentVersion, information.LatestVersion) + }; + + if (dlg.Show(parent).CommonButton == Result.OK) { + Process.Start(information.DownloadPage); + } + } + else if(verbose) { + //No updates, but need to inform the user + var dlg = new TaskDialog(Strings.InfoUpToDate, Strings.InfoUpToDateTitle) { + CommonButtons = TaskDialogButton.OK, + CommonIcon = TaskDialogIcon.Information, + //Footer = information.LatestVersion.ToString() + }; + dlg.Show(); + } + } + + } + +} diff --git a/OnTopReplica/Win32Helper.cs b/OnTopReplica/Win32Helper.cs new file mode 100644 index 0000000..49709ab --- /dev/null +++ b/OnTopReplica/Win32Helper.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.Text; +using OnTopReplica.Native; +using System.Drawing; +using System.Windows.Forms; + +namespace OnTopReplica { + public static class Win32Helper { + + /// Inject a fake left mouse click on a target window, on a location expressed in client coordinates. + /// Target window to click on. + /// Location of the mouse click expressed in client coordiantes of the target window. + /// True if a double click should be injected. + public static void InjectFakeMouseClick(IntPtr window, CloneClickEventArgs clickArgs) { + NPoint clientClickLocation = NPoint.FromPoint(clickArgs.ClientClickLocation); + NPoint scrClickLocation = WindowManagerMethods.ClientToScreen(window, clientClickLocation); + + //HACK (?) + //If target window has a Menu (which appears on the thumbnail) move the clicked location down + //in order to adjust (the menu isn't part of the window's client rect). + IntPtr hMenu = WindowMethods.GetMenu(window); + if (hMenu != IntPtr.Zero) + scrClickLocation.Y -= SystemInformation.MenuHeight; + + IntPtr hChild = GetRealChildControlFromPoint(window, scrClickLocation); + NPoint clntClickLocation = WindowManagerMethods.ScreenToClient(hChild, scrClickLocation); + + if (clickArgs.Buttons == MouseButtons.Left) { + if(clickArgs.IsDoubleClick) + InjectDoubleLeftMouseClick(hChild, clntClickLocation); + else + InjectLeftMouseClick(hChild, clntClickLocation); + } + else if (clickArgs.Buttons == MouseButtons.Right) { + if(clickArgs.IsDoubleClick) + InjectDoubleRightMouseClick(hChild, clntClickLocation); + else + InjectRightMouseClick(hChild, clntClickLocation); + } + } + + private static void InjectLeftMouseClick(IntPtr child, NPoint clientLocation) { + IntPtr lParamClickLocation = MessagingMethods.MakeLParam(clientLocation.X, clientLocation.Y); + + MessagingMethods.PostMessage(child, WM.LBUTTONDOWN, new IntPtr(MK.LBUTTON), lParamClickLocation); + MessagingMethods.PostMessage(child, WM.LBUTTONUP, new IntPtr(MK.LBUTTON), lParamClickLocation); + +#if DEBUG + Console.WriteLine("Left click on window #" + child.ToString() + " at " + clientLocation.ToString()); +#endif + } + + private static void InjectRightMouseClick(IntPtr child, NPoint clientLocation) { + IntPtr lParamClickLocation = MessagingMethods.MakeLParam(clientLocation.X, clientLocation.Y); + + MessagingMethods.PostMessage(child, WM.RBUTTONDOWN, new IntPtr(MK.RBUTTON), lParamClickLocation); + MessagingMethods.PostMessage(child, WM.RBUTTONUP, new IntPtr(MK.RBUTTON), lParamClickLocation); + +#if DEBUG + Console.WriteLine("Right click on window #" + child.ToString() + " at " + clientLocation.ToString()); +#endif + } + + private static void InjectDoubleLeftMouseClick(IntPtr child, NPoint clientLocation) { + IntPtr lParamClickLocation = MessagingMethods.MakeLParam(clientLocation.X, clientLocation.Y); + + MessagingMethods.PostMessage(child, WM.LBUTTONDBLCLK, new IntPtr(MK.LBUTTON), lParamClickLocation); + +#if DEBUG + Console.WriteLine("Double left click on window #" + child.ToString() + " at " + clientLocation.ToString()); +#endif + } + + private static void InjectDoubleRightMouseClick(IntPtr child, NPoint clientLocation) { + IntPtr lParamClickLocation = MessagingMethods.MakeLParam(clientLocation.X, clientLocation.Y); + + MessagingMethods.PostMessage(child, WM.RBUTTONDBLCLK, new IntPtr(MK.RBUTTON), lParamClickLocation); + +#if DEBUG + Console.WriteLine("Double right click on window #" + child.ToString() + " at " + clientLocation.ToString()); +#endif + } + + /// Returns the child control of a window corresponding to a screen location. + /// Parent window to explore. + /// Child control location in screen coordinates. + private static IntPtr GetRealChildControlFromPoint(IntPtr parent, NPoint scrClickLocation) { + IntPtr curr = parent, child = IntPtr.Zero; + do { + child = WindowManagerMethods.RealChildWindowFromPoint(curr, + WindowManagerMethods.ScreenToClient(curr, scrClickLocation)); + + if (child == IntPtr.Zero || child == curr) + break; + + //Update for next loop + curr = child; + } + while (true); + + //Safety check, shouldn't happen + if (curr == IntPtr.Zero) + curr = parent; + + return curr; + } + + /// + /// Gets a handle to the window that currently is in the foreground. + /// + /// May return null if call fails or no valid window selected. + public static WindowHandle GetCurrentForegroundWindow() { + IntPtr handle = WindowManagerMethods.GetForegroundWindow(); + if (handle == IntPtr.Zero) + return null; + + return new WindowHandle(handle, string.Empty); + } + + } +} diff --git a/OnTopReplica/WindowHandle.cs b/OnTopReplica/WindowHandle.cs new file mode 100644 index 0000000..f158e29 --- /dev/null +++ b/OnTopReplica/WindowHandle.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using OnTopReplica.Native; + +namespace OnTopReplica { + + /// Helper class that keeps a window handle (HWND), the title of the window and can load its icon. + public class WindowHandle : System.Windows.Forms.IWin32Window { + + IntPtr _handle; + string _title; + + public WindowHandle(IntPtr p, string title) { + _handle = p; + _title = title; + } + + public string Title { + get { + return _title; + } + } + + Icon _icon = null; + bool _iconFetched = false; + public Icon Icon { + get { + if (!_iconFetched) { + //Fetch icon from window + IntPtr hIcon; + + if (MessagingMethods.SendMessageTimeout(_handle, WM.GETICON, new IntPtr(2), new IntPtr(0), + MessagingMethods.SendMessageTimeoutFlags.AbortIfHung | MessagingMethods.SendMessageTimeoutFlags.Block, 500, out hIcon) == IntPtr.Zero) + hIcon = IntPtr.Zero; + + if (hIcon.ToInt64() != 0) { + _icon = Icon.FromHandle(hIcon); + } + else { + //Fetch icon from window class + hIcon = (IntPtr)WindowMethods.GetClassLong(_handle, WindowMethods.ClassLong.IconSmall); + + if (hIcon.ToInt64() != 0) { + _icon = Icon.FromHandle(hIcon); + } + } + } + + _iconFetched = true; + + return _icon; + } + } + + public override string ToString() { + return _title; + } + + public override bool Equals(object obj) { + if (ReferenceEquals(obj, this)) + return true; + + System.Windows.Forms.IWin32Window win = obj as System.Windows.Forms.IWin32Window; + + if (win == null) + return false; + + return (win.Handle == _handle); + } + + public override int GetHashCode() { + return _handle.GetHashCode(); + } + + #region IWin32Window Members + + public IntPtr Handle { + get { return _handle; } + } + + #endregion + + /// + /// Creates a new windowHandle instance from a given IntPtr handle. + /// + /// Handle value. + public static WindowHandle FromHandle(IntPtr handle) { + return new WindowHandle(handle, string.Empty); + } + + } +} diff --git a/OnTopReplica/WindowListHelper.cs b/OnTopReplica/WindowListHelper.cs new file mode 100644 index 0000000..5a8585e --- /dev/null +++ b/OnTopReplica/WindowListHelper.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using OnTopReplica.Properties; +using OnTopReplica.WindowSeekers; + +namespace OnTopReplica { + /// + /// Extension methods used to apply a window list to a menu. + /// + static class WindowListHelper { + + public class WindowSelectionData { + public WindowHandle Handle { get; set; } + public StoredRegion Region { get; set; } + } + + const int MaxWindowTitleLength = 55; + + /// + /// Populates the menu with a list of windows. + /// + /// The menu to populate. + /// The owning form. + /// The window manager that provides the windows list. + /// The currently used window (will be checked in the list). + /// Event handler for clicks on window items. + public static void PopulateMenu(this ToolStrip menu, Form ownerForm, BaseWindowSeeker windowManager, + WindowHandle currentHandle, EventHandler clickHandler) { + var regions = GetRegions(); + + //Clear + menu.Items.Clear(); + + //"None" selection + var nullTsi = new ToolStripMenuItem(Strings.MenuWindowsNone); + nullTsi.Tag = null; + nullTsi.Click += clickHandler; + nullTsi.Checked = (currentHandle == null); + menu.Items.Add(nullTsi); + + //Add an item for each window + foreach (WindowHandle h in windowManager.Windows) { + //Skip if in the same process + if (h.Handle.Equals(ownerForm.Handle)) + continue; + + var tsi = new ToolStripMenuItem(); + + //Window title + if (h.Title.Length > MaxWindowTitleLength) { + tsi.Text = h.Title.Substring(0, MaxWindowTitleLength) + "..."; + tsi.ToolTipText = h.Title; + } + else + tsi.Text = h.Title; + + //Icon + if (h.Icon != null) { + tsi.Image = h.Icon.ToBitmap(); + } + + //Check if this is the currently displayed window + tsi.Checked = h.Equals(currentHandle); + + //Add direct click if no stored regions + tsi.Tag = new WindowSelectionData { + Handle = h, + Region = null + }; + tsi.Click += clickHandler; + + PopulateRegions(tsi, h, clickHandler, regions); + + menu.Items.Add(tsi); + } + + } + + private static void PopulateRegions(ToolStripMenuItem tsi, WindowHandle handle, + EventHandler clickHandler, IEnumerable regions) { + + if (regions != null) { + //Add subitem for no region + var nullRegionItem = new ToolStripMenuItem(Strings.MenuWindowsWholeRegion); + nullRegionItem.Tag = new WindowSelectionData { + Handle = handle, + Region = null + }; + nullRegionItem.Image = Resources.regions; + nullRegionItem.Click += clickHandler; + tsi.DropDownItems.Add(nullRegionItem); + + foreach (StoredRegion region in regions) { + var regionItem = new ToolStripMenuItem(region.Name); + regionItem.Tag = new WindowSelectionData { + Handle = handle, + Region = region + }; + regionItem.Click += clickHandler; + + tsi.DropDownItems.Add(regionItem); + } + } + } + + private static IEnumerable GetRegions() { + if (Settings.Default.SavedRegions == null || Settings.Default.SavedRegions.Count == 0) + return null; + + StoredRegion[] regions = new StoredRegion[Settings.Default.SavedRegions.Count]; + Settings.Default.SavedRegions.CopyTo(regions); + + Array.Sort(regions, new Comparison((a, b) => { + return a.Name.CompareTo(b.Name); + })); + + return regions; + } + + } +} diff --git a/OnTopReplica/WindowSeekers/BaseWindowSeeker.cs b/OnTopReplica/WindowSeekers/BaseWindowSeeker.cs new file mode 100644 index 0000000..b27bac5 --- /dev/null +++ b/OnTopReplica/WindowSeekers/BaseWindowSeeker.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Text; +using OnTopReplica.Native; + +namespace OnTopReplica.WindowSeekers { + + /// + /// Base class for window seekers that can populate a list of window handles based on some criteria. + /// + abstract class BaseWindowSeeker { + + List _list = new List(); + + /// + /// Get the matching windows from the last refresh. + /// + public IEnumerable Windows { + get { + return _list; + } + } + + /// + /// Forces a window list refresh. + /// + public virtual void Refresh() { + _list.Clear(); + + WindowManagerMethods.EnumWindows( + new WindowManagerMethods.EnumWindowsProc(RefreshCallback), + IntPtr.Zero); + } + + private bool RefreshCallback(IntPtr hwnd, IntPtr lParam) { + bool cont = true; + + //Skip owner + if (hwnd == OwnerHandle) + return true; + + if (SkipNotVisibleWindows && !WindowManagerMethods.IsWindowVisible(hwnd)) + return true; + + //Extract basic properties + string title = WindowMethods.GetWindowText(hwnd); + + if (InspectWindow(hwnd, title, ref cont)) { + //Window has been picked + _list.Add(new WindowHandle(hwnd, title)); + } + + return cont; + } + + /// + /// Inspects a window and returns whether the window should be listed or not. + /// + /// Handle of the window. + /// Title of the window (if any). + /// Indicates whether the inspection loop should terminate after this window. + /// True if the window should be listed. + protected abstract bool InspectWindow(IntPtr hwnd, string title, ref bool terminate); + + /// + /// Gets or sets the window handle of the owner. + /// + /// + /// Windows with this handle will be automatically skipped. + /// + public IntPtr OwnerHandle { get; set; } + + /// + /// Gets or sets whether not visible windows should be skipped. + /// + public bool SkipNotVisibleWindows { get; set; } + + } + +} diff --git a/OnTopReplica/WindowSeekers/ByClassWindowSeeker.cs b/OnTopReplica/WindowSeekers/ByClassWindowSeeker.cs new file mode 100644 index 0000000..acf9c8b --- /dev/null +++ b/OnTopReplica/WindowSeekers/ByClassWindowSeeker.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Text; +using OnTopReplica.Native; + +namespace OnTopReplica.WindowSeekers { + /// + /// Seeks a single window by matching its window class. + /// + /// + /// Class matching is exact and case-sensititve. + /// + class ByClassWindowSeeker : BaseWindowSeeker { + + public ByClassWindowSeeker(string className) { + if (className == null) + throw new ArgumentNullException(); + + ClassName = className; + } + + public string ClassName { get; private set; } + + protected override bool InspectWindow(IntPtr hwnd, string title, ref bool terminate) { + var wndClass = WindowMethods.GetWindowClass(hwnd); + + if (ClassName.Equals(wndClass, StringComparison.CurrentCulture)) { + return true; + } + + return false; + } + + } +} diff --git a/OnTopReplica/WindowSeekers/ByTitleWindowSeeker.cs b/OnTopReplica/WindowSeekers/ByTitleWindowSeeker.cs new file mode 100644 index 0000000..a187138 --- /dev/null +++ b/OnTopReplica/WindowSeekers/ByTitleWindowSeeker.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Text; +using OnTopReplica.Native; + +namespace OnTopReplica.WindowSeekers { + /// + /// Seeks a single window by approximately matching its title. + /// + /// + /// Title search is case-insensitive and matches only the beginning of the windows' titles. + /// + class ByTitleWindowSeeker : BaseWindowSeeker { + + public ByTitleWindowSeeker(string titleSeekString) { + if (titleSeekString == null) + throw new ArgumentNullException(); + + TitleMatch = titleSeekString.Trim().ToLower(); + } + + public string TitleMatch { get; private set; } + + protected override bool InspectWindow(IntPtr hwnd, string title, ref bool terminate) { + //Skip empty titles + if (string.IsNullOrEmpty(title)) + return false; + + //Skip non-top-level windows (skips most internal controls) + bool hasParent = (long)WindowManagerMethods.GetParent(hwnd) != 0; + bool hasOwner = (long)WindowManagerMethods.GetWindow(hwnd, WindowManagerMethods.GetWindowMode.GW_OWNER) != 0; + if (hasParent || hasOwner) + return false; + + var modTitle = title.Trim().ToLower(); + if (modTitle.StartsWith(TitleMatch)) { + terminate = true; //only one needed + return true; + } + + return false; + } + + } +} diff --git a/OnTopReplica/WindowSeekers/TaskWindowSeeker.cs b/OnTopReplica/WindowSeekers/TaskWindowSeeker.cs new file mode 100644 index 0000000..5cad86b --- /dev/null +++ b/OnTopReplica/WindowSeekers/TaskWindowSeeker.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; +using OnTopReplica.Native; + +namespace OnTopReplica.WindowSeekers { + class TaskWindowSeeker : BaseWindowSeeker { + + protected override bool InspectWindow(IntPtr hwnd, string title, ref bool terminate) { + //Code taken from: http://www.thescarms.com/VBasic/alttab.aspx + + //Accept windows that + // - are visible + // - do not have a parent + // - have no owner and are not Tool windows OR + // - have an owner and are App windows + + //Reject empty titles + + if (string.IsNullOrEmpty(title)) + return false; + + if ((long)WindowManagerMethods.GetParent(hwnd) == 0) { + bool hasOwner = (long)WindowManagerMethods.GetWindow(hwnd, WindowManagerMethods.GetWindowMode.GW_OWNER) != 0; + WindowMethods.WindowExStyles exStyle = (WindowMethods.WindowExStyles)WindowMethods.GetWindowLong(hwnd, WindowMethods.WindowLong.ExStyle); + + if (((exStyle & WindowMethods.WindowExStyles.ToolWindow) == 0 && !hasOwner) || //unowned non-tool window + ((exStyle & WindowMethods.WindowExStyles.AppWindow) == WindowMethods.WindowExStyles.AppWindow && hasOwner)) { //owned application window + return true; + } + } + + return false; + } + + } +} diff --git a/OnTopReplica/app.config b/OnTopReplica/app.config new file mode 100644 index 0000000..156c47b --- /dev/null +++ b/OnTopReplica/app.config @@ -0,0 +1,45 @@ + + + + +
+ + + + + + True + + + 255 + + + (Default) + + + True + + + True + + + True + + + True + + + False + + + False + + + 0, 0 + + + 0, 0 + + + + diff --git a/OriginalAssets/icon.pdn b/OriginalAssets/icon.pdn new file mode 100644 index 0000000000000000000000000000000000000000..b6e0be2b3dcb0ad64f68710138b6e7903dbc4ad1 GIT binary patch literal 30322 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�<&}G` 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