From b4dee0113b371f3150bd1ce5a4c4850672b1bcb4 Mon Sep 17 00:00:00 2001 From: Lesueur Benjamin Date: Sat, 3 Feb 2024 09:15:09 +0100 Subject: [PATCH] Merging EA into Mainline (#979) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Implement CustomWpf (#154) * Disable the RealTimeStylus for WPF Applications * Update MainWindow.xaml.cs * test ? * Restore LegionGo fan control (#159) * restore Legion Go FanControl ability (requires BIOS v29) * Implement Sapientia function getUSBVerify() * Implement WMI class (wip) * implement new functions - GetFanFullSpeedAsync - SetFanFullSpeedAsync - SetFanTable - SetSmartFanMode * implement SetCPUPowerLimit() * Implement support for Intel Graphics Control Library (IGCL) (#158) * Start implementing IGCL (wip) * More work - Implemented GPUManager - Implemented GPU-specific classes (AMDGPU, IntelGPU) - Implemented IGCLBackend (wip) - SystemManager renamed to MultimediaManager - PowerManager renamed to SystemManager * more work on IGCL * prevent crash on null MainThread * prevent useless SetResolution() calls * more work on IGCL * add missing sharpness check * implement ctl_device_adapter_properties_t (wip) * what if the issue was deviceIdx all along... * Update IGCL_Wrapper.dll * fix remaining implementations * implement IntegerScalingType (Intel only) * make sure to use defaultGPU (idx: 0) We need to find a proper way to guess which one is used for 3D rendering I guess or linked to main screen.. * fix ctl_device_adapter_properties_t Marshalling * implemented some form of logic to pick the first available external GPU (if any) * improve GPUManager - add support for Manufacturer: "Advanced Micro Devices, Inc." - improve GPUManager and GPU Start() and Stop() logics - prevent Task Execution within Tasks on AMDGPU * fix a crash when UpdateTimer is null * Implement new UI classes (#153) * Implement new UI classes - UISounds to manage UI sounds on interaction. - UIGamepad to manage gamepad interactions. - Audio files from https://kenney.nl/assets/ui-audio. - Add support for TextBox and RepeatButton selection via gamepad. * Update HandheldCompanion/UI/UISounds.cs Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix PlayOggFile refs * removed unused audio files * Add UI Sounds toggle on SettingsPage (default Off) --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Improve ADLX and IGCL (#160) * Migrate everything ADLX related to ADLX_Wrapper() * update IGCL logic - Implemented Terminate() and Initialize() as well as GetTelemetryData() * debug functions on both IGCL and ADLX backends * Update ADLX_Wrapper and fix Initialize() calls on GPU classes * add Telemetry Timer as part of GPU class * Implement GPU GetLoad() and GetPower() * oups forgot to remove that part * implement telemetryLock * Allow OSD customization (#161) * SapientiaUsb update (#104) * SapientiaUsb update * Legion Go - additional settings * Modify the CPUBoost logic to use PerfBoostMode rather than boolean (#162) Also improved the threading logic on powerWatchdog_Elapsed * fixed issue with layoutmanager crashing when dismissing the quick set… (#951) * fixed issue with layoutmanager crashing when dismissing the quick settings * Update HandheldCompanion/Managers/LayoutManager.cs Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * prevent crash on null AdapterRAM @0SkillAllLuck, we shouldn't loop through all video controllers but instead only look for "main" one * Improve Controller UI experience (#163) * Update ControllerPage and IController UI logic a bit Should simplify the virtual/physical distinction * more work on UI * minor tweaks * misc text tweaks * more work on UI * improve wording * Hide Hints Stackpanel if all childrens are hidden as well * ControllerRefresh: move non-UI logic away from Dispatcher * cleanup * Improve gamepad navigation When navigating, don't focus TextBox if IsReadOnly * Change Serilog.Sinks.File MinimumLevel to Information This should prevent AutoTDP and TDP control to flood the log. * Increase GPUManager robustness (#166) - GPUManager should be started before Profile and PowerProfile managers to avoid an IGCL/ADLX calls from being made before they're initialized. - Implemented an IsInitialized check before executing any ADLX/IGCL calls. - Implemented a try{] catch{} on GPU Execute(). - Halt Telemetry timer before closing IGCL/ADLX. * Update README.md to include Droix Discord link (#168) * Improvement Increased gyro aiming down sites multiplier lower range. (#165) * Improve process detection, sort and add Valkirie/HandheldCompanion#947 (#164) - Sorted Desktop list alphabetically to prevent possible duplicate entries in the future - Added PC Manager and PowerToys' MouseWithoutBorders: * Translation and localization update (#167) * Improvement, translations update. * Localization support for Device page Legion Go settings. * Support GPD WIN MINI (Initial) (#169) * allow LibreHardwareMonitor to start on HC startup (#171) * Misc UI (#170) * display "no virtual controller" error properly * remove thread.Join() calls to avoid freezing the thread manager * When XInput is drunk, add a delay * safer thread manipulations * improve threading management * Update DynamicLightingManager.cs * Fix optional uninstall of HidHide (#172) * migrate fan control to PerformanceManager (#173) * GPD WIN MINI Fan Control (#174) * prevent crash on device cooperative level check (#176) when device is null * fix crash on HC close when an IGCL or ADLX task is running (#175) * fix crash on HC close when an IGCL or ADLX task is running * also check telemetry locks * might be better to use Task.Delay on InitializeDirect3DDevice() because it is called by SettingsManager * test fix QT locks * Build 0.20.4.0 * overlayfix * VRAMUsage is MiB not % * do not try and restore default GPU frequency on AMD GPUs * Update HidHide to 1.4.202 (#182) Fixing the rare case of soft-brick issue on uninstallation caused by a race condition * Merge EA into Mainline --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Cedric Lewe <0SkillAllLuck@pm.me> Co-authored-by: Matthias Seys <32166289+MSeys@users.noreply.github.com> Co-authored-by: Abdullah Hamed Co-authored-by: CasperH2O Co-authored-by: CasperH2O Co-authored-by: Matthias Seys --- HandheldCompanion.iss | 10 +- HandheldCompanion/ADLX/ADLXBackend.cs | 103 ++ HandheldCompanion/ADLX_3DSettings.dll | Bin 24064 -> 0 bytes HandheldCompanion/ADLX_DisplaySettings.dll | Bin 16896 -> 0 bytes HandheldCompanion/ADLX_Wrapper.dll | Bin 0 -> 138752 bytes HandheldCompanion/App.config | 512 +++--- HandheldCompanion/App.xaml | 1 + .../Controllers/IController.xaml | 96 +- .../Controllers/IController.xaml.cs | 178 ++- .../Controllers/LegionController.cs | 7 +- .../Controllers/NeptuneController.cs | 10 +- .../Hints/Hint_AMD_IntegerScalingCheck.cs | 4 +- .../Controls/Hints/Hint_CoreIsolationCheck.cs | 3 +- .../Controls/Mapping/ButtonMapping.xaml.cs | 2 +- HandheldCompanion/Controls/ProcessEx.xaml.cs | 12 +- .../Converters/InvertPercentageConverter.cs | 18 + .../Devices/AYANEO/AYANEO2021Pro.cs | 7 +- .../Devices/AYANEO/AYANEODevice.cs | 4 +- .../Devices/GPD/GPDWinMini-7640U.cs | 11 + .../Devices/GPD/GPDWinMini-7840U.cs | 110 ++ HandheldCompanion/Devices/IDevice.cs | 12 +- HandheldCompanion/Devices/Lenovo/LegionGo.cs | 191 ++- .../Devices/Lenovo/SapientiaUsb.cs | 82 +- .../ManagementObjectSearcherExtensions.cs | 12 + .../GraphicsProcessingUnit/AMDGPU.cs | 364 +++++ .../GraphicsProcessingUnit/GPU.cs | 232 +++ .../GraphicsProcessingUnit/IntelGPU.cs | 168 ++ HandheldCompanion/HandheldCompanion.csproj | 35 +- HandheldCompanion/HandheldCompanion.json | 4 +- HandheldCompanion/IGCL/IGCLBackend.cs | 868 +++++++++++ HandheldCompanion/IGCL_Wrapper.dll | Bin 0 -> 105984 bytes .../Managers/ControllerManager.cs | 27 +- .../Managers/Desktop/DesktopScreen.cs | 2 +- .../Managers/DynamicLightingManager.cs | 28 +- HandheldCompanion/Managers/GPUManager.cs | 204 +++ HandheldCompanion/Managers/HotkeysManager.cs | 4 +- HandheldCompanion/Managers/LayoutManager.cs | 1088 ++++++------- .../Managers/MultimediaManager.cs | 600 +++++++ HandheldCompanion/Managers/OSDManager.cs | 300 +++- .../Managers/PerformanceManager.cs | 267 +--- HandheldCompanion/Managers/PlatformManager.cs | 31 +- HandheldCompanion/Managers/PowerManager.cs | 193 --- .../Managers/PowerProfileManager.cs | 12 - HandheldCompanion/Managers/ProcessManager.cs | 29 +- HandheldCompanion/Managers/SettingsManager.cs | 466 +++--- HandheldCompanion/Managers/SystemManager.cs | 786 ++-------- HandheldCompanion/Managers/UpdateManager.cs | 6 +- HandheldCompanion/Misc/ADLXBackend.cs | 48 - HandheldCompanion/Misc/ADLXWrapper.cs | 50 - HandheldCompanion/Misc/Dialog.cs | 42 +- HandheldCompanion/Misc/MotherboardInfo.cs | 22 + HandheldCompanion/Misc/NightLight.cs | 5 - HandheldCompanion/Misc/PowerProfile.cs | 5 +- HandheldCompanion/Misc/Profile.cs | 1 + .../Platforms/LibreHardwareMonitor.cs | 118 +- HandheldCompanion/Platforms/RTSS.cs | 2 +- HandheldCompanion/Processors/AMDProcessor.cs | 8 +- HandheldCompanion/Processors/Processor.cs | 9 +- .../Properties/Resources.Designer.cs | 452 +++++- .../Properties/Resources.de-DE.resx | 603 ++++++- .../Properties/Resources.es-ES.resx | 603 ++++++- .../Properties/Resources.fr-FR.resx | 603 ++++++- .../Properties/Resources.it-IT.resx | 603 ++++++- .../Properties/Resources.ja-JP.resx | 603 ++++++- .../Properties/Resources.pt-BR.resx | 973 +++++++++--- HandheldCompanion/Properties/Resources.resx | 144 +- .../Properties/Resources.ru-RU.resx | 603 ++++++- .../Properties/Resources.zh-CN.resx | 603 ++++++- .../Properties/Resources.zh-Hant.resx | 603 ++++++- .../Properties/Settings.Designer.cs | 1064 +++++++++---- .../Properties/Settings.settings | 9 +- .../Resources/device_gpd_winmini.png | Bin 0 -> 9436 bytes HandheldCompanion/SapientiaUsb.dll | Bin 1135592 -> 734696 bytes HandheldCompanion/UI/Audio/bong_001.ogg | Bin 0 -> 4848 bytes HandheldCompanion/UI/Audio/drop_001.ogg | Bin 0 -> 5859 bytes HandheldCompanion/UI/Audio/drop_002.ogg | Bin 0 -> 6411 bytes HandheldCompanion/UI/Audio/glitch_004.ogg | Bin 0 -> 5225 bytes HandheldCompanion/UI/Audio/switch_004.ogg | Bin 0 -> 7248 bytes HandheldCompanion/UI/Audio/switch_005.ogg | Bin 0 -> 7814 bytes HandheldCompanion/UI/Audio/switch_007.ogg | Bin 0 -> 7921 bytes .../UIGamepad.cs} | 55 +- HandheldCompanion/UI/UISounds.cs | 199 +++ HandheldCompanion/Utils/LambdaDisposable.cs | 17 + HandheldCompanion/Utils/RegistryWatcher.cs | 4 - HandheldCompanion/Utils/ScopedLock.cs | 4 - HandheldCompanion/Utils/WPFUtils.cs | 55 +- .../Views/Classes/GamepadWindow.cs | 52 +- .../Views/Pages/ControllerPage.xaml | 1386 +++++++++-------- .../Views/Pages/ControllerPage.xaml.cs | 182 +-- HandheldCompanion/Views/Pages/DevicePage.xaml | 464 ++++++ .../Views/Pages/DevicePage.xaml.cs | 135 +- .../Views/Pages/LayoutPage.xaml.cs | 6 +- .../Views/Pages/OverlayPage.xaml | 356 ++++- .../Views/Pages/OverlayPage.xaml.cs | 90 +- .../Views/Pages/PerformancePage.xaml | 20 +- .../Views/Pages/PerformancePage.xaml.cs | 13 +- .../Views/Pages/Profiles/SettingsMode0.xaml | 2 +- .../Views/Pages/ProfilesPage.xaml | 12 +- .../Views/Pages/ProfilesPage.xaml.cs | 61 +- .../Views/Pages/SettingsPage.xaml | 38 + .../Views/Pages/SettingsPage.xaml.cs | 15 +- .../Views/QuickPages/QuickDevicePage.xaml.cs | 24 +- .../Views/QuickPages/QuickHomePage.xaml.cs | 50 +- .../Views/QuickPages/QuickOverlayPage.xaml | 279 +++- .../Views/QuickPages/QuickOverlayPage.xaml.cs | 85 +- .../QuickPages/QuickPerformancePage.xaml | 28 +- .../QuickPages/QuickPerformancePage.xaml.cs | 14 +- .../Views/QuickPages/QuickProfilesPage.xaml | 102 +- .../QuickPages/QuickProfilesPage.xaml.cs | 69 +- .../Views/Windows/MainWindow.xaml | 25 +- .../Views/Windows/MainWindow.xaml.cs | 51 +- .../Views/Windows/OverlayQuickTools.xaml | 15 +- .../Views/Windows/OverlayQuickTools.xaml.cs | 16 +- HandheldCompanion/WMI.cs | 126 ++ README.md | 2 + UpdateUninstallWizard.iss | 3 +- hidapi.net/HidDevice.cs | 12 +- redist/HidHide_1.4.192_x64.exe | Bin 5866232 -> 0 bytes redist/HidHide_1.4.202_x64.exe | Bin 0 -> 6267520 bytes 119 files changed, 14390 insertions(+), 4552 deletions(-) create mode 100644 HandheldCompanion/ADLX/ADLXBackend.cs delete mode 100644 HandheldCompanion/ADLX_3DSettings.dll delete mode 100644 HandheldCompanion/ADLX_DisplaySettings.dll create mode 100644 HandheldCompanion/ADLX_Wrapper.dll create mode 100644 HandheldCompanion/Converters/InvertPercentageConverter.cs create mode 100644 HandheldCompanion/Devices/GPD/GPDWinMini-7640U.cs create mode 100644 HandheldCompanion/Devices/GPD/GPDWinMini-7840U.cs create mode 100644 HandheldCompanion/Extensions/ManagementObjectSearcherExtensions.cs create mode 100644 HandheldCompanion/GraphicsProcessingUnit/AMDGPU.cs create mode 100644 HandheldCompanion/GraphicsProcessingUnit/GPU.cs create mode 100644 HandheldCompanion/GraphicsProcessingUnit/IntelGPU.cs create mode 100644 HandheldCompanion/IGCL/IGCLBackend.cs create mode 100644 HandheldCompanion/IGCL_Wrapper.dll create mode 100644 HandheldCompanion/Managers/GPUManager.cs create mode 100644 HandheldCompanion/Managers/MultimediaManager.cs delete mode 100644 HandheldCompanion/Managers/PowerManager.cs delete mode 100644 HandheldCompanion/Misc/ADLXBackend.cs delete mode 100644 HandheldCompanion/Misc/ADLXWrapper.cs create mode 100644 HandheldCompanion/Resources/device_gpd_winmini.png create mode 100644 HandheldCompanion/UI/Audio/bong_001.ogg create mode 100644 HandheldCompanion/UI/Audio/drop_001.ogg create mode 100644 HandheldCompanion/UI/Audio/drop_002.ogg create mode 100644 HandheldCompanion/UI/Audio/glitch_004.ogg create mode 100644 HandheldCompanion/UI/Audio/switch_004.ogg create mode 100644 HandheldCompanion/UI/Audio/switch_005.ogg create mode 100644 HandheldCompanion/UI/Audio/switch_007.ogg rename HandheldCompanion/{Managers/GamepadFocusManager.cs => UI/UIGamepad.cs} (94%) create mode 100644 HandheldCompanion/UI/UISounds.cs create mode 100644 HandheldCompanion/Utils/LambdaDisposable.cs create mode 100644 HandheldCompanion/WMI.cs delete mode 100644 redist/HidHide_1.4.192_x64.exe create mode 100644 redist/HidHide_1.4.202_x64.exe diff --git a/HandheldCompanion.iss b/HandheldCompanion.iss index 6f0653221..e1d8b6583 100644 --- a/HandheldCompanion.iss +++ b/HandheldCompanion.iss @@ -312,10 +312,10 @@ end; procedure Dependency_AddHideHide; begin - Dependency_Add('HidHide_1.4.192_x64.exe', + Dependency_Add('HidHide_1.4.202_x64.exe', '/quiet /norestart', 'HidHide Drivers', - 'https://github.com/nefarius/HidHide/releases/download/v1.4.192.0/HidHide_1.4.192_x64.exe', + 'https://github.com/nefarius/HidHide/releases/download/v1.4.202.0/HidHide_1.4.202_x64.exe', '', True, False); end; @@ -364,7 +364,7 @@ end; #define MyAppSetupName 'Handheld Companion' #define MyBuildId 'HandheldCompanion' -#define MyAppVersion '0.20.3.1' +#define MyAppVersion '0.20.4.0' #define MyAppPublisher 'BenjaminLSR' #define MyAppCopyright 'Copyright @ BenjaminLSR' #define MyAppURL 'https://github.com/Valkirie/HandheldCompanion' @@ -482,7 +482,7 @@ begin if not(keepHidhideCheckbox.Checked) then begin - if(ShellExec('', 'msiexec.exe', '/X{BE49B9DE-F8EB-4F54-B312-DD4B601985FC}', '', SW_SHOW, ewWaitUntilTerminated, resultCode)) then + if(ShellExec('', 'msiexec.exe', '/X{50D7EB6D-6A4A-4A38-B09C-CC28F75F082E} /L*V "C:\HidHide-Uninstall.log"', '', SW_SHOW, ewWaitUntilTerminated, resultCode)) then begin log('Successfully executed Hidhide uninstaller'); if(resultCode = 0) then @@ -580,4 +580,4 @@ begin Result := True; end; -#endif +#endif \ No newline at end of file diff --git a/HandheldCompanion/ADLX/ADLXBackend.cs b/HandheldCompanion/ADLX/ADLXBackend.cs new file mode 100644 index 000000000..a3702e47e --- /dev/null +++ b/HandheldCompanion/ADLX/ADLXBackend.cs @@ -0,0 +1,103 @@ +using System.Runtime.InteropServices; + +namespace HandheldCompanion.ADLX +{ + public class ADLXBackend + { + public const string ADLX_Wrapper = @"ADLX_Wrapper.dll"; + + [StructLayout(LayoutKind.Sequential)] + public struct AdlxTelemetryData + { + // GPU Usage + public bool gpuUsageSupported; + public double gpuUsageValue; + + // GPU Core Frequency + public bool gpuClockSpeedSupported; + public double gpuClockSpeedValue; + + // GPU VRAM Frequency + public bool gpuVRAMClockSpeedSupported; + public double gpuVRAMClockSpeedValue; + + // GPU Core Temperature + public bool gpuTemperatureSupported; + public double gpuTemperatureValue; + + // GPU Hotspot Temperature + public bool gpuHotspotTemperatureSupported; + public double gpuHotspotTemperatureValue; + + // GPU Power + public bool gpuPowerSupported; + public double gpuPowerValue; + + // Fan Speed + public bool gpuFanSpeedSupported; + public double gpuFanSpeedValue; + + // VRAM Usage + public bool gpuVramSupported; + public double gpuVramValue; + + // GPU Voltage + public bool gpuVoltageSupported; + public double gpuVoltageValue; + + // GPU TBP + public bool gpuTotalBoardPowerSupported; + public double gpuTotalBoardPowerValue; + } + + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool IntializeAdlx(); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool CloseAdlx(); + + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool HasRSRSupport(); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool GetRSR(); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetRSR(bool enable); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern int GetRSRSharpness(); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetRSRSharpness(int sharpness); + + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool GetAntiLag(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetAntiLag(int GPU, bool enable); + + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool GetBoost(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetBoost(int GPU, bool enable); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern int GetBoostResolution(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetBoostResolution(int GPU, int minRes); + + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool GetChill(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetChill(int GPU, bool enable); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern int GetChillMinFPS(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetChillMinFPS(int GPU, int minFPS); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern int GetChillMaxFPS(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetChillMaxFPS(int GPU, int maxFPS); + + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool GetImageSharpening(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetImageSharpening(int GPU, bool enable); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern int GetImageSharpeningSharpness(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetImageSharpeningSharpness(int GPU, int sharpness); + + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool HasIntegerScalingSupport(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool GetIntegerScaling(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetIntegerScaling(int GPU, bool enabled); + + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool HasGPUScalingSupport(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool GetGPUScaling(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetGPUScaling(int GPU, bool enabled); + + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool HasScalingModeSupport(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern int GetScalingMode(int GPU); + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool SetScalingMode(int GPU, int mode); + + [DllImport(ADLX_Wrapper, CallingConvention = CallingConvention.Cdecl)] public static extern bool GetAdlxTelemetry(int GPU, ref AdlxTelemetryData adlxTelemetryData); + + internal static AdlxTelemetryData GetTelemetryData() + { + AdlxTelemetryData TelemetryData = new(); + bool Result = GetAdlxTelemetry(0, ref TelemetryData); + return TelemetryData; + } + } +} diff --git a/HandheldCompanion/ADLX_3DSettings.dll b/HandheldCompanion/ADLX_3DSettings.dll deleted file mode 100644 index 7cdeefa6fa7bdf527b9d617a1f4e3f9923d64b90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24064 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 cvP0bgVXtYpNF2 z6fd!t6jxSOdF>0z>@~hhdwHcj=chC6OR7rCCfIC)9E$YUU!4B?O=}&W=jrsI1xNllJ=9328Uqn61e{qE4)6IN;?Gt%FlG8KF zOBNIDjx_P)3Q>AxinuoS_A*^(pBQZ)oHX=Ekpl(al(~b_aHmU%dgRJ@k`VnVjz4`D z)yO0;@z+ljp{i`8Z_#O)ll20s9xKGENlBuV8het&Nkqq|1E+6RQW%5ASiek!5$+2@e%|hHzF8u4}wqDBlzi& z2p<0B=dz!5ez3%XHl~!NrDHdU?Np{gBWG9zCS{&at?xK%1b7}pZN`f6Awj@ zOR#4>g5a08Be=2z!F8nI(YGO3b|-@SN&4}G?xrmW`aO%_R+4Y|b_B`9<37^ug5M)( z`U8Tt#}M2_SZya+{yhr8Ttasd(VIb(r+$rKC*@6Fh~Q_ZA-IY3NWL4vP zVXvJkkE7s7lK$UcAvkF>f`f_C+j|i_bsvJAq(aI22rhda!H5+IKB+`-43T=3fcHrpGb|`jo_B~2#zm6kn}u)r(6j36Vc~CL2xe-xZ`33!~TKb@VgM4{tki{ z3752y2rk)%U^_{*ax8*;s(1V`2yP>mEktxNHJeT>&!pf4>W?+lgNIY{pQOxe>X|H( zejF)tD)sqU6nlgUxPNOXw&XbktEls?hx6V$lnCs47lD_wJcg<~^d*AXgvLhdg@>u5 z7JiDL`1c5IAz2Qlg17e|82=H1lqm=f`U`@~sLyYrj(YcD1oKIPL#WSLz9ORhOX`Xn ziRg9IWrse4;NTeuMw3(pFCcJI+as1Cc$2#Ei>(MI({N6ujz67(+${)p6A*(RNATIx z2)2-XUz2=`$P#NP_!af#sxuL6eH+0@8ZMj9MX;Va;BcaR$VCWlAkEXJA(-Mu@DjoP z?C}Uz_z)~Q3Bmo;`-c(v3{wAk>VSE_M({-&f;B|%aw2~&mHv(Bt$qu^B?QxUGL^Te z;823($E0A*LImGXtdOYmBQ!=5-xEkG?@W`0EKeTNkoJ5(p#^NFb0v;J=LkpJ!$5$Z^>F2|Pt^vH9P_Syujgfj~3z8df;$!ka-i zi}wJ!C3y#-vIBKRdkV!Yh^0P&2+qo~!q3V`mnizSpiRmiPM1+r@@R*ZBeI`l&mw#h%{n_#`w1-TZ1Tb*?lAu*m90! zyAOr={#O4iv=5dvIw(8fDeRE--Hg5-e-W^NS}17hj1QIi zTusW6LWTY{Tq)oGm_l7vXmn6%z_ZvCXQ)Jd0Hf|ZZF{2w4?{^!CDIXXl4lx|ZFI;x z%GYp3QkAmMlc^8LwyVgRb@LafIW(%18X<;0Lmu1wsz%2)=0zH>hblyZa{T+<{wLin z=}S(8ft?Jk{X5(%w~>)X43Qq%??}ek_U2n4U#&nj?e|TR8G7~3eh*2~Hrk>L$!U!H zy99HO(z?)i<4wtnb9!vQ>w!#^{oYQb8So{Ft!cj>DZA;t{T@zsp?mvEVg!~>Bb%7R zRN3xy@dV-;X20X90ic%V$*!WC_8Z|f8h~t+4bOi=^6k=w*+T^FSX-wW2?G_Lb;eJE z$UaAuS>gAPr_HzhlprE6s0y(EV546lPuu_BO#4>^I7bhFAt%5>r?Nf99099lInwkP zVC~q4n3n4(OPTL1|tkxzRD4Bkgh%6-pm2a~mC$)tL`Z z4UU0krM=Vm@#~UTtKwB?yz-jl#W|9f9C|!o$Xq$Ubmqfvl4F3hHGTMRh&1}A&?r}I zcPqAaMmvcF6*)(;-GjmqA1+H8d2;E@hYt%K16L3uHi@ak9H_Q2OJzkz5m#iIV{t4s zfE-*+%CV1Hz=u;M(}&9ndP?cghpz}4-=bF~FFCr@VDw|XvBr@}B7-Rv1w5G$2rod0 zhDZ1&yrWdi;yqZ!lDxJZa^^uj(LPuuKnC<=L73xzjd%lwIwK|62kVii4Sxd~N|^3K zIgy|oZTF?e!zy!OgY5XpvLhTntx)i%ZJ&C*8|#;m+())IUnBodmJa=Q1_gSPLpf# zp%SD^-yeJZvX}$}h;;^Q#BjdxvT4TV`sH0P(i4C-f`mxJeJBf@)eNZ zNY)x=zavRyfZ99z#k`lmlMUQh5UJf&DH9uc-CQdoN11 zg~mOKt!clh z*Wl|(Nc2{nacL0J5r}D5Y}&9LH6v|!;BhdrhhXxtY`7QekDFO4+qo}+{0AUUz;09y z%4wWSlESVyM>>X0RM^w?$3TUF)A;@Kl2@zZRcM?;IpD=Pl9wDhyqhiHZTWIhO8F>T@-7F6e6g z(V-7E*B`Gd0p#fT@2)@YQ^?mDt4Ip&0|#Q-=r=GZ(Os6rA1cqTqBkcY8iA_P_H166hd6At-NY1Am@ZucV`O*&9_GNAl z*B@huG~@oEVr$x56^R74oMYNti0#XgZmvJdRaZNWEzd|z+4S`O^Uh~wrn&yON2$-% zq#W_AKZ@c%Klz44Licv*zhkdIsz_vjSSK}NIM0V}+Kf%#T?$nqefQLfFtBeyB9`y& z?)n*fNJjvFB#zT~jeFPj%iZ8GUg^jN%cZ|0`2D>#;TMBTkkgqP@im^3c(Q3S95+)A zcu8aJ=@MjqtR=_-BF#*WdRnqIP55qQI=wgHS9vrl|NJ{b4lJF&V=$&p*~m1E!sD$oU76hC(?1P;AZhN4qkd-mgCn;&G}B z_&q|7F`P=wfodCTs)~eDfl;1H1BFigXzGZ4{6Wu$R(>GyrH40J zpsF6;z*|Q?wOPSEV>2EH@rzYAm~wmw>8KkxM|J}b2Wf>eSB{W?$7#-g5$CTH*c8a% zhDvT16SpCX+a{%Tp>et5#yOH(D-}v^GPjXeYv-T6E~t< zs(Q)@mc2%0=pfDsbvSGfGFLA=L+l~K(pQ0AxJ_7yZnV1zwTb;`6k-!itzNP#^~8;A z<1c@cG1zY#e&!l#=&)~A>})~A>}*565`_~T=JNVDm{Wh)`(!4I*d* zTZKB5>oo4;+(rlGXvcN&(dd**(2xymH%dYsSJ(au#uc*b*vt~x#%u%82NlR9qvU@S z0RxaZM}kZY)ubYG^@|4`JCX9BU7aDhJ-8Lz@)S3AP>jJNk4bKvBe}Ji++?oaI(N+N z-%5I%$#2o<{y}xH5iHA8yf{bl+Gp~TxiMT;xcOWj?yhDKzwWxLDTH*LF(oxp{Z8SbNA9tZrLXcq0G^z$EV|wJP7KH4S&`6UZ6UO#{hTRTU6$cI&xG4gzKrbOu!T3g(5uOBal7Zlm-x8m{J=` zXf-775Xf8&QC9fOS0_#BiAQByZN&0Ui*#PcKw8QPcwC^r9(_{0OILeQr%|kWOS>p}=d}ezd2P|!)SBA# zcF=^g87$j9k3zsxlz?qYz(V7GB_QWW0jbZFS;<^^;@sH`dqL2IOCDh#kcA8YLDQ7% zk`2mKs3R$-&Pb&kK*Kqb^L`Z4IpP}GFjy$Jf1N$X4|^5sWXM1~3XLNaSLtKaHg*pc zLpVMyWKnKZV~eXvQKSK{;Y#LXd|5%B2!_2p5$>&{U&V4fEO}-SP#9(M&ZA7P4Jj*X zZKy=fq2?@Vf9fyR?HlB2)87`vc^{OEJW3or7G3{GG-T7agHMF%({ap`y?7o}&w$%b ze*}D9Cjo)(#-K>U9zu>kzV%bbW8n1Q7&u?`Un_9{mh#SHfTHFYI9N3)G^R3YwmTk% zfK!x!dXN?x_bLJ78KfP%@n2Kdav#m#%wvFn4jTjOl@aiu<(h*j2hhl29NapEj{#Yz zmm`H8dWo=CSx$ru(oPOnTzOdQ$l<90Rg~9+DZR zIN@W!e3X>AN%GQzN8aJq&9fZJ>c*=qG;-;WrwK|>nyjAUa+**BXE5<*sGkY~vJH89 z;A}ucDt8(WqCD~}XDof)ele^gdiB!d_g7}I9JZ00L3$$@9(rMCPzvJ#*$bT02lK_T zs-LwD$vck~ikf4^oG%U_p|Jnk1OZc(fNe^^LgR`DrGT8%2lK@wD2y>2HDA;zqcIKi z?}{_$^yz$&LX=?yg~rDeLx-@5>aj9jVQ9`53n>R? zu|R25XS_rP#kxK9XVdJ>`Jxr&k@Ll4W6<>^!FM%ZcvvXgArFAh-AdDq%EX+;yML7E za*piiO;i}`{egJqi}Az_o!ZJo^u5#h!p8X7mj4+74psu{L0V{B_9rP|JcBfz`QjKT zj4@z`^MaV>n#qeEBf)vlq7Ung*A!JA!j$N9<-x@75M$ zNN{=eEz}KK9n4bNT8t?JZ?N&)S!lc|1w5Sue4XOxm^Ot}q4Co{NC7!V3Mh?+1(dm6 zZ!wA$w>m>W;aF2ft`gj|(YqCA&M|E?e0e1c^?Ih`<<(29kQxs!66kClt;7TRhD{k? zDpAZSV-mrF;nG)A#>v4aWra$BE~kntfJU1Q%tGd4UMIDNB6Y^yL6v@c9{@%rXk|_m zzmTX?hCUy>U^M#sJP?REPc--Z`EC}AV*Bzw(7#5hw~^r|gWq*Jl>){yB0HWRZVeiIDinrXQS-wr z^iy!8avwgdIQPl?5cX*JT>_mA{u$x{xOfcfHPS!@0uLq@Wg6x9`)+30z}LY zA&-Wsq#LJB@lOwfh&8KsSr8B3-La;J#VC)Q9xg@?8sk7B*7VTR_u-RS5ZlvtgLaWZ zMw_D3SbL}Jg?LP{}0IwGfAb%NNUdZ{xdQp)~N{y>+Q2SJ=CE* zavyOBJ}@(;0D_qFLod#o(pVVVt9O8Yg@Tx80|`}t&Ejz5D9n-#nHS?AysIk-Yx~? zoE}dR=Ki7ex3Q-Ps}kI_(F(Bb7idUCYM9lre*GiE(qk`;+RVpEXBliz;Pz>i8x_@~5N9gY#fk4dpp%?pyeGmW! z|IlwiKVRX?vjN0&8jZh^P;yR>=Ld8D@Dy=F54MuUb~Znl`-giNE87SX@Ggp@xgL>) z#>m^GfbopTj^_t+|M1K@hMpV;_%y14apXK@NlE z(C14^6m#q)5iBrxu4azCuFjV_oFB~n!xM^^97@6YA!`3XLav99eR#a|v_hfIIGK!) z@i-2>6Fog-qC9eXcy$EKr5y#ariX6rAHwH{Esy}i#lH^Z4^zFPt<^tiibH()fzSme z$vJ&6KiosyV6m-avGL6hEsT}zi(4R|pW-iz%_oCK=J;qAq&7dt**Jx98 z8qT${7veF+jwc86d}$?d1Fl_84(9n%F(YMr>Lv&{pWG9-Xo-Z~0 zg2zhK56OEw9TG(Uu$FBM!5%HV;=iHfViwxQ;S zT8K!Zn8WWeLKUKLHFNlNH9vG{^XB=|Xw_d4^TU7T`SeWElcD}b#R`p20F53n8-fGo zA1IHUAWp!R%(xTQ5o?0z`T5dH7R7eP8c=_OY%jzboksf4Wkh9Q%DsW_bCB6r^i!-dA?M1UF<31b~52G8y!M9u+cu5 zBErs>My@7}X}H)G*RUxf2O^Rv<`i)~p$bv@YKk!T4<9Q5x|||no-ZvRN!j3sP&ctk z{RrU5{ln)Hb(%5s^XXR)Kz~1sW-;f7?(QGL_slIUmu=2>1;h;;TFGcTnWHa#Pat3jG=Rh2=a@)Z0)#r_brmZ#o(C}a{>>r0gYfOg5Hzv0 zr>GdeHcMIfLC*~g7p=DLMBB*8KgbHpqhBN|n*er*W%G_aZ*hl{quZM{6Pw{#nKNQJvc<}OX zj--3rHF8$W(cYkfqqMNzN7=R=4LH+hAiCe>1tVW1w=M$AbPZnN!Lwd5sOF!5;Imzdxk-Qr1Qy<88I98?b9FEUQ=cdkS z{ZHxvjK($mL7s6P^(EvhA_fSU0l><46yX(K6vSk3kY@0o)HF~7O;-xpJIib|OXFWf z3i$k#pr391Y$#B=ibhhyw(2m9dV!Bii60Z64#kha$DO7DIu90<1F>O23ZIKe;7EMf z5P(l+hxq&_^(eL%*$sqGMi8H!t3vRZeYM8tO2TImY^yKvu`BUo;?tq{k@#SXmE&;0 zfTHm^iv;cnA6oLpwx4KxGK2VRxGDsn0LvnYBLUI_j3&U?0BH{90CNTby6VahfQGR(5kR-w0ML0Y>NUZdHR@f0%2Sxkq#X)o0zcK`IOb_L45Yqhu~9o1tkcdrG(Eiva3GCCrgPR z6Q2&nzgQ0iHQvbnHAM5GmPGSN=8hm*+z~{>qfDrt7KlNV?!P<)rBm3X2qi%%okd0! ziIO?qcxkN{bG>$r_g^n|Rt73J=L}J%sdvPULFQPd1 zcA09&TxTp&-N`v}ZL2`w`0)Dn{%F#o_Ln!4x-GU+V)z*u z2pBqe^Au?e(zsaDd{G_ zX}ozE@5TvCw3UbGN=CaP=pn(N8P{)AU~#4tyb$H`Q3W^0q$CR)9aPfUr`U5?654^D zL}VdA5%Z#bX~1jG97?GrGeG7TLtl*WS%gMI^!vV zA31eQoQ!4tr81|UbCj}ou+?58t4VgNs2uF5p2?2sfE|?vR@3YT;!om+7ea_D{qry~ zX2H%*#*$K-<|K0sswitvOxBg;D_@e4kDf7b2aX}nF1z=n@2 zKvo_Lsvo{Ynvd?ZfK+ItD>iFG*-$m($xFi7a1B4R@lbbw4V@B^HkousnjWT6+R15! z0~H$glKv=J7s`gJ8D$Y{xQ1lY4~i05mm=$CvW*TpB_LvjoK|e8&^S%8*$~Qxsu|y2 z9Ig%5kZkf)-xMjbiE)Tt=LeZ(WcCCV<;P{X8a<84cCxtN)?-WMRpaF#g0{_ z*K%61p+aN1VzVif4OKI;BG_;Z$!4kQn{|rp1}2L$O_konX~l*LjRO^%)=)N7&Dga( z95k*W*}Q^oqrPcXWOp)I3Z5L)lO@V?hKPt|8fsR&3f7S%b-9 z+^F<^PAfK4Xyhn1yF=MfHRG$gaBaATWYYu*NE<>fVOZpt&QoA^xcru+|eQ~tNkj!R$mXZ{#3HH41;M0vEY{DI&T z^rv^h{^ZnQt`4%g;a`XMvVHTc-tk}GOa5c$^p5{^y_Em%nZ4t`y_fA@?WO$9@JGF| zpZj{r|Iit||ATs||HZx3|2j|4@uQ_^gHw3Z)v6R*3oOxSVd@uwwAfB0 zbbZ!W?eVn?uZqL?ds1Qw5Q~4JeF8tS+l2jujNkv?MBEw+*G(ksl^Mf359DQCexs6LzfmICZ$QtTVw`iPoK>kPg(yH~ zz`iXjs#g_0Y=C~3c`m09Z^Fwnx@aGLDiYp4v!nLBAK>|zaBg}9BIBd4W7_bF{vJ2! zLKAy)Hjflc`rH}(PdK)uAA(ARBOE9+e<{zborQ1YhJ}@G3MqA>bZA)V%^{^Ol%|E1 zt_Uf0qcoiFypU24N{58Cb%m7TvjnMVmhhstWE{g`vW~liH&e&m!h5KWdxSSl$6-jx zlUm!YoB9c8A2LF6@DGsNV+=ZQ%6E8-X{QGQ_y#TuBQFa$)2C5H(&KJu1?`<24|o8j z%*!zIoHSa&_B6T|3GXSo4rB#ocf%Gt4csF7;Lx6rtU`Rq=EkQKo5^aEgheu z+kZ;mPAtaHCg2Aaz0bRkUw zWbNn=XG5C>9h~}55nCCRtmd(dt_n5TFo8n+1^%r@A@-$iNeOK6Z_ynZS{}e3m+y)y zhd;^QBt{CM=7&J~q*7R5$UsqC6}^TJVDtG7S0MeX5{qcqZ}ANx|4$O|Z{64tiRnbc zf4T+$=(#J9z8REaa12wolSE)lH3$U8)NtrUNR{0UA7mPD8hMDLqdFqN?GJ~1hCQZS`S>f7;u}Y36-xXVH^Q10s~+iJTvVPJNPn}6rny;;#TY?F#-C1N zGwjryS-w-4nRh7q?3(HLFz_ZcY#(a8a0<&{HGU}x#j+V{4?KOKV6;HPNYkQE|EZ3& z_5s_iqrt#pj3GoW0DZF)Mi>tVVI2&Te@1C1z$%+1`e)AphsCK6Sa(jd2(pWfmc4Jm zWbt)&J#NA~OvNnTL7T0}Fzx~;BhSTFbfT{2Bb&VjB#f3Rg6T|b-Fp+NBfEvNmzvpE zAiI5;n|w4T0X_j_C&mMSWANw7v0Zdv%oWcl-annbzwcuMbw?{^MruU>;U+ z*5Rrd%0rrMx4xMT5ZTBV&!5-Di0Nc-$0*YNsgUF-B8wyO7mkOHWOL-2GmYcF3hlTV zRFzAd?r}SnUx&oAXe&k4jW1+t%(_9J2S*Gi;deR40Ev2Z8hN`Eas;^3v{e|NT3Bwf zeHoXW%*LA3elV@}Pg1f){*!E)x zKbU~+t5aZkNs&!5Ws^+Z1k*{Eu9JIP%jblAn?PFn6!OUd-%ygzW&9o+!1lx1e?+3V zRIkrM2e;U+B3YKA7~DGWDk1cV*2`1S^}unE-p$I@42>C3$7B#m2O~Kp-@nVIWgJYZ_CP)GAYBG%0`XuIWfg3hb08Ix*K++O&Pgjo7)e9ZvR|*IiUj3HEgqY zdvLmDk~6~;3IdY?`4G{b=ilS@|1%%T1CP1xX4w>n$?<>g_Rmf^y=2J5 zX)9NpAca2g^pc#3B=oeECpk^2ou~U}O-wQVcoL-Ep4YHFZHiB<*plxD88-rVJ`}LK z{adB@O|N;Etj5fq9N2*_^nIFoc#aS&rw}>ck5*nXj3WoGyd;Ao16N*hC`D+Gh}Sc6 z@L{?CdE*TL!&_{5?0#2@!7oO-)`N8Bpudhqn-2|=A(Kisj`zycJHMpARcAABp*7@ zDaq*dJ0JR>y^GpMwFz4l4c?a3#3D<4YKiTdOe9PkZql%)omr z^&dK#9XXs2btalPX>nNi5V4>Z7~aSWq(53_5q_(20`_&S&DJ*DHN@^%#?~3oah9pM z)!8uhB5)IzlV;2P)-n=dXS4Nu+%Zrb4E9*)Oa0O?^+PA%(OvQ_29EI!LH|>VZHDeU ztUFPI{-g>01qG9yqqxgh66~@RqD+;HlTi)?usw{NZ@N+=%KpiY3xzMOVd^>(;c~L7 z0f>NC7Kuc~^2c5alYFOAHxywe$8w6M{*zII76hn-y`Ob&D;h*p@qZn1LWU~8ims9c z4HcC_i;u<}h)rTTay#HLY^V~JF&SjTGXAJ!#gHVC`}vNK5F{x~5Ui^r%4^#yozfxzTr)AlU^rV3 znh4P+Z6n=WWP4DZY;dx=W08i#r`AckQg6#|0S4L4BD=XTIlI}NlHKeX!jC*~o`N%_ zWIIR<(-{`ZIPSEvO5bLBD&oFyS3iIL5c|r1msghM4c?+NlVoP4x2$6D7WmddU`@X# zEl;b45OeZnLslg_!YOC_yo)svMY*ifTOLKZB)cFdNI5M?IZabegQG~{4v$yG|x|-5-=&Q;- z{rd^8-AorzI?YU1BkfD|TQ8c7)4iRRX6s@^G&21(AgVWpWa*M5UBcbcoHK+x$FKn_ z=5C_Nsw>Scx^Ld~?soDB0B0H>?93!W{9abM=G>K?|s9_ei zY-wni+898|4r_s`s&G+9gT=Y}4L(fIf%F^m<&M}*vpk-C zWz)W#T`7*E9o1xyI3&t()bW%OWI-h&)0ll-g>f1L0$NwQqvFLo+S}lj3o6crr$vNL697%SICDwgHsD7t3tRd4CbQuY3w9guSyU!Zr8_vP ziP>|cKXx>$fIuMqzC0+^5Vkdp(qA3$Vl_mkMRFfvr-Xf_v!r%Oo3EM^4RsmGK0HjI z{5recdi@BT@2J!$O7UZ6DjQ8H=pt(h*G(4Rc;l~Q2ukc0)!QoIq@Fk!cd8z7 z9Ug<8Ge|E9^l-d*H1%T^Jq&djdGS-net7oTbF$CI8eu;)$F}(E(HLH|EpBwQA;&-U z9c1MC_sL`b1{|9;TBv5zbH0OfTBarYU(Ro_z1#|=-o_eo?|XnR-+%fLcZ>Y@7~IXb z@XyEQHSBe`Th7HQZ>zgyjf2)`#viaTa{Et3UE9AvfILq%h@HCy@dg9c&=wkV%veL4`Fx7^|2e;*{^1tl%KV{I4$?ca4(J#;vK(ujrmJDd+HbO9a-u!vzcha3^ z$M!JR@MZF{aqg1G0Mr2o1OmDKH7hgm!?^|iYqsp%U=i63Uk1FHIsV78{msGAG`_Sb=YYknT7oTjO1l|&`9ja@lSn#GW@UN$t*0y z>#ILec+bJ3CgWa0sG)Vdd#XUaWx43a3rQME(fZSFtUruogi#>D*~VJRX|a}s*Smsq zQK@|ZRG;uDwAlm=1oh0*#zNwQ9wBL{M@|_{J$Q?Q-6=e^ zoSi)@dv-QIXv&=wcoaiWFcfNmbUh1@eyPH1qUP$11^2fbJPos+P42qtZ zEyhzgdhle=ZCQ3~zW>|o)CUed3Hti~LS6Gjp8q8>wa-Qc0(lMp>bL4}cf;TMxmzyB zo4r_ll^k4bG#-Rkfb^FMmL99kj?xYX%N{n3prv?5m za{O<*{jV4=kHi?kLwIb82D|-F7y;@b|Gpd`lbOAl4vz}_JMxjT;|R9-PmT>Bvw80~ zv_<;@r@m9^6s2|&hNr6SZo!XvV|Rj9)BwX))qVoC-7SCOLNFWPZaHq}L!d>D(wK+C z#>Q6fC>s9{kl{V;AGQJJ2gI-EqSPkrLju$#)ffihZJFhy=M-kw za$9=%+G4vN!Zo#$c#yOb36hcs?iPi6Kt%GQ1ld z;v_H60Q_N2vX*l2UP*Yp^Ep>L$!6*s;O<1{W%G;1{+ErDh*^lIOh1g$w>aFWgiaxc z*()yzo7f9y5Cn$sz(Gv~y+q)3WRTCy%JaXHNAKg%iv-5}L&y=}#p8VcGx=D_V0pXU z?SGNl!O^7{*W%EM-U)CuwUWzov#+41?VeQk7Wld7SK`B*IInN{B{6Wukbp z{o6xS?Do@^V8(C=iWwoQGMeCgsNn-Fj^J73;Se2$$ipG*8qdb#MK^}ETo?t?&qSKu z3WtfgC+*a)pa#-Uj+yUm-B9|pc1lf^5cIeZi zm&Dl$Hchwe?_$mR*whHzgy?E6g@yCD>j=-xtWlc^IB|rQMW@5j8f ziEOE(u4VGjm(HV_;B^A&%g`jEwkj_}xpDVF(Zn#Gi%}Ld9m3DJYq&;+y8?$i4Lfnj zLsrpjF@C2?VNh&URGLJkup)Yktdrdo#!HL!H={!Nk^dkYwYysm3v7jeEmO0$<2L2* zwTGl04&&%Y???3yq>nz8l-rtulA68bG3Z&Uy(?$N{z=pShzPe#weN~W|1rFc+kN`x z`>ElF5`>LA-|xbJb`n{}QnIDa zcgV3uQCE2(@2gF*4IE~{`v~qWThbPOz9kUwS+=^j>`L4FuY&@CXgXN)7SdGdw?20e z>_P67UC61QdKTOUzR5Wh;dW~d5*FiUh{HTnn+8&(#a4;=+BgdyJe^HD6 zNuewhq2xSWLZ^l;*Ko0M81my@eh`?w{iuK?@ew zAGoIRKF%#!iU!o7=C*sW$OHkbpN(Cz(04%~-J=?xuh~n%@Dk8kR08iDT@WhQASqX- zk_+pk6vInIvC1G|XvufqFm&U}ZG;?V%g~Y=LQ101?)x0I9`Vw8WQ8MxcVe^MEq6Os zleb^_K{c(%{nk(MkDznsHWi`g7_FjIcpF5OEjP@=8@^0R zy#ha05C}ZZd!dEdCmiZ2Xi4^@Hl2h_ygQ%$&|HALFz19>IUetTg}KdX+5Tt!kA1$o zVSh&I6$hh||8aLq_QCF{v^Pt=%8HyFIr*Liq8tz)Hmg$1Mb{u!SS*%Mhhl^wHMdm! zgziO?QI30QftX46#U7DE_ljxaSh`nF7Fl%nPLTO^`66E|Y|hDFLF3S4%)@&fvTJ=K z1L<$m!+s3agJ`HuPmxuos4D)gdl$nX``-S)Yl^O!_?iI22oIJqjP4y8^pQoBLnb2F z6{SD7_G=twMfPo7;IuZhKxhFN$Q%d z{;lmv(s{8i7%O{H*{zYX^XK)=4mJk@Wy}VM@{q;dQsLN3=Pc|#K6AHR6v%DHvC%&l z<}^>l$(Orj_CE^zZ{@a}iiLJHo_3L+Z!E_dL5@H7a=h5Q%TfY#qpvxe+-q{bOe&A4|;};`*#kWq4sz8+ntT$D*v0ga5X>H z?|aj(bV$8F=W)lBeKmvp-;Ucq#rwFuWXH41GO#~vtRgL_X0-SAI@4J`%Kh?t<$mx%uBGK7LR_v!51vs_>TfDH%TvH!> zp6*~vEnI>0t5u78WQ!f>GRd}nH##+tegVoGL26v&w z2nzF=Cz#KnWhI<&ZWVI>N=%WqLv_C^Bal8+(YB#w>Vvs+rfl^M^%qo4d1l#weg%J> z@;86+(WiO5!l2Jex85suW##$8%9<>Z=q{@L>%hJ?cZ#FXck z+WcFloV2~Be_+d$$7??J&)(XSjdxGCCqvmq;IIP^Z31`~FWFJx|C>aCIvYAD*z4Os z3GX#9i=5Qlj|1uR@yrm%3QFvA=n0}$8#VW0e@cWIhWdJL{i4i!S?W+7NZ%$io{<@a zf%HEjBip~7T>=iX&`KR;%{%WqeE{%XJMdo851v2JOC9%R60*Eoy#>)g`gVj54NMlW z4cJdL6*t5_m(XHpdQSE7QU%(;{|wlSQA!W=TWnXuxQ$QQvC*cd*?JL8I#`h4%~pCx z$ZDaq-+C_HnypU^p%kxPtk0n74(sj6A(?hqe~lQ~;STE^DyH8J0YTeusO64i3vo8{ z{kC0reHmgV+jS;}t?d(?iH6m8!p{vJ1V7i%`Q}$E-N~Ky>znC}#u%Q$1S3v$;PLP^ z59-Kwy{7({;YxwRS@fb8q&XLA7*=+2G_y8avw;HPg*W6GuV+b5zx61}Znpk%Fk!S3 zp~UDC#3V*dDyG#Yj4nkU)^1tu=3)4E7i~-LfS?Bqj3sC%I))Yn&qI`A+73#O3@YYQ zijj=Q(U6V0mkePsDH37``%wXkokiKr*2e~sVjB=j#co546vHaiEtaOy>l+^7OTn_k zja<$ix^xgoGB~3HUNS2JMnHJ<+}(eSLC~Xg;a#O*gP9h1POwCXze0Z-E{il zAy-jB)Ec(c1rM5H$QmmvhWyVGsc89me*#@(XSldCTqJtZrHhnmh2*R}c+PW#R87Ce zIGq-sPHG!eh*eumN@D7XPz~ogp|3Gs2Wss}_-|FW6%34-jLry*xfd!0#;oJ;=Nzu* zuregShU2$z_&&GV!{Or`J|gLGxQ@f0bJ)n?(;T*PcrJ(e9G=W!7Kfub9LC|P910Hq z!yJ$1_)-o%P&hE=YP>iQ7_)}M8#!Fd;msW0!r`qPuH*1F4u^2tZ#lk?!?!tnfy3<_ zZsPDx4kewRalD?x8V*Z2Je$K5gxYpCTEZ=?tMn@P)6hDRX`KBB#(WgQKr>3*69^;_ zNFb0vAb~&vfdm2x1QG}&5J(`9Kp=rY0)Yeq2?P=d^cVs2{iQ%#EFvN0V+I{=o_@uu zo5)KbkU$`TKmvgT0to~X2qX|lAdo;Hfj|O*1Of>J{=XsMn$6$R(QgqH;O(niT*5D! za~=L%$5g8jt-gUfa_#gU9Da2!*G}&|`E%`famgP0t=1sD)CUUehVSif<-e{StQ=lG zJES~VVzl8)%hesQ;9B??jO4}FXt}spUi@oIxlVt?<2Skr+#(G(In2?P=dBoIg-kU$`TKmvgT z0to~X2qX|lAdo;Hfx!Pa1o-!|?D#J4dVIZY41exh`lvJHSB8S+A5-~f&qkL2f5Ri8 zPXd7i0to~X2qX|lAdo;Hfj|O*1Of>J5(p#^NFWf20KHC;_)8%0-$S725K&KW^XR|T z5ow*DxF--uAdo;Hfj|O*1Of>JzAFSu%WJDEikHtUt65rJQYM5-=a<)dMNMsuPV0MK zrMGNRSr@)iAJiXS`R2cUO8?IKhbpRaeUIv&vdZEG73dx6OZwCOQ-5K2|14H% z-9JStt^3EL(z<_KD$PWHK!NU`)k^=~_Rm^iNA{kwMD~ZqU#PUke_w?x*Z8-o^!FWl z{LDZ9*_FQW;<>2WXF4HJi1b5>Y|!2pSBBerp-OAKJu0p7cB!<+J4>ZC-5<(b+k3sz zzo-49{gC!QDb?ZqvA-(Z{`aZ0?vFN=*8Qp!L-Kk*4tLX@6*XYY`#;v+AO7 z{OeU(<6o`P8vi1d)^xtFckO@HDShI_vsSKv3aU!WSoN;_k5LnD?|W3b4y_6Q-72l| zZdGZG_ePcezT(_dxwXBET8Uqe`v?717VIrk8uCYE1FO8@{ZpsXx__!wTK7+pO6&gd zsI*D>hY{2Lvrg&X)Be$Dtwn^!L&nl@f0U-u8h@eE8vlJhSzpunzTUMz%2N83PAZ*Q z=JjH;HM3?Zl!{D8`kghXL+8sy%fj({Bx1kiQRNyxmr8$Mano{Z{Hm2ck$6R>Bk|Mg z6irXBS2os3JT<=SRJslodH#&pFRfPP8sB=A)^vX;ckLfqmHv_VN2c{YRpX=a&AM3P zU#Rf5tF*>9O{I0a|CKxb9UT61DfuGxjZAC(Bki)pS5s3~>7BW_xTd@cc0P+`*gO|NF0%$SGllC6jyr7NmuQ6wZF~0Oyai|W#nJ&DqW}287i&u zOi^i#r%-8B|3Up}d(Kk&$BVxPN#nil@^JfItI`_pRVuCVu2*SI=lgos_PbH((-nRT zs;Y2OE<|~4t~zNA*Ie7PQ6Fy4Z7N-d>SW)0R9fS^Q>8V&ttuT({r`VT+p}0H@r$=V zG%{-uA$+T^2)F0ODy{J@RB4U3N2N8L@9SOLbG_0hUi{R0qoBNUMp({#&@ksYkXI$G^+lf{8WD zc9qt2zOQ#}&mN^uSNN4IF0ZJ7vR(P-Rab`FbG=H}p)KKEr_vhV#VW1wEmG<4E3Q42 zTif$GrGLErq4}*vgz!yU6>iTdDy{L}f0ZoPc<)nbP3QZ1*Y<2z`o@c&>7P&a%nVUp z`{%;uaC`QsbRFsv-forF_&QZuTrABqtY7h zohq&IZdGYb=lgos_PkH&6EA++o{Q^Z+jHhM;r47-={kjXhDvLEQ&d{xD^&XXifd2h z*7odD`p4TJn%`Q5@5YvJd)}bZ8t=6#t?^#1(wffq^{(x?Rq4|eezkN!2W7ijZ|whB zxIOPv={kkCq0$=PJu0p7-L2B!S6q84x3=fBYbAd1_J`)TR^eN}I^3S?R9fS`Sfw@I zMJlc7d|&U{o>wb<;>E8k|Ge|MaC>f5={kk?CY9FsZcu5B?>d$KzT(RMjjuMb`4VZVZ<c<}XGMsu)fHO)b*jC#kJTz2 ztoR*8G~TT-*V2RSmtXq(3L2`Gy}K;Lgu`H=#Psk14lE{no0qQ0Y3AHWdFtmENP$PL*!` zFW~`p|5JZ@y_lx(`kxXmAxr{+1Of>J5(p#^NFb0vAc4U59)aQ|rNyNcbw8Orp_JdF z$j-?xJj+*Bv;0(FMa9`=HMQkcm84`aKO|4*=V4n=jt|B!E}K*CT|B+GqN1!OyOiF_ zknO_D^D0ZKmQ)ve%kkZEPEGkzxy2{?WVwwKr17nEVIW%t#VmD-m9*(#q` zWt9gJHz{aJo!=#&3SXJMYN0)MriaC;tn%8cYpSrvt5|NYEnW(K#U(XWwYBzQ`$Au3 zi5Es-#|Ksw6YTa`iy;{P_tpB4u^csO%4&TTUZO`;NaB!IrDY`*#WhL+dsSswuu@4? z&_>l&<@g2HRZ(hR zQe1l>TS0A=ucm}CC!1iFtTd&Hs|kBpiMPzYpxjGsK>pOK8hcqC4!SGKPPE%?g9eu1 z$)ml*KGmLCZa>nVRd?#CW2e{#Oe;!>DrX;}~P)F{hwAWwJ0O+LJzvH>g1#vCRDCj-8qY++Rm z)bT2WwT~$cBM`<%4ZHd1MiA|ct(aYTVP(~_O8X2S`fW*>efr`ujN9CrnyQ*G`ZI)2 zR0^*s7fVE$u#4$pG43VeLd0`L4gRabH9^?KAmq$O-D0soRB&A{%Iu;PZEHm}@`}ZB zq-Tg(pkfyVs8fsoip3(tf{s7~*uh=OGafWzNpvcxm4lNHGLf`Lh%w-A7vph_0k7yk zjl-$s6?jE|Nzm2me0);rgY!C57Xh#FvrNEFEiSLXQMmnxF{SqL_Aw?0*)KsqXRj=S z_4*X(+9!sHGiJiXLOashf0h+%C#ri>*%Is(hfgrl1IClaS=ULD_68?1n0ROBTTE(7@D#NE1KNuIlUCpqUscA-RLHOG_bI?THwfx(?m@ zNS{!W93NAQ|Eh6aT#A4$^`EMlZH_45(*21fWuu(`GS$6E-RsqTle%lcq@LPwtA0>x z2dXn&d0Fja*}al$CC?M;Sv5g*mvmL%N0Sx#;oc+6bLdGDYYn-G38Ag~h39E)VnOpU zD=xrzsuXiEu9jdV{X|Sgyg^6?-2osF?Q1AgF4jLc#3k2*CiOO=LVcq~G?NRp0t z6r*G*v>@t}#KfqYGs+hIw7RVFjI!mqb#ovT(!2~jyBKQ)nZ=?a9}nwl%TSTiGsREE zsnB(f$cEmzKxYnQUB*ZepEHpvh0KInIrJcZS&M5SD#p@fi~ z0FCA%zl=+&x&HJ>z#`Hf=1>YsC1{lcYT-|i%$|}BBl}X5>nPuoGmUTpEag}SlpRO) zi9_44q^{ls510yAdj%zXTequ;;!+c9T8I&5rFPQiU+390EP&Yg{oUG3a6 zXHTD-Q&r+yf&-P>xu=zT-M$5L>2z@X%$zgE&#A#_Nm&hN*mYuoue_pkZcf<(-y$xU zuL>qqmoCr}*b$+N{tlD3M3_JzZUpip&Xv1L$4xj2bO8)>MN~qik z0+#+sqW{FC>ahC^m8QF+pBQ3s2rE7m2#aU-6KR&wVqj!`X#MWiIi#N$XgO3Q5lxPd zmhmwp!y!_J(0t})k6*Tq1j8787p2M$}_SJoCKXHI%t{9|0^ytJE zB8x18Ak#$1)ZZfdqx}e#etL*S{CPW8n?(;HlM7w*Tg~pY^Ei_#MP|B0|Nt zzmzS=uM?TexoxG{Hll8jhN2lN^X=UB&K|XWi`%~6qqc|bBz;FC>^{!taNBu3YI_5> zy}3tipXIhMnQgn#N48z0?|}%ruWuf=J+nt`o4D=OJ!-p!+ivf=ZKS=WCW+LEgR4XB z%=S3zkFX2<ctr+%x1Gl}o_qLNr(_e$F!-^F@MBue(EAM2r)b|2 zb=UPrB#99<>0#c>GBimHoj53b&f+;t`GQ#XMm!bX+|hOjr3dvBgC6T&Z7t$v!g8=h z9J~Pe)Q-w~dM6pF{ZNY-O7v3ui_}>uB6acrvM1&?%9&k#LSgc2c;X4qJaUV!) zr(wKa;Ema@BlE2Q<%m?L>t50$!F z(yStF8fxrLY3*Mm^F|$(A`W{uS)_Yy!ZvG&uudK%iuMW7f-7aWsZV5Huy1r9l590t z)06E{pG4Y*t~V%I44T}Z*M6*1WSaVtbjz@a4A9{^^2WI6wB<(w#g8n*MQWRE_u$rn z)hR^-vif^u#SzC17LIpk3Ws-waFm`U9Fsl5VL4Nzqnz+4N>cR>vx>o%rv>+HmMZJ7 z$}l$!u=u&YOW8`$7aw2|2P_EDG1P9~Mn0wWeVU|~2onf=pAgW`NoKq%{n1Sjp02_d zEaH)u@O~~04faV_%ABFpB*JR|+MB0w~QMlei-Wh0r zH{z?%_F1H@=|X&pyhh|@BK}w8*C78wr03yYj>xcVg$Qz3I;kZAJHkYF99>jlzcrNnSA^jz;Gf{Uc@_&oF2kBc7e+lISQ14#c zt;idL_-V-h8uw$7w;6e-p#Bli=VqiUk*+@|NvuSC0_xq0G8?WnxL!b;YjK~AI!EGu zKdvg&F_1qIc^~3F2z1Uu-U5`lK;vj!DTvph{0ZDgBYi#Uy^DA~u4|AVz?F^bA85B2 z<>%pEgliJ6B}m_ZYZ~IOqW&)27vcU-vi})?Bln*V!hwEuv z$NkG9Zp8I>Tv;Dk#8tRHz*WA_A}+u+Kp@Ye=MQ|*MqqFeQXg0 zxPF1F9arurkRR8(xSXF_#A;k`;+piCMKs}h0$2Ly7O?==1Gt9ow}{hlRpPoH*JHTe z#Pubvj4v!A8`lC{m*8r`btA6d;JOpnUvO>5^&+l!aeay_`Ads94A)p($K%SwH6Pc7 zxR&Db$vvg8uT^ha9pEsVaCQ9yr00XMD!N}@NM)!yeT|b48a@2Lq)1c69%8}x5VHcysXuQYk!27#LiXV$iF;*NU#)+fxzTX6K4Bn7C7H`>2 z!rOAkiJyq$@p~vIh!e#WagvxSP8O#Km&nF@iqr8XTrS?zI}N}0kS9(TXW(tc0=%2| zQ@qD`7T(*Ni8uIW<88b-qEMV8&K2k3UAyzeJTYGs33{Kogx}#?h&K-xn|jrFqpF7AM)cwR!eyck?<8IRs1rMOD063yaj z;TPA47V$H2tynFt6F(Q%i#6f~aijQ!Sj%6U1fSs2M=7VAl68tBPktbRuL2epmy~(D zHS=e=&gRTXIoWuHJHL35i#}v=xzz2f-0W;u;kjM6o<_g$+{3oh>DNbl*fwtoeiwj$ z@4u`PFTwVZ%8cUDvZ_jayI)o_qpY^7!bk7A_K=qPhe&GG*Zs9UB9kNk!O7mVJZdB-^kK2v93k(z=>7WEGe!m!M|7)@sk=I_bxd=cUc7ny31uc zw_|(d8oOxSscY<_ZKtlWi?(sP#xAII%QbdED_+;wDVZ)@V?1qP&0V<0c&NnZ8snkV znQw@veH^YaE;3!X#!hJf(-=O1hjCZ!daSg z>cH@)WqWe7%>PfroRlMCu_tfr+jWC$$b1ydh$Opsv(C znjI`TW0KZ&K@lS7mn?t*AcHylYa%oBG(Fs3JtBpBw5 zyC4|pV53eh!qtzg9v`-`y=xb&VmFG9VU(Bcf>%`ic-ZKbLZ`HKrEU=H*v*G`bcde4 z(=J!7B0P6IIz%+-hDNa*TTER-{e3)Igu3u}R0yr#4f#7hh6)`W3fW-gco?9sqZiDf zM5#iYgt|r<#NtL6b@k-XDY7B;;*_(i{X&HL5!K^i()oPQsXCoERm|rfAG-DU$ut+v zcIVH?Iwkw;(0rFuoN`*3H@mc=0G|rc!D?tJ9h^W@-gM}4DH-ke&~E1PTKvRw(3(1G zTPW)(E26gMj~7KTJSBV1WFjw;xNtCAXNfl#R(nCs-3yi+dGxkcNFDOT? z8+uPvFBtla5{z0+d*L%pk2)xh)kAOSMo(eAp%yyZ_Zgf)hunLL=$Ss~5>V+Q*y477 z@i+yOSl_w7&L`*C9g<&FTuM`34jzw&&Y>~qHS+P1zd0Dzie|6*X9TOMpCF8?;>n$s zLzRNR8yHn1Y6_(4q`~}RZ`G3WlKJ?>IhX64?Eh=;e1O|5?>qk5aZ*EQ&v0Dlvg}T9 z9rmsbQT`NEaE3x~rjWoX!AZ0&oupW@t;Lo!Nj7qUop%>fLl_gc(s^x;lWp04{omJ7 zriE-1j8J6>sX`f3SGsBiGP9;k9idZc%I)*h`^c7E)86$sZoSHP-+aFB^FHtM{@&mF zO0Ocl&-2{HE%q+C8(XoxVdMcc@pkw8>3+Vas-J#L3`ptxmTwI+WBX z-o@okPP7XZJIPmhGe#w&Lc3EkXti!$@;PUlRvd?C8^LSF=bdN^_p&YqbMGw{7(a@O zE#7e!%;L|)QdGQ$ESS5E>Dfx<%nmEFwXw)`Rh*;4m@B|2*io7~z*w~X>`W8J3VU%H z2g9p32i0WxtQ5xjmO#Yac}Kt<@|172uQ(BlQKL8sz@q(`sP?M?_o=e%t|mKOR#g1? z-OsRH#dQqg*X|9Kg}C?Ly|MxR3TOlp0 zVfU$4)^4ekEsc>ii|3gepL*6o!y2cxWXet}MaF3@8FgA07LC)&;$pPY;IibbP_&o^ zslGH{lt{h|EU8#_Ts#j``Kx50l7UJFDjBF`ppt<~1}Yi&RnCC)<>(%er=02AP&^Qs z{i*n8EUE?LNob>9$;+xuL*HHh*Pl|AehIwzInzsRFB{{3t+cu9tMa#)0bMu7^(~d$ zwCwBiQu#{tWXxWt&)*iXT1(X`{58*j>pJ>Dq3HAU@qkaEEobQ8vYs*eP(S4>Cv&4bUtrw?gb5TAk<7;*Lid>+2iK_2iq_z?zx{vy5( z{>V>1EIi#Pv>QY8F~ghT$GbHxi8sL=j3)j(-VSfRpMKVOD{TK$=Agv~;r>6PKNa2u z6G!MzhM$A(hqyRjpbmWKD1EB%F*x!C@_?U%r}{Om9-o019@aDyJ`dL%BPaMec;ln= z6~>$4?muVFUAzl+KSqA=eej9DpidP(4xfq9mkghQ_j7M>;O&1yzc_R$O+4^nWIjzi za2$2w=iq6i<1_G0WTk!{Uhx#?5nl&?2VKjkBxbl1J&LzOAF|_v@L`l?zcDzD(v;7^ z)9ARw2H!+UX&+wkHO`l`5AQ^mh`|MW(M5b8d7D=Uhy>B;_Kk2&}G`O z!aqb7whh8#D1wi}XV4rz1HX@K)Ytx2(|!|Og*U@pXdN-T;Qi=}_!yi-4txrJ8|65b zJY1XP+MwJ7Z$k;mIXsL~wAly0f{x(l;2Ct87;^9@$R_ds9r2?hcq_Cci^Kqf=v8S4 z#*j&l1Lq4)2DM0>aP3LY>D@C>>val*C#!1W{b;VzV-+y#%J*QI@U2F0a) zxb`23Q;r4hLLP}99z$__9A?m~5oH}uM9(klby!u(%!JFV7 zWRd#tadcVYhv(5%_#C|YIj#qZAMQamybC^#GA~dco<}LE53l|wu2srSa1WZ3_Tl3w zf{(-V=yiz)Uj01hOyY-oP(+Rwu06%JQV#DzNxU5npbS0^pF>%E2L2Dq;k6g&D~smw zd06#zt`&S8ydD+sX1EP$+^6i&jcV~hcp^#d>-!0kZ0-y;gjexeh!{OHBujb;ym{k%FS@gOT1?B zeQ@nJxo1f^bfS~^Ae=>K@hQ0VW$ycU7o0?WQV!onL45fbCo=xY&1l_=RYl&0--0h6 z(?!O6c^27;O?V!4;LFEXk#SZ^DL{WZ zdz|p*v z!xJbc_2HU-ClBYS15f=2=N+H=9_J2O@O7`zSN(O`7yky=C$i%E;A6;vpM(1^5Wkee zFCmwd!@K^ITu3>567@+rOrw5$2L1pg@!CB7xKRpkg>5K}55hRo@pJGMl)>lV^>6ap zl=^TI#qk;V4vOKm|Du05%Hi$s2{bQtVEy;W58e!;sDO{bAEPYZbdk?{XaL^_pGFzR zKFPpqe?T34`S>R?HcH1^@p%#*$7}z~_yeegcFgcCpdJ_QS? z6JPgZ-XBmz>ceLA0Nw>h&=GtFUh^)WZKMtiq2u@%{ActOJ_oZu;d7(ZxlCVvl)}5< z$)EE2I!_Gm@!rD!&hwP_RWYtYHT|h6Pr;*WsQ=G=qj!q@h1AwqcrW;T~GgRl)=k*RG&jryg$g;MUS9I zuf- zig&2?zO3rS6qiQ*;VtDi8~KnuPRO}1S8IjOESBlSUAu|-H_FORQs&xNtvPO9talH` z)j_@Y`>VX(-!C&COnK$?Zsf7@djI*?)2XT*JbAd=c<@krv6|=5>^x|wW})Q&lB?tq zOtro_x{Ys>n)lw*ynFK|HPN%?bZ(DEcZ8VO)8_Vjn6h~b--1Y~GaU4``r3FJlDTDN z1>a0k-r60Ksdt^;Xsef*Vwq8K-AbiS=JkzuqY=hATB$9kKVUSV{Wj~v5s!1>S0x_4 z3`atNUY>&tM;J+r^*ybjh?7GzW+9b1N@XI_1B`pLe4TL&2N(@WtyyyT2ekd$_wKu= zW#`?^8@HI98}BS8p}fo}d9K zVJ5jMehVv2N?Tgx_4oKf0l!RM!~fZq)L`!8s4wD-$Yjub4^-_8dD}Tq_M_I6<{H)B z&`7ekwL9W1tui)xj#$VCeMM+Ud$zRXq>DxCVK$*qOHgXK8qK*q6uI+I`(AG_5Q=E4 zmo6XR|DQ&DgwUmRFM6j}+qGH>jk&i!y_&Pq8tiq3`9`tm-4XE}#`*IFNKjW-!0+q{ zGl{W3(#Fc)s&W<|jP)F9*N(4p-q+}AUD4%sfrayZBo#Hzrv`o7k%YQLM~JLG1* z>*D!&r)F=YbGthjA@|$WRrOOT+Z_lT?hfuyGgCMF<&jsdW;JW}`$7@sH{R#J&*%5> z&BUsm;o`hNJlAOtF>@@Z<-+QHe&fRSG?y-At}G6i?5*bU#rIwPLwS|)q$j%w?&N3C z1Da0z^0MOz(m-g3*DaBj_Va|)HZI)K#i@OvX0O{9W=58j>_TAAN@wNmG z_&i=FbPj2^tSQ-+z`}YhSW|pTy6k!E?Mz=Pfp3<5Z8u(^DxRGl?Uu6AmX46u?V(V+ za+MrKv73`TxwSe#N<3l_b+OYyCu)Kh^;4Sok(qfS-vka!NDELK%fdwz9G=_)K0F|HYN z!E&|y{CCI7+7BxOpQu|pkIVAqmzJ&n$}d=69(VX-OP^O*zP_^j|0x4}S4TLgZ)sG< zIOOIP%CD&5dv_`a_f%^SR=&Plnzj{|nr@GFb((sZDUVNJTN^gsWNt8d{jC8HJzcjp z>}%Pv-qK(SNBH38?&NdD)`nhhxZ(ES{pgiV?r_-Kb*Qt~L<9ct)`sqo|JHD8hquce zUQgGTP#_#=i>&8feycm&byLsA1`{Kc`P%qQruy3$d!s3nsVNfb4$}dkEudPv;TN>F z`G(?lY#HW*O~@DNRm+rwynoWoUc4UZ2+O^w-5Xw5S-!ft_?d{q-tF!2cA7fn->nVO zyP_v>*c)mvb^Erp%B^^7Lz}xZ>}@b@SZJqd!~5^0X~UA3nl>yP9Gf?7DCLcX70ySc zsFHzS>kPQ6_)Nxc=7Xle!g%dO{Y2x0Wx_H!FsV-_C)1PJ$?R0)v}M{h?U-(y>7N;x z(Pxq~>6!E_8wDA|7}Uobt~5hHb;Pgq}zy(ur(h zJ~2OH8MTc%Mmt6=W6`nxv4JstEUKsVtUj+7^jadYO*kexCTb@;CZm)6#W?h-!c^^a z{dD7WVcIfdn{mu^%tU9Rv&q@?Y<6~jRzATTA&z9ccCdc1anLeo8?+7e4-E|IL&>53 z;q37IaACMMQJ<(Eag20~L`V8Z9HaVZax^`f9i1PYA8XVtx=nZJjpNbr{_%lveLOjy zoG1`Q{bb{0VbV6`nCh5{PW4aqPp7A|)AK}cz$CL4N zd|+^XurOFVR6o=>)HvKR93Ac-9vJRO^plA~qLwK1k>p5YF&Ej<+Oc}FksiyA+4QL1 zPc9nAEyR%>pC5Nj^iK>Bi)GTrIjNs&oU%;Wh{!R`4&zmfDa`M}dQ6Y&I+@In%N*Iv z>)F{H*~!lqB)+*S?USH(xQ<9-L}E!;6Sjms;YiHS6lQ9rPKw|9fMv)w - - False - - - False - - - False - - - False - - - 720 - - - 1280 - - - 0 - - - 0 - - - 2 - - - 0 - - - 1989-12-20 - - - 0 - - - 7 - - - 300 - - - 1 - - - 0.25 - - - 250 - - - en-US - - - 0 - - - 0 - - - 0 - - - False - - - -1 - - - 0 - - - 30 - - - False - - - True - - - 720 - - - False - - - 0 - - - 0 - - - 1 - - - #00000000 - - - 0 - - - True - - - 1 - - - False - - - https://api.github.com/repos/Valkirie/HandheldCompanion - - - True - - - True - - - 100 - - - - - - True - - - False - - - True - - - False - - - False - - - True - - - 40 - - - False - - - False - - - True - - - False - - - False - - - 0 - - - 1000 - - - -1 - - - True - - - 3 - - - 1 - - - False - - - True - - - False - - - 0 - - - 1 - - - True - - - 26760 - - - 127.0.0.1 - - - 50 - - - #FFFFFF00 - - - False - - - False - - - 0 - - - True - - - #FFFFFF00 - - - False - - - 50 - - - False - - - False - - - 2 - - + + False + + + False + + + False + + + False + + + 720 + + + 1280 + + + 0 + + + 0 + + + 2 + + + 0 + + + 1989-12-20 + + + 0 + + + 7 + + + 300 + + + 1 + + + 0.25 + + + 250 + + + en-US + + + 0 + + + 0 + + + 0 + + + False + + + -1 + + + 0 + + + 30 + + + False + + + True + + + 720 + + + False + + + 0 + + + 0 + + + 1 + + + #00000000 + + + 0 + + + True + + + 1 + + + False + + + https://api.github.com/repos/Valkirie/HandheldCompanion + + + True + + + True + + + 100 + + + + + + True + + + False + + + True + + + False + + + False + + + True + + + 40 + + + False + + + False + + + True + + + False + + + False + + + 0 + + + 1000 + + + -1 + + + True + + + 3 + + + 1 + + + False + + + True + + + False + + + 0 + + + 1 + + + True + + + 26760 + + + 127.0.0.1 + + + 50 + + + #FFFFFF00 + + + False + + + False + + + 0 + + + True + + + #FFFFFF00 + + + False + + + 50 + + + False + + + False + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + Time,GPU,CPU,VRAM,RAM,BATT,FPS + + + False + + \ No newline at end of file diff --git a/HandheldCompanion/App.xaml b/HandheldCompanion/App.xaml index e41d783e8..6e2074da8 100644 --- a/HandheldCompanion/App.xaml +++ b/HandheldCompanion/App.xaml @@ -65,6 +65,7 @@ + diff --git a/HandheldCompanion/Controllers/IController.xaml b/HandheldCompanion/Controllers/IController.xaml index 595e0f0fd..a9e332655 100644 --- a/HandheldCompanion/Controllers/IController.xaml +++ b/HandheldCompanion/Controllers/IController.xaml @@ -4,8 +4,8 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:HandheldCompanion.Controllers" - xmlns:resx="clr-namespace:HandheldCompanion.Properties" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:resx="clr-namespace:HandheldCompanion.Properties" xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern" d:DesignHeight="450" d:DesignWidth="800" @@ -30,20 +30,67 @@ FontSize="30" Glyph="␼" /> - + - - - - - - - - - - - - + + + + + + + + + + + + @@ -53,8 +100,8 @@ Name="ui_button_hook" Width="100" Click="ui_button_hook_Click" - FontSize="14" Content="{x:Static resx:Resources.Controller_Connect}" + FontSize="14" Style="{DynamicResource AccentButtonStyle}" />