From b0b69fa52e52080ac88d8b183015d9e0e36006b1 Mon Sep 17 00:00:00 2001 From: lx-s Date: Tue, 19 Dec 2023 16:06:34 +0100 Subject: [PATCH] Added second tray icon to show updates because of Windows' balloon limitations --- WinMute/TrayIcon.cpp | 20 ++-- WinMute/TrayIcon.h | 9 +- WinMute/WinMute.cpp | 48 +++++---- WinMute/WinMute.h | 4 +- WinMute/WinMute.rc | 2 + WinMute/WinMute.vcxproj | 1 + WinMute/WinMute.vcxproj.filters | 3 + WinMute/icons/app-update-512.png | Bin 0 -> 29695 bytes WinMute/icons/app-update.ico | Bin 0 -> 15086 bytes WinMute/icons/app-update.svg | 164 +++++++++++++++++++++++++++++++ WinMute/icons/app.svg | 8 +- WinMute/resource.h | 5 +- 12 files changed, 221 insertions(+), 43 deletions(-) create mode 100644 WinMute/icons/app-update-512.png create mode 100644 WinMute/icons/app-update.ico create mode 100644 WinMute/icons/app-update.svg diff --git a/WinMute/TrayIcon.cpp b/WinMute/TrayIcon.cpp index 516c314..14de540 100644 --- a/WinMute/TrayIcon.cpp +++ b/WinMute/TrayIcon.cpp @@ -40,16 +40,19 @@ TrayIcon::TrayIcon() : TrayIcon::TrayIcon( HWND hWnd, UINT trayID, HICON hIcon, - const std::wstring& tooltip, bool show) - : initialized_(false), iconVisible_(false) + const std::wstring& tooltip, bool show, + int callbackId) + : initialized_(false), iconVisible_(false), callbackId_(callbackId) { Init(hWnd, trayID, hIcon, tooltip, show); } void TrayIcon::Init( HWND hWnd, UINT trayID, HICON hIcon, - const std::wstring& tooltip, bool show) + const std::wstring& tooltip, bool show, + int callbackId) { + callbackId_ = callbackId; if (!hIcon) { hIcon_ = LoadIcon(0, IDI_APPLICATION); } else { @@ -134,8 +137,7 @@ void TrayIcon::ChangeText(const std::wstring& tooltip) void TrayIcon::ShowPopup( const std::wstring& title, - const std::wstring& text, - int callbackID) const + const std::wstring& text) const { if (!initialized_) { TrayIconPopup popup; @@ -151,10 +153,6 @@ void TrayIcon::ShowPopup( tnid.uID = trayID_; tnid.uFlags = NIF_INFO | NIF_SHOWTIP; tnid.dwInfoFlags = NIIF_INFO | NIIF_NOSOUND | NIIF_LARGE_ICON | NIIF_RESPECT_QUIET_TIME; - if (callbackID != 0) { - tnid.uCallbackMessage = callbackID; - tnid.uFlags |= NIF_MESSAGE; - } tnid.uTimeout = 10 * 1000; StringCchCopy(tnid.szInfoTitle, ARRAY_SIZE(tnid.szInfoTitle), title.c_str()); StringCchCopy(tnid.szInfo, ARRAY_SIZE(tnid.szInfo), text.c_str()); @@ -179,10 +177,10 @@ bool TrayIcon::AddNotifyIcon() tnid.uID = trayID_; tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_SHOWTIP; tnid.hIcon = hIcon_; - tnid.uCallbackMessage = WM_TRAYICON; + tnid.uCallbackMessage = callbackId_; if (SUCCEEDED(StringCchCopy(tnid.szTip, ARRAY_SIZE(tnid.szTip), tooltip_.c_str()))) { - return Shell_NotifyIcon(NIM_ADD, &tnid) != 0; + return Shell_NotifyIconW(NIM_ADD, &tnid) != 0; } return false; } diff --git a/WinMute/TrayIcon.h b/WinMute/TrayIcon.h index f5d3d12..288234c 100644 --- a/WinMute/TrayIcon.h +++ b/WinMute/TrayIcon.h @@ -46,10 +46,10 @@ class TrayIcon { public: TrayIcon(); TrayIcon(HWND hWnd, UINT trayID, HICON hIcon, const std::wstring& tooltip, - bool show); + bool show, int callbackId = WM_TRAYICON); ~TrayIcon(); void Init(HWND hWnd, UINT trayID, HICON hIcon, const std::wstring& tooltip, - bool show); + bool show, int callbackId = WM_TRAYICON); void Hide(); void Show(); bool IsShown() const noexcept { return iconVisible_; } @@ -57,8 +57,7 @@ public: void ChangeText(const std::wstring& tooltip); void ShowPopup( const std::wstring& title, - const std::wstring& text, - int callbackID = 0) const; + const std::wstring& text) const; private: void DestroyTrayIcon(); @@ -66,8 +65,10 @@ private: bool RemoveNotifyIcon(); bool ChangeText(); + mutable std::vector popupQueue_; + int callbackId_; bool initialized_; bool iconVisible_; UINT trayID_; diff --git a/WinMute/WinMute.cpp b/WinMute/WinMute.cpp index fa8123b..9b987e6 100644 --- a/WinMute/WinMute.cpp +++ b/WinMute/WinMute.cpp @@ -164,7 +164,7 @@ bool WinMute::InitAudio() return false; } - if (!muteCtrl_.Init(hWnd_, &trayIcon_)) { + if (!muteCtrl_.Init(hWnd_, &wmTray_)) { return false; } @@ -241,7 +241,13 @@ bool WinMute::Init() ShowWindowsError(_T("LoadIcon")); return false; } - trayIcon_.Init(hWnd_, 0, hTrayIcon_, L"WinMute", true); + hUpdateIcon_ = LoadIconW(hglobInstance, MAKEINTRESOURCE(IDI_APPUPDATE)); + if (hUpdateIcon_ == nullptr) { + ShowWindowsError(_T("LoadIcon")); + return false; + } + wmTray_.Init(hWnd_, 0, hTrayIcon_, L"WinMute", true); + updateTray_.Init(hWnd_, 1, hUpdateIcon_, L"WinMute Update", false, WM_WINMUTE_UPDATE_POPUP); quietHours_.Init(hWnd_, settings_); @@ -249,7 +255,7 @@ bool WinMute::Init() if (settings_.QueryValue(SettingsKey::MUTE_ON_RDP) && IsCurrentSessionRemoteable()) { - trayIcon_.ShowPopup( + wmTray_.ShowPopup( i18n_.GetTranslationW("popup.remote-session-detected.title"), i18n_.GetTranslationW("popup.remote-session-detected.text")); muteCtrl_.SetMute(true); @@ -311,7 +317,7 @@ bool WinMute::LoadSettings() btDetector_.Unload(); } else { if (!btDetector_.Init(hWnd_)) { - trayIcon_.ShowPopup( + wmTray_.ShowPopup( i18n_.GetTranslationW("popup.bluetooth-muting-disabled.title"), i18n_.GetTranslationW("popup.bluetooth-muting-disabled.text")); settings_.SetValue(SettingsKey::MUTE_ON_BLUETOOTH, FALSE); @@ -327,7 +333,7 @@ bool WinMute::LoadSettings() wifiDetector_.Unload(); } else { if (!wifiDetector_.Init(hWnd_)) { - trayIcon_.ShowPopup( + wmTray_.ShowPopup( i18n_.GetTranslationW("popup.wlan-muting-disabled.title"), i18n_.GetTranslationW("popup.wlan-muting-disabled.text")); settings_.SetValue(SettingsKey::MUTE_ON_WLAN, FALSE); @@ -402,7 +408,7 @@ void WinMute::CheckForUpdatesAsync(std::unique_ptr updateChecker) return; } if (!updateChecker->GetUpdateInfo(updateInfo_)) { - trayIcon_.ShowPopup( + wmTray_.ShowPopup( i18n_.GetTranslationW("popup.error.update-check-failed.title"), i18n_.GetTranslationW("popup.error.update-check-failed.text")); } else if (updateInfo_.beta.shouldUpdate && betaUpdates) { @@ -412,7 +418,8 @@ void WinMute::CheckForUpdatesAsync(std::unique_ptr updateChecker) const std::wstring popupText = std::vformat( i18n_.GetTranslationW("popup.update-available-beta.text"), std::make_wformat_args(updateInfo_.currentVersion)); - trayIcon_.ShowPopup(popupTitle, popupText, WM_WINMUTE_UPDATE_POPUP); + updateTray_.Show(); + updateTray_.ShowPopup(popupTitle, popupText); } else if (updateInfo_.beta.shouldUpdate) { const std::wstring popupTitle = std::vformat( i18n_.GetTranslationW("popup.update-available.title"), @@ -420,7 +427,8 @@ void WinMute::CheckForUpdatesAsync(std::unique_ptr updateChecker) const std::wstring popupText = std::vformat( i18n_.GetTranslationW("popup.update-available.text"), std::make_wformat_args(updateInfo_.currentVersion)); - trayIcon_.ShowPopup(popupTitle, popupText, WM_WINMUTE_UPDATE_POPUP); + updateTray_.Show(); + updateTray_.ShowPopup(popupTitle, popupText); } } @@ -518,10 +526,9 @@ LRESULT WinMute::OnCommand(HWND hWnd, WPARAM wParam, LPARAM) LRESULT WinMute::OnTrayIcon(HWND hWnd, WPARAM, LPARAM lParam) { - switch (lParam) { - case WM_LBUTTONUP: - case WM_RBUTTONUP: - { + if (LOWORD(lParam) == WM_CONTEXTMENU || + lParam == WM_LBUTTONUP || + lParam == WM_RBUTTONUP) { POINT p = { 0 }; GetCursorPos(&p); SetForegroundWindow(hWnd); @@ -529,10 +536,6 @@ LRESULT WinMute::OnTrayIcon(HWND hWnd, WPARAM, LPARAM lParam) GetSubMenu(hTrayMenu_, 0), TPM_NONOTIFY | TPM_TOPALIGN | TPM_LEFTALIGN, p.x, p.y, hWnd_, nullptr); - break; - } - default: - break; } return TRUE; } @@ -567,7 +570,7 @@ LRESULT WinMute::OnQuietHours(HWND, UINT msg, WPARAM, LPARAM) if (msg == WM_WINMUTE_QUIETHOURS_START) { muteCtrl_.NotifyQuietHours(true); if (settings_.QueryValue(SettingsKey::QUIETHOURS_NOTIFICATIONS)) { - trayIcon_.ShowPopup( + wmTray_.ShowPopup( i18n_.GetTranslationW("popup.quiet-hours-started.title"), i18n_.GetTranslationW("popup.quiet-hours-started.text")); } @@ -576,7 +579,7 @@ LRESULT WinMute::OnQuietHours(HWND, UINT msg, WPARAM, LPARAM) } else if (msg == WM_WINMUTE_QUIETHOURS_END) { muteCtrl_.NotifyQuietHours(false); if (settings_.QueryValue(SettingsKey::QUIETHOURS_NOTIFICATIONS)) { - trayIcon_.ShowPopup( + wmTray_.ShowPopup( i18n_.GetTranslationW("popup.quiet-hours-ended.title"), i18n_.GetTranslationW("popup.quiet-hours-ended.text")); } @@ -622,7 +625,7 @@ LRESULT WinMute::OnWifiStatusChange(HWND, WPARAM wParam, LPARAM lParam) i18n_.GetTranslationW("popup.wlan-is-on-mute-list.text"), std::make_wformat_args(wifiName)); } - trayIcon_.ShowPopup( + wmTray_.ShowPopup( i18n_.GetTranslationW("popup.workstation-muted.title"), popupMsg); delete[] wifiName; @@ -646,6 +649,9 @@ LRESULT WinMute::OnUpdatePopup(HWND hWnd, WPARAM, LPARAM lParam) nullptr, nullptr, SW_SHOW); } } + if (lParam == NIN_BALLOONHIDE || lParam == NIN_BALLOONTIMEOUT || lParam == NIN_BALLOONUSERCLICK) { + updateTray_.Hide(); + } return 0; } @@ -701,8 +707,8 @@ LRESULT CALLBACK WinMute::WindowProc( return OnSettingChange(hWnd, wParam, lParam); default: if (msg == uTaskbarRestart) { // Restore trayicon if explorer.exe crashes - trayIcon_.Hide(); - trayIcon_.Show(); + wmTray_.Hide(); + wmTray_.Show(); } break; } diff --git a/WinMute/WinMute.h b/WinMute/WinMute.h index 25481c0..4038e44 100644 --- a/WinMute/WinMute.h +++ b/WinMute/WinMute.h @@ -57,6 +57,7 @@ private: HMENU hTrayMenu_; HICON hAppIcon_; HICON hTrayIcon_; + HICON hUpdateIcon_; struct MuteConfig { MuteConfig(); @@ -65,7 +66,8 @@ private: bool muteOnBluetooth; } muteConfig_; - TrayIcon trayIcon_; + TrayIcon wmTray_; + TrayIcon updateTray_; WifiDetector wifiDetector_; WMSettings& settings_; WMi18n &i18n_; diff --git a/WinMute/WinMute.rc b/WinMute/WinMute.rc index 0a1a12e..ffde6c2 100644 --- a/WinMute/WinMute.rc +++ b/WinMute/WinMute.rc @@ -441,6 +441,8 @@ IDI_APP ICON "icons\\app.ico" IDI_SETTINGS ICON "icons\\settings.ico" +IDI_APPUPDATE ICON "icons\\app-update.ico" + ///////////////////////////////////////////////////////////////////////////// // diff --git a/WinMute/WinMute.vcxproj b/WinMute/WinMute.vcxproj index 10525f5..34d4712 100644 --- a/WinMute/WinMute.vcxproj +++ b/WinMute/WinMute.vcxproj @@ -224,6 +224,7 @@ + diff --git a/WinMute/WinMute.vcxproj.filters b/WinMute/WinMute.vcxproj.filters index 7ca23ba..ff30cb4 100644 --- a/WinMute/WinMute.vcxproj.filters +++ b/WinMute/WinMute.vcxproj.filters @@ -127,6 +127,9 @@ Resource Files + + Resource Files + diff --git a/WinMute/icons/app-update-512.png b/WinMute/icons/app-update-512.png new file mode 100644 index 0000000000000000000000000000000000000000..48ec92f8370597668771bef1cc2b50d88bcf6d6b GIT binary patch literal 29695 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�sK&Q6{&X`M_69hs z<|1Lkmi}{4pWQ{W-kvuqn@fOL|K$6ihpWy7Mai%MTJ#o2QnPlzLUQ>5x!l5TO|ruG z*q%>7d|Qen+8N7XE#v09Qk3e3e2mt}V+n}qogrzHkp+mR5#`lHmFR#^O!D1tGCd@W zJK^!~MfAL`s0|`#?gjUr>x)Tnv%Hc^j^Gf__0Dnuz34~h2AJW@|HVPv>2)31I* z#{6m6`Sz-;?^M9&R~e@AMXlk8Cf zCV}l+wC{ELfghqa9y8Zko%yL|USNLv#Qjp8#rjcG6WQF8$K}_C&n+cqJ`GxJbD+2Q z16z;~!CGq14y}&2;;j`(R;7U2(vJB%6>2~6?BRDmJ(wB^{}i~&$luNN*+*YfxtLip z>&6CYPynaIx)v_`GHRDvhK1rbtJohX6d4=uCb8z}*|uJ3j6c^UU2kuy+-55+w@@UY z`>w5~w)haeMZe#h4zQ%m+X*WD|$E4xfFLw+( zosX&VEoKTB8fq!fQ5-Jj0%6n#q!kMc_lbt~$b(B}LvGgqd$I16beCh9S? z3+)IV>!t(po@i_G3Jn!|2z*Dx)UdlbBWb9*{MskSqPJ<~`xwo(+uy}ky}!LsHOCp) zzKlNYH=OioJC^@}#vskeZdgZZ%0sR_ZC8;Fq`h&?WZHomdpmmum#wu;`3lJzqDRJn zdz~^9C|gt}t12&?HMqq_-$w^b_m?itY}R4$q5u_@U1_ak86So&uFvNGUdX5}b&vMg zQ&;6|)2ltrQ}p9tv)s-Nq8~Pz66U01e+~<|s;{e40n@is3pwQ?>3{eS{ayb_AVfQR zk92gVz*8E!SDaN7K6rrEEKS3V;6Kf|y5HylyIIVg49OnFv?XWen}LiwVpkHyjGCkz zrNo@9;HP{P{=@2EATBgcxsWSv{qvIyL1Wh=nT!7n;Ny{)3uAf{LA7rW>&Gyz!yI+a8n|s(e6i;C7hbS_2rB*c<=D+`iqOTPNWF zG--inxm&Ajz;4{o-N?q0mx(u~(xVH{22z$DF3Z7TPA&PVS543493dRP?#ogbSHN#O8PV$iHScODn0#_G*qTT? zhw9~6%T@{_VRE2#kg~~ZUJ#K9&qbWq|Ile@M(i}jzvVg;E{I+^+rhT*L8AA3yngL# z`(=;RdjiAU8#^<+IAtFnsr`=1bp~}cA=^m-cO@Q@rE5lxyWqj>M?p@pKeYAZ&mYFzcsGo-iW?o5G zB)BOtTi13?hh=a|hwxSQ(`T-nsJsNnapGT;E`%Zlwy*7-{`vzc__7J@5u}2obZM#t8X;(>P?n5^j`orNTAm>;n4xc z0nk5IMUGxN$g3&?;$Au-(2u3jIB<^y9sF@tY3WlnSO^X1vK0NbU8lRXqsvxxyaizcAmn4P`I8@x^>=#LL$Lg{uh*Aflokjl>zr~swF^& zz?dJo+>vBsxyaQ%{4ZBG9Ifq&Q$qt>te%xgw0x2S)W3x^n04qTu=Gp^XSN^qSqJB z!G!GJG&N2F6A1TyDchi<<3);3^|q^EK~BcEI5~WXRs7j5^ajj)FqMml3B{Q#4cd-K zqdRVcXt&Xdsm1f5OD2cQzrB{@_6a?TDt}vKe{2Jy9aH``2Hl4}^NpCUMRR-Jg9ztX1@z zr++&?7Dh~b#XIJgc~9m6w@&V&2C4Czo<|iYkje4!^3Y8vkW~sZ=0Y&y_vugKM>4ri zX|XsP4Rz4#dvo#mAECEcrK@No(-P5RbyF5pRgrqm`|; zhMm^XWsQZ@M@&Gx(%U{r5MQ*}P=vc$(B6J{xAUc z_=JR)Iy#TfoE$>!{lu|S{R!ag%2PbLw#z%Mxa&85z1`Zfy7a7~t3u$|{SkaFr<6U> zwW@#P8Px3o0Ny5Hn99h3jUD5%*&?nOOh#7i>Rh!B&$*>MH!!ci*a=2U_2;IQj-o|B z^YQjhUrkee3$1;QOZg05V%AB|!h(f^V{eqU>x>4$FtUUu(~c1eRvE<^eO+h4)Rxv| zwrSa?_j>`K2;e~7PttL?Yj{V(82B9t*l$$=njT4@#2}HAQ^eLkr3%9oOE`tTT}E|0 zLPKfaPpW+S#e#^4Xtukj#}hgMrPbd(02wlu`=-W>&tCmAAFZj4q~&oPl^Gg{FsRqe z|62M~+ZKl@mo?Yk@|)c;W+)T26;~+EVO%^-9c17-fMe;JHw6qji0`?xNgWN=W=C#(J-WrT28qTbqx6np_NfiL(XR>@(xa)f&#H<)}Zx<1;ad z_V$*4{=B8Z@9H&G&#Wb&Lq42^Uj$vByO-PWMAnJ6IVy_M^5qfapn+;CGIP3V0-8u7 z^zv_f%8C{Qc%hBHkY+Y(d*QXWboYD<4|~kI-h+s6tm+y<&~^ago@1ZIkwV9W#^e1m zpYwf_C<=bujg5_B9aa~-wOdKEA>dl}C$rs)d5)XfIePz6%9rW+7!Mo&pq#%;pUH=G z+OqQJr7p@uIMo8cH4I9c;2)V)Ce_qaRMhf5eLA<{HErCA4_QPPwjVF?6o6GlI~KmIj$R(=VJ zQsH`oWYHZ=Zi2JgX-7UENS!+0Q_0KAH%Cc|WmG0AN(}i?&0|jDM?Jdjku`zSsDQWu9RSRE*&^{d_$b(%%|-L=>;?@K z_1s3sJ}xRRcZ1WSqdi;e0WLh@`gLCT36GRpmVYNWZwxV3hY_s2=LYO#0uVJKgl7_( zcQEwoOM=|)_`3V4<8%7&gcCm^VKZNA&kLNe6LcJUH9{3Hi7Igc@g6DhDeSc!TmW7< zH$M{(`;)N2lj-NtHlx{}67B+qqaTWdPR^)J3_wbM<`o?styAeh)e%J&JX`D8BQm30 ztp^wzV{7$A!t{RrCXFHGT}Jd-(hoo4Gs-aF3ak(iy`-P(E`8;&ZDr1K`Dq#r$TFux z0C^HRWQ$)hgKE>xe8S+xYloWBQb?|1cHSO2g|!Nv9C$B%JAw06KgJG>wC6eFXU<6}1lCZ?qcuHWODJ%w!C z0AFfft_1+58yzQBnC(#nHU|!(SRCTTUmJYm!;gUO%ndhFON&ahrD+`pJjdLv!(;#` z7e>wztw%SZ>z{V6EL#xyIaRE`Y5G$>H9DZC^3Q{Zo(63u|6PMO8Ps~vadF{;u~@9T zF<3^a<3HbTT)|KKG&1|>s31ax8o`V4nf}urdU4$-(rIrjDu9`^{0ahCy+RMSqlxzB zCVt4%=54v>TepU^{8JD6hw>1|)+yz6!mJ#{;&NeRdGvo3;ZHcJ5nND?+8a4HH`fJk z{K;-HD!kt12ZV1n6|g<*3$%6zYXE{%Tb#EQ^J&r=%vFwOLkMk)*nT;=*Jbhc^J@`m z5&(V|3Mgn})JmdHc&@9n8YM9EB8S-8Rm>uU$B(t_LoT3TCJNS8D`_N9QuZ@1zEm6v zeuuXFm)XT;Vdd&f3KSY>KLJjipUl3}GbWi`9;O3<5oi&0Hx&eL!(SYn&_u13%s}4V z?4EXk@$dApcmxI;Z3rHgYPxMj(W!WYPhQ~Bg93+9l1R3ohTB-ofd$0e|Ze1}MRN=ql={#|$ zX#jxeEu6r}_%?o$^Am#sexqfP7V<=?pR-SgQGE_}tS7cYDIG?NF$Ci~bK*5a)1GI789D zX8|nA(qBhKC;4#p3sl%ozs<>Eu$!&X-2JPs_2NaWYlBHDxeE~Wz}AMJbr&l$-@}x@ z1^-a&<&v!L2Gs*re*%UjmRJ5WwACGXz&@73fuUnQGqUeVp8~7SQ;L&E3SXHK=6N)PBySndqfLYYfXPyqElbS&hsty~RjMt!*lPThMxQg6T_mYYf^~ zfOfGHwr`owfSe|B#|BnrlI{gLuq^Ym`qIij3|nQ4swO<-0k(Xps!u!eBm*5UqK z(1sMP3BFOn1p2Hr(a}8&(Vux9V5<>}1b?@U&kOoRxt)s;VH0ZEJvG(ThMKK-9M;kr zk;G3Ug}?v!5f>jHYT&?NjQv;;S@3O zT8ec>pUcv&>#`Ri;P54vj@I5HPhG0%%$y`PMF0sb!4roJTFLZ4Y3I6X#=V*>ebCBR z^6Ri)pFpEr1jKWDA}}Nb`KLjx)@D8Id(JyKpk)Ia_#$K@8FtKexJ9TO$t9mEtxRf| zgNF&b@@WHZAN1_(6)Vm^1||mMVX)bT>|rT!>x(n_zU06j&7>SR%P6|9SzXsT;9$W+ zLqibIg%;8{kQO-3yhu0<+j0~VIK2;F>(?-BG&05E_e5VHHDx}qJ!(X-*T9?9t5w?{?h!Na$IjArF_`jc;={SNS;lss`ew2_G@#a~QJ)U^1DWFfb<0=d zpR7qk>0Iw~ePVPhKu6LA6*GixF8^bc8p0{Pdq7S>QQ|Nw7)8d7TI;!&=<_V;Z?`R= zV`zun#3#PY$>az2ZM#Yywq?#f7{Z+U9C)%LH$OI`8*j*|H^yE57j0FJ5MX#t{@N>) z`_>cmBn|zi2t6Cw>=VeI4^Vs}S-(9^$`uTvy?)E3g>C#uy3o`8zsu|w+Dz6yOmSp- ze4M2J%Vgc<@3r2Vy)v>zLa@D~8FIWgJL3>PPsd?lq1TxO{DInFK|Ut2aQY0YpEqm= zfrA}YqlB)?fP-QFzd^gi4CIsX`p&5ETrQmQv1p)%-~M$)*Ps+0DD)}{#wWxk{;TvZ zt|>U>l+{f{*n0lDNn`aXJ&5%CFYf!|cw1nJU$WB!ErfM5pQIre`j?Bj1B zg|&NSH$K+Dj{?^s73tb9O_6N+wfQ5t*6UG!0LMX;*V_$HI$+6aTH!5hv*PJM4=Sc< zdINmMj0*dmz_b)6M=fD({cWbTx~`%Z&?(Rg17*9Js`(%ZH~T2Z&MqvI%Jz4ee^tVf ztn2H^LFHzqXmF!#_XBz$G1##8njfn}46J5`F5j0H=s4iVcEWf!=h{|>NxkoxlatdX z2MeiAJ9_y4TTRQe6sHA>01XiOfV-2x+k2h2m(3yMS;l7rd3#U??VEi z6Hwjrt)0&Jt*ewcqSInI(7`{ifDOS;z{2daUFZl(vvTu*P{I3H`Be@Fmk9w%2CljN_>_B5q$N#*Qb?2GfM`2VH@Pyv z33aZN_)+$|ckdj);!X%+2Z4b+3k;NGLH8%S^=F1@A}r33JTzNH04%!faRF8)2UfTn z*hKEy9}340X5h%8lV;a--0R3cczDKrAQQOLe9o6REj6@fjS1k6q`+Vg7_Ll@EIzS4 zs*6ns;%E?le8T8?VaV;s@i_Lb&zsC zTo&mHVkGP=-|-tycWAZC@SM3|0#Csd&=tT%k-0m~e8TupS$CKT4X-=ECW8>s(+26Q zNB@Noz)%!oU$D7p17?PW44>U*{(0YrXHIR+I{w>Ez@(`?NXqG+IbFG zt!LZ?vfFm=^!~sRHS;9LS2FPpZ&-;O5qML`!B}DXLV%C23TVP>FWwScME2;n9F|6x{iIiEYKzck= zlO2Bjax@eU^~Z)Je2$-mq`B5rS)(Li^ByEb6Q z1}L|HT%F5$h(Resm@J9iAl~O0JyOLZL%bgrSkDA`tcPuW#+g09UHA3dc!m4&$V)n(-3rMEhOO)eJsGG+$m2gDa zx4X{lRs8%!64?#jft0z$Cb!mTSxZZ6Z1WYot4khdyBAuVHqmT+j!nNN;T0CD;nu+K zjmL95lPPc6pthsuou41j`fG~Ta{N$HD`B$Jq9Q!gr)6K1J@cGRb%hTTP#GG6#l{Oz zX%`82S{$Ac&@{E4-5J=NVQCp}CpXW{3m990Vr?ss2<_f}Hu1}r#G)@HbZAJ8@$JJ{ zexP{!++*M78FarNlxT70PSST%s}%S4%p67++8$1l7o@nR&V8~f;J*;4O-wW!KL23W z^B8#cQsVOl4YnPx1|c-Q^P2eXeE3e`M&?Guk~D#*tF}6n*#p#nNc%5rfL6ULYBowd zP^oBsPbKt$^!>FYSkwP7q97xi+%}R=^r*%CoFs6W)ax!hVYFmNM^rx#F53qAOldHmF-^PV-xL%InP7Do&@lsCIN* z%$HfEt2;AC)LM=@?Cy6yIkK%{vwBt$ahIU#k0`a}AUTqOcz277rZawLv&o`h z5&A*^DJjy@@YLaIVb`14WzUll&r%u>nVEPT?8rcxUA#vsi98d?*NYf|uq)$ir(XZL=4Q4~6U|R>0(t|CaVxO4_7bwSS%FRD; zZtD81kSyr^_5%z6wC#%-=S3&hjwmRQC8}t|MWr2HC$t74p>g_Mx}}NuXhr-Dry`He zW5Z&%kBf`zyG42JUGk%utNNGY?)RXp6JdNVn|FxCeLXCdVim&Z7$%kT+^1#Uht!ebKz?*h`hIrAK z2WcVbl<*UE!UM3Gk+c0}SPB5J-%-6IyW>ZDQ=cPu>MqE(yFvVl7rjY8e7nbkr(a;s z_eeP>FK@A%Xf5NLc*>B?ugA>RC+$9CV5nB!K5ca|vxQvS)PiTxpCt+P0x!O}No1pu zjRhS9NVFW}QDqC!*}usfCP5{p5{rteTBbVoalE%2!^iGcet;WUYnuZm+1+bsvwf;HmpOVn+ z8*lCd_iQpiQa2C^e-}mlTBnDUVF&l#Fwv!JnA7dm9w*q&k1yn2rF>j;*g7g`jaJFa z$7ecQ<4($LfsKiYIiEq5vNiD3|MHUC`H;$>~5xK%C}SdOm8da1*WV z_fpg629@}g){|1n?v*%$d4tL694of=tJ*Dl|G~WyN1OS zj_;c()c7y{kw=x%p5cS?wyWExHU%quTDtCRAWIEg%asnbUVjtvsE1@YE29DX=K>_)DYjd<(wSI58rpq}1Na zaTWTcQu?Ie^@lIQn81^yXI(xxOXvI=#83;4H<>*LIL<= zN%!h&Kpmh-OgykV#q&g$NR8WaLGrhN!VQziCHC!2o8+e-^!<|HZHvbP1&)7QDvs6$ z&}@0gYa1uAQG-9E`X-Os;5ZbP$e~eQG(0u_dxCny3h+~vDSjN zP}8V=rky+P@|fOjV`S9f4vi)QmBuK5)qsb{Es~Kgq&#{PNgPpTsC=D9r~Ohbnsy}K zk*w7+jUqAiQ=W6%w+jkyrrr4>^zG}|{?# zel_bK-dK0Gb*#PFYdGVw;?ZS&b^a{5FdM)pzMVME6j_ z-(un%Z+d;(`6KLwwo#<_tAW24)*I`i^)a)zp0h{%UKGB?oF_EJlUDrTS?uz+HsgSX zrX~s*_S+cawbprp(DPJ$e7n2nh6`)3g>7C$w>K71NcpqbJKmi~;QhTo;gI^F>Hd~c z>*q_t;z@grgmf8<}U)*%@gt&J(`zNLnMuC0j- zr1r^*E#M;f%w;b<*al%SGz?M|y^>eEONKlwb{h>tNB`i`ME_E#gY?G#K03X!5?Qh9 zeyMwoqeJ*8v>NIN_W}+pa&GG{ab-PjebBKnKUP1LM1RQye*MSjb4XLO0{)4Nj++aQw?cQtkz2zfcDS|%%~o=s=etA=n((@ z`se3gVZ}SM%JG+H+aj>)Em0YrTKRi>-NDDL?Cf$vI1&>3k#kgx){j9PEpjx9VcWC& zFj9F`P+#IUDrZGP&FHF`^XooUsJBaO+TZ}AqoeVK1qFqLiEd@-BWJa5PQK5Irnzcp zYv1kNg-IXFcy)T!7F{tT=dfjjrqtNf-mH{gG#0g(mMjdM-Sj!ks~Eg7+1N}^J}nY* z`u0UBa1%WF{R=!~ro)=3g$D2FkY!+G{9IBp=rBJurThElr`B0*=x(5xNZ_4PPx17? zN699=JxA0vO1$|y&ssmnjS(d8Ef2G)#$9pmN$-ouhw+2h09`k@q3hF?93;q}HH%i# zmTLDJT%BZgt$S>HAmZ+H3ym~(f#A`DY&=nmO2^l3maKa91jD!KQKj)^m>P2EbcG5; zw!ojaA@d!M#MGAHTP3C&N(z3CJ0n!g19b}zY@u@(Ruo!}U2(_ZIer>Ui1(=+HuA*H zr7^)=EbUDQ$P=((Kn#S=oIb&d|IM;L~4Y|T2F}~Qu=F#2R+eF8;4m1DZ`Nh-d zYMK^S=OD)^AIcLjg4VtO;taOR=uW37lE4eMYtE;KIiY~q9qsG2 z#+bl^Y@+yZCI@eq9~KYMHUN*Tk+&Qvv;TBhOp1GCulL(;8QPJTuTu;JFB?d|qQ(cpg-6Jt4VR~c;4x~gAu7~2^(3nn zb}jkS0bj+8M^YYokHKi6KU>zP#+8SaIaM=6tv9mHU2$fDDA zgLjao?2djYmONP#Q1CNgMoz2WX9Ev)MQrL`aYM+XiOYrz+d_nxm|u`tV{{Tqtf2Sy$W1$pQ z@@2-ssDqR`z=n(ZHnn^yPT}a@i@c?QEHYrt%TKD}iIn)t3TDo0l`v!0gb^@ne2SE# zNjM!)0K+Z_3dCtDN;PeNC9aZ2uX4+MP(~sWy4S-lzj-$v(BHhwjP<&(+wVTaK`(zj z4z{{$eTj}K=A`F8 z=j|enNCuv7-u-!~x-_rK9$)?BObWp;RCys;Y+-(Xu;I4gZ288PMLE7X?(O;=T&r)e z<3qpO7Sg#NVEg*)+A7@8TpuNP*=Vuf)ISWV;u%E-{yYRKi>>_yc z__NcHN2mC=rG?!)R*Jt6$Ycp@a3Jm{zmgl51$_PTbky!@cP}V1GU|gQ0lGHEZyWps zAVK;9Zbv{p?op}b-!^R{aL%doHz;Lmjo1ZROs?jevWRKNKmq3z<*l;)ZgOkAHGO8} z@R=Y>;O#u_w;sY>} z{_9ZCNWer_gih=)l({+4r`lkEATB~yVQYrLi8dyD_6Zbj!rmvtqtYt>E^TpuCJZKK z4pyXrkmeKnCvlFlR#(9_~F4VlcVD1{Et23*9Bg9ff5-MP%Dyu)=ys- z;ilGw&XKfhlpOZD5uTn6jNbwV=8#GdpTxvXKw$YrUb(# zG_A4kz3cm=d7V)EJ%{*_MxTLa%Rg_BO?K$b3wuxQQ<%CskVWHycY3&aF;TpWqTqLR zydJjpHMdq89e|Hl7Im&x8h!k~fVwbLQjo6uC>#)P)Sqcp{IU9t582M!=ON-CirT-p ziypI1>#FGx+(7wH2Kt^afLwQSYhgE0qoOviCwL;hTce6kG%GXrMITuNdJkpcn}~;Q znzeognBnAX+eAn0Mw#1s(AAh}Ba*)tc$-}M;|L{mZt~*MSX~MWGje%M9ZHYZo^+UA z4fBgnNB?GJjjdeGqy5cDEXI?a;cS|WfFWKFG@z+J=&abL)n&qtuh#G3l&3T}gTY)| zqx)}Tf_ox}5gYF9Y))?IBcQG}FDi0nHa5cJRomrWN3(YU{1{inf_ygFL9F}w(61Qi zN9OyYFT(~3q@O9Ll<|ql94d+5%{eC@eb^GlJ@=Xq)2Vobq?J1AF#o6cRHw#-j&C{NUJ|5NC++2;!) z`<9?Z9<61Ud~SA_hd04MtMd5cJyZ3Zs^T8EYPkJer%xiayWHM;1}4p-=2FAqpb z1-CmG-NB7tuQW!A-poEk{&%fr`XgCZzw;pz{#%{*dR$#zpwY4H85~E}Dgf7$6$sc@L8EEs?ViErVPs=c0{ zU@v?xk%y87;s~MGqW(Hn+ick6@eBbb?DE-zAl4#kNm%6=m|QEhu`R^7Xy)b$omIpS zHVAZz-S`SqH+N2XNqrAMJpC7HSATqG1m-LWH;jzy%xcgxTuozn`3f6oG7 zfHk`hCRSpvZ2h->2czI-lE}pRP>{H5WIgTtBKJ@3g{wdr>`NSEzS~GOja$BpOA#R8 zbszP(+N`hR;yA)#V3^AlHxGgFf*X~!=9^Ohx?MkbBjKntLrU2`dbZ&|7~YjrOO)Ts zWko>?azXG>GGGz?J1zuqi)XAXzwjd`LDre%W=pg@<&h7<&+_9yZ?VDwoMXWy`V{lE zMRAYKRdXn<)(h3O%;HPUYRW&KW`BdT#B}>IuzTw5KUw@fylMG$E9o^4*@B#JQ2$PT zb2WH`tY76t?D{lAV)Pe_2Y546xA(aZKEZBU&i&+Hg3r;X=~|04?AmE5IVrmSPkEW(mq!QpVRUq0t@}N(0JGQ%e#|IS5EJ4C@33*R6PJQ2)K^@#g80u z`3eT&N6x;&vc`RW>wn}C3xyxeXM*)0NEn{6{S$hK3{U`}RVjURc0n8pxBS}g4u*?? zD-L27tJl{5hbR$J1qJUQ%V({^Ug&8DBZ~IvvLVT)U_8~ zF;ppUOWueNjj2)e(YHItyM0gL8~ui!FhEki=iA0tkij`)q`5Aei)By2jQLXcTS^Jj z9^a~|-OXR$7I`_$DgLo4FCCS({ii^Y)Rj27uk`=vU4FZ(S{7TpR}@Bn>yyz*Gb7Ly z7jWh+z<_Ymc&58Tdx;4QyA+z^IPerU#VlHo5cH!o1Q0|+2q2FD@DFQ*W7$}vladnb zsnKPXe1^PYAzp~gMq@l_^t<+x_clRt6Relo0(o`#;RskJIV*shwUeqXzqw~am-V>> zGRZQ0;63R74h&0Zw_ zmlSc&h~)Laydn*`-&0lh0@!}Xle&xDErg!HjXudTFJ~NE4nzDA6a;C8_d{rHzMg_Q zLTW{0P=SzP!bqiD5k#l-5D6J2?6*DPHk7}Y4#Qz<0S&W*YN>o0`Qo?qjvA^ zd^CHfauXHxKOkx7`0$(voR?e_K)C}M3U>z>4shAdzW9HrXGCNC5jiz)6d40aEFCww z0fy)oHdSJ)zY=j_t5+3+JxFM?+7YbvTE6-bOha}%)pS)T*nv{h-^yo%pC#T05fPQG zy~Z3|p8`Sb;0Yr={ug_4I{&8Onta#o!{ZqL9$W@s3DG!Cg?Wa4sB9$XQKc_4APiMt z6u)~com(~3Ve0tu`_H>o<=Me>pTTR+r*s&U6Bn6zJkW2uQ7+`t@qbqf%w~yg2Z((GgM=ni$@03;ZA!W z{H&&!Fx_vs<({>F(%lqTAvr?7lASesx*j%7Cw^~DQ|DkvIPDY+)CGBX#7>_+&G<3! zzGdj+j-%=a$s}3)KlqjGb(o;_TMy81y?~H^&M*KAUy3kOW7y<1dtm1sKg;>)88?+jdv-i@SrM)Yb)lcdb=l4TWURJMU5(saqWE>p?@AXj$pGAm>EF%t``@b2;Uih@GX!sOKM z>Nj3VJL3@X9lpZC>N8Z_c4%|@TTDn5Y*BT;YNZJ7_S^UqSR)gIHzovl9=rl&g1RP- zp|2|9bv7P#(-0S~XuI?T6jFmRz6M-!l3%}$&g?v7&z@E5dhWmfX>@JtTb3lE{G9R3 zuHJI3DoMp`;TitA@-Z_*L1Jr|KZi=_{^^Ts{+r8qKTRhu)aiv3wgVqg*$ZB)$9%8d z7weKd#PR#<)-;FDQE(52_C@9MtEt$=%P?pKqRTRB9)UqA+{74KilFr^$8;$N1-^u= zn20S_6N&vfJ&f~IV_~+@Rt;Q_lfNB>Z%sVBYQ%GIgAuw8=arY{S72BhsLFQe{kAT< z_PX7oP=jaEwx>1wG*+TQ7s6iw*^fLsthj$%w9J=}sD)nJlCha|?Q5}JJ>n=jFLZ%$ z80k0cFaE|{L^!_9of*Q?aOX8GX&jZDhh_c5RazqNjU1ik(_xL}*j|3)QIbOJI=to- z-rT_IZ0Cecu+M}h4TxCh+!Wt?3v6xX2hV%S9QvIwk@&8^0P!KX{xo3Gjd+MF&&uF&LtH2);H9IP}_FtsvrY+r*)7r!sOy);&ONkK)crrOqXO?_;U z+v5}klzdf<^*wY=c( zpM<$B2)fYPIVdNCNgFx(aKyJmjhK6GYJKa2*jXDc4$)D|j5jy~>}A`3XL}!Y87^OS zy($o?$yG4TlsaAxmU`L(app{+2|;7@dFv)|c!cswD|wEADjR`#rX*U%GpTw#V5ts! zhz^Z^jTXoC3XEtFo93t1_R_L1epXe|H?x#CSj>qMj)7sYt#Vv&8uooO?YDiZ4?$be zy}p7oxul#PBl6bIQ$Xm$Fb3|)o?oHq3LE9SOC5=+EmXDvD(-hP{@g~J$J~eGv*DaY ziU~1zv3_qjr$m{p=iS&ux!|g=IP(>}m6b@-!9`*<1q6Xj+VhI4>21mXD!Rd_>;*Wx z-;(R@`;$w}MXL+f)-YFdzJoqqq@YZ8gk8^K*9;_Bb!sAJ|kfX+CsOF<7fPD`cCsOr67Q zKC4&4G6CnTNY~_z)8PAg1>WA?A-?fO(Dz_W=8O$jP~YaKNzc7K&7N9u?#>cVCX;v= z=9Y?HG~WEWVpvs-jj4agnMQ+bG-mrw))m4j5;JEqP7bgtaNq8eIVq#pm#Ybvqv9sP zgI{Ww_puoOvS9?gAgx#J5U1XDCBCZodr4tGF>-w(#}p`UL^Q>#JT*1Vez4r>63a%~E_3o6&U=04Ro7^46EjsJHRrP^1YDHdV*e&J3n#H0PHi(-w z3j4*^_si-%HW>O`14H*W%r91FH0Omfxv-vvrP4JQYZim}w_R+e(!eF@0=fPnc~YDj zAATui4L@95p)IvXCRv%yJ}8EBz`OIeZidhi&wmUiTc%jCDh4&2 z^ijv@lQGZan-hulQ$mXa)|@>-_6=+mC8>r%%ZJlzp&WtHGL&|4b>tkHx3ZA6t@mD`Y<9?mr&Si+=T-BvM%JX@z}D z=*luap@h`D75o-UT&^0uU4!!V{(55p&Do=S{$!~GGHJkUwycOuJ`9l0ZnbZA8D8<% z+9>dvsXK4V;ZK*lFTp(D30-W)WOiLO!V+7yI#OFKq~VOhfh;aI)}{N8MSt=b1XjpMYztSIpkgge=mgjf?!)a-;_(HA0nkWAVD)LPfUQF5F z!s*jl9tdKrCqQB)#s~DgnhziLu#T=R9LQc>EsDD6So%?u0j!Nv zFl`f&rgmxVehRAZqJ}Jfd+{o}U=wN+2B@3hZ* zORp)kB>@)*D#7g-<;Zg&c)1rD;F?ZntdOJL8(B|d@w294Un-7C7C7G#LmL6tMhoT3 zgEf3PPu>n@-H-#ZUe2glk>x&ebLr>MV>E%J-2JO2b;CH)CS!7IW`^l-7(1I071VXp zM|TE@P;@c{WmfmVTngQzjz?oEJ8t^ukUyu{+VJnch9=x?Rt8_?o)r2Pe310YQx|)- z1XpGB2fAOEXGq>Bu{|qq%7A?JKYByd#Tc}P9pFywY$FH(o8>kcY;CC5gOP%zA(aEK0|y zEwr~vk?CU1SQA&d64NdLMWOImfQ;_y7w9;>H|F6i=VbL9;CWetiY0xidNey{%~TUv zxe}$d=77g;9`hQqu*HbNAAD-`L+hu97BDI0v%nm+%iDr+o^zG}V)zgS$MogMO4{t5 z$R3ZE|GYMP@wI>cPUC%=O6W@W}MlX(2QFYwIEjNx5J=03tNEeCksXgP*wx!OTc&!*i|!DBrEp00kw} zhx{*}CHc;z`e<1!STo5z`8UdWlsJ#Srk7=beZ6+%vdj)Eud~8~_H=3wt1WL=qodp6 zGsi{i%m4uo{~o%034O8_;d#mB9T<7IHrgO{VaW9@6S_^N0-@w~IXa3h{a|7LF$ms45`n(?& zhm8x%v~`>zN5;B6LQ`5Pksa$xj|+?v=St72t=2`GdvdfWRvn*>J{fI%+VvvW#$TDV z?Y6tK2QM!VYHZ&rfb{p1?n#k?lu1Fy>o(cmKb@olqi-6Um_&dFNF2vo4WX0<)I?%>kdE?|Ekxnt zhc8h#veUzQE0WsRBo!|Gy~KmpYyKyVF?-xS+X&tYOE`9&?|*ZHf4qZBJ`bpGhUJj5 zku=<|V5jO1GQcd1lA{wV?wh;N(8|quoK@jnJEXSV2)$&H@S4+~{`2QIX`?%F$FMD; zXd~^O)W=W}iyR~NP1;b*hxXm^`9t@PwGm+^n1#|qjvL2HCtvm24upnCVtF6e&1Y3; z165pV)`JmF5EIv}ky$_YX0sD3U50X8CqA!RpZYF%`xa;V^XdAVIDT79dBfAulfJzgNdh`lVA??r(|a#IbI99Vn%)NBhr_{-yS`0Uu3 zWk_fR8L&A|nf`b9u-%n13N=CV^4Jj|W_-SG=4bY3>^@A^Y{oW*l?$n!a6bC1kO@&d z&Q~mQE;m5~BADDJ;jKg6J8&No@qKE%e?1yTZZG4?V@tZhn|DZ1P_X=(;5pdkp0^Gf z(=#)#EUF#=^35&pul{Q&UvZ=%3}C5+Ec}j8J)4`nLh@D|RAB{HcgiUDQ+Uw;r5wG# zL6Ukf%B=lVxB;|9nOq`H zB(CdOM`zEBw})(=uXTGv{?~U4TIzM8a)wIGB}=U9Sb*UIZHNkL5Ja!74~oP=MUUM! zPJSHuaKD%#8vFQSkX6-#v8nn5EH^GUpW!&~C0GDuBr&{7;w`OQrA|zh%4Lzwl zdsKUHRR~7<>)&+UetCbuY>m_>T@%LQZV>yl`uIhpKL4At_O(Oy`T4O*tKSx6HcT!+ zZW-WlrQa+4HcE&+QDZmYbDvO<7=1J^8x_s@gTuZsx)%=hvk3k2-#cM+r@50gzq~#E zD2dPXD%}G;8i;MlJnLISHjA~$ANT<{DOC`+CTnWt%Vbw>o1(4H-Vp z$k;FIp4CPW3|mQO3n)cxKA#W4U|KJx>R|(olp8Y?cd;@5=voW~b-`wEfcX9U`v7{c$01LQ63;~Nu zHi~3w3ltCuvfG{Z>^6_t53iu0Z1Dr@=9z~nMoGy5VIw>bD~f3bW>LeZdK9`^-p)27@5 zG=Az8;$q|C*C?~9`DNSM6`aAcEuS-VmS&iKp!**Q2&mv&+N^X*wEcvVwm zgZW@zz=l5sZ0)P$anX4gdt#eCQWgOsg^q{E-$8u=uV*QLvun%9?)KAWueR*L(mR~h zBh6?uQJe+--f>I=fMMf}qt(QbonFE3$N?iD~rZ z>*6dQIY+Z)!**+8P;`dNuipX?CRYEW9p!csEQMRzB)*crPWy@Uw<9?-Gj@A>j)uhHOA#sxmp;_F5G7`)wJ z9R8YQOR+k}N*!M(4i%b6y9_RU#Be6TY+0o0d`7BVZEiU_PMOy4rzXr_L+~pg);s~8 zwsBDhHPj$>9P$h!WjQE46#*#Oe6_}odFLb-1r^u!d^M(dJ_I;GpcToFV^9#m;P$5* z+!(F55op^$YA7ZX!@0(h*xCmp9(#Su2DjLMymNE_Z8Jb$rhfO6MO=ELutIQP+_?3t z{uE6#9zmI^#70CBU|<O96CAr!>@v zI_mfv;*h{fLKeF$y~cG~g`6ptQj02eJw2LQpV^ITXE=bN=nf_He=3>_JnUpL&>-gf zJW>QvIHwij>=37RNKUDs!i#x*3vM~*XuJNqSwXSq(Q^_bF&boxDu-n_EYg?z_XTzQ zmN?XAsM9AbDkkPi%W3hiyRi5`{q^ftc~KQ3L16m`0|kc3=%}>6GLe1&^uBR`l4hg; zrzso7_Yu{!7_(Msd7qWI(NW9yE<<{)n`bUmEkQK@h`T^8W}J050$M7eO@P{((%otiy9>WWOEK zj1qwt?i7zBkyXI3eF*o>#@%o7#&yMTzpaJ&YNVjs2n{Bjf!p>;`!3j9bNtYe-bPVQ zD~iBR0hwFByVLnuQdg1<@Uh>1ZL*=Qv$Hvz$+~cn9?OpthErf9;AJZ^-zw1JcKgG3 zxowy8bM%A97ISWZjasF!M!09EfEx0lyr|pw!&xrSCCSt#urgu(4gG^LSRqIhcOSG? zrHcm&Z?7Dy+^(KLd?KQvI4GbWF-{p`5sklSAf+CO;5xspwZvdjXaS{Rsiz@Q=ed$- z5vom$<}}d1{R?2Up0o2p0eI=j1_}4z;?X?nww)Q$vLFZmAE7t7`2;eqk%osgX{lqD z0bL?wRgbb`uF?{8Md%kzv7}jgob>SUNJ>tA<=`i;B0T|jI|F1F=Ct5SiHc@A6?4^e z-kRx98LX7yl(CVUl7`p?!6BYS`pe@B+DXrzolK0ZidB=lL-|rw7%gr;SDImZwr+XC zwK2@eVZHIQ;>E_mB(txmLPb)v`Ul61I|j1nAJB4Y{HriG-=hk$gK87Bt6z+8z!jd| z<*{8$9WuWR=K~EPPy|j2NKO^(kG)a6tm%6nf=9mW`)du*8jJvQa&nT-=idj?Hl|^FwaV_d z)D|iUF2oGm2L_OAc;iMD2rXw>uG5~sbPMI->FM5Zf@!Wc%w_Eyz6eym8!6%mcaSOK z@RCO`jGoB@=9WO!C|2lvuX_li$W2b56bQ<{vkddI)u`cOc39@+G@9Nz(JDJAY3c+# z9qcHv1Tu^flEb&14hFNx@3eBk@j}v`T%G-W*X)v?= zMHU|QIAVLMkR5YGnKm8FO%DmG?+Iu+4KNNoaGnm0u%jM&=w}OZr6hp(K${!3zAKE0 z@C0i$Bq{`+x(8h_vX%H-=`}-~RmHN3YZoCc8wP9oBXzWkO_r^au+4W4461UL*-TkD+ z6b+^`>H@s1Zh-;>%b#V6S6(OJzx?jysvVk<0zD!eKnKasioR>MwJCp30;eqRB`{cG z9_ra8r!jP)ZRR33L?3=}Dw6i|*Iu-K#esk7uV};enG>1X!LI?4Um#9-l~_g*)qJOM z!MsoC3_V&hmE?E`Lr~16k3Zd&AZ84Fl%@#}I1yMJ$E(v9 zpr`eNoyf?xA#=9}+W6B+ZW`9shqy+i4jG5TFkYwfoq|%5lHAVW&&vN{Qnj6KOE!CJ z4>Sv(pgl~H4eM#_MC+Rw`PHr9et;

2))t_P&e9*|qA?3ir9kgJ+BOjS;8k21_$R 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 literal 0 HcmV?d00001 diff --git a/WinMute/icons/app-update.ico b/WinMute/icons/app-update.ico new file mode 100644 index 0000000000000000000000000000000000000000..d2826267c25f903d1194c4548866e6d74c42590b GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/WinMute/icons/app-update.svg b/WinMute/icons/app-update.svg new file mode 100644 index 0000000..fb056ac --- /dev/null +++ b/WinMute/icons/app-update.svg @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WinMute/icons/app.svg b/WinMute/icons/app.svg index beeeee3..89fe80e 100644 --- a/WinMute/icons/app.svg +++ b/WinMute/icons/app.svg @@ -29,8 +29,8 @@ inkscape:document-units="px" showguides="true" inkscape:zoom="1.1228082" - inkscape:cx="18.257793" - inkscape:cy="217.75758" + inkscape:cx="26.27341" + inkscape:cy="216.86696" inkscape:window-width="2560" inkscape:window-height="1009" inkscape:window-x="-8" @@ -148,8 +148,8 @@ transform="matrix(6.992757,0,0,6.7710102,-2420.2895,-308.68022)">! + id="tspan3">! diff --git a/WinMute/resource.h b/WinMute/resource.h index cac1163..fd04589 100644 --- a/WinMute/resource.h +++ b/WinMute/resource.h @@ -23,6 +23,8 @@ #define IDD_MANAGE_ENDPOINTS 135 #define IDD_DIALOG2 137 #define IDD_MANAGE_ENDPOINTS_ADD 137 +#define IDI_APP_UPDATE 141 +#define IDI_APPUPDATE 141 #define IDC_LINK_HOMEPAGE 1001 #define IDC_LINK_SUPPORT 1002 #define IDC_LINK_PROJECT 1002 @@ -45,7 +47,6 @@ #define IDC_CHECK_FOR_UPDATES_ON_STARTUP 1013 #define IDC_OPENLOG 1014 #define IDC_LICENSETEXT 1015 -#define IDC_CHECK_FOR_UPDATES_ON_STARTUP2 1015 #define IDC_CHECK_FOR_BETA_UPDATES 1015 #define IDC_ABOUT_TAB 1016 #define IDC_ABOUTTEXT 1019 @@ -154,7 +155,7 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 141 +#define _APS_NEXT_RESOURCE_VALUE 142 #define _APS_NEXT_COMMAND_VALUE 40041 #define _APS_NEXT_CONTROL_VALUE 1072 #define _APS_NEXT_SYMED_VALUE 101 -- 2.43.0