From e9ba8ede41c92b3f35fe36dbb666274f64b43f5c Mon Sep 17 00:00:00 2001 From: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> Date: Fri, 12 Jun 2026 10:08:35 -0500 Subject: [PATCH] Add macOS Fleet-maintained apps (T) (#47333) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds 47 Fleet-maintained app(s) whose cask token starts with 'T': inputs, outputs, app icons (TSX + website PNG), and the matching index.ts and apps.json entries. ## Summary by CodeRabbit * **New Features** * Added support for 40+ new macOS apps (Tabby, Tableau Prep/Public, Taskade, Termius, Topaz suite, TradingView, Tresorit, Trezor Suite, Typora, and more) with install/uninstall manifests and versioned package entries. * **UI** * Added icons for all newly supported apps and expanded name→icon mappings. * **Updates** * Catalog/output data refreshed to include new entries and reorder affected listings. --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- ee/maintained-apps/inputs/homebrew/tabby.json | 10 + .../inputs/homebrew/tableau-prep.json | 10 + .../inputs/homebrew/tabtab.json | 10 + .../inputs/homebrew/taskade.json | 10 + .../inputs/homebrew/taskbar.json | 10 + .../inputs/homebrew/teacode.json | 10 + .../inputs/homebrew/termius.json | 10 + .../inputs/homebrew/tex-live-utility.json | 10 + .../inputs/homebrew/texshop.json | 10 + ee/maintained-apps/inputs/homebrew/thaw.json | 10 + .../inputs/homebrew/thorium.json | 10 + .../inputs/homebrew/threema.json | 10 + .../inputs/homebrew/thumbsup.json | 10 + .../inputs/homebrew/ticktick.json | 10 + ee/maintained-apps/inputs/homebrew/tidal.json | 10 + ee/maintained-apps/inputs/homebrew/tiles.json | 10 + .../inputs/homebrew/timescribe.json | 10 + .../inputs/homebrew/timing.json | 10 + .../inputs/homebrew/topaz-gigapixel-ai.json | 10 + .../inputs/homebrew/topaz-photo-ai.json | 10 + .../inputs/homebrew/topaz-video-ai.json | 10 + .../inputs/homebrew/topnotch.json | 10 + .../inputs/homebrew/tradingview.json | 10 + .../inputs/homebrew/transfer.json | 10 + .../inputs/homebrew/transmission.json | 10 + ee/maintained-apps/inputs/homebrew/trex.json | 10 + .../inputs/homebrew/trezor-suite.json | 10 + .../inputs/homebrew/tripmode.json | 10 + ee/maintained-apps/inputs/homebrew/tuple.json | 10 + .../inputs/homebrew/twine-app.json | 10 + .../inputs/homebrew/twobird.json | 10 + .../inputs/homebrew/typeface.json | 10 + .../inputs/homebrew/typinator.json | 10 + .../inputs/homebrew/typora.json | 10 + ee/maintained-apps/outputs/apps.json | 238 ++++++++++++++++++ ee/maintained-apps/outputs/tabby/darwin.json | 22 ++ .../outputs/tableau-prep/darwin.json | 22 ++ .../outputs/tableau-public/darwin.json | 22 ++ ee/maintained-apps/outputs/tabtab/darwin.json | 22 ++ .../outputs/taskade/darwin.json | 22 ++ .../outputs/taskbar/darwin.json | 22 ++ .../outputs/teacode/darwin.json | 22 ++ .../outputs/termius/darwin.json | 22 ++ .../outputs/tex-live-utility/darwin.json | 22 ++ .../outputs/texshop/darwin.json | 22 ++ ee/maintained-apps/outputs/thaw/darwin.json | 22 ++ .../outputs/thorium/darwin.json | 22 ++ .../outputs/threema/darwin.json | 22 ++ .../outputs/thumbsup/darwin.json | 22 ++ .../outputs/ticktick/darwin.json | 22 ++ ee/maintained-apps/outputs/tidal/darwin.json | 22 ++ ee/maintained-apps/outputs/tiles/darwin.json | 22 ++ .../outputs/timescribe/darwin.json | 22 ++ ee/maintained-apps/outputs/timing/darwin.json | 22 ++ .../outputs/topaz-gigapixel-ai/darwin.json | 22 ++ .../outputs/topaz-photo-ai/darwin.json | 22 ++ .../outputs/topaz-video-ai/darwin.json | 22 ++ .../outputs/topnotch/darwin.json | 22 ++ .../outputs/tradingview/darwin.json | 22 ++ .../outputs/transfer/darwin.json | 22 ++ .../outputs/transmission/darwin.json | 22 ++ .../outputs/tresorit/darwin.json | 22 ++ ee/maintained-apps/outputs/trex/darwin.json | 22 ++ .../outputs/trezor-suite/darwin.json | 22 ++ .../outputs/tripmode/darwin.json | 22 ++ ee/maintained-apps/outputs/tuple/darwin.json | 22 ++ .../outputs/twine-app/darwin.json | 22 ++ .../outputs/twobird/darwin.json | 22 ++ .../outputs/typeface/darwin.json | 22 ++ .../outputs/typinator/darwin.json | 22 ++ ee/maintained-apps/outputs/typora/darwin.json | 22 ++ .../SoftwarePage/components/icons/Tabby.tsx | 14 ++ .../components/icons/TableauPrep.tsx | 14 ++ .../SoftwarePage/components/icons/Tabtab.tsx | 14 ++ .../SoftwarePage/components/icons/Taskade.tsx | 14 ++ .../SoftwarePage/components/icons/Taskbar.tsx | 14 ++ .../SoftwarePage/components/icons/Teacode.tsx | 14 ++ .../SoftwarePage/components/icons/Termius.tsx | 14 ++ .../components/icons/TexLiveUtility.tsx | 14 ++ .../SoftwarePage/components/icons/Texshop.tsx | 14 ++ .../SoftwarePage/components/icons/Thaw.tsx | 14 ++ .../SoftwarePage/components/icons/Thorium.tsx | 14 ++ .../SoftwarePage/components/icons/Threema.tsx | 14 ++ .../components/icons/Thumbsup.tsx | 14 ++ .../components/icons/Ticktick.tsx | 14 ++ .../SoftwarePage/components/icons/Tidal.tsx | 14 ++ .../SoftwarePage/components/icons/Tiles.tsx | 14 ++ .../components/icons/Timescribe.tsx | 14 ++ .../SoftwarePage/components/icons/Timing.tsx | 14 ++ .../components/icons/TopazGigapixelAi.tsx | 14 ++ .../components/icons/TopazPhotoAi.tsx | 14 ++ .../components/icons/TopazVideoAi.tsx | 14 ++ .../components/icons/Topnotch.tsx | 14 ++ .../components/icons/Tradingview.tsx | 14 ++ .../components/icons/Transfer.tsx | 14 ++ .../components/icons/Transmission.tsx | 14 ++ .../SoftwarePage/components/icons/Trex.tsx | 14 ++ .../components/icons/TrezorSuite.tsx | 14 ++ .../components/icons/Tripmode.tsx | 14 ++ .../SoftwarePage/components/icons/Tuple.tsx | 14 ++ .../components/icons/TwineApp.tsx | 14 ++ .../SoftwarePage/components/icons/Twobird.tsx | 14 ++ .../components/icons/Typeface.tsx | 14 ++ .../components/icons/Typinator.tsx | 14 ++ .../SoftwarePage/components/icons/Typora.tsx | 14 ++ .../SoftwarePage/components/icons/index.ts | 68 +++++ .../assets/images/app-icon-tabby-60x60@2x.png | Bin 0 -> 14505 bytes .../images/app-icon-tableau-prep-60x60@2x.png | Bin 0 -> 6977 bytes .../app-icon-tableau-public-60x60@2x.png | Bin 0 -> 8038 bytes .../images/app-icon-tabtab-60x60@2x.png | Bin 0 -> 12030 bytes .../images/app-icon-taskade-60x60@2x.png | Bin 0 -> 10715 bytes .../images/app-icon-taskbar-60x60@2x.png | Bin 0 -> 21972 bytes .../images/app-icon-teacode-60x60@2x.png | Bin 0 -> 12276 bytes .../images/app-icon-termius-60x60@2x.png | Bin 0 -> 13448 bytes .../app-icon-tex-live-utility-60x60@2x.png | Bin 0 -> 22848 bytes .../images/app-icon-texshop-60x60@2x.png | Bin 0 -> 16894 bytes .../assets/images/app-icon-thaw-60x60@2x.png | Bin 0 -> 15156 bytes .../images/app-icon-thorium-60x60@2x.png | Bin 0 -> 10876 bytes .../images/app-icon-threema-60x60@2x.png | Bin 0 -> 6539 bytes .../images/app-icon-thumbsup-60x60@2x.png | Bin 0 -> 23265 bytes .../images/app-icon-ticktick-60x60@2x.png | Bin 0 -> 15491 bytes .../assets/images/app-icon-tidal-60x60@2x.png | Bin 0 -> 4202 bytes .../assets/images/app-icon-tiles-60x60@2x.png | Bin 0 -> 15438 bytes .../images/app-icon-timescribe-60x60@2x.png | Bin 0 -> 15118 bytes .../images/app-icon-timing-60x60@2x.png | Bin 0 -> 19193 bytes .../app-icon-topaz-gigapixel-ai-60x60@2x.png | Bin 0 -> 3689 bytes .../app-icon-topaz-photo-ai-60x60@2x.png | Bin 0 -> 4809 bytes .../app-icon-topaz-video-ai-60x60@2x.png | Bin 0 -> 4356 bytes .../images/app-icon-topnotch-60x60@2x.png | Bin 0 -> 15578 bytes .../images/app-icon-tradingview-60x60@2x.png | Bin 0 -> 4204 bytes .../images/app-icon-transfer-60x60@2x.png | Bin 0 -> 17000 bytes .../images/app-icon-transmission-60x60@2x.png | Bin 0 -> 18690 bytes .../images/app-icon-tresorit-60x60@2x.png | Bin 0 -> 9305 bytes .../assets/images/app-icon-trex-60x60@2x.png | Bin 0 -> 23787 bytes .../images/app-icon-trezor-suite-60x60@2x.png | Bin 0 -> 6694 bytes .../images/app-icon-tripmode-60x60@2x.png | Bin 0 -> 11969 bytes .../assets/images/app-icon-tuple-60x60@2x.png | Bin 0 -> 13985 bytes .../images/app-icon-twine-app-60x60@2x.png | Bin 0 -> 9383 bytes .../images/app-icon-twobird-60x60@2x.png | Bin 0 -> 8953 bytes .../images/app-icon-typeface-60x60@2x.png | Bin 0 -> 21965 bytes .../images/app-icon-typinator-60x60@2x.png | Bin 0 -> 7840 bytes .../images/app-icon-typora-60x60@2x.png | Bin 0 -> 8983 bytes 142 files changed, 1914 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/tabby.json create mode 100644 ee/maintained-apps/inputs/homebrew/tableau-prep.json create mode 100644 ee/maintained-apps/inputs/homebrew/tabtab.json create mode 100644 ee/maintained-apps/inputs/homebrew/taskade.json create mode 100644 ee/maintained-apps/inputs/homebrew/taskbar.json create mode 100644 ee/maintained-apps/inputs/homebrew/teacode.json create mode 100644 ee/maintained-apps/inputs/homebrew/termius.json create mode 100644 ee/maintained-apps/inputs/homebrew/tex-live-utility.json create mode 100644 ee/maintained-apps/inputs/homebrew/texshop.json create mode 100644 ee/maintained-apps/inputs/homebrew/thaw.json create mode 100644 ee/maintained-apps/inputs/homebrew/thorium.json create mode 100644 ee/maintained-apps/inputs/homebrew/threema.json create mode 100644 ee/maintained-apps/inputs/homebrew/thumbsup.json create mode 100644 ee/maintained-apps/inputs/homebrew/ticktick.json create mode 100644 ee/maintained-apps/inputs/homebrew/tidal.json create mode 100644 ee/maintained-apps/inputs/homebrew/tiles.json create mode 100644 ee/maintained-apps/inputs/homebrew/timescribe.json create mode 100644 ee/maintained-apps/inputs/homebrew/timing.json create mode 100644 ee/maintained-apps/inputs/homebrew/topaz-gigapixel-ai.json create mode 100644 ee/maintained-apps/inputs/homebrew/topaz-photo-ai.json create mode 100644 ee/maintained-apps/inputs/homebrew/topaz-video-ai.json create mode 100644 ee/maintained-apps/inputs/homebrew/topnotch.json create mode 100644 ee/maintained-apps/inputs/homebrew/tradingview.json create mode 100644 ee/maintained-apps/inputs/homebrew/transfer.json create mode 100644 ee/maintained-apps/inputs/homebrew/transmission.json create mode 100644 ee/maintained-apps/inputs/homebrew/trex.json create mode 100644 ee/maintained-apps/inputs/homebrew/trezor-suite.json create mode 100644 ee/maintained-apps/inputs/homebrew/tripmode.json create mode 100644 ee/maintained-apps/inputs/homebrew/tuple.json create mode 100644 ee/maintained-apps/inputs/homebrew/twine-app.json create mode 100644 ee/maintained-apps/inputs/homebrew/twobird.json create mode 100644 ee/maintained-apps/inputs/homebrew/typeface.json create mode 100644 ee/maintained-apps/inputs/homebrew/typinator.json create mode 100644 ee/maintained-apps/inputs/homebrew/typora.json create mode 100644 ee/maintained-apps/outputs/tabby/darwin.json create mode 100644 ee/maintained-apps/outputs/tableau-prep/darwin.json create mode 100644 ee/maintained-apps/outputs/tableau-public/darwin.json create mode 100644 ee/maintained-apps/outputs/tabtab/darwin.json create mode 100644 ee/maintained-apps/outputs/taskade/darwin.json create mode 100644 ee/maintained-apps/outputs/taskbar/darwin.json create mode 100644 ee/maintained-apps/outputs/teacode/darwin.json create mode 100644 ee/maintained-apps/outputs/termius/darwin.json create mode 100644 ee/maintained-apps/outputs/tex-live-utility/darwin.json create mode 100644 ee/maintained-apps/outputs/texshop/darwin.json create mode 100644 ee/maintained-apps/outputs/thaw/darwin.json create mode 100644 ee/maintained-apps/outputs/thorium/darwin.json create mode 100644 ee/maintained-apps/outputs/threema/darwin.json create mode 100644 ee/maintained-apps/outputs/thumbsup/darwin.json create mode 100644 ee/maintained-apps/outputs/ticktick/darwin.json create mode 100644 ee/maintained-apps/outputs/tidal/darwin.json create mode 100644 ee/maintained-apps/outputs/tiles/darwin.json create mode 100644 ee/maintained-apps/outputs/timescribe/darwin.json create mode 100644 ee/maintained-apps/outputs/timing/darwin.json create mode 100644 ee/maintained-apps/outputs/topaz-gigapixel-ai/darwin.json create mode 100644 ee/maintained-apps/outputs/topaz-photo-ai/darwin.json create mode 100644 ee/maintained-apps/outputs/topaz-video-ai/darwin.json create mode 100644 ee/maintained-apps/outputs/topnotch/darwin.json create mode 100644 ee/maintained-apps/outputs/tradingview/darwin.json create mode 100644 ee/maintained-apps/outputs/transfer/darwin.json create mode 100644 ee/maintained-apps/outputs/transmission/darwin.json create mode 100644 ee/maintained-apps/outputs/tresorit/darwin.json create mode 100644 ee/maintained-apps/outputs/trex/darwin.json create mode 100644 ee/maintained-apps/outputs/trezor-suite/darwin.json create mode 100644 ee/maintained-apps/outputs/tripmode/darwin.json create mode 100644 ee/maintained-apps/outputs/tuple/darwin.json create mode 100644 ee/maintained-apps/outputs/twine-app/darwin.json create mode 100644 ee/maintained-apps/outputs/twobird/darwin.json create mode 100644 ee/maintained-apps/outputs/typeface/darwin.json create mode 100644 ee/maintained-apps/outputs/typinator/darwin.json create mode 100644 ee/maintained-apps/outputs/typora/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/Tabby.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/TableauPrep.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Tabtab.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Taskade.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Taskbar.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Teacode.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Termius.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/TexLiveUtility.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Texshop.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Thaw.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Thorium.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Threema.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Thumbsup.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Ticktick.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Tidal.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Tiles.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Timescribe.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Timing.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/TopazGigapixelAi.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/TopazPhotoAi.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/TopazVideoAi.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Topnotch.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Tradingview.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Transfer.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Transmission.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Trex.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/TrezorSuite.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Tripmode.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Tuple.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/TwineApp.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Twobird.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Typeface.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Typinator.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Typora.tsx create mode 100644 website/assets/images/app-icon-tabby-60x60@2x.png create mode 100644 website/assets/images/app-icon-tableau-prep-60x60@2x.png create mode 100644 website/assets/images/app-icon-tableau-public-60x60@2x.png create mode 100644 website/assets/images/app-icon-tabtab-60x60@2x.png create mode 100644 website/assets/images/app-icon-taskade-60x60@2x.png create mode 100644 website/assets/images/app-icon-taskbar-60x60@2x.png create mode 100644 website/assets/images/app-icon-teacode-60x60@2x.png create mode 100644 website/assets/images/app-icon-termius-60x60@2x.png create mode 100644 website/assets/images/app-icon-tex-live-utility-60x60@2x.png create mode 100644 website/assets/images/app-icon-texshop-60x60@2x.png create mode 100644 website/assets/images/app-icon-thaw-60x60@2x.png create mode 100644 website/assets/images/app-icon-thorium-60x60@2x.png create mode 100644 website/assets/images/app-icon-threema-60x60@2x.png create mode 100644 website/assets/images/app-icon-thumbsup-60x60@2x.png create mode 100644 website/assets/images/app-icon-ticktick-60x60@2x.png create mode 100644 website/assets/images/app-icon-tidal-60x60@2x.png create mode 100644 website/assets/images/app-icon-tiles-60x60@2x.png create mode 100644 website/assets/images/app-icon-timescribe-60x60@2x.png create mode 100644 website/assets/images/app-icon-timing-60x60@2x.png create mode 100644 website/assets/images/app-icon-topaz-gigapixel-ai-60x60@2x.png create mode 100644 website/assets/images/app-icon-topaz-photo-ai-60x60@2x.png create mode 100644 website/assets/images/app-icon-topaz-video-ai-60x60@2x.png create mode 100644 website/assets/images/app-icon-topnotch-60x60@2x.png create mode 100644 website/assets/images/app-icon-tradingview-60x60@2x.png create mode 100644 website/assets/images/app-icon-transfer-60x60@2x.png create mode 100644 website/assets/images/app-icon-transmission-60x60@2x.png create mode 100644 website/assets/images/app-icon-tresorit-60x60@2x.png create mode 100644 website/assets/images/app-icon-trex-60x60@2x.png create mode 100644 website/assets/images/app-icon-trezor-suite-60x60@2x.png create mode 100644 website/assets/images/app-icon-tripmode-60x60@2x.png create mode 100644 website/assets/images/app-icon-tuple-60x60@2x.png create mode 100644 website/assets/images/app-icon-twine-app-60x60@2x.png create mode 100644 website/assets/images/app-icon-twobird-60x60@2x.png create mode 100644 website/assets/images/app-icon-typeface-60x60@2x.png create mode 100644 website/assets/images/app-icon-typinator-60x60@2x.png create mode 100644 website/assets/images/app-icon-typora-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/tabby.json b/ee/maintained-apps/inputs/homebrew/tabby.json new file mode 100644 index 0000000000..79b5e84bda --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/tabby.json @@ -0,0 +1,10 @@ +{ + "name": "Tabby", + "unique_identifier": "org.tabby", + "token": "tabby", + "installer_format": "zip", + "slug": "tabby/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/tableau-prep.json b/ee/maintained-apps/inputs/homebrew/tableau-prep.json new file mode 100644 index 0000000000..8576ada837 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/tableau-prep.json @@ -0,0 +1,10 @@ +{ + "name": "Tableau Prep", + "unique_identifier": "com.tableau.Tableau-Prep-tableau-2026-1", + "token": "tableau-prep", + "installer_format": "dmg", + "slug": "tableau-prep/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/tabtab.json b/ee/maintained-apps/inputs/homebrew/tabtab.json new file mode 100644 index 0000000000..4ec161fa24 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/tabtab.json @@ -0,0 +1,10 @@ +{ + "name": "TabTab", + "unique_identifier": "riccqi.TabTab", + "token": "tabtab", + "installer_format": "dmg", + "slug": "tabtab/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/taskade.json b/ee/maintained-apps/inputs/homebrew/taskade.json new file mode 100644 index 0000000000..d64ecd522c --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/taskade.json @@ -0,0 +1,10 @@ +{ + "name": "Taskade", + "unique_identifier": "com.taskade", + "token": "taskade", + "installer_format": "dmg", + "slug": "taskade/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/taskbar.json b/ee/maintained-apps/inputs/homebrew/taskbar.json new file mode 100644 index 0000000000..6db1d75753 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/taskbar.json @@ -0,0 +1,10 @@ +{ + "name": "Taskbar", + "unique_identifier": "com.fpfxtknjju.wbgcdolfev", + "token": "taskbar", + "installer_format": "zip", + "slug": "taskbar/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/teacode.json b/ee/maintained-apps/inputs/homebrew/teacode.json new file mode 100644 index 0000000000..854c9a2a0e --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/teacode.json @@ -0,0 +1,10 @@ +{ + "name": "TeaCode", + "unique_identifier": "com.apptorium.TeaCode-dm", + "token": "teacode", + "installer_format": "zip", + "slug": "teacode/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/termius.json b/ee/maintained-apps/inputs/homebrew/termius.json new file mode 100644 index 0000000000..93735e0c97 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/termius.json @@ -0,0 +1,10 @@ +{ + "name": "Termius", + "unique_identifier": "com.termius-dmg.mac", + "token": "termius", + "installer_format": "dmg", + "slug": "termius/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/tex-live-utility.json b/ee/maintained-apps/inputs/homebrew/tex-live-utility.json new file mode 100644 index 0000000000..63a7874dfb --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/tex-live-utility.json @@ -0,0 +1,10 @@ +{ + "name": "TeX Live Utility", + "unique_identifier": "com.googlecode.mactlmgr.tlu", + "token": "tex-live-utility", + "installer_format": "zip", + "slug": "tex-live-utility/darwin", + "default_categories": [ + "Utilities" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/texshop.json b/ee/maintained-apps/inputs/homebrew/texshop.json new file mode 100644 index 0000000000..dffaf163cc --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/texshop.json @@ -0,0 +1,10 @@ +{ + "name": "TeXShop", + "unique_identifier": "edu.uo.texshop.tex", + "token": "texshop", + "installer_format": "zip", + "slug": "texshop/darwin", + "default_categories": [ + "Productivity" + ] +} diff --git a/ee/maintained-apps/inputs/homebrew/thaw.json b/ee/maintained-apps/inputs/homebrew/thaw.json new file mode 100644 index 0000000000..e7a34890d1 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/thaw.json @@ -0,0 +1,10 @@ +{ + "name": "Thaw", + "unique_identifier": "com.stonerl.Thaw", + "token": "thaw", + "installer_format": "zip", + "slug": "thaw/darwin", + "default_categories": [ + "Utilities" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/thorium.json b/ee/maintained-apps/inputs/homebrew/thorium.json new file mode 100644 index 0000000000..a46fe0bbfd --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/thorium.json @@ -0,0 +1,10 @@ +{ + "name": "Thorium Reader", + "unique_identifier": "io.github.edrlab.thorium", + "token": "thorium", + "installer_format": "dmg", + "slug": "thorium/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/threema.json b/ee/maintained-apps/inputs/homebrew/threema.json new file mode 100644 index 0000000000..634a2abeee --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/threema.json @@ -0,0 +1,10 @@ +{ + "name": "Threema", + "unique_identifier": "threema-consumer-web", + "token": "threema", + "installer_format": "dmg", + "slug": "threema/darwin", + "default_categories": [ + "Communication" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/thumbsup.json b/ee/maintained-apps/inputs/homebrew/thumbsup.json new file mode 100644 index 0000000000..91eacf6c96 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/thumbsup.json @@ -0,0 +1,10 @@ +{ + "name": "ThumbsUp", + "unique_identifier": "com.devon-technologies.ThumbsUp", + "token": "thumbsup", + "installer_format": "zip", + "slug": "thumbsup/darwin", + "default_categories": [ + "Utilities" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/ticktick.json b/ee/maintained-apps/inputs/homebrew/ticktick.json new file mode 100644 index 0000000000..db721d198f --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/ticktick.json @@ -0,0 +1,10 @@ +{ + "name": "TickTick", + "unique_identifier": "com.TickTick.task.mac", + "token": "ticktick", + "installer_format": "dmg", + "slug": "ticktick/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/tidal.json b/ee/maintained-apps/inputs/homebrew/tidal.json new file mode 100644 index 0000000000..17511d64d5 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/tidal.json @@ -0,0 +1,10 @@ +{ + "name": "TIDAL", + "unique_identifier": "com.tidal.desktop", + "token": "tidal", + "installer_format": "zip", + "slug": "tidal/darwin", + "default_categories": [ + "Productivity" + ] +} diff --git a/ee/maintained-apps/inputs/homebrew/tiles.json b/ee/maintained-apps/inputs/homebrew/tiles.json new file mode 100644 index 0000000000..a3f4d69dcc --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/tiles.json @@ -0,0 +1,10 @@ +{ + "name": "Sempliva Tiles", + "unique_identifier": "com.sempliva.Tiles", + "token": "tiles", + "installer_format": "dmg", + "slug": "tiles/darwin", + "default_categories": [ + "Utilities" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/timescribe.json b/ee/maintained-apps/inputs/homebrew/timescribe.json new file mode 100644 index 0000000000..2cd4857f5f --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/timescribe.json @@ -0,0 +1,10 @@ +{ + "name": "TimeScribe", + "unique_identifier": "de.amplussoftware.timescribe", + "token": "timescribe", + "installer_format": "zip", + "slug": "timescribe/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/timing.json b/ee/maintained-apps/inputs/homebrew/timing.json new file mode 100644 index 0000000000..664f45e421 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/timing.json @@ -0,0 +1,10 @@ +{ + "name": "Timing", + "unique_identifier": "info.eurocomp.Timing2", + "token": "timing", + "installer_format": "dmg", + "slug": "timing/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/topaz-gigapixel-ai.json b/ee/maintained-apps/inputs/homebrew/topaz-gigapixel-ai.json new file mode 100644 index 0000000000..32384a440f --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/topaz-gigapixel-ai.json @@ -0,0 +1,10 @@ +{ + "name": "Topaz Gigapixel AI", + "unique_identifier": "com.topazlabs.TopazGigapixelAI", + "token": "topaz-gigapixel-ai", + "installer_format": "pkg", + "slug": "topaz-gigapixel-ai/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/topaz-photo-ai.json b/ee/maintained-apps/inputs/homebrew/topaz-photo-ai.json new file mode 100644 index 0000000000..3c4dc4974c --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/topaz-photo-ai.json @@ -0,0 +1,10 @@ +{ + "name": "Topaz Photo AI", + "unique_identifier": "com.topazlabs.TopazPhotoAI", + "token": "topaz-photo-ai", + "installer_format": "pkg", + "slug": "topaz-photo-ai/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/topaz-video-ai.json b/ee/maintained-apps/inputs/homebrew/topaz-video-ai.json new file mode 100644 index 0000000000..04027c62a5 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/topaz-video-ai.json @@ -0,0 +1,10 @@ +{ + "name": "Topaz Video AI", + "unique_identifier": "com.topazlabs.Topaz-Video-AI", + "token": "topaz-video-ai", + "installer_format": "pkg", + "slug": "topaz-video-ai/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/topnotch.json b/ee/maintained-apps/inputs/homebrew/topnotch.json new file mode 100644 index 0000000000..19a2ced215 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/topnotch.json @@ -0,0 +1,10 @@ +{ + "name": "TopNotch", + "unique_identifier": "pl.maketheweb.TopNotch", + "token": "topnotch", + "installer_format": "dmg", + "slug": "topnotch/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/tradingview.json b/ee/maintained-apps/inputs/homebrew/tradingview.json new file mode 100644 index 0000000000..61fe224ac5 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/tradingview.json @@ -0,0 +1,10 @@ +{ + "name": "TradingView Desktop", + "unique_identifier": "com.tradingview.tradingviewapp.desktop", + "token": "tradingview", + "installer_format": "dmg", + "slug": "tradingview/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/transfer.json b/ee/maintained-apps/inputs/homebrew/transfer.json new file mode 100644 index 0000000000..59082eb6af --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/transfer.json @@ -0,0 +1,10 @@ +{ + "name": "Transfer", + "unique_identifier": "com.adriangranados.Transfer", + "token": "transfer", + "installer_format": "dmg", + "slug": "transfer/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/transmission.json b/ee/maintained-apps/inputs/homebrew/transmission.json new file mode 100644 index 0000000000..412a2f088d --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/transmission.json @@ -0,0 +1,10 @@ +{ + "name": "Transmission", + "unique_identifier": "org.m0k.transmission", + "token": "transmission", + "installer_format": "dmg", + "slug": "transmission/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/trex.json b/ee/maintained-apps/inputs/homebrew/trex.json new file mode 100644 index 0000000000..1ff0772576 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/trex.json @@ -0,0 +1,10 @@ +{ + "name": "TRex", + "unique_identifier": "com.ameba.TRex", + "token": "trex", + "installer_format": "zip", + "slug": "trex/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/trezor-suite.json b/ee/maintained-apps/inputs/homebrew/trezor-suite.json new file mode 100644 index 0000000000..49e38da11e --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/trezor-suite.json @@ -0,0 +1,10 @@ +{ + "name": "TREZOR Suite", + "unique_identifier": "io.trezor.TrezorSuite", + "token": "trezor-suite", + "installer_format": "dmg", + "slug": "trezor-suite/darwin", + "default_categories": [ + "Security" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/tripmode.json b/ee/maintained-apps/inputs/homebrew/tripmode.json new file mode 100644 index 0000000000..e58f830737 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/tripmode.json @@ -0,0 +1,10 @@ +{ + "name": "TripMode", + "unique_identifier": "ch.tripmode.TripMode", + "token": "tripmode", + "installer_format": "zip", + "slug": "tripmode/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/tuple.json b/ee/maintained-apps/inputs/homebrew/tuple.json new file mode 100644 index 0000000000..af9bbe59c7 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/tuple.json @@ -0,0 +1,10 @@ +{ + "name": "Tuple", + "unique_identifier": "app.tuple.app", + "token": "tuple", + "installer_format": "zip", + "slug": "tuple/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/twine-app.json b/ee/maintained-apps/inputs/homebrew/twine-app.json new file mode 100644 index 0000000000..d8f7b210b0 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/twine-app.json @@ -0,0 +1,10 @@ +{ + "name": "Twine", + "unique_identifier": "com.electron.twine", + "token": "twine-app", + "installer_format": "dmg", + "slug": "twine-app/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/twobird.json b/ee/maintained-apps/inputs/homebrew/twobird.json new file mode 100644 index 0000000000..d633ea3184 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/twobird.json @@ -0,0 +1,10 @@ +{ + "name": "Twobird", + "unique_identifier": "com.gingerlabs.bagel", + "token": "twobird", + "installer_format": "dmg", + "slug": "twobird/darwin", + "default_categories": [ + "Communication" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/typeface.json b/ee/maintained-apps/inputs/homebrew/typeface.json new file mode 100644 index 0000000000..b58a5361bb --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/typeface.json @@ -0,0 +1,10 @@ +{ + "name": "Typeface", + "unique_identifier": "com.criminalbird.typeface.standalone", + "token": "typeface", + "installer_format": "dmg", + "slug": "typeface/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/typinator.json b/ee/maintained-apps/inputs/homebrew/typinator.json new file mode 100644 index 0000000000..5c6b231b33 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/typinator.json @@ -0,0 +1,10 @@ +{ + "name": "Typinator", + "unique_identifier": "com.macility.typinator2", + "token": "typinator", + "installer_format": "dmg", + "slug": "typinator/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/typora.json b/ee/maintained-apps/inputs/homebrew/typora.json new file mode 100644 index 0000000000..1437e33ea3 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/typora.json @@ -0,0 +1,10 @@ +{ + "name": "Typora", + "unique_identifier": "abnerworks.Typora", + "token": "typora", + "installer_format": "dmg", + "slug": "typora/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 4e49520953..f2979a78b0 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -6280,6 +6280,13 @@ "unique_identifier": "org.sbarex.SourceCodeSyntaxHighlight", "description": "Syntax Highlight is a quicklook extension for source files." }, + { + "name": "Tabby", + "slug": "tabby/darwin", + "platform": "darwin", + "unique_identifier": "org.tabby", + "description": "Tabby is a terminal emulator, SSH and serial client." + }, { "name": "Tableau Desktop", "slug": "tableau-desktop/windows", @@ -6287,6 +6294,13 @@ "unique_identifier": "Tableau Desktop", "description": "Tableau Desktop is a powerful data visualization and business intelligence platform for analyzing and presenting data insights." }, + { + "name": "Tableau Prep", + "slug": "tableau-prep/darwin", + "platform": "darwin", + "unique_identifier": "com.tableau.Tableau-Prep-tableau-2026-1", + "description": "Tableau Prep is a combine, shape, and clean your data for analysis." + }, { "name": "Tableau Desktop", "slug": "tableau/darwin", @@ -6308,6 +6322,13 @@ "unique_identifier": "TablePlus", "description": "TablePlus is a native GUI tool for relational databases." }, + { + "name": "TabTab", + "slug": "tabtab/darwin", + "platform": "darwin", + "unique_identifier": "riccqi.TabTab", + "description": "TabTab is a window and tab manager." + }, { "name": "Tailscale", "slug": "tailscale-app/darwin", @@ -6322,6 +6343,27 @@ "unique_identifier": "Tailscale", "description": "Tailscale is mesh VPN based on WireGuard." }, + { + "name": "Taskade", + "slug": "taskade/darwin", + "platform": "darwin", + "unique_identifier": "com.taskade", + "description": "Taskade is a task manager for teams." + }, + { + "name": "Taskbar", + "slug": "taskbar/darwin", + "platform": "darwin", + "unique_identifier": "com.fpfxtknjju.wbgcdolfev", + "description": "Taskbar is a windows-style taskbar as a Dock replacement." + }, + { + "name": "TeaCode", + "slug": "teacode/darwin", + "platform": "darwin", + "unique_identifier": "com.apptorium.TeaCode-dm", + "description": "TeaCode is a text expanding app for developers." + }, { "name": "TeamViewer", "slug": "teamviewer/darwin", @@ -6371,6 +6413,27 @@ "unique_identifier": "com.gravitational.teleport.tsh", "description": "Teleport Suite is a modern SSH server for teams managing distributed infrastructure." }, + { + "name": "Termius", + "slug": "termius/darwin", + "platform": "darwin", + "unique_identifier": "com.termius-dmg.mac", + "description": "Termius is a SSH client." + }, + { + "name": "TeX Live Utility", + "slug": "tex-live-utility/darwin", + "platform": "darwin", + "unique_identifier": "com.googlecode.mactlmgr.tlu", + "description": "TeX Live Utility is a graphical user interface for TeX Live Manager." + }, + { + "name": "TeXShop", + "slug": "texshop/darwin", + "platform": "darwin", + "unique_identifier": "TeXShop", + "description": "TeXShop is a LaTeX and TeX editor and previewer." + }, { "name": "TextExpander", "slug": "textexpander/darwin", @@ -6385,6 +6448,13 @@ "unique_identifier": "TextExpander", "description": "TextExpander is an application that lets you create and insert pre-made snippets of text anywhere." }, + { + "name": "Thaw", + "slug": "thaw/darwin", + "platform": "darwin", + "unique_identifier": "com.stonerl.Thaw", + "description": "Thaw is a menu bar manager." + }, { "name": "The Unarchiver", "slug": "the-unarchiver/darwin", @@ -6392,6 +6462,27 @@ "unique_identifier": "cx.c3.theunarchiver", "description": "The Unarchiver is an archive extraction utility that supports many formats including ZIP, RAR, and 7z." }, + { + "name": "Thorium Reader", + "slug": "thorium/darwin", + "platform": "darwin", + "unique_identifier": "io.github.edrlab.thorium", + "description": "Thorium Reader is an epub reader." + }, + { + "name": "Threema", + "slug": "threema/darwin", + "platform": "darwin", + "unique_identifier": "threema-consumer-web", + "description": "Threema is an end-to-end encrypted instant messaging application." + }, + { + "name": "ThumbsUp", + "slug": "thumbsup/darwin", + "platform": "darwin", + "unique_identifier": "com.devon-technologies.ThumbsUp", + "description": "ThumbsUp is a batch image thumbnail generation utility." + }, { "name": "Thunderbird", "slug": "thunderbird/darwin", @@ -6406,6 +6497,41 @@ "unique_identifier": "Mozilla Thunderbird (x64 en-US)", "description": "Thunderbird is a free and open-source e-mail client." }, + { + "name": "TickTick", + "slug": "ticktick/darwin", + "platform": "darwin", + "unique_identifier": "com.TickTick.task.mac", + "description": "TickTick is a to-do & task list manager." + }, + { + "name": "TIDAL", + "slug": "tidal/darwin", + "platform": "darwin", + "unique_identifier": "com.tidal.desktop", + "description": "TIDAL is a music streaming service with high fidelity sound and hi-def video quality." + }, + { + "name": "Sempliva Tiles", + "slug": "tiles/darwin", + "platform": "darwin", + "unique_identifier": "com.sempliva.Tiles", + "description": "Sempliva Tiles is a window manager." + }, + { + "name": "TimeScribe", + "slug": "timescribe/darwin", + "platform": "darwin", + "unique_identifier": "de.amplussoftware.timescribe", + "description": "TimeScribe is an app for working time tracker." + }, + { + "name": "Timing", + "slug": "timing/darwin", + "platform": "darwin", + "unique_identifier": "info.eurocomp.Timing2", + "description": "Timing is an automatic time and productivity tracking app." + }, { "name": "Todoist", "slug": "todoist-app/darwin", @@ -6420,6 +6546,34 @@ "unique_identifier": "Todoist", "description": "Todoist is a to do list and a planning center for individuals and teams." }, + { + "name": "Topaz Gigapixel AI", + "slug": "topaz-gigapixel-ai/darwin", + "platform": "darwin", + "unique_identifier": "com.topazlabs.TopazGigapixelAI", + "description": "Topaz Gigapixel AI is an AI image upscaler." + }, + { + "name": "Topaz Photo AI", + "slug": "topaz-photo-ai/darwin", + "platform": "darwin", + "unique_identifier": "com.topazlabs.TopazPhotoAI", + "description": "Topaz Photo AI is an AI image enhancer." + }, + { + "name": "Topaz Video AI", + "slug": "topaz-video-ai/darwin", + "platform": "darwin", + "unique_identifier": "com.topazlabs.Topaz-Video-AI", + "description": "Topaz Video AI is a video upscaler and quality enhancer." + }, + { + "name": "TopNotch", + "slug": "topnotch/darwin", + "platform": "darwin", + "unique_identifier": "pl.maketheweb.TopNotch", + "description": "TopNotch is a utility to hide the notch." + }, { "name": "Tor Browser", "slug": "tor-browser/darwin", @@ -6448,6 +6602,27 @@ "unique_identifier": "Tower", "description": "Tower is a git client focusing on power and productivity." }, + { + "name": "TradingView Desktop", + "slug": "tradingview/darwin", + "platform": "darwin", + "unique_identifier": "com.tradingview.tradingviewapp.desktop", + "description": "TradingView Desktop is an app for charting and social-networking for investment traders." + }, + { + "name": "Transfer", + "slug": "transfer/darwin", + "platform": "darwin", + "unique_identifier": "com.adriangranados.Transfer", + "description": "Transfer is a standalone TFTP, FTP, and SFTP server." + }, + { + "name": "Transmission", + "slug": "transmission/darwin", + "platform": "darwin", + "unique_identifier": "org.m0k.transmission.LSSharedFileList", + "description": "Transmission is an open-source BitTorrent client." + }, { "name": "Transmit", "slug": "transmit/darwin", @@ -6455,6 +6630,27 @@ "unique_identifier": "com.panic.Transmit", "description": "Transmit is a file transfer application." }, + { + "name": "TRex", + "slug": "trex/darwin", + "platform": "darwin", + "unique_identifier": "com.ameba.TRex", + "description": "TRex is an easy to use text extraction tool." + }, + { + "name": "TREZOR Suite", + "slug": "trezor-suite/darwin", + "platform": "darwin", + "unique_identifier": "io.trezor.TrezorSuite", + "description": "TREZOR Suite is a companion app for the Trezor hardware wallet." + }, + { + "name": "TripMode", + "slug": "tripmode/darwin", + "platform": "darwin", + "unique_identifier": "ch.tripmode.TripMode", + "description": "TripMode is a tool to control your data usage on slow or expensive networks." + }, { "name": "Tunnelblick", "slug": "tunnelblick/darwin", @@ -6462,6 +6658,20 @@ "unique_identifier": "net.tunnelblick.tunnelblick", "description": "Tunnelblick is a free and open-source OpenVPN client." }, + { + "name": "Tuple", + "slug": "tuple/darwin", + "platform": "darwin", + "unique_identifier": "app.tuple.app", + "description": "Tuple is a remote pair programming app." + }, + { + "name": "Twine", + "slug": "twine-app/darwin", + "platform": "darwin", + "unique_identifier": "com.electron.twine", + "description": "Twine is a tool for telling interactive, nonlinear stories." + }, { "name": "Twingate", "slug": "twingate/darwin", @@ -6476,6 +6686,34 @@ "unique_identifier": "Twingate", "description": "Twingate is a zero trust network access platform." }, + { + "name": "Twobird", + "slug": "twobird/darwin", + "platform": "darwin", + "unique_identifier": "com.gingerlabs.bagel", + "description": "Twobird is an email client with collaborative notes." + }, + { + "name": "Typeface", + "slug": "typeface/darwin", + "platform": "darwin", + "unique_identifier": "com.criminalbird.typeface.standalone", + "description": "Typeface is a font manager application." + }, + { + "name": "Typinator", + "slug": "typinator/darwin", + "platform": "darwin", + "unique_identifier": "com.macility.typinator2", + "description": "Typinator is a tool to automate the insertion of frequently used text and graphics." + }, + { + "name": "Typora", + "slug": "typora/darwin", + "platform": "darwin", + "unique_identifier": "abnerworks.Typora", + "description": "Typora is a configurable document editor that supports Markdown." + }, { "name": "UA Connect", "slug": "ua-connect/darwin", diff --git a/ee/maintained-apps/outputs/tabby/darwin.json b/ee/maintained-apps/outputs/tabby/darwin.json new file mode 100644 index 0000000000..7bb9f1bdda --- /dev/null +++ b/ee/maintained-apps/outputs/tabby/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.0.234", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.tabby';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.tabby' AND version_compare(bundle_short_version, '1.0.234') < 0);" + }, + "installer_url": "https://github.com/Eugeny/tabby/releases/download/v1.0.234/tabby-1.0.234-macos-arm64.zip", + "install_script_ref": "9b06e89d", + "uninstall_script_ref": "60d71fa6", + "sha256": "e5073aed89680a591dbb0fb34a2d7de031c792d160c5475357547234ebe29af7", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "60d71fa6": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Tabby.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/org.tabby.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/tabby'\ntrash $LOGGED_IN_USER '~/Library/Caches/org.tabby'\ntrash $LOGGED_IN_USER '~/Library/Caches/org.tabby.ShipIt'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/org.tabby'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ByHost/org.tabby.ShipIt.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.tabby.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.tabby.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.tabby.savedState'\ntrash $LOGGED_IN_USER '~/Library/Services/Open Tabby here.workflow'\ntrash $LOGGED_IN_USER '~/Library/Services/Paste path into Tabby.workflow'\n", + "9b06e89d": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'org.tabby'\nif [ -d \"$APPDIR/Tabby.app\" ]; then\n\tsudo mv \"$APPDIR/Tabby.app\" \"$TMPDIR/Tabby.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Tabby.app\" \"$APPDIR\"\nrelaunch_application 'org.tabby'\n" + } +} diff --git a/ee/maintained-apps/outputs/tableau-prep/darwin.json b/ee/maintained-apps/outputs/tableau-prep/darwin.json new file mode 100644 index 0000000000..cb07b79bad --- /dev/null +++ b/ee/maintained-apps/outputs/tableau-prep/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2026.1.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.tableau.Tableau-Prep-tableau-2026-1';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tableau.Tableau-Prep-tableau-2026-1' AND version_compare(bundle_short_version, '2026.1.2') < 0);" + }, + "installer_url": "https://downloads.tableau.com/esdalt/tableau_prep/2026.1.2/TableauPrep-2026-1-2-arm64.dmg", + "install_script_ref": "42b99ade", + "uninstall_script_ref": "ec459ac1", + "sha256": "4dc01a186883a91749cd825de9a1bd44d321e407dddd0d87a1178cd2b0dcf1da", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "42b99ade": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# install pkg files\nquit_and_track_application 'com.tableau.Tableau-Prep-tableau-2026-1'\nsudo installer -pkg \"$TMPDIR/Tableau Prep Builder.pkg\" -target /\nrelaunch_application 'com.tableau.Tableau-Prep-tableau-2026-1'\n", + "ec459ac1": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_pkg_files 'com.amazon.redshiftodbc'\nforget_pkg 'com.amazon.redshiftodbc'\nremove_pkg_files 'com.simba.sparkodbc'\nforget_pkg 'com.simba.sparkodbc'\nremove_pkg_files 'com.simba.sqlserverodbc'\nforget_pkg 'com.simba.sqlserverodbc'\nremove_pkg_files 'com.tableausoftware.desktopShortcut'\nforget_pkg 'com.tableausoftware.desktopShortcut'\nremove_pkg_files 'com.tableausoftware.FLEXNet.11.*'\nforget_pkg 'com.tableausoftware.FLEXNet.11.*'\nremove_pkg_files 'com.tableausoftware.Maestro.app'\nforget_pkg 'com.tableausoftware.Maestro.app'\nremove_pkg_files 'com.tableausoftware.oracle'\nforget_pkg 'com.tableausoftware.oracle'\nremove_pkg_files 'com.tableausoftware.postgresql'\nforget_pkg 'com.tableausoftware.postgresql'\nremove_pkg_files 'com.tableausoftware.telemetry'\nforget_pkg 'com.tableausoftware.telemetry'\nremove_pkg_files 'simba.sparkodbc'\nforget_pkg 'simba.sparkodbc'\nsudo rm -rf '/Library/Application Support/Tableau Prep Builder'\nsudo rm -rf '/Library/Preferences/FLEXnet Publisher'\ntrash $LOGGED_IN_USER '~/Documents/My Tableau Prep Repository'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Tableau Prep Builder 2026.1.2'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.tableau.caching'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tableau.Tableau-Prep-tableau-2026-1.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tableausoftware.tableauprep.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tableausoftware.tabminerva.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.tableausoftware.tableauprep.savedState'\ntrash $LOGGED_IN_USER '~/Library/Tableau'\n" + } +} diff --git a/ee/maintained-apps/outputs/tableau-public/darwin.json b/ee/maintained-apps/outputs/tableau-public/darwin.json new file mode 100644 index 0000000000..1a08cf2af6 --- /dev/null +++ b/ee/maintained-apps/outputs/tableau-public/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2026.1.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.tableausoftware.tableaupublic';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tableausoftware.tableaupublic' AND version_compare(bundle_short_version, '2026.1.2') < 0);" + }, + "installer_url": "https://downloads.tableau.com/esdalt/2026.1.2/TableauPublic-2026-1-2-arm64.pkg", + "install_script_ref": "cd51213e", + "uninstall_script_ref": "fab952d2", + "sha256": "c3dcadf1467c5296f62e42369c5de65bd7edff62a816d60d3c96feffcb493130", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "cd51213e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'com.tableausoftware.tableaupublic'\nsudo installer -pkg \"$TMPDIR/TableauPublic-2026-1-2-arm64.pkg\" -target /\nrelaunch_application 'com.tableausoftware.tableaupublic'\n", + "fab952d2": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_pkg_files 'com.tableausoftware.FLEXNet.*'\nforget_pkg 'com.tableausoftware.FLEXNet.*'\nremove_pkg_files 'com.tableausoftware.Public.app'\nforget_pkg 'com.tableausoftware.Public.app'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.tableau.caching'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.tableausoftware.MapTiles'\n" + } +} diff --git a/ee/maintained-apps/outputs/tabtab/darwin.json b/ee/maintained-apps/outputs/tabtab/darwin.json new file mode 100644 index 0000000000..c94c462140 --- /dev/null +++ b/ee/maintained-apps/outputs/tabtab/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.1.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'riccqi.TabTab';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'riccqi.TabTab' AND version_compare(bundle_short_version, '2.1.1') < 0);" + }, + "installer_url": "https://github.com/riccqi/TabTabApp/releases/download/prod/tabtab.dmg", + "install_script_ref": "db1cb8ec", + "uninstall_script_ref": "0be65ed1", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "0be65ed1": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/TabTab.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/riccqi.TabTab'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/riccqi.TabTab'\ntrash $LOGGED_IN_USER '~/Library/Preferences/riccqi.TabTab.plist'\n", + "db1cb8ec": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'riccqi.TabTab'\nif [ -d \"$APPDIR/TabTab.app\" ]; then\n\tsudo mv \"$APPDIR/TabTab.app\" \"$TMPDIR/TabTab.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TabTab.app\" \"$APPDIR\"\nrelaunch_application 'riccqi.TabTab'\n" + } +} diff --git a/ee/maintained-apps/outputs/taskade/darwin.json b/ee/maintained-apps/outputs/taskade/darwin.json new file mode 100644 index 0000000000..32c03c09bb --- /dev/null +++ b/ee/maintained-apps/outputs/taskade/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "4.6.14", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.taskade';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.taskade' AND version_compare(bundle_short_version, '4.6.14') < 0);" + }, + "installer_url": "https://apps.taskade.com/updates/Taskade-4.6.14-universal.dmg", + "install_script_ref": "5cdc6a81", + "uninstall_script_ref": "2a7fe7f4", + "sha256": "912d7fe1f71feac48ffd22fc5deed8cfadccd7b995c22246155f3fa8de94d16b", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2a7fe7f4": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Taskade.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/taskade'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.taskade.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.taskade.savedState'\n", + "5cdc6a81": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.taskade'\nif [ -d \"$APPDIR/Taskade.app\" ]; then\n\tsudo mv \"$APPDIR/Taskade.app\" \"$TMPDIR/Taskade.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Taskade.app\" \"$APPDIR\"\nrelaunch_application 'com.taskade'\n" + } +} diff --git a/ee/maintained-apps/outputs/taskbar/darwin.json b/ee/maintained-apps/outputs/taskbar/darwin.json new file mode 100644 index 0000000000..2700ecb0be --- /dev/null +++ b/ee/maintained-apps/outputs/taskbar/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.6.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.fpfxtknjju.wbgcdolfev';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.fpfxtknjju.wbgcdolfev' AND version_compare(bundle_short_version, '1.6.1') < 0);" + }, + "installer_url": "https://lawand.io/wp-content/uploads/2026/05/taskbar-1.6.1.zip", + "install_script_ref": "aed90141", + "uninstall_script_ref": "6a449e87", + "sha256": "86cd42b1c58063f53cb7b2ab4a73d4256da120ab01b229aef7098af39a9e236b", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "6a449e87": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Taskbar.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.fpfxtknjju.wbgcdolfev'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.fpfxtknjju.wbgcdolfev'\ntrash $LOGGED_IN_USER '~/Library/LaunchAgents/com.fpfxtknjju.wbgcdolfev.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.fpfxtknjju.wbgcdolfev.plist'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.fpfxtknjju.wbgcdolfev'\n", + "aed90141": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.fpfxtknjju.wbgcdolfev'\nif [ -d \"$APPDIR/Taskbar.app\" ]; then\n\tsudo mv \"$APPDIR/Taskbar.app\" \"$TMPDIR/Taskbar.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Taskbar.app\" \"$APPDIR\"\nrelaunch_application 'com.fpfxtknjju.wbgcdolfev'\n" + } +} diff --git a/ee/maintained-apps/outputs/teacode/darwin.json b/ee/maintained-apps/outputs/teacode/darwin.json new file mode 100644 index 0000000000..09bc7dec71 --- /dev/null +++ b/ee/maintained-apps/outputs/teacode/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.1.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.apptorium.TeaCode-dm';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.apptorium.TeaCode-dm' AND version_compare(bundle_short_version, '1.1.3') < 0);" + }, + "installer_url": "https://www.apptorium.com/public/products/teacode/releases/TeaCode-1.1.3.zip", + "install_script_ref": "5639b7d9", + "uninstall_script_ref": "8cbcf890", + "sha256": "2e2545beafe4c77ef52e76ff49edf1d4dbceed2a6bf6c8c1b22424112480478b", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "5639b7d9": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.apptorium.TeaCode-dm'\nif [ -d \"$APPDIR/TeaCode.app\" ]; then\n\tsudo mv \"$APPDIR/TeaCode.app\" \"$TMPDIR/TeaCode.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TeaCode.app\" \"$APPDIR\"\nrelaunch_application 'com.apptorium.TeaCode-dm'\n", + "8cbcf890": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/TeaCode.app\"\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.apptorium.TeaCode-dm.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/termius/darwin.json b/ee/maintained-apps/outputs/termius/darwin.json new file mode 100644 index 0000000000..53fc94baaf --- /dev/null +++ b/ee/maintained-apps/outputs/termius/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "9.39.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.termius-dmg.mac';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.termius-dmg.mac' AND version_compare(bundle_short_version, '9.39.0') < 0);" + }, + "installer_url": "https://autoupdate.termius.com/mac-arm64/Termius.dmg", + "install_script_ref": "41ddb02e", + "uninstall_script_ref": "70a856f6", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "41ddb02e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.termius-dmg.mac'\nif [ -d \"$APPDIR/Termius.app\" ]; then\n\tsudo mv \"$APPDIR/Termius.app\" \"$TMPDIR/Termius.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Termius.app\" \"$APPDIR\"\nrelaunch_application 'com.termius-dmg.mac'\n", + "70a856f6": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf '/Library/Preferences/com.termius-dmg.mac.plist'\nsudo rm -rf \"$APPDIR/Termius.app\"\ntrash $LOGGED_IN_USER '~/.termius'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Termius'\ntrash $LOGGED_IN_USER '~/Library/Logs/Termius'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.termius-dmg.mac.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/tex-live-utility/darwin.json b/ee/maintained-apps/outputs/tex-live-utility/darwin.json new file mode 100644 index 0000000000..d6122e7347 --- /dev/null +++ b/ee/maintained-apps/outputs/tex-live-utility/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.57", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.googlecode.mactlmgr.tlu';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.googlecode.mactlmgr.tlu' AND version_compare(bundle_short_version, '1.57') < 0);" + }, + "installer_url": "https://github.com/amaxwell/tlutility/releases/download/1.57/TeX.Live.Utility.app-1.57.zip", + "install_script_ref": "629b22f1", + "uninstall_script_ref": "2fc25cd2", + "sha256": "e738c49250a1b62568bdf9d8333e6cfbd57b08185659073f2ab7a6103881dce4", + "default_categories": [ + "Utilities" + ] + } + ], + "refs": { + "2fc25cd2": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/TeX Live Utility.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/TeX Live Utility'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexFile/TeX Live Utility Help*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.googlecode.mactlmgr.tlu'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.googlecode.mactlmgr.tlu'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.googlecode.mactlmgr.tlu.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.googlecode.mactlmgr.tlu.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.googlecode.mactlmgr.tlu.savedState'\n", + "629b22f1": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.googlecode.mactlmgr.tlu'\nif [ -d \"$APPDIR/TeX Live Utility.app\" ]; then\n\tsudo mv \"$APPDIR/TeX Live Utility.app\" \"$TMPDIR/TeX Live Utility.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TeX Live Utility.app\" \"$APPDIR\"\nrelaunch_application 'com.googlecode.mactlmgr.tlu'\n" + } +} diff --git a/ee/maintained-apps/outputs/texshop/darwin.json b/ee/maintained-apps/outputs/texshop/darwin.json new file mode 100644 index 0000000000..a24b11579f --- /dev/null +++ b/ee/maintained-apps/outputs/texshop/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "5.57", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'TeXShop';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'TeXShop' AND version_compare(bundle_short_version, '5.57') < 0);" + }, + "installer_url": "https://pages.uoregon.edu/koch/texshop/texshop-64/texshop557.zip", + "install_script_ref": "9bf7aba0", + "uninstall_script_ref": "88d3d3ad", + "sha256": "08aa26a5dfacfa67bacedbc73d57fe07b64dcfe49e9fab34a3be1dc5372d20d4", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "88d3d3ad": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/TeXShop.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/texshop.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/TeXShop'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/Generated/TeXShop Help*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexFile/TeXShop Help*'\ntrash $LOGGED_IN_USER '~/Library/Caches/TeXShop'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/TeXShop'\ntrash $LOGGED_IN_USER '~/Library/Preferences/TeXShop.plist'\ntrash $LOGGED_IN_USER '~/Library/TeXShop'\ntrash $LOGGED_IN_USER '~/Library/WebKit/TeXShop'\n", + "9bf7aba0": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'TeXShop'\nif [ -d \"$APPDIR/TeXShop.app\" ]; then\n\tsudo mv \"$APPDIR/TeXShop.app\" \"$TMPDIR/TeXShop.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TeXShop.app\" \"$APPDIR\"\nrelaunch_application 'TeXShop'\n" + } +} diff --git a/ee/maintained-apps/outputs/thaw/darwin.json b/ee/maintained-apps/outputs/thaw/darwin.json new file mode 100644 index 0000000000..018062e99b --- /dev/null +++ b/ee/maintained-apps/outputs/thaw/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.2.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.stonerl.Thaw';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.stonerl.Thaw' AND version_compare(bundle_short_version, '1.2.0') < 0);" + }, + "installer_url": "https://github.com/stonerl/Thaw/releases/download/1.2.0/Thaw_1.2.0.zip", + "install_script_ref": "d8e6eec2", + "uninstall_script_ref": "d4d962b1", + "sha256": "d67f4d31ef9fa057849a98540b810cfa42e0bc66019d3605abd08e45c69aa06f", + "default_categories": [ + "Utilities" + ] + } + ], + "refs": { + "d4d962b1": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Thaw.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.stonerl.Thaw'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.stonerl.Thaw'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.stonerl.Thaw.plist'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.stonerl.Thaw'\n", + "d8e6eec2": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.stonerl.Thaw'\nif [ -d \"$APPDIR/Thaw.app\" ]; then\n\tsudo mv \"$APPDIR/Thaw.app\" \"$TMPDIR/Thaw.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Thaw.app\" \"$APPDIR\"\nrelaunch_application 'com.stonerl.Thaw'\n" + } +} diff --git a/ee/maintained-apps/outputs/thorium/darwin.json b/ee/maintained-apps/outputs/thorium/darwin.json new file mode 100644 index 0000000000..e672a78d40 --- /dev/null +++ b/ee/maintained-apps/outputs/thorium/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "3.4.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'io.github.edrlab.thorium';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.github.edrlab.thorium' AND version_compare(bundle_short_version, '3.4.0') < 0);" + }, + "installer_url": "https://github.com/edrlab/thorium-reader/releases/download/v3.4.0/Thorium-3.4.0-arm64.dmg", + "install_script_ref": "4c5717aa", + "uninstall_script_ref": "2e25a391", + "sha256": "2f19dcaf4b717330626ebce7148653da399945467699bef7f0843d7b5f512030", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2e25a391": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Thorium.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/EDRLab.ThoriumReader'\ntrash $LOGGED_IN_USER '~/Library/Preferences/io.github.edrlab.thorium.plist'\n", + "4c5717aa": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'io.github.edrlab.thorium'\nif [ -d \"$APPDIR/Thorium.app\" ]; then\n\tsudo mv \"$APPDIR/Thorium.app\" \"$TMPDIR/Thorium.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Thorium.app\" \"$APPDIR\"\nrelaunch_application 'io.github.edrlab.thorium'\n" + } +} diff --git a/ee/maintained-apps/outputs/threema/darwin.json b/ee/maintained-apps/outputs/threema/darwin.json new file mode 100644 index 0000000000..70e769256b --- /dev/null +++ b/ee/maintained-apps/outputs/threema/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.2.50", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'threema-consumer-web';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'threema-consumer-web' AND version_compare(bundle_short_version, '1.2.50') < 0);" + }, + "installer_url": "https://releases.threema.ch/web-electron/v1/release/Threema-Latest.dmg", + "install_script_ref": "495d8899", + "uninstall_script_ref": "18fedfe7", + "sha256": "no_check", + "default_categories": [ + "Communication" + ] + } + ], + "refs": { + "18fedfe7": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Threema.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/threema-consumer-web'\ntrash $LOGGED_IN_USER '~/Library/Logs/threema-consumer-web'\ntrash $LOGGED_IN_USER '~/Library/Preferences/threema-consumer-web.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/threema-consumer-web.savedState'\n", + "495d8899": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'threema-consumer-web'\nif [ -d \"$APPDIR/Threema.app\" ]; then\n\tsudo mv \"$APPDIR/Threema.app\" \"$TMPDIR/Threema.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Threema.app\" \"$APPDIR\"\nrelaunch_application 'threema-consumer-web'\n" + } +} diff --git a/ee/maintained-apps/outputs/thumbsup/darwin.json b/ee/maintained-apps/outputs/thumbsup/darwin.json new file mode 100644 index 0000000000..5bcefbeee3 --- /dev/null +++ b/ee/maintained-apps/outputs/thumbsup/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "4.5.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.devon-technologies.ThumbsUp';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.devon-technologies.ThumbsUp' AND version_compare(bundle_short_version, '4.5.3') < 0);" + }, + "installer_url": "https://download.devontechnologies.com/download/freeware/thumbsup/4.5.3/ThumbsUp.app.zip", + "install_script_ref": "fd841bed", + "uninstall_script_ref": "065c2da8", + "sha256": "05e1bbefd09e098eeb7faec29ea7556f76cf17b49be719af93e443d993beeb8c", + "default_categories": [ + "Utilities" + ] + } + ], + "refs": { + "065c2da8": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/ThumbsUp.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/Generated/com.devontechnologies.thumbsup.help*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.devon-technologies.ThumbsUp'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.devon-technologies.ThumbsUp'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.devon-technologies.ThumbsUp.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.devon-technologies.ThumbsUp.savedState'\n", + "fd841bed": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.devon-technologies.ThumbsUp'\nif [ -d \"$APPDIR/ThumbsUp.app\" ]; then\n\tsudo mv \"$APPDIR/ThumbsUp.app\" \"$TMPDIR/ThumbsUp.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/ThumbsUp.app\" \"$APPDIR\"\nrelaunch_application 'com.devon-technologies.ThumbsUp'\n" + } +} diff --git a/ee/maintained-apps/outputs/ticktick/darwin.json b/ee/maintained-apps/outputs/ticktick/darwin.json new file mode 100644 index 0000000000..09b382308e --- /dev/null +++ b/ee/maintained-apps/outputs/ticktick/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "8.0.70", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.TickTick.task.mac';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.TickTick.task.mac' AND version_compare(bundle_short_version, '8.0.70') < 0);" + }, + "installer_url": "https://download.ticktick.app/download/mac/TickTick_8.0.70_471.dmg", + "install_script_ref": "758384e1", + "uninstall_script_ref": "25a76e52", + "sha256": "bde79cb46837db5b08fc0c675f05f2e0b4384135135f9450ee30c9564a803c6e", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "25a76e52": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/TickTick.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.TickTick.task.mac.*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.TickTick.task.mac'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.TickTick.task.mac'\ntrash $LOGGED_IN_USER '~/Library/Caches/TickTick'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.TickTick.task.mac.*'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/75TY9UT8AY.com.TickTick.task.mac'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.TickTick.task.mac.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.TickTick.task.mac.savedState'\n", + "758384e1": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.TickTick.task.mac'\nif [ -d \"$APPDIR/TickTick.app\" ]; then\n\tsudo mv \"$APPDIR/TickTick.app\" \"$TMPDIR/TickTick.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TickTick.app\" \"$APPDIR\"\nrelaunch_application 'com.TickTick.task.mac'\n" + } +} diff --git a/ee/maintained-apps/outputs/tidal/darwin.json b/ee/maintained-apps/outputs/tidal/darwin.json new file mode 100644 index 0000000000..ce8f6e7e2d --- /dev/null +++ b/ee/maintained-apps/outputs/tidal/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.41.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.tidal.desktop';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tidal.desktop' AND version_compare(bundle_short_version, '2.41.3') < 0);" + }, + "installer_url": "https://download.tidal.com/desktop/mac/TIDAL.arm64.2.41.3.zip", + "install_script_ref": "8c502559", + "uninstall_script_ref": "fabbd281", + "sha256": "74ed472ddc243d9c784f6066150a5e6e5d68172a1cf4633fd0b7c3f7784ee373", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "8c502559": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.tidal.desktop'\nif [ -d \"$APPDIR/TIDAL.app\" ]; then\n\tsudo mv \"$APPDIR/TIDAL.app\" \"$TMPDIR/TIDAL.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TIDAL.app\" \"$APPDIR\"\nrelaunch_application 'com.tidal.desktop'\n", + "fabbd281": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/TIDAL.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/TIDAL'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.tidal.desktop'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.tidal.desktop.ShipIt'\ntrash $LOGGED_IN_USER '~/Library/Logs/TIDAL'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tidal.*'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.tidal.desktop.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/tiles/darwin.json b/ee/maintained-apps/outputs/tiles/darwin.json new file mode 100644 index 0000000000..5f3435413f --- /dev/null +++ b/ee/maintained-apps/outputs/tiles/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.3.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.sempliva.Tiles';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.sempliva.Tiles' AND version_compare(bundle_short_version, '1.3.2') < 0);" + }, + "installer_url": "https://updates.sempliva.com/tiles/Tiles-03b500a8.dmg", + "install_script_ref": "cedcb4d7", + "uninstall_script_ref": "0eda6f5d", + "sha256": "b051ea7e5048bac0f7a72b6dd893bb1a02cf47ecde6def9f103d2be8e122f01e", + "default_categories": [ + "Utilities" + ] + } + ], + "refs": { + "0eda6f5d": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.sempliva.TilesHelper'\nquit_application 'com.sempliva.Tiles'\nsudo rm -rf \"$APPDIR/Tiles.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.sempliva.Tiles'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.sempliva.Tiles'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.semplive.Tiles.plist'\n", + "cedcb4d7": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.sempliva.Tiles'\nif [ -d \"$APPDIR/Tiles.app\" ]; then\n\tsudo mv \"$APPDIR/Tiles.app\" \"$TMPDIR/Tiles.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Tiles.app\" \"$APPDIR\"\nrelaunch_application 'com.sempliva.Tiles'\n" + } +} diff --git a/ee/maintained-apps/outputs/timescribe/darwin.json b/ee/maintained-apps/outputs/timescribe/darwin.json new file mode 100644 index 0000000000..e814f03d20 --- /dev/null +++ b/ee/maintained-apps/outputs/timescribe/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.15.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'de.amplussoftware.timescribe';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'de.amplussoftware.timescribe' AND version_compare(bundle_short_version, '1.15.0') < 0);" + }, + "installer_url": "https://github.com/WINBIGFOX/TimeScribe/releases/download/v1.15.0/TimeScribe-1.15.0-arm64.zip", + "install_script_ref": "c0646da6", + "uninstall_script_ref": "d9e61a45", + "sha256": "8ba626d208abf9b104bd6f64c8ece3ffba5ae2d8b59844834834a423b8f745ce", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "c0646da6": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'de.amplussoftware.timescribe'\nif [ -d \"$APPDIR/TimeScribe.app\" ]; then\n\tsudo mv \"$APPDIR/TimeScribe.app\" \"$TMPDIR/TimeScribe.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TimeScribe.app\" \"$APPDIR\"\nrelaunch_application 'de.amplussoftware.timescribe'\n", + "d9e61a45": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/TimeScribe.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/timescribe'\n" + } +} diff --git a/ee/maintained-apps/outputs/timing/darwin.json b/ee/maintained-apps/outputs/timing/darwin.json new file mode 100644 index 0000000000..746558d321 --- /dev/null +++ b/ee/maintained-apps/outputs/timing/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2026.3.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'info.eurocomp.Timing2';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'info.eurocomp.Timing2' AND version_compare(bundle_short_version, '2026.3.1') < 0);" + }, + "installer_url": "https://updates.timingapp.com/download/Timing-2026.3.1.dmg", + "install_script_ref": "a3717392", + "uninstall_script_ref": "c2ba8bc0", + "sha256": "ce8f19fcff2aef3d7a1544ea84a74c1abd4c30e494864948f2afc829098fd944", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "a3717392": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'info.eurocomp.Timing2'\nif [ -d \"$APPDIR/Timing.app\" ]; then\n\tsudo mv \"$APPDIR/Timing.app\" \"$TMPDIR/Timing.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Timing.app\" \"$APPDIR\"\nrelaunch_application 'info.eurocomp.Timing2'\n", + "c2ba8bc0": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Timing.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/info.eurocomp.Timing2'\ntrash $LOGGED_IN_USER '~/Library/Application Support/info.eurocomp.TimingHelper'\ntrash $LOGGED_IN_USER '~/Library/Application Support/info.eurocomp.TimingHelper.InfoExtractorService'\ntrash $LOGGED_IN_USER '~/Library/Caches/info.eurocomp.Timing2'\ntrash $LOGGED_IN_USER '~/Library/Caches/info.eurocomp.TimingHelper'\ntrash $LOGGED_IN_USER '~/Library/Caches/info.eurocomp.TimingHelper.InfoExtractorService'\ntrash $LOGGED_IN_USER '~/Library/Preferences/info.eurocomp.Timing2.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/info.eurocomp.TimingHelper.InfoExtractorService.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/info.eurocomp.TimingHelper.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/topaz-gigapixel-ai/darwin.json b/ee/maintained-apps/outputs/topaz-gigapixel-ai/darwin.json new file mode 100644 index 0000000000..3738e88bda --- /dev/null +++ b/ee/maintained-apps/outputs/topaz-gigapixel-ai/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "8.4.4", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.topazlabs.TopazGigapixelAI';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.topazlabs.TopazGigapixelAI' AND version_compare(bundle_short_version, '8.4.4') < 0);" + }, + "installer_url": "https://downloads.topazlabs.com/deploy/TopazGigapixelAI/8.4.4/TopazGigapixelAI-8.4.4.pkg", + "install_script_ref": "471c999f", + "uninstall_script_ref": "7835397d", + "sha256": "9b3acfa9f98bf52fa494043c4f6e9176ce6385fce07273aa559cf9ff86492aed", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "471c999f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'com.topazlabs.TopazGigapixelAI'\nsudo installer -pkg \"$TMPDIR/TopazGigapixelAI-8.4.4.pkg\" -target /\nrelaunch_application 'com.topazlabs.TopazGigapixelAI'\n", + "7835397d": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_pkg_files 'com.topazlabs.TopazGigapixelAI'\nforget_pkg 'com.topazlabs.TopazGigapixelAI'\nsudo rm -rf '/Library/Application Support/Adobe/Plug-Ins/CC/TopazGigapixelAI.plugin'\nsudo rm -rf '/Library/Application Support/Adobe/Plug-Ins/CC/TopazGigapixelAIApply.plugin'\nsudo rm -rf '/Library/Application Support/Adobe/Plug-Ins/CC/TopazGigapixelAIAutomate.plugin'\nsudo rm -rf '/Library/Application Support/Adobe/Plug-Ins/CC/TopazGigapixelAIGather.plugin'\nsudo rm -rf '~/Library/Application Support/Adobe/Lightroom/External Editor Presets/TopazGigapixelAI.lrtemplate'\nsudo rm -rf '~/Library/Application Support/Affinity Photo 2/Plugins/TopazGigapixelAI.plugin'\nsudo rm -rf '~/Library/Application Support/Capture One/Plug-ins/TopazGigapixelAI.coplugin'\nsudo rm -rf '~/Library/Application Support/Topaz Labs LLC/Topaz Gigapixel AI'\ntrash $LOGGED_IN_USER '~/Library/Caches/Topaz Labs LLC/Topaz Gigapixel AI'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.topaz-labs-llc.Topaz Gigapixel AI.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.topazlabs.Topaz Gigapixel AI.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.topazlabs.TopazGigapixelAI.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.topazlabs.TopazGigapixelAI.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/topaz-photo-ai/darwin.json b/ee/maintained-apps/outputs/topaz-photo-ai/darwin.json new file mode 100644 index 0000000000..f157fa2f4e --- /dev/null +++ b/ee/maintained-apps/outputs/topaz-photo-ai/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "4.0.4", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.topazlabs.TopazPhotoAI';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.topazlabs.TopazPhotoAI' AND version_compare(bundle_short_version, '4.0.4') < 0);" + }, + "installer_url": "https://downloads.topazlabs.com/deploy/TopazPhotoAI/4.0.4/TopazPhotoAI-4.0.4.pkg", + "install_script_ref": "eaea3493", + "uninstall_script_ref": "dc017871", + "sha256": "b69dc080940a53b7b3e1b7965d955c6f2c83b5b512a2082fae0ab1e27da828d0", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "dc017871": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_pkg_files 'com.topazlabs.TopazPhotoAI'\nforget_pkg 'com.topazlabs.TopazPhotoAI'\nsudo rm -rf '/Library/Application Support/Adobe/Plug-Ins/CC/TopazPhotoAI.plugin'\nsudo rm -rf '/Library/Application Support/Adobe/Plug-Ins/CC/TopazPhotoAIApply.plugin'\nsudo rm -rf '/Library/Application Support/Adobe/Plug-Ins/CC/TopazPhotoAIAutomate.plugin'\nsudo rm -rf '/Library/Application Support/Adobe/Plug-Ins/CC/TopazPhotoAIGather.plugin'\nsudo rm -rf '~/Library/Application Support/Adobe/Lightroom/External Editor Presets/TopazPhotoAI.lrtemplate'\nsudo rm -rf '~/Library/Application Support/Adobe/Lightroom/Modules/Topaz Photo AI.lrplugin'\nsudo rm -rf '~/Library/Application Support/Affinity Photo 2/Plugins/TopazPhotoAI.plugin'\nsudo rm -rf '~/Library/Application Support/Capture One/Plug-ins/TopazPhotoAI.coplugin'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.topazlabs.TopazPhotoAIplugin'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Topaz Labs LLC/Topaz Photo AI'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.topazlabs.TopazPhotoAI'\ntrash $LOGGED_IN_USER '~/Library/Caches/Topaz Labs LLC/Topaz Photo AI'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.topazlabs.TopazPhotoAIplugin'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.topaz-labs-llc.Topaz Photo AI.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.topazlabs.Topaz Photo AI.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.topazlabs.TopazPhotoAI.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.topazlabs.TopazPhotoAI.savedState'\n", + "eaea3493": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'com.topazlabs.TopazPhotoAI'\nsudo installer -pkg \"$TMPDIR/TopazPhotoAI-4.0.4.pkg\" -target /\nrelaunch_application 'com.topazlabs.TopazPhotoAI'\n" + } +} diff --git a/ee/maintained-apps/outputs/topaz-video-ai/darwin.json b/ee/maintained-apps/outputs/topaz-video-ai/darwin.json new file mode 100644 index 0000000000..cf9296b766 --- /dev/null +++ b/ee/maintained-apps/outputs/topaz-video-ai/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "7.1.5", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.topazlabs.Topaz-Video-AI';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.topazlabs.Topaz-Video-AI' AND version_compare(bundle_short_version, '7.1.5') < 0);" + }, + "installer_url": "https://downloads.topazlabs.com/deploy/TopazVideoAI/7.1.5/TopazVideoAI-7.1.5.pkg", + "install_script_ref": "cd1799f5", + "uninstall_script_ref": "6f416d1b", + "sha256": "4e3721d5605c36cbf872573471a5bbc5eb63860404c939f889251311135090ba", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "6f416d1b": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_pkg_files 'com.topazlabs.aeplugin'\nforget_pkg 'com.topazlabs.aeplugin'\nremove_pkg_files 'com.topazlabs.ofxplugin'\nforget_pkg 'com.topazlabs.ofxplugin'\nremove_pkg_files 'com.topazlabs.VAIPackage'\nforget_pkg 'com.topazlabs.VAIPackage'\nsudo rm -rf '/Applications/Adobe After Effects 2020/Plug-ins/Topaz Video AI Frame Interpolation.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2020/Plug-ins/Topaz Video AI.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2021/Plug-ins/Topaz Video AI Frame Interpolation.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2021/Plug-ins/Topaz Video AI.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2022/Plug-ins/Topaz Video AI Frame Interpolation.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2022/Plug-ins/Topaz Video AI.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2023/Plug-ins/Topaz Video AI Frame Interpolation.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2023/Plug-ins/Topaz Video AI.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2024/Plug-ins/Topaz Video AI Frame Interpolation.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2024/Plug-ins/Topaz Video AI.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2025/Plug-ins/Topaz Video AI Frame Interpolation.plugin'\nsudo rm -rf '/Applications/Adobe After Effects 2025/Plug-ins/Topaz Video AI.plugin'\nsudo rm -rf '/Library/OFX/Plugins/Topaz Video AI.ofx.bundle'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Topaz Labs LLC/Topaz Video AI'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.topazlabs.Topaz-Video-AI'\ntrash $LOGGED_IN_USER '~/Library/Caches/Topaz Labs LLC/Topaz Video AI'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.topazlabs.Topaz Video AI.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.topazlabs.Topaz-Video-AI.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.topazlabs.Topaz-Video-AI.savedState'\n", + "cd1799f5": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'com.topazlabs.Topaz-Video-AI'\nsudo installer -pkg \"$TMPDIR/TopazVideoAI-7.1.5.pkg\" -target /\nrelaunch_application 'com.topazlabs.Topaz-Video-AI'\n" + } +} diff --git a/ee/maintained-apps/outputs/topnotch/darwin.json b/ee/maintained-apps/outputs/topnotch/darwin.json new file mode 100644 index 0000000000..e7f5921fee --- /dev/null +++ b/ee/maintained-apps/outputs/topnotch/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.3.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'pl.maketheweb.TopNotch';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'pl.maketheweb.TopNotch' AND version_compare(bundle_short_version, '1.3.2') < 0);" + }, + "installer_url": "https://updates.topnotch.app/TopNotch-1.3.2.dmg", + "install_script_ref": "4a34ca78", + "uninstall_script_ref": "6893aaf8", + "sha256": "bedf07c46884e7c6bf43482fd48061beaf2f032a1e8bb23b422d55b85963e3d7", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "4a34ca78": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'pl.maketheweb.TopNotch'\nif [ -d \"$APPDIR/TopNotch.app\" ]; then\n\tsudo mv \"$APPDIR/TopNotch.app\" \"$TMPDIR/TopNotch.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TopNotch.app\" \"$APPDIR\"\nrelaunch_application 'pl.maketheweb.TopNotch'\n", + "6893aaf8": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/TopNotch.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/pl.maketheweb.TopNotch-LaunchAtLoginHelper'\ntrash $LOGGED_IN_USER '~/Library/Application Support/TopNotch'\ntrash $LOGGED_IN_USER '~/Library/Caches/pl.maketheweb.TopNotch'\ntrash $LOGGED_IN_USER '~/Library/Containers/pl.maketheweb.TopNotch-LaunchAtLoginHelper'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/pl.maketheweb.TopNotch'\ntrash $LOGGED_IN_USER '~/Library/Preferences/pl.maketheweb.TopNotch.plist'\ntrash $LOGGED_IN_USER '~/Library/WebKit/pl.maketheweb.TopNotch'\n" + } +} diff --git a/ee/maintained-apps/outputs/tradingview/darwin.json b/ee/maintained-apps/outputs/tradingview/darwin.json new file mode 100644 index 0000000000..a0cc812b2d --- /dev/null +++ b/ee/maintained-apps/outputs/tradingview/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "3.2.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.tradingview.tradingviewapp.desktop';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tradingview.tradingviewapp.desktop' AND version_compare(bundle_short_version, '3.2.0') < 0);" + }, + "installer_url": "https://tvd-packages.tradingview.com/stable/3.2.0/darwin/TradingView.dmg", + "install_script_ref": "85b28e80", + "uninstall_script_ref": "c17d0530", + "sha256": "972b3a52bc2d50451a29e2a21ed5dced8db674c8b2dd8eae41e280732cb7ff47", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "85b28e80": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.tradingview.tradingviewapp.desktop'\nif [ -d \"$APPDIR/TradingView.app\" ]; then\n\tsudo mv \"$APPDIR/TradingView.app\" \"$TMPDIR/TradingView.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TradingView.app\" \"$APPDIR\"\nrelaunch_application 'com.tradingview.tradingviewapp.desktop'\n", + "c17d0530": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/TradingView.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/TradingView'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tradingview.tradingviewapp.desktop.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.tradingview.tradingviewapp.desktop.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/transfer/darwin.json b/ee/maintained-apps/outputs/transfer/darwin.json new file mode 100644 index 0000000000..f805b63745 --- /dev/null +++ b/ee/maintained-apps/outputs/transfer/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.4.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.adriangranados.Transfer';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.adriangranados.Transfer' AND version_compare(bundle_short_version, '2.4.3') < 0);" + }, + "installer_url": "https://www.intuitibits.com/downloads/Transfer_2.4.3.dmg", + "install_script_ref": "c76b3ff6", + "uninstall_script_ref": "4a868851", + "sha256": "f97bd2d3ef07ec54a607926eef6b6a605a72f87eb66cb07ae2e9a1e2e42b5613", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "4a868851": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Transfer.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Transfer'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.adriangranados.Transfer'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/Generated/com.intuitibits.transfer.help*'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.adriangranados.Transfer'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.adriangranados.Transfer.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.adriangranados.Transfer.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.adriangranados.Transfer.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.adriangranados.Transfer'\ntrash $LOGGED_IN_USER '~/Transfer'\n", + "c76b3ff6": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.adriangranados.Transfer'\nif [ -d \"$APPDIR/Transfer.app\" ]; then\n\tsudo mv \"$APPDIR/Transfer.app\" \"$TMPDIR/Transfer.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Transfer.app\" \"$APPDIR\"\nrelaunch_application 'com.adriangranados.Transfer'\n" + } +} diff --git a/ee/maintained-apps/outputs/transmission/darwin.json b/ee/maintained-apps/outputs/transmission/darwin.json new file mode 100644 index 0000000000..75960d0efd --- /dev/null +++ b/ee/maintained-apps/outputs/transmission/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "4.1.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.m0k.transmission.LSSharedFileList';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.m0k.transmission' AND version_compare(bundle_short_version, '4.1.2') < 0);" + }, + "installer_url": "https://github.com/transmission/transmission/releases/download/4.1.2/Transmission-4.1.2.dmg", + "install_script_ref": "34d38a93", + "uninstall_script_ref": "a7abcff2", + "sha256": "0532e8c36732fb37c3db2628b04f9408b38d253e90a3a56b0399ea0151a3340b", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "34d38a93": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'org.m0k.transmission.LSSharedFileList'\nif [ -d \"$APPDIR/Transmission.app\" ]; then\n\tsudo mv \"$APPDIR/Transmission.app\" \"$TMPDIR/Transmission.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Transmission.app\" \"$APPDIR\"\nrelaunch_application 'org.m0k.transmission.LSSharedFileList'\n", + "a7abcff2": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Transmission.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/org.m0k.transmission.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Transmission'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexFile/org.m0k.transmission.help'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexFile/Transmission Help*'\ntrash $LOGGED_IN_USER '~/Library/Caches/org.m0k.transmission'\ntrash $LOGGED_IN_USER '~/Library/Cookies/org.m0k.transmission.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.m0k.transmission.LSSharedFileList.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.m0k.transmission.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.m0k.transmission.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/tresorit/darwin.json b/ee/maintained-apps/outputs/tresorit/darwin.json new file mode 100644 index 0000000000..855a9b3f6e --- /dev/null +++ b/ee/maintained-apps/outputs/tresorit/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "3.5.3430.4780", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.tresorit.mac';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tresorit.mac' AND version_compare(bundle_short_version, '3.5.3430.4780') < 0);" + }, + "installer_url": "https://installer.tresorit.com/Tresorit.dmg", + "install_script_ref": "38395b2e", + "uninstall_script_ref": "62c78b20", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "38395b2e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.tresorit.mac'\nif [ -d \"$APPDIR/Tresorit.app\" ]; then\n\tsudo mv \"$APPDIR/Tresorit.app\" \"$TMPDIR/Tresorit.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Tresorit.app\" \"$APPDIR\"\nrelaunch_application 'com.tresorit.mac'\n", + "62c78b20": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Tresorit.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Tresorit'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tresorit.mac.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/trex/darwin.json b/ee/maintained-apps/outputs/trex/darwin.json new file mode 100644 index 0000000000..fe089f4809 --- /dev/null +++ b/ee/maintained-apps/outputs/trex/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.0.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.ameba.TRex';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.ameba.TRex' AND version_compare(bundle_short_version, '2.0.0') < 0);" + }, + "installer_url": "https://github.com/amebalabs/TRex/releases/download/v2.0.0/TRex-2.0.0.zip", + "install_script_ref": "afaf0df7", + "uninstall_script_ref": "4d0017ff", + "sha256": "4e8defc680daa6e09cb2daba576aa243683c775b93a9510ce5f12544d222de4d", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "4d0017ff": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/TRex.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.ameba.TRex-LaunchAtLoginHelper'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.ameba.TRex'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.ameba.TRex-LaunchAtLoginHelper'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.ameba.TRex.plist'\n", + "afaf0df7": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.ameba.TRex'\nif [ -d \"$APPDIR/TRex.app\" ]; then\n\tsudo mv \"$APPDIR/TRex.app\" \"$TMPDIR/TRex.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TRex.app\" \"$APPDIR\"\nrelaunch_application 'com.ameba.TRex'\n" + } +} diff --git a/ee/maintained-apps/outputs/trezor-suite/darwin.json b/ee/maintained-apps/outputs/trezor-suite/darwin.json new file mode 100644 index 0000000000..d5d9135c8f --- /dev/null +++ b/ee/maintained-apps/outputs/trezor-suite/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "26.5.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'io.trezor.TrezorSuite';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.trezor.TrezorSuite' AND version_compare(bundle_short_version, '26.5.2') < 0);" + }, + "installer_url": "https://data.trezor.io/suite/releases/desktop/latest/Trezor-Suite-26.5.2-mac-arm64.dmg", + "install_script_ref": "a95207a7", + "uninstall_script_ref": "9026a399", + "sha256": "59e52c7bff578acc2fecce8463326980c02fa08c6293943408bdf1ecee92a3e4", + "default_categories": [ + "Security" + ] + } + ], + "refs": { + "9026a399": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Trezor Suite.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/@trezor/suite-desktop'\ntrash $LOGGED_IN_USER '~/Library/Preferences/io.trezor.TrezorSuite.plist'\n", + "a95207a7": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'io.trezor.TrezorSuite'\nif [ -d \"$APPDIR/Trezor Suite.app\" ]; then\n\tsudo mv \"$APPDIR/Trezor Suite.app\" \"$TMPDIR/Trezor Suite.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Trezor Suite.app\" \"$APPDIR\"\nrelaunch_application 'io.trezor.TrezorSuite'\n" + } +} diff --git a/ee/maintained-apps/outputs/tripmode/darwin.json b/ee/maintained-apps/outputs/tripmode/darwin.json new file mode 100644 index 0000000000..eb728bbabd --- /dev/null +++ b/ee/maintained-apps/outputs/tripmode/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "3.2.4", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'ch.tripmode.TripMode';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'ch.tripmode.TripMode' AND version_compare(bundle_short_version, '3.2.4') < 0);" + }, + "installer_url": "https://tripmode-updates.ch/app/TripMode-3.2.4-1385.zip", + "install_script_ref": "2da32712", + "uninstall_script_ref": "d80d1376", + "sha256": "2a5a21ac4c13b5a1a5d43e6aeb2b7588ea9af0116e41829fca19cf9752265410", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2da32712": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'ch.tripmode.TripMode'\nif [ -d \"$APPDIR/TripMode.app\" ]; then\n\tsudo mv \"$APPDIR/TripMode.app\" \"$TMPDIR/TripMode.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/TripMode.app\" \"$APPDIR\"\nrelaunch_application 'ch.tripmode.TripMode'\n", + "d80d1376": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nsend_signal() {\n local signal=\"$1\"\n local bundle_id=\"$2\"\n local logged_in_user=\"$3\"\n local logged_in_uid pids\n\n if [ -z \"$signal\" ] || [ -z \"$bundle_id\" ] || [ -z \"$logged_in_user\" ]; then\n echo \"Usage: uninstall_signal \"\n return 1\n fi\n\n logged_in_uid=$(id -u \"$logged_in_user\")\n if [ -z \"$logged_in_uid\" ]; then\n echo \"Could not find UID for user '$logged_in_user'.\"\n return 1\n fi\n\n echo \"Signalling '$signal' to application ID '$bundle_id' for user '$logged_in_user'\"\n\n pids=$(/bin/launchctl asuser \"$logged_in_uid\" sudo -iu \"$logged_in_user\" /bin/launchctl list | awk -v bundle_id=\"$bundle_id\" '\n $3 ~ bundle_id { print $1 }')\n\n if [ -z \"$pids\" ]; then\n echo \"No processes found for bundle ID '$bundle_id'.\"\n return 0\n fi\n\n echo \"Unix PIDs are $pids for processes with bundle identifier $bundle_id\"\n for pid in $pids; do\n if kill -s \"$signal\" \"$pid\" 2>/dev/null; then\n echo \"Successfully signaled PID $pid with signal $signal.\"\n else\n echo \"Failed to kill PID $pid with signal $signal. Check permissions.\"\n fi\n done\n\n sleep 3\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'ch.tripmode.nke.TripMode'\nremove_launchctl_service 'ch.tripmode.TripMode.HelperTool'\nsend_signal 'TERM' 'ch.tripmode.TripMode' \"$LOGGED_IN_USER\"\nsudo rm -rf '/Library/PrivilegedHelperTools/ch.tripmode.TripMode.HelperTool'\nsudo rm -rf \"$APPDIR/TripMode.app\"\ntrash $LOGGED_IN_USER '/Library/Application Support/Tripmode'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.alix-sarl.TripMode'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/P39EL2R8C4.com.alix-sarl.TripMode'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Tripmode'\ntrash $LOGGED_IN_USER '~/Library/Caches/ch.tripmode.TripMode'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/Generated/ch.tripmode.TripMode.help*'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/P39EL2R8C4.com.alix-sarl.TripMode'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ch.tripmode.TripMode.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/tuple/darwin.json b/ee/maintained-apps/outputs/tuple/darwin.json new file mode 100644 index 0000000000..126ac61a69 --- /dev/null +++ b/ee/maintained-apps/outputs/tuple/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "3.0.5", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'app.tuple.app';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'app.tuple.app' AND version_compare(bundle_short_version, '3.0.5') < 0);" + }, + "installer_url": "https://d32ifkf9k9ezcg.cloudfront.net/production/sparkle/tuple-3.0.5-2026-06-05-9277d388e.zip", + "install_script_ref": "ff9821fc", + "uninstall_script_ref": "03815558", + "sha256": "5e53ed5f8e92f70c9d473a904f4b89c9de2cc940e76bab5b45794bfa58a448c6", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "03815558": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'app.tuple.app-LaunchAtLoginHelper'\nquit_application 'app.tuple.app'\nsudo rm -rf \"$APPDIR/Tuple.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/app.tuple.app-LaunchAtLoginHelper'\ntrash $LOGGED_IN_USER '~/Library/Application Support/app.tuple.app'\ntrash $LOGGED_IN_USER '~/Library/Caches/app.tuple.app'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.crashlytics.data/app.tuple.app'\ntrash $LOGGED_IN_USER '~/Library/Caches/io.fabric.sdk.mac.data/app.tuple.app'\ntrash $LOGGED_IN_USER '~/Library/Containers/app.tuple.app-LaunchAtLoginHelper'\ntrash $LOGGED_IN_USER '~/Library/Preferences/app.tuple.app.plist'\ntrash $LOGGED_IN_USER '~/Library/WebKit/app.tuple.app'\n", + "ff9821fc": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'app.tuple.app'\nif [ -d \"$APPDIR/Tuple.app\" ]; then\n\tsudo mv \"$APPDIR/Tuple.app\" \"$TMPDIR/Tuple.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Tuple.app\" \"$APPDIR\"\nrelaunch_application 'app.tuple.app'\n" + } +} diff --git a/ee/maintained-apps/outputs/twine-app/darwin.json b/ee/maintained-apps/outputs/twine-app/darwin.json new file mode 100644 index 0000000000..2bfed16fae --- /dev/null +++ b/ee/maintained-apps/outputs/twine-app/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.12.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.twine';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.twine' AND version_compare(bundle_short_version, '2.12.0') < 0);" + }, + "installer_url": "https://github.com/klembot/twinejs/releases/download/2.12.0/Twine-2.12.0-macOS.dmg", + "install_script_ref": "4bac722d", + "uninstall_script_ref": "35c96d50", + "sha256": "918c55e1ccb4131db6f64f7586d024875075331211c2a1d03c73d2f3ed77bddc", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "35c96d50": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Twine.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Twine'\ntrash $LOGGED_IN_USER '~/Library/Logs/Twine'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.electron.twine.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.electron.twine.savedState'\n", + "4bac722d": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.electron.twine'\nif [ -d \"$APPDIR/Twine.app\" ]; then\n\tsudo mv \"$APPDIR/Twine.app\" \"$TMPDIR/Twine.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Twine.app\" \"$APPDIR\"\nrelaunch_application 'com.electron.twine'\n" + } +} diff --git a/ee/maintained-apps/outputs/twobird/darwin.json b/ee/maintained-apps/outputs/twobird/darwin.json new file mode 100644 index 0000000000..a97ba84c84 --- /dev/null +++ b/ee/maintained-apps/outputs/twobird/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.0.52", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.gingerlabs.bagel';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.gingerlabs.bagel' AND version_compare(bundle_short_version, '1.0.52') < 0);" + }, + "installer_url": "https://www.twobird.com/download/mac-arm64", + "install_script_ref": "2adc3907", + "uninstall_script_ref": "b2eaec73", + "sha256": "no_check", + "default_categories": [ + "Communication" + ] + } + ], + "refs": { + "2adc3907": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.gingerlabs.bagel'\nif [ -d \"$APPDIR/Twobird.app\" ]; then\n\tsudo mv \"$APPDIR/Twobird.app\" \"$TMPDIR/Twobird.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Twobird.app\" \"$APPDIR\"\nrelaunch_application 'com.gingerlabs.bagel'\n", + "b2eaec73": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Twobird.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Twobird'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.gingerlabs.bagel.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.gingerlabs.bagel.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/typeface/darwin.json b/ee/maintained-apps/outputs/typeface/darwin.json new file mode 100644 index 0000000000..f5a8ab497c --- /dev/null +++ b/ee/maintained-apps/outputs/typeface/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "4.3.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.criminalbird.typeface.standalone';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.criminalbird.typeface.standalone' AND version_compare(bundle_short_version, '4.3.1') < 0);" + }, + "installer_url": "https://dcdn.typefaceapp.com/Typeface-4.3.1-5064/Typeface-4.3.1-5064.dmg", + "install_script_ref": "a15420fd", + "uninstall_script_ref": "707f4675", + "sha256": "b0aadeef317c1b466c048834d0c0342771bd13b64b5f9dd457cf625af5a7d4c2", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "707f4675": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.criminalbird.typeface.standalone'\nsudo rm -rf \"$APPDIR/Typeface.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.criminalbird.typeface.standalone'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.criminalbird.typeface.standalone'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.criminalbird.typeface.standalone.plist'\n", + "a15420fd": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.criminalbird.typeface.standalone'\nif [ -d \"$APPDIR/Typeface.app\" ]; then\n\tsudo mv \"$APPDIR/Typeface.app\" \"$TMPDIR/Typeface.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Typeface.app\" \"$APPDIR\"\nrelaunch_application 'com.criminalbird.typeface.standalone'\n" + } +} diff --git a/ee/maintained-apps/outputs/typinator/darwin.json b/ee/maintained-apps/outputs/typinator/darwin.json new file mode 100644 index 0000000000..72b0a5f23c --- /dev/null +++ b/ee/maintained-apps/outputs/typinator/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "10.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.macility.typinator2';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.macility.typinator2' AND version_compare(bundle_short_version, '10.1') < 0);" + }, + "installer_url": "https://storage.ergonis.com/apps/production/typinator/archive/Typinator_101.dmg", + "install_script_ref": "dec26639", + "uninstall_script_ref": "282f639a", + "sha256": "223b0ef7d877274ba0133aaf1bf836ff06a3122e0683c82f790446a6d038fd77", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "282f639a": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Typinator.app\"\ntrash $LOGGED_IN_USER '~/Desktop/Typinator Tutorial.rtfd'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Typinator'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.macility.typinator2.plist'\n", + "dec26639": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.macility.typinator2'\nif [ -d \"$APPDIR/Typinator.app\" ]; then\n\tsudo mv \"$APPDIR/Typinator.app\" \"$TMPDIR/Typinator.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Typinator.app\" \"$APPDIR\"\nrelaunch_application 'com.macility.typinator2'\n" + } +} diff --git a/ee/maintained-apps/outputs/typora/darwin.json b/ee/maintained-apps/outputs/typora/darwin.json new file mode 100644 index 0000000000..c7ff5a1347 --- /dev/null +++ b/ee/maintained-apps/outputs/typora/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.13.6", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'abnerworks.Typora';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'abnerworks.Typora' AND version_compare(bundle_short_version, '1.13.6') < 0);" + }, + "installer_url": "https://download.typora.io/mac/Typora-1.13.6.dmg", + "install_script_ref": "46cc7e99", + "uninstall_script_ref": "a8ba94c9", + "sha256": "9179f386ebb722d17d995d31fafefe85b60d08ea350c07c8cd8307c002fe2c73", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "46cc7e99": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'abnerworks.Typora'\nif [ -d \"$APPDIR/Typora.app\" ]; then\n\tsudo mv \"$APPDIR/Typora.app\" \"$TMPDIR/Typora.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Typora.app\" \"$APPDIR\"\nrelaunch_application 'abnerworks.Typora'\n", + "a8ba94c9": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Typora.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/abnerworks.Typora'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/abnerworks.typora.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Typora'\ntrash $LOGGED_IN_USER '~/Library/Caches/abnerworks.Typora'\ntrash $LOGGED_IN_USER '~/Library/Cookies/abnerworks.Typora.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/abnerworks.Typora'\ntrash $LOGGED_IN_USER '~/Library/Preferences/abnerworks.Typora.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/abnerworks.Typora.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/abnerworks.Typora'\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/Tabby.tsx b/frontend/pages/SoftwarePage/components/icons/Tabby.tsx new file mode 100644 index 0000000000..d406afd35d --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Tabby.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Tabby = (props: SVGProps) => ( + + + +); +export default Tabby; diff --git a/frontend/pages/SoftwarePage/components/icons/TableauPrep.tsx b/frontend/pages/SoftwarePage/components/icons/TableauPrep.tsx new file mode 100644 index 0000000000..b4139cc10c --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/TableauPrep.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const TableauPrep = (props: SVGProps) => ( + + + +); +export default TableauPrep; diff --git a/frontend/pages/SoftwarePage/components/icons/Tabtab.tsx b/frontend/pages/SoftwarePage/components/icons/Tabtab.tsx new file mode 100644 index 0000000000..7b36eb14a5 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Tabtab.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Tabtab = (props: SVGProps) => ( + + + +); +export default Tabtab; diff --git a/frontend/pages/SoftwarePage/components/icons/Taskade.tsx b/frontend/pages/SoftwarePage/components/icons/Taskade.tsx new file mode 100644 index 0000000000..c0fb2042e5 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Taskade.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Taskade = (props: SVGProps) => ( + + + +); +export default Taskade; diff --git a/frontend/pages/SoftwarePage/components/icons/Taskbar.tsx b/frontend/pages/SoftwarePage/components/icons/Taskbar.tsx new file mode 100644 index 0000000000..c9c9d1305d --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Taskbar.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Taskbar = (props: SVGProps) => ( + + + +); +export default Taskbar; diff --git a/frontend/pages/SoftwarePage/components/icons/Teacode.tsx b/frontend/pages/SoftwarePage/components/icons/Teacode.tsx new file mode 100644 index 0000000000..5f0fc2d762 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Teacode.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Teacode = (props: SVGProps) => ( + + + +); +export default Teacode; diff --git a/frontend/pages/SoftwarePage/components/icons/Termius.tsx b/frontend/pages/SoftwarePage/components/icons/Termius.tsx new file mode 100644 index 0000000000..ac97e96a65 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Termius.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Termius = (props: SVGProps) => ( + + + +); +export default Termius; diff --git a/frontend/pages/SoftwarePage/components/icons/TexLiveUtility.tsx b/frontend/pages/SoftwarePage/components/icons/TexLiveUtility.tsx new file mode 100644 index 0000000000..7c8234640a --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/TexLiveUtility.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const TexLiveUtility = (props: SVGProps) => ( + + + +); +export default TexLiveUtility; diff --git a/frontend/pages/SoftwarePage/components/icons/Texshop.tsx b/frontend/pages/SoftwarePage/components/icons/Texshop.tsx new file mode 100644 index 0000000000..4ce505ddfb --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Texshop.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Texshop = (props: SVGProps) => ( + + + +); +export default Texshop; diff --git a/frontend/pages/SoftwarePage/components/icons/Thaw.tsx b/frontend/pages/SoftwarePage/components/icons/Thaw.tsx new file mode 100644 index 0000000000..e0a42bd694 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Thaw.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Thaw = (props: SVGProps) => ( + + + +); +export default Thaw; diff --git a/frontend/pages/SoftwarePage/components/icons/Thorium.tsx b/frontend/pages/SoftwarePage/components/icons/Thorium.tsx new file mode 100644 index 0000000000..2a4be773d7 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Thorium.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Thorium = (props: SVGProps) => ( + + + +); +export default Thorium; diff --git a/frontend/pages/SoftwarePage/components/icons/Threema.tsx b/frontend/pages/SoftwarePage/components/icons/Threema.tsx new file mode 100644 index 0000000000..6d93f425ad --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Threema.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Threema = (props: SVGProps) => ( + + + +); +export default Threema; diff --git a/frontend/pages/SoftwarePage/components/icons/Thumbsup.tsx b/frontend/pages/SoftwarePage/components/icons/Thumbsup.tsx new file mode 100644 index 0000000000..27ae20fd0b --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Thumbsup.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Thumbsup = (props: SVGProps) => ( + + + +); +export default Thumbsup; diff --git a/frontend/pages/SoftwarePage/components/icons/Ticktick.tsx b/frontend/pages/SoftwarePage/components/icons/Ticktick.tsx new file mode 100644 index 0000000000..b809d60da2 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Ticktick.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Ticktick = (props: SVGProps) => ( + + + +); +export default Ticktick; diff --git a/frontend/pages/SoftwarePage/components/icons/Tidal.tsx b/frontend/pages/SoftwarePage/components/icons/Tidal.tsx new file mode 100644 index 0000000000..ab820fcd06 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Tidal.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Tidal = (props: SVGProps) => ( + + + +); +export default Tidal; diff --git a/frontend/pages/SoftwarePage/components/icons/Tiles.tsx b/frontend/pages/SoftwarePage/components/icons/Tiles.tsx new file mode 100644 index 0000000000..c99a938d40 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Tiles.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Tiles = (props: SVGProps) => ( + + + +); +export default Tiles; diff --git a/frontend/pages/SoftwarePage/components/icons/Timescribe.tsx b/frontend/pages/SoftwarePage/components/icons/Timescribe.tsx new file mode 100644 index 0000000000..eb9238fe10 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Timescribe.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Timescribe = (props: SVGProps) => ( + + + +); +export default Timescribe; diff --git a/frontend/pages/SoftwarePage/components/icons/Timing.tsx b/frontend/pages/SoftwarePage/components/icons/Timing.tsx new file mode 100644 index 0000000000..3719f7277d --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Timing.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Timing = (props: SVGProps) => ( + + + +); +export default Timing; diff --git a/frontend/pages/SoftwarePage/components/icons/TopazGigapixelAi.tsx b/frontend/pages/SoftwarePage/components/icons/TopazGigapixelAi.tsx new file mode 100644 index 0000000000..05d0e0607c --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/TopazGigapixelAi.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const TopazGigapixelAi = (props: SVGProps) => ( + + + +); +export default TopazGigapixelAi; diff --git a/frontend/pages/SoftwarePage/components/icons/TopazPhotoAi.tsx b/frontend/pages/SoftwarePage/components/icons/TopazPhotoAi.tsx new file mode 100644 index 0000000000..c72fad70e6 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/TopazPhotoAi.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const TopazPhotoAi = (props: SVGProps) => ( + + + +); +export default TopazPhotoAi; diff --git a/frontend/pages/SoftwarePage/components/icons/TopazVideoAi.tsx b/frontend/pages/SoftwarePage/components/icons/TopazVideoAi.tsx new file mode 100644 index 0000000000..d667441659 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/TopazVideoAi.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const TopazVideoAi = (props: SVGProps) => ( + + + +); +export default TopazVideoAi; diff --git a/frontend/pages/SoftwarePage/components/icons/Topnotch.tsx b/frontend/pages/SoftwarePage/components/icons/Topnotch.tsx new file mode 100644 index 0000000000..de5c85608e --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Topnotch.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Topnotch = (props: SVGProps) => ( + + + +); +export default Topnotch; diff --git a/frontend/pages/SoftwarePage/components/icons/Tradingview.tsx b/frontend/pages/SoftwarePage/components/icons/Tradingview.tsx new file mode 100644 index 0000000000..c0432b7291 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Tradingview.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Tradingview = (props: SVGProps) => ( + + + +); +export default Tradingview; diff --git a/frontend/pages/SoftwarePage/components/icons/Transfer.tsx b/frontend/pages/SoftwarePage/components/icons/Transfer.tsx new file mode 100644 index 0000000000..823c20e2ac --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Transfer.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Transfer = (props: SVGProps) => ( + + + +); +export default Transfer; diff --git a/frontend/pages/SoftwarePage/components/icons/Transmission.tsx b/frontend/pages/SoftwarePage/components/icons/Transmission.tsx new file mode 100644 index 0000000000..902723ce13 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Transmission.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Transmission = (props: SVGProps) => ( + + + +); +export default Transmission; diff --git a/frontend/pages/SoftwarePage/components/icons/Trex.tsx b/frontend/pages/SoftwarePage/components/icons/Trex.tsx new file mode 100644 index 0000000000..cb81099180 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Trex.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Trex = (props: SVGProps) => ( + + + +); +export default Trex; diff --git a/frontend/pages/SoftwarePage/components/icons/TrezorSuite.tsx b/frontend/pages/SoftwarePage/components/icons/TrezorSuite.tsx new file mode 100644 index 0000000000..e3647677cc --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/TrezorSuite.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const TrezorSuite = (props: SVGProps) => ( + + + +); +export default TrezorSuite; diff --git a/frontend/pages/SoftwarePage/components/icons/Tripmode.tsx b/frontend/pages/SoftwarePage/components/icons/Tripmode.tsx new file mode 100644 index 0000000000..201437cd6f --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Tripmode.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Tripmode = (props: SVGProps) => ( + + + +); +export default Tripmode; diff --git a/frontend/pages/SoftwarePage/components/icons/Tuple.tsx b/frontend/pages/SoftwarePage/components/icons/Tuple.tsx new file mode 100644 index 0000000000..34071bf212 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Tuple.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Tuple = (props: SVGProps) => ( + + + +); +export default Tuple; diff --git a/frontend/pages/SoftwarePage/components/icons/TwineApp.tsx b/frontend/pages/SoftwarePage/components/icons/TwineApp.tsx new file mode 100644 index 0000000000..350695b7fa --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/TwineApp.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const TwineApp = (props: SVGProps) => ( + + + +); +export default TwineApp; diff --git a/frontend/pages/SoftwarePage/components/icons/Twobird.tsx b/frontend/pages/SoftwarePage/components/icons/Twobird.tsx new file mode 100644 index 0000000000..c70d39f4b0 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Twobird.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Twobird = (props: SVGProps) => ( + + + +); +export default Twobird; diff --git a/frontend/pages/SoftwarePage/components/icons/Typeface.tsx b/frontend/pages/SoftwarePage/components/icons/Typeface.tsx new file mode 100644 index 0000000000..5df434ec61 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Typeface.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Typeface = (props: SVGProps) => ( + + + +); +export default Typeface; diff --git a/frontend/pages/SoftwarePage/components/icons/Typinator.tsx b/frontend/pages/SoftwarePage/components/icons/Typinator.tsx new file mode 100644 index 0000000000..ced85d7d7d --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Typinator.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Typinator = (props: SVGProps) => ( + + + +); +export default Typinator; diff --git a/frontend/pages/SoftwarePage/components/icons/Typora.tsx b/frontend/pages/SoftwarePage/components/icons/Typora.tsx new file mode 100644 index 0000000000..ae32d81ad4 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Typora.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Typora = (props: SVGProps) => ( + + + +); +export default Typora; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index 30e9fe99b9..72db71430e 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -776,24 +776,58 @@ import Syncmate from "./Syncmate"; import Syncovery from "./Syncovery"; import SyncthingApp from "./SyncthingApp"; import SyntaxHighlight from "./SyntaxHighlight"; +import Tabby from "./Tabby"; import TableauDesktop from "./TableauDesktop"; +import TableauPrep from "./TableauPrep"; import TablePlus from "./TablePlus"; +import Tabtab from "./Tabtab"; import Tailscale from "./Tailscale"; +import Taskade from "./Taskade"; +import Taskbar from "./Taskbar"; +import Teacode from "./Teacode"; import Teams from "./Teams"; import TeamViewer from "./TeamViewer"; import Telegram from "./Telegram"; import TeleportConnect from "./TeleportConnect"; import Terminal from "./Terminal"; +import Termius from "./Termius"; +import TexLiveUtility from "./TexLiveUtility"; +import Texshop from "./Texshop"; import TextExpander from "./TextExpander"; +import Thaw from "./Thaw"; import TheUnarchiver from "./TheUnarchiver"; +import Thorium from "./Thorium"; +import Threema from "./Threema"; +import Thumbsup from "./Thumbsup"; import Thunderbird from "./Thunderbird"; +import Ticktick from "./Ticktick"; +import Tidal from "./Tidal"; +import Tiles from "./Tiles"; +import Timescribe from "./Timescribe"; +import Timing from "./Timing"; import Todoist from "./Todoist"; +import TopazGigapixelAi from "./TopazGigapixelAi"; +import TopazPhotoAi from "./TopazPhotoAi"; +import TopazVideoAi from "./TopazVideoAi"; +import Topnotch from "./Topnotch"; import TorBrowser from "./TorBrowser"; import Tortoisegit from "./Tortoisegit"; import Tower from "./Tower"; +import Tradingview from "./Tradingview"; +import Transfer from "./Transfer"; +import Transmission from "./Transmission"; import Transmit from "./Transmit"; +import Trex from "./Trex"; +import TrezorSuite from "./TrezorSuite"; +import Tripmode from "./Tripmode"; import Tunnelblick from "./Tunnelblick"; +import Tuple from "./Tuple"; +import TwineApp from "./TwineApp"; import Twingate from "./Twingate"; +import Twobird from "./Twobird"; +import Typeface from "./Typeface"; +import Typinator from "./Typinator"; +import Typora from "./Typora"; import UaConnect from "./UaConnect"; import Ukelele from "./Ukelele"; import UltimakerCura from "./UltimakerCura"; @@ -1597,6 +1631,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { secretive: Secretive, securesafe: Securesafe, selfcontrol: Selfcontrol, + "sempliva tiles": Tiles, sensei: Sensei, "sequel ace": SequelAce, session: Session, @@ -1680,9 +1715,15 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { syncovery: Syncovery, syncthing: SyncthingApp, "syntax highlight": SyntaxHighlight, + tabby: Tabby, tableau: TableauDesktop, + "tableau prep": TableauPrep, tableplus: TablePlus, + tabtab: Tabtab, tailscale: Tailscale, + taskade: Taskade, + taskbar: Taskbar, + teacode: Teacode, teamviewer: TeamViewer, telegram: Telegram, teleport: TeleportConnect, @@ -1690,16 +1731,43 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "teleport suite": TeleportConnect, "teradici pcoip software client for macos": Pcoipclient, terminal: Terminal, + termius: Termius, + "tex live utility": TexLiveUtility, + texshop: Texshop, textexpander: TextExpander, + thaw: Thaw, "the unarchiver": TheUnarchiver, + "thorium reader": Thorium, + threema: Threema, + thumbsup: Thumbsup, thunderbird: Thunderbird, + ticktick: Ticktick, + tidal: Tidal, + timescribe: Timescribe, + timing: Timing, todoist: Todoist, + "topaz gigapixel ai": TopazGigapixelAi, + "topaz photo ai": TopazPhotoAi, + "topaz video ai": TopazVideoAi, + topnotch: Topnotch, "tor browser": TorBrowser, tortoisegit: Tortoisegit, tower: Tower, + "tradingview desktop": Tradingview, + transfer: Transfer, + transmission: Transmission, transmit: Transmit, + trex: Trex, + "trezor suite": TrezorSuite, + tripmode: Tripmode, tunnelblick: Tunnelblick, + tuple: Tuple, + twine: TwineApp, twingate: Twingate, + twobird: Twobird, + typeface: Typeface, + typinator: Typinator, + typora: Typora, "ua connect": UaConnect, ukelele: Ukelele, "ultimaker cura": UltimakerCura, diff --git a/website/assets/images/app-icon-tabby-60x60@2x.png b/website/assets/images/app-icon-tabby-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c389538cc438787792f2e8c1f345ffb5cec9eb5c GIT binary patch literal 14505 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-taskade-60x60@2x.png b/website/assets/images/app-icon-taskade-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1a8f2f1bedf50ac43859097dd66f45916a84a47f GIT binary patch literal 10715 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-taskbar-60x60@2x.png b/website/assets/images/app-icon-taskbar-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6122c28509b1161395dec37625d9295e6142fbf4 GIT binary patch literal 21972 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 C-n9e( literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-termius-60x60@2x.png b/website/assets/images/app-icon-termius-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5506bcead3daa698bf0ffc4d6bd428ffcfff28c1 GIT binary patch literal 13448 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®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 JPDHLkV1mKw;y(ZY literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-texshop-60x60@2x.png b/website/assets/images/app-icon-texshop-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8238b299540bfbb899edb4212716e817521c1c49 GIT binary patch literal 16894 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 f1gKJp{LJpm%^kyCE)n$40aH0CQ- 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

l|u{ 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

Zb@5iu)m8uza@da-N3d}vjyh#k zj4upY+FPw(CUkeqTO=ac# zUheJ6ac*&U%ww$8F!U}JRCjXIJept1kG1tj6cK&Fcv(SH1fjz{J06*{i0*J8#vtjd zNJ6%hPVT_LAF0wDW`m*gpIA#tP4K*Aa7~ydw{S$*QR)?VotQJ37Z(=x;Dyl?f6Xk5 zANeDjzB$M|7+WUw)FV&ki@nkYaXVsw8+uRt20zI^7E+HH%g;LAIs7O*iFU<-uX^-I z<>%#HDgu2m=}!a@WQ=zP&kZiUeEbJxT0@9qhXM6Hv8q{o?2-=p{uZzD(^MMIuBY!i z#dBF&wJ6mY)~bR=bezC!2V;OP2D&SSEM z${uT8JIErvWrGt4(5GJ)X8nr1h#?pD zNa(ht1w!S<3sS)`P$XJ<6u>p0rjY_Oh8{FNf%G{`ZIKYdMD3F(^@wc&&t=jxa|eOd zM4Yfy?tcLCGVg0q-i4C2>#))=6gs`XkN>?XH2H5eTww!-mZ5&UoE|wgF3QyLy%y1l z$G0lGzXyVM@>d_&8=6XlNv9&Mo5ESU;Og_ahvbdks_Z7-1lIC6=!us|KX)o6}1%V<*cIq2SebV AhX4Qo literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-ticktick-60x60@2x.png b/website/assets/images/app-icon-ticktick-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ec3552683f9006558b83a90f22d8135312579d GIT binary patch literal 15491 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 Qf9~tbN-9cJix~(1Fa8yhi~s-t literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-tidal-60x60@2x.png b/website/assets/images/app-icon-tidal-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a43a186c6f3293a46ba34f73ce5ec89acaff3df3 GIT binary patch literal 4202 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 GLjD&I2#<{b literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-timescribe-60x60@2x.png b/website/assets/images/app-icon-timescribe-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..42f7bcd3e88ef4721168c927bdf3620e7ef42fb8 GIT binary patch literal 15118 zcma*O1CVCTvM&7gv~AnQ+dVUF+qP}nwr$(Cr)_)Mw!5c&=i7V#=bZTC-ne%~)T&&W zPi9tDRaC^vstT8r5rv1rfdK#j@Zw@Z3V&0x3%#>f69{{M2g?-lt z|NBj3D5f9{0C-UR#RUNXum9jr003tu0N_jy0N_Xi05I*cI^?wTm2PhT;=K2>lVXma+q$VxJ zVQ6d3pl@VrV9elVZTAlVz~#pAm$Wu^(kF7Wwz6^LaN{QV7lPw2{STXwgy>%oCrfS; zHEB5_L0bo7qMr;*3``_EFhoQ|TnqoISjos+q(4beY#^$l#Dow!Lz z{&DnQ&%fJg>}LMoo@^Zd6V~4V8UK+m0vVVX|I7AYRjz-y9D=r1whoGR`i90lK(2oQ z|0nCez5E+3XYOWfr6y!qzN6r5s`Hv|I<@Xp`q!sZ|@#INKAa+wXCb)f8gElaQ6eZA25@NmJxgc}J; zMa4xv2bN>T2ZSMkmL+F@Ko0}75i4z| zj}F2F$Q0@Se`WdP0(aiB%YG}X9x5-@Fyd*n6*1KoRWY&QOc72XLKFBs^Z3%QRyCB>E*?Jz(^>HAuLzBn zy|fcC+Y+6!)rg&b%PrtK$4q+C8S0^y;nKJezVa1z%w-fgDB~lN(|Zpm=`MA{dtQqi z!N)krofj6_J=h&xwX5G=dCqA!#?RFOwq6cB^$6;^ecUt_27WNMyg&J8yX;3Z4d23! zgk@iVWV>D`QVK^-Y+XM?ZowBXzX-epV?fPHn9<2I2?esO^ck?laGU0SU0X;knFzfL z{J=y%SZn`L?6TYCkcm0oII{kFaTLOE9xXH(5*ku4cY<*Cu`t><>urtMdl5JqPg_6S`h^z>>G&PO(o3f2FFl!OC}yS}Y&x{{{8@hC}6 zebyH84dU|VhDv}@ulR+Zb^>v2Ce!m`I?x&jAvPG9Mx10jhm0ab;u@UE(KGKn)czLE zd@04W3AY2N>hWFRyqA#Zy_}fQ#mC2a?I!P{+!`VB@ZYwbh`hhVUm|~si6E(*gk9|$ zEyKrx+8~M$0PgjYp$W-9a?%_jfAt9ByKL`HkHPH#1F?vE`w9jGAw@hqYRr58R3l2W zqDoPMvhBTHyB{%*(@NMvK?Dka&LOL+*YbRAUhB{j2Jci@x$DfzP*c}A(neZayZfWx zU-3QredIOIJOzhd-U%;(p%rN*s`zX8F6hlU;Z2vct$&f2BH8_1{rHh zWf(@(0j4_mp?88Pcetpp?~_waPhZDkc1Q~&m?E2Ha@JI6Is2qg%0SLnb&Sdgbu0Sv zl3AmJtLIesKJNZJSL}GvRAEp`*mglJ{n)E7nrMAWAcSKi4l(~n4n?%Hvv>8ihvf@7 z&X{m4CNeCI#z@_vqUb7nUbOP(=U%Mfy(OVvWhBI$rVX3D{|6!s*WeAsHldw2o=2}G zIy}?Rr$6xqG|Dr4)GD!t>>ECYy+tb(x3RMT31mdL9}dx_oDQO9eC}P z-(JvEKnyU^z^tA5N0<3-4#S=}G~Cz+;gOH)mvuVPgRN~AZHpfcdC~^LT}HYOP~Kuw z2eF=N_csouw}o!uQRY;M8734g}x`~9#qN^5Ou80|2>1tk(%LE2*gORJO* zk>OXzsbFv(TwyAYU7qiMrbsJH?`iaRs%BDPJ@s(s4O_$l;Nqx^t(NdCR@Pr_HOdiL zwMFtOwBEHH`|k*h%d00N)katnWc(4(Qx~YL+1H7lR{^_8gO~PxXJU#L=+-$?m~7Q` zdRVjUV~zFsijvDuzLN=xO0GtsPTc_1RZQH3QBYH+u@acIUhRf;m)6XCD`E={N@M=H z7>DA&!LUO?vx=bW4CjqIuFY^%Tx-2r|9yXocrB4C`tv$A7$nQRYrOf!8eFNggQxhF^*LHkhgTf_XBU_(GaE{bKLXmDKrF zuTBtj;0bJV;m~=>#%)N%3b1o6XEXU0XT_J<6MP3WKEuuT<>bt>&&YS&0dZ$OQ`G;lM2@FLtGC~Li2 z$BE-LjwBj&uV6NH{rx|##gStkBEuKknVi)boFt&9{td!9f$sK}6OwO$sX;eIcQhbFPf2aH+x^iKM~AVWtP&C()}iekMz2ryv|Y^L2lBZu z*Qp&ljF(4}fFV5qhi-2Ek|q*4TPJzqE4llc&|pAYMpaKGwiPhwhVjknSAfcdU1e7o z(3!sv#(e!niEji_v&^yYi7$NssUuQb z8LX!{w(u)+@yAqXcoO^*V;1zeW{b$`nmOo%t}Q_hqxmC>DYUYLZRRNTKoYx^u=Sy> z0Y`j6T-*Q&TlZa#p2EiYIdBnZDfkTvLcGMcpUM$8DqWTxfo}`;h53$4uu@v2_H0=i zn~@kAf+#M{JI#g3Z!mnNPnmRyaD{2_rSz2{v)?e3^TPd%#IxV=H{t_)^gc@tlq506 z!0g5ZukWRL7mjUkIkWV=%;U_Dw(l>rD%~@xYHBBHyws4*VVE6n*11|I* zKCD{4K|rz6@FkH~BiS2{Ihj|0kcB_cMPFRWr-Af>cxw|$A|g91(M`N-E4tv3!@TI> zbmPg#>T1-}1nXs}7?=O0ndmj$+rIXJ11iwVS~cCIgBF#PC=X>x3lGcoisj3-xDLx zfD0)BhiuX;4MC;iE8zUxz4iJ$>Zu2nXa=U4CdK%wSlPo)-t@LAb=eQdrYO+(`oAm7 zMG1v7D|=mgg2PmWR2l>o!t7vc)1|34>Irgr%Y2`rW(F_I@#hmi_4qUiQmwwj&^WwA z8a`KCAV(tJIJGo(n)~CU$yo3meqQ+Ik}1q&K8P*au(!2#3P(H_h6JQ)cN>8$g3PZY z1%oVjTnaPkx-p9F^P>2pCD?PhWZen7#Ep?Mz8TKk_dNyOWnVl}OFJe7GO4?^&5fHi zpVWH@4M>d#4;n<5);h0Vl)x58+yiO;SUZ31%91n=rskJYldp5W z6V^Rxwx3hN@Otq;y%>O4_(1)o!g`gfA&-jM6~$eM8G={qubOz;9{Wv|9imnd>q!E| z?PucP?;lNg5ay>hM|%>tldufO?8m!$H6cWkROE4uU?eq5td1_k?rNR0nD%^FX0md*WGaHa|N8w53kCaFGbAwXghu!cH zZ#Vazn`Y(EDcSJ?4M9*?B^PAST$ShO%qvciYg>4Tu~h(KNKQ+;i-wjS-8XYBX1R`?kFczKtlPNn5(s*a>}&c>e+i4q|#-K)ch#wp6N z2|6|jf(mv>M~rIfLi)v9-^CQNl6dQ*R}Hj^Fjxj$zPWtD-h0o8QTS zQxvjGAM8J9BoLwBcJJY)voA4qV2h{z3a4! zwIL)lG5E@*(#MgML-73q(=7*jhz6bOD|;I{G`8Tv=2yKDmY3%}An^=rK7D8sHmI)f z7|X%L@7KIQ$WGZG^8jWgUt0Tfp#RmYH(?6BIH>wjm#uk2x;Op^pv-AuucLG%-O{BW z_@y=t7nc%ePPG#mWAPe^oVv1zN@C%1E=fsOCpx2bs+CvV?ZMw?i7|5@eZMucRXXg~ z(f%+PTRakm6Bcq;L_;No&W#b-+s+I)cP5#Rq|J`0&k|2>HU@VY+OtS~VS~k^c6`!@ zV9IM5`mHyO!tDy7XC52mR>3iv@XVA*{gwv#$Jx{Nm4{Y&Z_RZi0%SRv%}{K)S{MB2 z7qC7`9Ut)TQ6=}gSDHiNp?0vmb z_#b_(phJ8vI!XNAAM`%o)#CZZuIvJM_fM#QV&~Hs;r|^9KAxosCK#lS1bPj1!9-4xT{heC!LcLgI3I;Ic&!Lr9*9c(j4KwlUa^xf{H5c%yAO>puMggl&uqeLyTW7kuR|NGD<*mO}Y*d@F5VX3nm(nJt+{jE#mg&r1ngil+-l7x} za!*t`h1X;@$opNEs6iqanCVPx7(nJf)_|bKHOcdf76x zzQ!*%IN(dsSiZbQg#p@5t=be(X$_m1BT-Mg0vX)OEi@SC7)5|^h@{FM6+_hyLv^slwn+Uk=G@~|k$wGU)ZrqkU5#zw< zLi29dy>|iM~@a3*R_GM|`XSp`Dp;8Jo~r zC|}3>IrK<*EmbDV(wW>sn;-$zQQGL2{Wr?t(RVIooLug?^_lTps2;fWLw}wug7=VS z*h|^eqP$<<-Gg>) z-r#bItOHaxP=um8isj@JsKj=kHE(X5Y@_ikW%p)`$3(?^b|6cr!r;|5gRb88njGxy zP_D;0IPzvJmg!lW>tKsZ=w)yW|NAk@zMFmQVN58Z_Fyl*f-i0&J965cCFLRok}ua6 z!s`pIPDQKedS~`0@lZXKu-r4n>w9niep~i?7ZLvM04%NCMHlPobwz!arO%L+UII=6 zk352IiT1a!KTB?VpWO7uj0@S@LRLe`_fdM`@^KkY&B@I!OVG*h5`!@_=8L?R7shF8 z6CMNntqx-J()1^orVOpj<5BSz2EYW0ZmWGo>0F)|{#g3%&Qy_;VRmo>?Z)=Gmc~_K z8!HE@b~l@3?VhTD>u@{j>}`UIYlm~Nh~_wQ>I2Yi5IjxY3#bjkrQssK9jiqtJBqn;ZPY_9q8KWMi&K8WlpBtnQ6N6wFm$Ug6@_1{pg z4rX=(@QY>9n2YKyp<1G{O)&N`aw7f+T-t6xTvklMy9kJnMiVR>7Hi4l322(~!+<5q z5G|hyR(zjZ;o1DD=gKtI#f|4Oi0L0u@2%Zkka3ZKO%bwg$_a^lS%0kLn_PiNnK~#Z z5I{7^!V#X2VmS4F-^AkgO7*Cm>jOU`5u$@*<1V4paTaF2++epKNjYBsqdxfMVr&?s z^IPoRG}S;UnP95P=(3*2@?B&2X;*^R6U^pdemt?I2&iv>a%Y2nxpG9=&;cbx+y|e8 zCZ&xrNm7V<4rrwwXEr$bIhJ>k33Eziu^rPR(X6)M1V@NNxPF|z1xN4Tpc~5v*CkwD zN=!Sg7@Cg#M6DsM zAGdxbM)&}Gj`(^lRf>ij%$CuyGPd6GKvu?}#1w!{TptfVlp`hgSrygb9Gf{usXUxR zHee@vPylg_2Bst_T1SS(F*j<-oJzDz!E#E(P?@$2Hu&P*oxDgwh?IcWlhX>bK#iVC zIZnlgS#oF?nG>jjMKAe=LWXOPS07F@R%F}pkkx_K*lq*G0lXg6ZIBMbP7Kr`=DS#M z6KD^v(E;1~D61cVzwJ^zy;3MKWuAlrJ@{5PS!TNPtdbpML|^O^=N{~IrDKq6kz!F> zU@JQX;Ne{4HE>|ft$@vd*+PCud?2PQlLQij24({6R}@3yta?tM_E!>EHq zd|chn?p~zle&znf*q=xPODxeNia9SBXXs53dk-ed|RC)OORKq30in3clQbqdEugN2pMQb^R&7R)EqS zHX}u4wp3UM0>1q^!`XvhFUjF46>UR#xvv(af4YvwS2;yAP{L{c`GBx1{wh+Dmr*u} zSW{LXOw|ULcM%I@Us*_Q?hjj_hgUFUMK@CH;_Phs{RtM6Y?58RAwiLh#rJkX4p}{t zOOwSR?m$)qfTBNRQ@LgQ&^z9V>50m*kbS_bHgex zN(+Gs>IB>O_784>C86BT9=grh$tp*)Nta!DTwU4>#kH|`Ppcel`wvxFOS%gzfWIuWv{71t#hc;C6%?br$aK9P*ho+fLWtGvblYmNzv* zn|Lq|uQ=RCcj8g%b9qUmkk-m<;kslTHu_O!0v}Oe@ zap}XI(`rVTOG+F=OxoNE0|cJ5!%JdfZ*T}TxzqybF z5fW6Ty@PlJdz|EKI?O+CB)7&`dIbjQY8F>B0!hn^z7b2)n%Mbdzc|=isT7BJI;{r; z-c|!}T*M}<6(%QS6ZAT;Rwr0qcnsl)-d;DF=s9qDs`O98sIQid#*!I-tXgKTtEwqK zZLBR-@j1?n5m}N=5ujtk@!=4g1&$8}mnS-oeMIY78yMdvXP&1=XN}gCJ520Xg`dmj zm=bETK~g3-VTmO(KXM-C?LO5Xf6w`9f&(3C#Ptn0tp+hxEr+%Jgig}T%z?KYqWkrqgZry#{=ohJ=^ z-ikQhW)@NnI1o9wio$ai&an*va~%=vue};PBhqj`IHS2(tON?N_z8wiyX=2(wnBi) z`M_-O(>@DCKQn)K85_|R@#^NJ6cd~k4H@Os9zMTlmAIGzdLt{@~j-&3HN0qS@6q8Dg9!Vfl z;R5E=2)%~OU)!EG`TpLLs4ACZH@U8%Z*ByhTd>w!1thvywYU%cl6b>=!}zGB552IV zMF z?9jr=;qR{Nq(l09{I)<3o?`Qs9((9dD=Mn`W-PbwkF>RVu|Wx7tb|t0qGz7s$=KOK z&Ahdh5wsoDFw!2yPYRJA?mW0=A?AD;@w1aBPRP1LQ)wtvo-KHSI;K%ymx-9|6=SYf z__Ei0#0iOEp2-V@#M(9+w33O(2whfQSkkL{7BI-=DPG@jRlJ<7tM64h2*H2Y6Oy(^ z%otkt8AsAye$$#$-AkkK1?z&WLI%ITdbM#uuyuAs$Elr=Jnhh)!b4OvQeNNqX&tt{ zVYzw>ieC~hP0$Ebl#ES>MCIz!5!f~*96YBs?Lg!6XE%h)Yaz<*j=M^0+cKeD>1FD>HYqC{0rw z$0aX@ADdeWCJn!ju{7CzG7QZ>5B+dtC!jD=?bVstNUQdF+sWH(?_H?T<_=}e@!A1W zEA2_t1k*!uDqIJoU}+bU{w!&=y|QY7#g_I)Nqc6ZcH*4=84j13MzL~iZVGt(AV~tC zg+AZBAz(zo$QN|BxZIx9b_&(cCQDn|vG~Cuv$!93MGb~aXSfx|xeLS*+_@k)yaM)g zv+P8K>$BCBjbdAOZN<7;lT%iQ7clfkkzq?ojTU*@+5+x;>gx%w%n|%XCZ=TsIcYdPvYoz^*EK)qW6dwI;?p{B9y>1?w_i&Hh#?pC60mJ~}F}cID40*R1|COB1y`nHyGJD^xe@n3ho6rA=hSQUR zS<#_~xlk)WvSq_s@Pm4Voem^XP5IdYb)flgT1ye;+od?0)$_&mQC%p8T#3P zW&Ilwi$=NEOOYNuUs7$Q$+Jxq2kk1wgQ4x~%?7P%j^J2B|3mGwT)If)Kb*aLIpQ*-7fXn{<;VD2uJSo!P z3xmPEAS}%$4xcgkjW0i~!s_C$3xeKUL3R4jc7~dTh}<#fb3KcfhU4=~&uHrs1d(~E z$s8_mQWY~J>NO>QV|aD&-EtAiq&ya_kz3~H`aUO)a7H4B6u>GM(+oT0i~TYs=?BtT z&*aszfDG$G`Y8rW81RYNxvQGRi1zkuQ<}FGwTg^1=^_RU*az)|UXR^3CWHc3%lt{W zxP0ft6_L-dYkpZvNvgy}NqqBW^}{o4PT-cWm3s}fIkykVQUZpZl4|MoTdz0n{=`Ce zH&wI_gJ@sI4Us<4kZZ+kMA0~fn0gA?2VSV8`GT}~)+quz3xHce0}Cvt>C~q5v=mb1 zkqyv~cnQN&s=M>MF}OwQ#F@np0LoeknN-uPKuFA6n9fXocCN36#hl{YSZ*tTl|*u?P*2fG`eWf#yq^&k^Q zGX$R(@C0#Up*`$gSmQmUQY6#`u5684?K|RYtBkmLncBvMQ}Pp^P#$dunkG0!vVFM? z6?f4VKf#Wo8Nseq_+%9*?JeGsDB6sC(z^~jY;mH-e@DlP$Yux*WBHqUTb=@R*t=KE zrc+OhZC?GAkQ<|V9Rn7c_r1twWj!0 z%Jb>;4&xZaW6A{x$hc95C3H1=H9cIgY>&IXD{fBz&JtEv>`%CS{*A3S$*5%nUm#TP z^o?3Z!6Jsj%#He7J$oaJ*qMSe4P@~YzasAS#rDd&9`{CmvQ!y11U#*Xx7`3?WA=GN z5T3rK+PBDtXZ?|@HK9D7IOY9MV&D^it-Z-^+#QadXtU4khYL#J6zd}p8uHiIVLa(uda76pyDIN!8SjD<1NnfbA6X65^#Yxoo1T44_k+I z9DVq(?SPBv(=bky4>vSp1W<^{Of&%qLlA3>=Z2M`k8gO0T%@anm>UwWkb8MPgUAq? zJ3uP@*gq|VC#I+@kmq!i$@h+wCb0PCK0T)>+IBL?xOsTm*itt7GpA#8+JH7~vDq*g zMR4(}u@GC0Vnv5E>t*%rE1bDW;{?%i{KB>`lWbTjG>hCXvGjCVoRW{WUUR_R4_1Ah z47DaqZY)j3yN4!Aa`s4$^6wG@UuR}0nt{!iTqGH^zQ}Vx7Wn#^>GG^WE3wDUW}^ZD zb1@bJ(fP<1n%$e1B%RZwWU9e)rq2ruXcp_ zjbek80eSNX2a?KnIB^0oT~$*@$TUHbrgKmSqyE;@;KHDtEJJ4e$ndwb$9n`o-oiG> ze$n!~#tta}f0%+b(0!b#;2<;ZF1&&Hl%qyYKX~0>ZFnx_u$d6H*ajzbGB9Da|IwR|DRC-%_ zXLCm|-1s6kv)|Hm8!6i(d(L8=}Z(jD5&>(Gr}OMyx*_Qv9!~;>sr+o{&^u{+#sB8u z5kxH^7*+RZS)9oy(j;sKh!QK*ph@vBk|vWa=FUp50r|1yX>!Ti3d?9t1`Qv({URl0 z13xKcIY2^H6>^+Hd{;M(crDMGEmK!kH;yqmv`JbZ3st#mUnO?IxkWGSzREtbl&4UR z8SS6qqeAC}6F~KdbPZy1wpfQUYRq*QXUebIS^AXNOaA281c-9Pd^hu!E!L)`l_va3 zno7-a>%er9Mi9_IoXpoZF|fNf59Sb8qELzjJF{iocU$M0-93V2s1S5~KHR9aZ$*hm zmzBEN=;7%+Yv%8)wM(}i`BfH3rwT+V*AG)6qD9aL+u-LU4TWe)amOcr0N*mrdF;X^VPZk3sBytBAFC_fBGuQGu8&g$OZ~PM>a80? zRxW4-yQCzx*g3dd`YvR23OFY|8j8eNrA9Z-+TZxqruoWGN0lwqqJrTau&aiOs_ab_ zk1`S57Gy6}uV|5OV5cDR6EH?8&UP9Qt}V|s0o}SpXW@0Ta|RTd>y5Qdb& zIx7@+7pH}!pO>A9v;4+FD{*;mc_#NT`SXh1$QA!WC}8m7@&f%(gnFKM&|yQK2|V#m zZtKGd9hB5wtnHR#YkvP)Y#%(icE?*jCnMq$AW?6H^ZF@cXNN=`*W<$wN%t9-NyDn6 zg<&2e0vRR{P8Z^@n9LBDn%Fn~QfNd z%%)a3nj6G>tP(6~>Z-&og3g!N2S?^p5c+h!4hWYSKovg+KN5T}^6rz|zdE=Vat!r$ zodH?VO98@Z=_>0>#+`%HwTa=1mF639OSU+tJ=p4xk7#&Q6Htifl%Q+nsuLtyZLe;b zA?}~-ISU88L1X!XJjI)weSz5+t!LAv=G$9f70!j33_8GJTVyd)CfQ_!p#C5Usc?MY zuXX_pM%3&VMIV;R56IpIZj3?gF-?>2TWDQ$IzbV?;Fvs7Sj~>UrIBU9rH-GDkhW9d z)ZJIqOYD79QC9QAPECOZTEwHAYUJ-E29@(=RE<=;@OL?7#6jiyJjQ(_pv#3z5nbw# z=tPxGk$2fhBZ(V400!_m5i?CFgZm9Bdy0Cag+*pV9O2rT{0e`DLWFA@;$Gw7e&Cm( zIzQW=1lzTnp7#k6i-p|>6!jYnzL#Q^g#S5(x*B@EB5O402x4WSEt6DJ)DU$VPvam& zgnEF}qYd`Du4SmF#4>?F-%^zp*&H-TyRI9tMN|-s%E5Y2bXIIf?Ijx?zf2EqLf&S| zq>c%USBCiOf5NV=)V7F-V|ac_NhG0ae3By}E>VIrC9AT?89IJz?kq;!t@b-XW06pe z;kx}a_x#=vR1yByFT{_d;PvvN%9u7pLAl2j(6CP?)%b;1;5(ljBNgE(MTUXQN{8aF zBjdPx?e^&C*AQUn(cis2!1nGDu`Za5Va$6p9L)z5n1#5UHkbp5#wg!Guo~CijU8Du zPmHKNPOlDIz`bZhaTrg80$b3m;#LQlx54SnT4}N6XsSd+IbO1>*0)2ziDl z`UQ3)R*kQ8@Pkb5&A6J@cx*u?rLRyB!t2^G?z-XNF7Bw^cNET(h+lXdb{hBxNMKT3 zO{lFt=VF}N94?}Q{OM7`R;M@>l`$o%yo`a#<9GrvVjgX4B6r?`pmqQ&H>WRxna%J1 z%`Ac`ETF47-m9X+9WkS8lP@!)sz2zcV;iP_>?*i?*t)K%=583z{B#=pc-@Oe`xUO% zc~VHocWNP!{s2|NZPf{#Ehd9;qBV+ z@$&}7JNz4v1CQ|-zE2E$Fs#mU<>qPSdv3PkXgh43e~X=y5msu(d=^Z`^r%H}Cw9!o zqhqIa5`3N}@lzqJlR* z$y|6~YOar9=4q9CMpqf=hhpaCM#{q2?)X$5dR#HZW8LOW~P7y&l?1*n$kyrp48X`zn05DWN0$_yQ3j6)Z~r z?p_!WdwM74x}pgBynRcmhh)(}fN(?uqScCXX|Z7fi`gUp=uD#i>8OlXkTf$mL1eHR zYb`;r_Iz#GV#?HXFlS1L5l_?;qK~sD?to{4af6%rT;E#z{Tb-WU<);oXL(+u*?$np z|26me6L*95gOHZAGWG7=Q0+G4ays>y9Xe5z6*=ez83@jgPTG~f*g1xPxq0)8litU$@ui*+KSo$V^Cve>VXNnBT z@-@PK9gg@ea`n9cpxSC-Ef(GsSKbyIP{dl4xyDs8UMdNv7z+2tnPREGxvLejxkz>~t|kCe>hQlo+xzy#bjvk54D37-8|7 znJLCS492e4)w7uQk^UR%WVLE-l|HokB&urj0?msA zg>Q)a%4CFAd)AA7MBb~HM&+xsc(50Rn?P5hOq}RSzGR{V${X|X86AKU-_0e2@DA7H zPF#DGX_}yL5OOZkO~ib^X|?Uc}nrqBnbp8#!~E~)yG(Jj{TSiJ*#&|8xRjYY4}>g(VG|?xR5Qyb7@K$>MhZ^9gbO%Q6J%mq7r&ep)I0mNyat7rQnes+0kW zzSu|CtLG2b$J?{7M>_g#?E@AO9*3!AZTAR$G-;{ku8P@doyI;HQ_W|Zcl1E}c*euJ zbm%IEhk#WPj1i@esBrJL2I2Mfoa@i0ZQfEEd*kX4Pi(^IC-IW0JVN^$`hZTgSwL<$bJ-b^iD$B`APf1FTy7 zXl39V50HwR9ix2XY`dpjkZFvX8A?Zr3SBR^y6Q%0Z|Kv^<)xo171mHA1_R9ouANNs(~B*dJ!Nz|Xd9m9pOxq;}| z79Ec*<+d!d0nkf>>_+_~Gi<(7GVlo4uMLtg!PkM5tfX7GH$pahD4-7{<`8z|gn5xTdZF>eSSA$Vu?dEAH*%ia z!`D7#Ut7N3!4aciRm-th6ZBHU0#B#L=t*c)G+%qt*YsW^oVFmP#L=0i%w>{%JAd~A zhA;-eUXVs&8;%NtA(1xu8QizgIxwmnK@92JpnwE>>MlN%^jJLQck`5F&?50zq(%55 z8YfNi;xYVp1dI5?3)+Pc>R_Vr5b|jjNtb7#tMyVVL>*#54#I!XDtk*1$)hYzMuvaQ zd>%Dw`+6=Rz7WsV(jG6%W}r>+**3!d%EdD`cBQZAy1nY1)b%~XoU7?On`HLyQ)~rP z?4ySfbMsZg^K}6R?;OL44P2eTyZ1Xu5riE0S&`uiDjp>@ojksQ5iH!qdxC}7tG=rb z#-89h$-RsV_?jl20L}2dcn}H+wpt!jo@9HzaJy6{RuGa=x^E?JlLXl?pz{m{W6od( z!N`?cx$LA*27jm$GE(GCit|Sy!^Rzsvb1IT<*ddA%`k}XX+B>F?}%Q+hmy|du#cP~ zESOL7b~zqjUK0AwtWY;+N)GbU%w6+mpBu%cPItn}b}Sxz1oFPbrr!U|LPc1d^ls!0 zgX2L+=mQ<>jFb~)K%VGC*&fO5{=W4g#=&Tl(WLXf@BBP>JTPS_$l1ENej5(kE8b4h zmDFQM(zC;>0wG6W0MIu0ru%2^?I$Eg?K-ZOoNGjHSsPp?ZLR5myguJ6!W&v_@PPI1 zaZY>9c_ZNq>mBkg_Z}gOLunw05-YN<)D8g0<7}=wK4rQzKvFg3O;SQd9=eMr23sZh z{!0{TcWqDr<@@~a_sE`3n>T~)-p|c_r7d?ud)0|tjG*C;mQ()9y9Aj$YoyH+zUTSM zudA$p#_8_gy7E3Ly-11JJYZ~f0}OkqYj$9uBpnnkC&$=((b3MXJxD(K3&T0KUNS+c zqpA5rEKhFmS7LXC-f1!rH+o2@W==a7V7JHfd$hb?B>^m3Pb2;rFSd{97<5mVOfCwi zW=9DKI1%h6c3!)mH$dtl_iVKD=&y8)O0QW~D>$TmRQNxc9FgB4 zmqkgi$V5F01W7M{&bpd4RXeZT#H{ELz8=Q9MibbT%7&egw1izD>+HXq+kRsi0`#2) ztZGIPE!1~Fh=XrF%4|RM^i>?AgC8%VgIk=#d?YWu7zCM7#bHwEHFI$)++?mY1xUGn z;RlG}w=zY;?|Y9@$H(v1Z{_5R8Gh`T84mb4+eM?Q(QAHmgkArgBi)(HDzZMJ zzitJ}#*yc`CFl8O3;@^Jdv2Jqf0+TdV*U$%@-S%spla6SbWf0WXt?ejB6|-*$+|P( z*&cX+Eo-Cnb$ZVHP1?M_p>Y*ZZVBssEN^-~^$@0Zd@&HM1ropbXd&G|ppks@?Du@S m+Im}i`+vQ@SAq%ph3JU5nDC{o;{4CmQE_1zp&9|bfd2)X8uZ)% literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-timing-60x60@2x.png b/website/assets/images/app-icon-timing-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..47f0604f7488a8345a2133c802b9c778614ec1c3 GIT binary patch literal 19193 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

Wc!HzT}4%Ti6PkKXWVfMh~np_d> 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 WByGX(p2+rJ8S$6};i;ix`2PVi{Y`NI literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-topaz-photo-ai-60x60@2x.png b/website/assets/images/app-icon-topaz-photo-ai-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6df5c4d1aedac8f174b4f364f00130b29709a7 GIT binary patch literal 4809 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-topnotch-60x60@2x.png b/website/assets/images/app-icon-topnotch-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf0bfda69c2700926b97b097904fecba53bfb9b GIT binary patch literal 15578 zcmb8W1yCMAkTCkehdT)nTtcwm?(XjH!5u!_Em&}OcXxMp{cwW2hTzUm?(W@Py?XCe zy{(#^-jV51pw*;g7_%79|Zsa=0E^|A2q~3Tn^-aQ~h#){{#PHl!$_I{a_onP|vm-xpM?^kmtCwne>dRJFhI#*^o zJCGSYBPS;(Jp&Ux6BF$R2d$&Kt&^b}t*s;Je>U=ewIgEUXausbce1dvCH~j0;SW1! zC*H4L|8?}=*MGjJiJQg$^knP!Uuu0QNdJ#Q&q&8W|KDwYi1PfyatYg6+kuqr4UJ6r z7v_?B&$~35)vDV`FJ4bs6fx+v*k_9T|!FZHJd+k=0LYpiK$Y*nB~Z zjV^6=YHG?b7L}cy9krpM;fBcjX0|f`73K{w@k{WNCVY+6QkAGY&)$W)^(+=Z1PR!(D-NwN5 z&^G^`qcPd+a6Fv4-}L;`X}00AW^?@Z{73%7Prq{)PdC544~Bm!{w&YKnCX6ydYoA8 zwa@!ume;e(%S-hs&ch60mr@R62x7DBx3l_bADzcm_6;|q)dmZ2w`6gLf{+!P#20-p z2d?L{dOQ7A(7rGCX+^!Qd#-V5`6ixiORgm8`!D|YYkq$Fr{iMBZ9R?ygFy9;9n8 zy*Sq6(5!xN+6AVC=y2RTcrlYJZB5C_NZQiYQZBNTgqOXBf4%)$e~#S;WVO23ZX}k) zkBVHa<*4NG8f#X#n?#Vfnx+L_9&p3OA(AFFBDFBEX1GPUFI)$Dg2CSHbMp86iG-W& zv^Lx|q>=DuMf0<>u^X=!uEp$Keeo-FbT@a6QHcm=Atkl>nu;juD1H;JT zkAmH5otgGixBN!xo6j|WA-C(Bxfmv0>)t2GZ5LWXdQ~(YUeX@~$k(3$X<2Q~)c3bm zRjmgB)!ye;U>Dz^w&dbX&R3h`4pMpPaIN-&7js;KbcMZBHd~<|_QaDMMT&LGSkZL> zIjyyvk>#&-c5k+A7N-OTuQ~jZzfiC+@CmIHxWUB$ht545W$|C&l_tEbZ)yiW*Ll!3pW*P5@Vk%3fRmG zJqq#pE3cEA=%svJ-hAaYeNKzP^qs~=mX_vnu)(n4%cGQx)XeNiX8-Hf%EJ*sM#idH zrVaB;^x1}^O<&GOT_!D)_hOp4=?<^ORb{YtbSLF))Xf)W?5p&%*nG<)rUNeYd7}X2 z$f%;OZ3x7x>!r-hw~IXbqUr4Cu!c6rK@8ol*K@mKdf&%!GxMg`ugy!!XeUq;E58o2 zJTE+LyB-hT-&&`=tFRt5LwD8iW4k;?#lh)O+!T?Pwq|4X-wJJ7#sQ|32i|!54NP2+ za-2jk@@++O1^YJP;P(|T$5rNr&E?LS;!U1yg5wF+;sV1-OBZ-ypV9K#Skde8l;clN zCf?*Dl@VEyTJ$x?3o&xq-XN~`8b|QDJb#J{lG+k4D*p?^GwiU1xWm?}RrTwe&P_HL z>9U{b?UF2-@9Ai`>oSP`!JJO=YK)a$mc46V9$XsIJt6keQsjwYgfWkiG!=C1zw7qe z9Gl10l4pT7fr5kJMMr{%MWA>q>!oB~ z+g<;>^`BOE`=nkWMCT_}NiXTXz*@ZKEm#<6q-$~{%o>cf#zMvPxoHUn2$5-bg0Tgn8%OGa+yDaq<@o* zU@Pu5Ygc;jG1ppb`}#UKs$RJ3si&tH%S}Vu)ZWneHvHQ|9rv_^c)w!qw!~R72`vR>Nn`=RZl|Qf#|2R z)BjQU{{DjB z?PP6^6HiX|wZH#>g=q3bEUIBpm+i*1z*rG+Vhli+yo#i5tOPm$kZ zP};)17u;6GY9V`Q=^1P&ILQQCJf4f}p|H{;ERzlaJ^XlN$}Bhp^i8OP34$~>a23bB zuwy)Y-f1R5jzTGl_mGq9cAO6h(vaPJ7-Gl041!sx@ZzM-gC+91ED zF5lZveA5pd(~fGRq_xnq7L4fsEJu;dhxMCd^JeFXz9t~wOM}7K6X_!H`q`^qK4~N@ z$4=%IA>h5?O&vV$DHjSezK^&FS>5`l>$waWvm%xHO6XP6^TlqyKht*oO*M4Wajww9 z_znL<6;U1XV6ku+eX=dylw2$KOD87oO86elo4HpzM2YA!p=!TrSY z7_K7Q{Vf>zu;{+?Y~4lL3OIuw*8dHmElqFioGHdJ(8z^9z}DVZ9QVXVIR=e`Qv(4Q znwjFlepjIHJ8P$Uv!|w&yvugp(^WcWACuSy^c&31I_MP4RBO{%Xl2m_-B^K%1$zTZ z>{~GCBXTdycXD(&%RQM>B227+K(j-{A!|eCz{sz~{V9;4fLM3FU+vt?g94ZDKD34RFbwS8^~e7{{$}77az&nCKKW!rVy6Bj(WA)s z)AZH2#crE=k+ZJW?Kq3GaL*q5v_x50?QP_+6vn8SWviU_XBM#4D8Z3NdOC>BT0-j zh}a5v6vo|u8#WDVl`CP7KL9Qjp*JnBbXg3j z*VLDPL_9)vkq4c(OOuzw$%u3CWlSgNHgIM}&+9aa(Wggzl6g)>sA9BP`#uAK#qm8i z{g}$#B5xATamAqV>OmqrBU{|3h=H4<_V1NH@v|Yt--Fay&2c?#cmUQ8f}iNs==i|v z-@Nod%6S5ShskN-TC?5ochMiwZIv*d;g9m+f zN5V7(s^`%G?+O6aJOx+4(L!audt`ZrTZE^^()V-}8+#KVh8%1w1HzDiBzs1$t~4_? zuA@AG8bfDoK^$J+kO)h9HbWIBpsERi^vRm{Vh|YztB+Yu)WEO6suHLgjFj@}3YV`n z@Msg?g3=#eh7xD^h^f;*AjBbf<`Lz>PTr{BXOvE&lGKQf1{I19en{J!nVSh%Y0XJf zxwz3I58KpYz{UT11MX0Bb%Nj+5n6}H!7(`B%j{Oo9B+`U9Vwz>4!79*m7|QkjBjT{ zcpD`AtwPqpG{f4i-;oxfxXkj6?4F!EogeyAbKuzBwRzd1LHe_ZP+u+0%+;^XEn}OR zzLm@qx+0X3?E}(AW#NMob+Hy`)Z{M@#!nFl`!Tk+VlZDX4Ps$`UOISXREiFfURLn` z1uU-2C#p570{xcGSb!C*30!i{uzp;ctdFA6m^RW%R>I|X{kIGQBCMRMYD}apB7?uO zasbgCdq)xb_#*5!X#v@_e&Xr)yHg?Jmx{JgW@J@$_UrRA%C5!YoQR6~^sBw>pxr~0 zqtR3M2DjX(L{5CEq5J4Zbj^_rcfc5!@-S5Yn$KomL)pQ z6qu_P*ZP`5#j1GBTY3dd5R)>PPkWk+TiYm{U?SW8ZYu&&9W1&Zl_-xoij zn%>;CQ~i3h*NP?Km|`d_uq1?sjvBN~?Xd`VwEe}EFNl<{H3mEgZnQmG%Ag0H>Q5ej zt#2Y0w~YV2cjFx%@tLxrKOv)PE8M8^OjakLf@q&SGBe{(OBVFaeUl}oe2ymwJs{h_ z{in9+RjB{F`ax5@KXKnw(S?B#XZ8FzJ;5rfIeJc;uzGKW+Q*D@&eJHj@or~luDmx+ z9D#8o>ToUKbRf0Ls)f>gj5OF&pAd=G05R1{We4NW`jhFa+F0h}jtucDbJoe4cw{uo zC4Qohlg13ZDaOgqAm}s7JYegaCX-Mi$wEm}DuRyzT&;^Xb;>qEv<{P>jbQOpkAD*j zSH$(U+?>x5M3Ax(Qs>cW!yOrB1GT@OLAfW3fBTA;8zv7^Bm8k z6+W9J?$F>ETV7p&=^hQs{tVu19R#95Lu~s367QE>1<){dz;^k(mg+=Q6g!xRQnbZ<>CrsuJ6ix%hjTrIp&6H zmj#nE8DHZS!?u_m&c0y-$BJPb42`4$s}e55qD*yRPOdC;N1g`4qSw>NVFi?d)LN2S zOm*DCpVEGCnVb$$*20J-G@8*Wmgp2ro-kRfb(v4QVUIt@`8#K_1~;rA6*R@kG_v7S zxvH#2NSqzB5OE}}h{5N_qxIX_IW%pxW}dP;%g=B|$L1EX%xAk}^E<)w?0>Cm+heq! zU%)Vj)+fos3JWse-2OZXDT@Hm4M*ksFw#?0wPLWNjg)r{z*yMmhf^G=#DG-B9xQaL zWIMQ%zzSsiavYGCd!&<~+JoMMY#BtXB!|~a7C0+%;U9p{f~$fYrR`)6X5+xdW$kx} zQsmG(hmMpKGpdIr9F#A3$dC~(Al4Y)028XfQt`9#_0jE?-Hh8T7Sb++h9 zvyJtr(V+$3sf-$MqpKbGHBvKY4uam}DOd^{$tcG{4!e+2JU1iR9-^NxCNu(hfJq}Y zB+|fN&|c*bJ*s##HB|1!+KjQn9Ag#*tAPuH<#Q9^i1)rvYw3?j6uWHr4tfrani&|n zzOFC$*z&x zTknt?*tFgsa59jI3}oleUlpr9Y2YRqNN8>T>td^0Nx!@G(tGQZD6Bt$?O`TpcN0-_ z^jSV0H3`mS6cGz!z7!NH3XGMKON<{a&d9?~!B%6O$&kN=0c2atYXWQFjRSs|f7aDh z8$%La5oqunL$|_A_z@cHh%ar1*OcljkX=W_{?n9a{JHJwg#2an>( ziTVu5A?+?Vd@s-_X z)n&ifrJc4`0a99-F_L>Z1$KTiGWp|-95M?+MF*R+m&D`5S}R<_049Hk@;#!_p1;1Vf3KO1l|^FJ=RV2DVsGE%YFJGK`+LnY7tjM%B^l)ExSAlqPBP z`Z)WT_Z>Z9I2Fv8+0p{P;pe8uVi!RD#3^LK8^}{}QdowHvFN1Z;K4{e@9to^%~&5B zXCLai-+p6h=;Uua&gNIc5}o+AV)fgQ0Wsp#`GUmeZuxYZp$OHUvRwf%E?T}uQP7ZV zAMhKEqjb^^&xG+N#2LQ3CtcLg2h#6Yo!kGe6u18;x+dIbGUf4{t`bE>Es^rXichO1 zgqq4}UQfjYTA;%)#XMS}@Aer{ett-1+{nKxxVMBqm)_=OHSER7c{`T0WsJ4cdfKih zr@33N5&DyPv^NQV^Kes4eiIgc%gkQROZo&&5038zX_EvPw&FVkkBkU&n8R@`z^nX9 z;Yd5Sp!=|opH(-lM*~`d*C!5XDbDa;5NG=^2H4YR=)5X_e*^u+ zDv^^z07|M}A{_)X%Ve0NHS!cbd8-_>n60%u zJjExo=B`*G@OW>fZ;Wz&;1f8IHuc)79!ufWug~_JIC}l*)iHPqn$u~&FC&+a`;<&_9)vp0ZtZCg|Ft3KRWvu+4In zUprq!YikOft!w@hHN*g+i^S&o%DbD)KyOTSd!HP#jfcD^KkWBYq8aiKRoobKr}Wkf z1g?WA;Y0nzAr+tia0*}xtgA6S>?_Mn1+`1(5F*Tvoo%hCgfKy2wvs)B%-YxaJzhTB zyLLFl`6EmX39$D5;`Qonxp39_ot31wI<%hocZwiY`0hmj{7!god(t#x%5E-0qDxMr zfqTmulcC>cJcHR)ONVHx2dA+o!z|kR6S0%*On{SAbEeex6nmdecqr3|jUK|l$MhT8 zfmD;mERsPp9p%^ERywZyLJLS9Czk7^UL1WVh9%!31#-;I{lJ+_+m{lp^g}PRqtR<~ zX3mBkJI+Ef+ULlq`7+nwmt)uTZU+y#$(%F+E7RT!-o?;(Nh*X~i=79z%ldNU)YKk=I=>?_^6-eNoDcWn=Lnoyyh;z*d08c|xja0EQb2 z?!>uSPlSDB;oFU`>to?FN|mmM#_{cFZ>VC{`5T9t2=B$;igk zJ%EgPCPCC{`-yT+LSZlipF8{87bvMp^5wM=-w+BMt1bTP$4>6i^eH!3r0PcUsf@r^EeZ|cb3(i5&M z2k{x^ZGf3(XHi7^OW-e)o}&8i^ZK!BE)qYpY_qMZ{u4{;AVmk|M#kihx?cfn z*Nw=abfMz-#pc^g6{+4V+gs1xe37%P#o(W&ViYWI_j-z_?;zxUp!`wulMhFg{-gCQ zdlbjA`qQ1!7w8`t13KpeN}6h)Hx$gLuM$DPr^*O8(Xj6~-@Lyv#H@>PMt*mbpPGae z9Q4th3U;0l{}|6D@H@(N<+gtyMVenrR6&ao z3c7pjK`#WOyr#^DtST)@@6qs{W@j8_|NQIvF0kf1eN>*Q#yg$-C5382-3^F;Uz#{x zeB67{0&-fmhNix@E&9$x-y)i)&raYyYZ=|)+>1Sb8(N%*F5WOrHmMIFE<|y4N?A0# zurMH|8pTEb8 z`*Ye`NF$#{fpY}j7q3-e<6l`wWj}5RE+tD^anAZ4{nG-!mx)=ta@zTJL-?gU_&%@N zC`3~}l8mbL;@1xuHWhvh-H1tA6&?L^iyXGmt7Gi8K-zSLxPh5NOdY3*~=*GK$;#FOJ_W>kKL$bL0fUEqOo8 z;x2!mqMDQjM4ZqWC`5~dOen5!V%?2kebydHr7cz5qE#9#8Z^(&K-6DNBi*)3Ye%23 zUMx0;Dh{*Rs8VMyTKEI@^nP;bBO*?8JGelGjD&PGc-GMJuq?(3(^(Q^nBqj$5@J2g zJLoMYpW8AO+$sBFKGsW3v4+mNJzqqAh(hldn@4ikaNK=YHSze?uNgr`DlAZ`-+RKTKWp>a6mFpv+ zL#YzT7!5_RW)1Ogd~%HmW)g-fOyyYwXVH_XgwuEbEl8onA8MRPRLo&=i~(Q8S{guZ z0eWNvI+SIlY&+hzgC(ma5Tg-8as?hU;*24$O9%7L370tJ#Kw5aO{s~t5jAQ{#gSQ% z{OXY`yI5WZrNK>!98yC@d;5}(E znwm#j{ScUf-=yeDu1DW5wXakw6hfcfY9tV{fjvi`A2ZgnoXZogiN^pX5d4)hQTHno ztP9?AA!2^En#`D!{7PW2V=)c(WE%rLgkJ(lML2=hr&deEeRMEdXXX!%PHP->x@(2O z(<-9`(qd#BQit+PRl=v{}lV ztMY;tm(cD!{Jko3Tsqe##Mr6q2!2ZVV^qx3@H&-C(pY69aZ0z8C(mENyDPUje{mAL zr5x~*JN-w_vwJBa={Q+Y_uvz?_Oc=chKPZ`K#p7{asWaIQOq^$z8Bv43>CB;Wu*=h zO)}}xVcN$={fQ(G{*BP~@hKSaI+v%fcad6!~-| zO8N9qg5onL;g6OU7Y~B-T;W>m?7ZoFyi*sd7;F@APM(x%4We=5)GIYy9BhL$DAH4i zgCksI50G6gv$DW%7BHs~`$@^j5v*vNPNIq923eju;ozU%whY(-fw-5&CiJ{JYMb_PO4%-^nKKThuQyg>-q zCy~dwX!Ie(GmbCKam}opb6?JzxBZFEk|cOe zDok?mCR2$+%*eBiC}{m_A6$g!4BcCja!)Ps>=bceFo?BVYX<4- z=i?3eGZ~|3m%}z~QyCO1J@lI&AnZ#O*?HafAoi?9sNNxM>nI?AM66 zXb&mN1>XTOf9)+i3Ioilo3BcJm;wxt#3%;twI`sT}<#WhV9|Z@bLWok{~fi_r$N+QV7+WR*D35;rR&AgRisC%U_Z z`@BnZ8j~wYi$R<_P7x*~HEO`Nr1yMR2tT+V&)V4z+<7u$kiX0@ND3CR(<}9DIFU-{W#ujswQ+nv;AXKt6 zsjHphtfmIVDt=u8!n+%q&vX`8+p_;8#h$($*qzBo>z9k_KjY4-75?JeKBkWdH51F_ zi`Zq|fmJb8j+^SeRm87@N3*v0>Hp4N;}a?

gtx^SPN3Z-y^fMICSi8;bo(r&_8` z&IyG;3Juw}y5ZNTpd9|D46>$wRpr3om_oo8^BR6iNXjVK z*iW?97pKg;73Tpn-=h}6@^w5kC=s=Dob1xj(&?F&0&cvu@XE2y?m6Sne2go%#QM{s0J0E~NVQe}lQWS3H~x(> z0W2Q&1voR!kAqIr6QCg+1RVsO^`s`9dF2I<%Kdv;5>Q}&v_#Ips}jBZ=zTAU(tJam zJXGcZCPeJC3$t1^@F(&v3@&GKkfQr#6~8+r|3l?BSR%N5gkW> zB*DRd7@FK%u+VyFY^o+}Oh$SHn&V5}6!nkrTh~U9o27#xn^4mse_}$Yof5 zF+Ip==ZVShs~>V68=eXR;8OCM^|inJ0^ny35;9;`QX5D}i7-BJ!L(*HId@k>OX*>} zqH?mWQP@!HFVnz=vHv9N7r5CH{O3yjRJ9iQgaVQnyqssZq|x@Vzz&?I1*3`{qw0@n zZ#%gqjL(OYy2dc$6|j}VQ5YL+DWTwF+T4h7J6lco*)uQHgt9^dRrAan9C;??0TOVg z0JZ*t6zGZ{#39<993~p2@Pm0;YIQoM-_Y%YlktAA%4M02<$Y0TV9rG0R=3gGPGf?6({)0WC%z`Y^Tll^ z#!y|AX*?UILC7g`H~SR26utfNeQRxaB*Fv#c-tvm9ix7%+og(^+G~6=-ul)7a?}y< z7j2zL@Ns)iZiHDoN}`6ed_5&e`uYkD4|tWc*Zjf^pa_?7@2lDjVq*;nG?L3VC|!k7 zW)8hlz-Tz4S@ny}LD@}o7&Ccb06lOgS;;TK#B6MXH{EIC-i};Xos{j`o=wqQ$v5_9lYu62`kWFP`*A<@5hT$vC8UK zSiukjS`cfr>ppcmoR{VyiHGv7z)2h+%p;i{Jz|_g8~YY$;oPkU z?&hRtXMt~W1S_;X#(UlfqlFX>k$b-(`xFgAK%-&`CHvvf5lqBDMw^ap+m9jTq6@Bk zCsYjSvVamZP%N8>wIm(<)#ENV)I-t6oxYWcJj~zXs0)!p^egKw2<^2r;K$z2K0+i` zV2TP?kdvXx0MfE?tbe+u)2~(vgCs=TDB8aOLfHG~@aVeq|Pfyu+(wnn+ zc0%D@rdZyVaA_k!THDAODz>g8^UNINu0tWdX9Q?E6^Td`RYo;_0OHgP3+9aD!=B&9 zl*?G@$;yNYpP47;On!q>1zl#2myMzcR1+Lj%!6++$-ybICWXJN^&dURIli`EE`TUu z!5~h12flst@H*XkX&#`hlhER(qSPt-NvG_qHe;Q$3?Hq=88Gu7n!*7%#A2;Tz~=AHxO$^##OhFk_e@ z(UXttHXn{7=$Dk0z-En+Ia$97H8=nM+U-Hd`($&DU|CFm0hddL6J5elvV~V?Y9EUe zX~~hqYKjEep)ew}!r@L-rj_riS|4$XF04xG68_;pi(J8E}9{6A54N-x(Ocq7=SP9F+@g{hG7;Qk74n z)^K`aOxP4l&IodX*E}4T`78F!f{MkA6jpPpW%nzy4Q6X1THe;us~&#@p2V@dcgt_n zk_rDHP}MV(jhdWjs#q0A1mbLSWE^J@1Jt$z3yfVw$12B0c{PNf%9E_|mQ(CO4rV_X*K9jMKy9sW-$J?3>4!EVWY9Hmu_FA<-z=$!qUpXcDrvv8v2|Pw_1s_Bw$2#a z*?0>pGDJXwS?xTyT!QvyRA%ICU3?z}AqoEBA2~B)K`~3k-7E0%Q z73Ni656KfM^$|jH>|2h7i@Eqb>{`$T-zhL#llx;?V65$@GZKYC5F=2tH9ALWD`7PN zMIiwPoh^_ORU^iU?f%G2|E65u($B8Jkw`f6ZL~H2(u&KDEd&XNTV6h>0w;rc*0Zz@ znl5XW&qPaQO^|}oP^~s0(9YZ|8q&ZsXmBi%8s4uGb4yU=V>hB}MacVNUs)v;#@fT2 zA67deiW{^WyQO{b4yJO-iIJw~5=31Z?he~VSIGyC)(6l?pgh}`ViN;Iz{V=uVT5va}46T`Bm(T0d zIf9>WDGRZ}u8wWrn zll#h)Y7g;xG_0zA++P@9}CFjJ9W6vM+KFV?!}3U>*dTDZ-Nv`99 z_$Dig%Xa9RsJ;rwt%~}olLf9V>1yBCQ)=DFBXM`T-}fYuV9QqSYA_B}20jE?xEgD`PZ?$IM6ilQD%d;=B(*87AaC_$aDbLpW)LdmI-M z8MYW~WvZz^)3qZhUO^nZw0bTr)i3V$UiUqib>}|fBZt@1{QNe{HQQ~Gc?{6pjcYgB8u!K9JI6MzHM46YW4Y6NHu|*2666D*7d@7qTy}N9a&0tXx z?QKBKZ#$AX)t?{Q#@_$h^S=2{CrhFt`Fyv*dxSmZm$QEBxNxrav^6%~yM`!d&vpjr zc>NvZZoGT|yLRjnC_iW}Nyo}Z<=anT zxP@WC%)p|a?6c^mBP*~bSa|&<|HAN#b{l1QONRU1(ydHYj7x(RAOEyD`r;}rVPCJ4 zg8#HS`IP;L5U-7Ho&7Qv6qvYq*VJ75)P0o~PPfWb_?H->9tH4Vx7u(VZkFwR$A4Pl z6e9U%`v-Q8pWvZFs*#Gf$cA}ChAWxFUrCI)4JjR|dbx9e^jEw)w9e-!TJrJp3nrr3 z1X?P%AA2FY{@MakqbD?qE?ll>f{Ld>pPII}7U@v3SnVIuhz|ARZBO5w7s{vK>Iym|I;<){d|Ynp|BmBYghOd=6yV} zSg%y>6A_Ib)n^EXbpKRhT7(M|9GuhyV*34QCY&ROO*|oOykJT`a>2#b-3t{P%HQY; zIN`+F0f#xw2`hU^ERh1SwN0Xkh%_7`#9uT!Q$##7TpH*bb3xFe)1rFlxbk`#!vDLx zay^F5zom|Fk9Uw0AYYTRX? zL$5q6s1oxo%OAjna7>WhJ*YM14vP0576iJ4d#s#oB`X(x7uMD%(~2;tqA`#|ciMB= z3)toga^BslgMu0{rb&j=*)8&v_PKy*&L6oP$htXOKDQXZOrCS0y&JOWa!TW{dMDHM zdE7t#ND+D_0=Xir7=oO?V8~rU+W(O6$peJRQ>(dTIiE6v8*WSKF6!VY%P));qbKqJ7hC z9nG>P8<(F$cTV=sHSzyK^gZde6IfX_KB35L-OO$Gz#CzdU-DlEl zMUpSyy`|JH^(dSDIo`RBPoErZmF&cWyyC1Yf3^RjN8m|IFRi(+RetQkeXP~po}a(l zZ|D2G)~#Zd>S!ie~7y3(q{zH)dLn&eR`=4mvmtA%Khpj+QlpvoF8i0_7jatRO#2|Vw z^?3Ko!)|o;OFq$S$?-=}w?vz-tVba0%v<*qYa@l;k=x_AewN%vo*w*U7V4PZ(xwww zR=@MTh*?le5p;(32j;4x<= zYhiECfQ*WID&KH2$=?-P(Y-!R&vdAqNuyX(}NnZ-xo=;z91PH$MO z3hBN`@15BaoP)f|QSPXE?0Q1K_5Li{oZ3N@Bpcf+@N>60XkwDx64N`-zX-W2Nxse@ zjeZO4KDjGRGB!iC7J1Bx0&?A1zWX#ozDOebRYvpPEz9rUPz3eM;jY2(*WU<1^*D`@ zz)l@(@rriHa_*5v*ZtzZ56cnRfRnpm;hgMdSH3ObNwga6i&vk(2l z9{{!DA-;52hm(o9x4E9KlC8U|4BpP&h9KkTN<07nXg?)7>q_v(!~9%b+`N?hl*Rr; zDAD-?F+vRXC&c@PvY5G^0ZhZ)lK@kYLCPS-Fw8I*4DD%WuVjS1_?J2TOIgg(+ncC_ zK=}Il%J|C5xO+MvWY3>Jk3h;HC%>*+-Fc5-)v z9r(rDxchi3i-{d{^!M|7oCH6oe|mEB`YSAYfQSPPLRJQe_}e$#6n!97(r|Zi_cSKr zZ3!4z^q;_gi~i~5H`>6-kKkgCb#f)RdC^CNIVUUkm(hRM{EwDb|5wX@Y5uZABM!p- zSNOl@_D?B&axu(k#NP{rVFqqb(zgp+w>DPI#1Hi2xrO3F`fyl3tLutw<>-qrDl1uAxtz(O8&uE z3U~IUds3y=YkLMIjDTYZQV=hv95Wr5K&G{8ro|8)R=za9oSvNx&T4PZXWrx*9v%)f z=uw&KW8jtME+R=SSUl~pIpMdyIIa_Zi!+F}u|h31*wE{~#HdehzXuPFzC?<@oSF?c zZkk@w417!4Se|;RHV8+8O-jrw1T3~v4T8il;$bCN!xX){079Fi94a!!;un5PtzVuK zY*J+MjSsn}l0($-pzU=Yofn-6g>Z{12Y7d8RSk`a+vM#un>;nZbH>&mHNvb&YI|zJ zC_O#yI`^b}z6}(c&5C^q41RG5@Lt1&hCO*OPcrt>_~Lzmfbn0wM@D7Y$)Yz0WPO)0(K=BgLzp#bQs!5k@6h*&{#h96s6Bu(o1p%oK!Hb*jm(k6zKsS4 z1!vRNL&5bwt=JN+qk+1zP&Os};EU8kR%0-a##AtNDu3n@Mh8kc+}zEyFWJqA~7SqBLI_yN%57^c())|Fp)!)Iq|gB^~YhCvv$9J zNYAfrcH{NwpxqKxac;6B5LGpr4@=@&p&F%0VFUtnIOpdp8AZ#0VdQGp zDkieJ-SdcN1fvv@IO9>eUiJ8hzmds)ETW}J!KRb7AdXWNnlJ^m^P@E%vO|Hu6Ys+w zXk_~92zI8OFhhl;SCPE4d3*?wiSfx1Iqzv(v>VATvi^1RBFTm)#0Fkow+y_r0iai18mq8WHTy z3xlQX9=S^kI}-TW&Ift+ooQ2rF2ci!PKU$+mfYsTCv(*j_)T>Mc zPVJ9W*hVP%F5)KRB#GdShEnu!8~-=M!)yYN z%dOu1sJ!b2|S>oQTLwQ+w*ksnRyYLTAzh{fpgB&tb8Yu`-;7PjF_Ig zVLwamkLHE;B4LXSr{}8 zW8}E0S1jm1NdYypXS*?)zRYM_jEAFZ-5ff@W* zZvP&C)Y|GoPA)-W`;j5Ux?^Tc$ze$M89jZ$lVE5by8>conyf^w%}-pdw>Ev_!U>P+ z%fWQNR~}kgFOI#Mr{`HbEBdy>#|*>OuOHyVE|TR-_X*1vuA_s-dv;M;G651v@Ox&? zIy!_8Us5h0C|5f1f_$VpTq?rqX79vn-?GWguJ@wVd&FQ$OopFR&3sMJ?iSdyS%(ix znuKW0svDpwsK%DJsuOPm2kuK>vyr&@ZgT@|`O@vt{HL<4Tt=wxM^sjKIbLJnweJ$q z$ZD$Eb(BXG^o=6bJ)l}0Uu;%ZbV4)!7>MWdWz}+5E8P05t#wo6k$Cvh@biM_Tdk+B zS8Lt;RU<_DJ|ycf#CKj=XT2*^Wu0^54Jv7}(`vfAw@mlZP6!tnhPYaZmA0%i*DMIF z8cUN6+VOkg*pnNIO1Byk&4#OZ&n1l12iNz3H(4cChT4b48cQ)anI(^gh^7jUM`(W| zVGIeCFCvLn^m6t;tZY8-g zOq*-yn06CFd`0-UstpNK)4?wIX@{yTg3-#DW?UEc{C@dv(nlTW_T(0 znqTa0{rYbB>eVZCaubp_^Y!-~wqr=ju#%ew{N^4iS8H8dgc8PpGHDXUn~(nV`Stzk z3*V*BRX6wE4IBlBCu(t4uC}_`xsFt6C$w)%W42dPHkd? zL*pH`D@sXB{WOveGyx*@jB)v?nZCY$Qp#sHuOA_O)Ng6)zI_JJ$vc;@LQF`zHqPcg z^&o^k!t3+I9m$nq9aKFhEH+%H%`zZP;9P$>z7e-LuPLk?U?Qv%RM%Y-JV?*olz5>n z+FVcL`JeY-4`#28{cNTZzFBN~8Jp1kGJip>QDd`8{e#^uP=CsqX|eQ)Ln3Y2*mrBj zi)~xuJ&fiqc!}ENuJg=kKToxQax&^*_WjR}wcwQR29#ZW-V$AcnitSy0pYT#b-}w^ zv`2+jsiPx?^xbzQWB0k5#E*B$cAVfEpy{J1Utp10*`lWzB04bYiC+h_@tq$ND7Qpi zW2y^T`eED4{rKgb$6kG!CcG*ery&~v`;(!qS5sk(7*`y6VV(Xzqke8JrX-aU#>GaO zJu_b8LCv-K5cK)YEi?K&7j{<%4HmU=t2*@F?t4oLflM5;r+zVX7r|)H-Y>JGK}lvr zIfkV1S@{QEbNPI?)+`bC<-O+&3Yxc0C(o=HRyq$9sk@Tq3wNb-y%Q7~^w_m7l-;-W z5P7@2Y7}9Ih&~COit+if+|}YD%+zFBZ!(G9{q~Lg$$lq&!~Gp?h3lv@2W3`PQGcvH zctYnouFv3(8J{kvzeU@fo>Rr;XEtlW+|g(HA=&X~VJd~Sn8SI)O=3Q6BmEY3S2a|j z)@)|%qG458HR1UFReKQ7BOsuTn-1Fy_CYG-aD3^S@3$;dNGZ$?2}CzIgo zMv|eQ8S=d*$iq z!+VSsPG1H4zQi(-!4uYbEvyL?Qe$S}U=ku0sMrT*nN2~*k((3Fk_nM{A62aPao5Ys zT|@0W;Q&NEa~)nc6c8f15`-oj%b+RVr1MlwruR3(DOcATF^cW{iSHFb^5`;p`C|kZwX#d{n(fyWZit`xTBK&Y5#@vnGyl!lPCr*VnyVVNk`?A$88>*ZDA{| zBWE#BEW`nZUhc_LYZ%re!A!Sr$m+{@LCD7?13Y_%MM6dP-Mq9H&zEwOnE*F7FI{I(nvR z%RQ{bb`k2&BN=wm4F4phlqj31~h^64x=X+Kgi@T1`@o~l% z$Y7dkcvj;Rng*6#YJ>}~0MCjtdwOL0#Ps|;`&xQ6WqG22E2c{9ZoSp^>5ohMtiV|i z6GqLP1| zy9xBaGMSl-nj#pOFU>z(7#P^=fAA+@U>U}wf)U;>$7V7Sh?ovK3r1m7%lWGxjH z!5IG0aA4q(HegWyDDZ!Y;9mj*gDeCGgZ!6+|A$uy@xP=&g^>T7{tr+l9?I(@# z7sTC8m_kQUg-p`P)q;$Ng^h)cLIi<~j7-SY+)_a8+xP!b|5p;Guy%KM7GP!d^73Nw z;$(4hwPI!G=jUf-<6!0BVE%_-cJpy`H}Ph6bff%lBmcLZZx(K5t~So@HcpOY|FLUg z>g3@rOhNIVivHL2-|e*Uw)x*RIlBFiTmKwn{f~r|orR6{f7$-0D)b+&fTWYXldHP3 ziJ656yU>3D|4-KcuI0bcDmLC0_B!8e94s8&{VQR|5r`j|4+^TL-IeG zLahIB_y2JJzx(#Txc@p=1VM=Pe?2G>1hDYkf5Sy|TK1c`hBx@7KYXsCRND1RZ~YVV z)+tq(Oc&psh+NPvH0u|8MQB4T@q%4ai~w zyygB1nD5+dRl%yrv9`wlzpSrWg7J?l#HXlkeZLhd`h#*g-F1cWC8m!L4~lTxiKh>e zaW4q2KLzJ0`hhw3hkDcn8`N9GgeA>R)tk@Rd9*>VE=kW@bk7Dx)fo|$xIYgJ!*^bi zQ+#f6N>uVw^hpLVX|EvC6R`?czM3^$pBbh#WD0+l@;4VUS=6)Vr zXY}TG9d!Iom}C|C!_Oo^i$>3I1YaV6Rf)P8kgTE63yBjTtT*_s-@A#mxC+bsD~XIW ztx`f&S5}G*n=p4&TzCQxhXzGU=1v8!+)@NNkq_-o1DOh5_w}IoE0jq|(t@lQ*5nIgo~maaV%`eR_TQH-cpU-1TJl_>j=)ufMzHSbV|JM+!0d)H#EvK92Z==Mfs%rMpq7h&Q7rhlB<9Lh~l9|v9ek9Y_d`q$;-p}tN zt|iJx#6r{~vXbnyktonH^5|}S1Y_QHNoG=oy}q5j+g=B|(ua0Ve~*QfORhl$GT9W@ zT@Qo$ikG}@;UL|`r7YD(_7)`_S}8E^0d8jNIvpDVX|WFL{SV%DqXAmCwmIJ;@#NF8mQAN{GA58rj|{LNuI}H77=w z_zgW4t%uy;QWEVDX9y#|RD7c8!Csi`@a@SGzhX@3X{>a+1-1^qyTgf{;JxL`9Iw#X z8ttH$tP&J+lAY7%5Wr&zl?-s%&(hc4Fw4PkqKdu$EcvEnV;wu77VW0njVGX^6zPL{ zbi4OlqI|qO{Tp*A>&mr|cjUg(>xa?Cw)RwDuMhN+QrOV1H>i%MfUjtzg$G=>ih&ER;W@+Ailu`$0?1humqNQEfz%l_p{)m?J z5Skv6GmaCTFsed$Y;}Vubn=zKc~JR z*D3cM^UtEq3MkYyu_Ro1`NV2N88O<2j-8Nn;lbG3?F-rV=u223{g?iA)8 z4-VGcm``{_itA>jTgL6Ugp8AU^NZYZu!nNrB)e$!<;aB;pKb{ZyKEf%#Ooj<`4<1Mdqs4*kY% zC>F&ie61@Q(>%qWbIfFoD|?wQd}kQvt4!su8sMAnypWC6X2ED7%Lr|J^G0OZfoi+L; znAQ)Tvc12KBrUE#ufieS(qQ;|$#=5@^HWI$fgAkO&$@m+H%toeoJrk&t-tj4;HLI1 z_vu*uM)1B9<4vEadSokYeQQ6E<;#0pZ#a@$WU|y89f~JCrsej0$#2BV@c9GHukMo+ z{&JE?KU?m(d?gwJTXuW%>yXC4k}fqv9G&(-vF0mSs0}bIIUwT)hRrH^bs##IwmQ97 zYv5^QDE6wVgIHw1yjMg`vDLY&qQ*coIaDD~e%Lz{75kN?B|#)GrYQ<0%v^F#M3p4# zhTnsiUS#H;V$#1Pp~YP{l&gK=w-%E#AQc8!4u?`kou`TdFLTlU-F@^v_$+T!ZbJ!( z?S_3WR#sq%&AYX@abVlim)JI5O zaw!h&p(NEH4gpR@-7xxOGWHa68F<9$$P!10JZhE&si%rxW506F_nloBxCf$l6w}N% z26E74x=ceifCRdnN2PFK|0MS$X$0j?=jtvSRRpLDU0LzvIAWDR%XPK|VK3G;(8*}< zUCMC|{}NK-{bh9z8E*?GBlBe3kU+ubKrKmt#8=CwV6RN821m=4rl)E+lR{;k-`g8- zI=T?(`fP7fm?zT_}xGLL!my+e=lWlSEY&1r2ZR&CiG+P|Vlfy*_aG zD^5?Z%z}cpsob6gW(d46+DwC1AiG~CJJJT8JZ=}g+>fM;`VZQ-wKS}z(n_R}7YK=T z2?Qp3b4(Rr8t62VNtn&sNSn7+(zm4dml2LaMLIvQ`cTHNyrtC(h|ur6p)b(loptgy zH-ap@7`FY_g?A!i422)iE|QQd=c4s@^!8X*R|*@|_XG>hpsRp-oRB~LXtaqh|4~%j zDnOvDJj#A1U!tOvfr>+J4St$ghleLq=bq}B-si0^HFN}wVeo$y1X7=)ddTYXqj;0iS^Sn~hARmdyXwa^4#i}L z{y~l|O%WL^ahQ3h3ho%gmg%ja?F)^^>5nv9g?pA>k1!0Yf5Q|~e$M=eNkxVWt(yr?En1Y)o81{dA8U?yU&$!N>4zUgMlR-u$HOUSr8 zY6$0@RKV-*MSzi3yb2%ibMC1vZiZb*r5`fLgpGBoNfOoLGW-Ny#pw*HKD48J_n}-N z&`#>EH|vy)BFYVIx%io?nH!I_B4pT&*UH!f!PH&DpE0F;aolNyodE(-sPoL47VUGf zvwQ=qhBarE{{?p-XIzpPRib*dN~K(0Fb@;R#SAoof7Re01Vaa@Y6%!BUYuTr4%CJx zR5FYcxu06i;87mWSR#@_hOR<~V&XCr2}}6lGQjEEyK9joaMqxFmLlpMH1`2;#=1PL zJG8*NbF>M(q3p+J6VsAAW2b)IXU<+h;wru&hTAMU%k>cH`IAwYSWEk)>w&*cjm}vI ztC+1(Xt=PLp`}7p7aC7OP<@w)#*WFrVP|fYwF@WKcU6z5obc)Rm0aA>FIu|0oW#$x z2^%{9vvT0h^5ztHu(_`23e$O?1+@LM%cO}KJA<>mlIE~?Aa2%G6oY*2qJ%b=$t_;S zg=PLjxh>U&xZoa3i==c!dcQk2-w{MR@rMyL%Jn6E(nmg9Aj1w?CM5x#;WxwqLO96R znbB&ln57X6EDYOY%yK_So;77I4x<#cpI%N=S3ue%5V$Vr4u(&jw4X)MjjvxLxoIfd~3xcx-Gq_k4YkjJfN zv*|1`Ra+yXN`~rvv$atf;tC5EmD286q1oFa(9Ep17-f~U6ry7C?GF2Qg@bXlUL-^n zeA50F9dH|jN!}uspDf0Wc6^65laOxWL4SZKx4>mPnYNo1?Z3Z7Zz$U7<$1Z~%77H` z7;DLIrIq4&np?Vomrnqwz^OY>v8;!3$%SDZvhNFW>_HSB&i{ZdDe6_4L^zep!6rxT zmRHWAXcKCbA0xUr$U+gHzLzaX-P>F>rbBzNGfj<00@J=fX0Q{oX%C>s4&ria@71q_ z2rA}>I}nEeL#07H4fAnE+mpmtMiZ>Z)6yw9^>*YNX?GEcz-HV%M~l++Gw7B6yo^IU z@UT+i2rZ`Ds=%^OyUZ*ciHCXAIv(oDm9I=nD%T|a zJ~v7wHGJx`n5eu<%16Nm&>p;}kV}prbQApvMF=(_WAHQG)FBHq%l$?5t#b7f;t0I; z9q%U_RmmR&FhhU=Bezy#f7C#PIsYaUNT!n10GwU1I)KFt<@?o{bxL1{Z(a9Y2>xO; zzV8NE3J)(A{X##jy(Tc-p}yL zs6%O%-yeMTCXU9&4Taqaq@z2p#yI8aB_|a;C0>PfsCWd)@QqHyPlAggP>>a_qoaS49}XEH#XRaJ5PgoyNRC`jeJeE3_D4l7 zj*seqRxyZgpnA?@61!Y!eqEr=+zg13bK4${nGPFk@Nf2Oy~*=?njmPok>1*6byP++ zG++(?i$h-!a;ggLYtnKy8|rtkUCujYMDC=J^KRE@4;Y!iJZxkpl&Z2LFS|q$AUU+O zse!WuIDpY5+i*br3@xY(W2*(r#@;pQSY!k%d-yAy!b#M%Hrzq33xIOCKbH(GScQ?MSxC56{VO(DQie7xI3_05`=LsaF~qF>S7a5O!cMDOf>57Lj!>^} zp3v+4T~joSXb{e9si%hl8(+FBm$wghz3pBsNo`iWA9*0Zq2G^2mvZ~{-$pbELsKfb zpc2;4c^9-6-PLSDryytf8tMSJFGo4 zZeyD{_h{b>fO!TZQ#U}h*Kw1Z28v%Ah7uW)9SRqUMrALSQ|#CV<&G~IrWk$bmvgFo zC64I*Fh=v21!F;aW7>!7Yxn8j-%qBG$HHKD!zQzTSozL1I_@_)Ewqh(chARbZL^6_ zo{h=(cB;CjU7RhPse-p7#}KNf8^w{z!BBd%{hn;EGVFNWRKM4lf0++3v#mNP;?A*n zc;sP%UGNJFp~AGCUv$KKKM)jc<%;&yHU)96l@b>J*>9|jN1fUl_QV>|LN zs$6@jW&&t_l!{Y3q)#$B`oz|Cams9V_<+ll8oq|->*y7EVSl;G$=2%45*~+Ia8!W` zoaKuk&0X~(+GKRMZ*e1iT<#cfFV-T?DT;b+YFdav#L*LNH znt(8`ZVKHnFm^!tm|~WUXbMcxT^Om_uS%W%JY8O1dm7<{6+mBP(gd*1m}-XS9dK;o<2i(K@oJ&D6<&JkL#v$5 z&c|`|8OC1@3;<(PJd2uLRFEboE>sW-iUeAe5-6dJ(BmYE4Q`sa2$#4CJ(&%g;sHk* zOyBLp8~^a3{)xb4cGG-FCgqf^DrZi-D${ixB4#{n>U+lR`0NsmRP8FMTJ-$N?bL?& z+leeccGM~Na$tueXNGV2AjC+QJjK|2Y*o9Dwy^Sp=1H`Nq#9o12bx>wW=OtZrL5AZ zYeN?zub%|80w^+Q%iFUeZOUaPVd~6#=t;gFOb2>&%WZNpyxBc+Y!D|>SVs z-aC7MS@_2Zo{&V&*m?#RrjL-F$_v>GWI7*~!VDb`;$4vb5kKaLenLGnff( zg;WG2c+Dl{v_rwSgIdx))zAAt!1w%}2F=ya##?;LPfB8gXU8G%i6=9wgmie8By5+A z4B1>p4daB}C|s|p)~z=Wr{I>&+uS`h`&4wGd zA|6he%)`Np8lI@O9)7?K297HNEK6(m6z$?2)l@|&fEUwr+(Ps6fy<k*W*gCpOUc{?LVTnUNu$Mk=D#l-q|^U9j7bsFs7X2yXngpU}N zFD#2eQIm*1!W-pIh&&(8A)2cKDBZ4bLkH0@FPxeD zTGHHOz>=@dS})>OW%#EMZ+ozFVen}GyJK$`GMBSPoljih0yqba(H61v!C&pU5sO6j ziAxfK0{1nCdf$NN&F2^kwRNsER!dWfD9@DCj43`He3-&!lglM|i9u!rl4f(JD(oDWJ6G0G$c739aJ{A)V5P)e|V5AG_O#R&>~MY7lG znBi0vS#l|23B+_Au)B0erX>dkWUsdgcq-<$15{haF5ppC&j1<|>Ps%+t^Mw5ZRR}C zs`hk-E79Ky#h`uW3_;&>p6kIJyY`-GM*FkW!U#IZAD6$PG(qLK`BcPw)aHg>I9C~S zfG?Ky4RvY@55>%HrpI&WIy}2xEyPK@tXX8FUB1D8v`pn95maO1@}KmDq_5sLVh$;_ z3qnXLi~>H^2<+jCVx&oqhZwD!X?Z5!qkiikyE6zU)1pq6i+pP$32M^iXUfYYXD&7i zMLpJag_em@!($+WJCJ}l8_c>HE>0XkJx$d{!~;l~>HrB4!%+p}$w_S%lUT98BK~cg zb2~7@rdo6wiQ2p_gz0#98SAER>0`{GTUZ7Il6kbqq-ArC}esUIXXG zl}Y^#tHzXuhtW6s@V@9fCZZTkGXtHQUiKIp`}*aJE|7P<34gx90?!x^3wA)R9YFQ# z#Mf*Dn=!dTVxJrLhPv#jfplwrxY)w_VQonD9VS5%_ozCF%|dEnX)SOFGu&YSf;jlz zm}oR6)NF~WZ+K3@BHXi*C|K{Z=0 zct2{{ay4mb)D_mv+p4CAuoQeaQGCPHw~KQlB0 zCzns5Ik!a8T}m`06R1MZYn?RF<2z+Ud56Nl44GD!G$Zt@M6iJmKnuAC^T(!Xy!#ol zOIj*f&&T9_`(^q9C``HNeF`IP5}9Ip53$IWU}eV5v#E#c)j4_v8h^Ml#*Gq9O< zDyw(yV{g1$rWN^9#z;$foJlqe`^0)793&W+y?+$)+z7H>q9rDkh5 zPi!Cia)XA0>7i!qw6b#qe{PtXE!0@6MVCY|>6T>lPqBjzH6#=H@!a@_!Hg^W$&uRe zXTmu}2N2yC`A%$tYHfu&g-pJyWaW4hem9+yahwC2_T) z^AU3{ehiPub^h364qX-Kgr!87zX=^Xv<=sGLJ{U`x+2Li7Iug06TEJYx;tVeA-(PW%H8}~jdF`Utc)VOQM092iE_X$=*617f<(o< zMxpgH=Q=>2#P1fYS5cU}MPIN@TcH2?tiN5jRBt>w1S7)&;#J zXfKr3_mm%+3L*|gqp&Ss5P1kzi&QF7sPlELM_B}PZIodra?c9#D(F>hz25fwV`c@q z90=&Yh~gv8)rllQFwzbu(5xR&_LXAm4MRZLQ|ar}lYR_Z1`t{fiLpD4gn7LBop zB;0KstjnGuNqi!3iAI%5lWt(6Yr!Vadf^95o@ny6bX$DQ`VOgfyTRrd__7jNVv0oL z!1uXaYbeEL0SYkgEm!wag@)X}5%Iy#%q`T@w&cexau#O=c+7L+s`QwGpg5M)SMDfe69 z3=CzgmK0PFOfIkYRwKG&;6`HZHbPQXgO$i{e=d2W(L|stmCLTV57g$mr1^ucG7>Vr zJPx^hE-TGS7*^x_y=&q+G^ZrO-VNWF;~%({p35X}uY1k6(W2+3w4HjCd58uv8c2XV zEY@f5R5zBZJHZxPhln|cX)$HChn#!;7y$lZ($O1`E)uE#^33xI1cOS`1!DN_O|Zex zQ=eR*C(c(VWQJk+@9IKK79e3^qKSD_U3w7k=KzQhuncLte}{k-8Fn~ z?2}rd`WMgm2CE(MP4ty0t@$6jic%Fxp&@Wu89d2N_rvR$|CWl72kc42bU6w|Q zEqtM^EEf3okj;b{q~*Ln^}kl2o19%kagvyCPMISQrk)%VOV3f{L>(8aOmmZtV30N9 zN$5VeGUie$y;I7cEfg5s5C6u2di=CxJ(lhdY+I9xpx!Bog*jj{_(i-&AZqcfL&b{{ zu~+JcOD_8Y0{Uv!f+VvhXp0{1%Fx^x$~?#N@I=xTs?$V!jq8-&txeH5#@{1#-OVr~ofkr~l zB|`7h-|vl=G~Ib1Y`K+d+zo_mzx4cCV8Cfd;CXJ34Da>EM2-* z^6reGJ3f#64$*qmerRLz*oUZ`1&e0*2YT*d>4vQi0%oo_ZVnum;o-Ab-#ffU$`3CCo$I$&6wV-Rb!uBPyA3GX=?vM3bT5Rj+~vRQiGY>CAZ^ew$=_TJ_`D zF?t930Q0@b1cx*y;TFwSAcQ6M<8tL52i+%RMqVAOM*F^O=w#vk^|z^x^NATXOsqLd z&11!Gk_&=a>uIy+emgyrsZ1XOnBMo>G*Z^InMkR#+ZCm{pq05;=f5!IlG1)T-7wdW zMg+*DhQUAmZf?+DrctkwKC>I!F&u{?E5Vd=NzSCyP~_Vc^&^*M$M&{BFF#1f91n+l zF;AV9#Tmv-c^mTIJAfw`DnDfg$S-;z)hd6g7{;aD$i#K`Vi4F&0V0 z<^hE5b_OWh?b(%pbwUKeFM^$KB?!QMKh|vOi~ zj(&z9L8uXa8sp@b>!0np}8-zw;JGEFVuKi_-Ef$RtS)Ze`^i~E1NtfPu-rD zT0JaZ=>fbEF5)>2MzM9_fKVuoJ?d(~Pc{4goejQ4yq~@c z%#hN+_$g|PZKvE1Ff&?mu015po#VoC{`~9cpv?AV*baAG`^!E_zo*b}+iyZ&^ZOvC z_psIZ7kH~(!CzOMHh>E zg(}NrKD~DHT#A!9<+4QqgF#W{ykt`f5Rid9E+~>x)2^9&=nr6Y{%A0r2+)+Gm#?Rs z$u8b=C@EEAD~==J^0bC|@{CE099PMeX1zIqM>UO2&j!afjUB2I$F&8~JM9i_fXnzX zhx%TM79uMY{I}aj2VJK~z;1MN3BeG2WI`sY6U0uy7edEzC9_)STd>dOrVG#yzpIfd zXG@>vx|>T7pn@|w+cBBp`1#x3VMaC&h4kd;mQ_vO6mV3u_ zh-kBN6a6ezF^2Gc=1`}?rt>^AWV9y5f=HF#`1!EmJ8OMSGOja68@ksS-{~*V=5sX3 zh;UqO+}pve@77Yq^Vj>Slk*nh)3qJDW7Ch3zA!7DM+2WKWKt0?=lt#`uU+SAz~|B1 zH`}qI2a_m_bbp@k;2S&nU-P1uKy+4^MUcgf577}^2r;NVl-edPC0~oa%wJI0pbc}hp zXXeXE<^m+q)x;F$dFx5ZnEWveKGRin{1RO8enxG8xTDXmE*;77eS2vNoncxyH+Q-} zQCoeFeK5~aX2R0*XI{d1m4kFil}WDRy9&L+t!0Ul{%XL>G>p&8dUJAG=+YkD0y0U# zh(!`l{JD<54m1Y>3#WfAk~m9b^@0Sqj4iVZX17K{I_)2%qk%6ZT<%_VmKjnLXg261 zY-o|PV$%++kRlQvOL?8QGGVZ^Nzyj2jDnnsxXFB2kLm@eQPb25rX3p zpSR$+>T(Y23c7!g)4@H^|oIjnC!`>Z$lw+X$yM@)l96Yj)GkL=c#S|oWao)>QV-A=WlZ7ZfPX88F8_?{gDrF7xDo%IZ6L8WbmGmU)>6ZK^Kde z>eXf)UBtS+9UFo@G?vndbYq3m^gbk&@xTkkhR*oi<% zenJ(5rMNE!OQv(>y+|L))q_pa!WD%#Nx(KB9B<{U%4tIANrT(%=0$c|%#7xBdXdIV z3+c0b9@5rleE9)U5BrO>YT-m|iud`iu0`E-df!uEOT|XC_oTosNUB`#;ia6H;DL{R zE`NCg6n;PQ%tmr~tF_rb_;wtMBaz1KW#bxMmwn%(<5Yed)qa?GtLr~T1Am+>hx69h zjb3ka>@!-~o!OQ{A8j3WjM4{-aSjYu?|Hezu>RrXls+v6zn>WaLufkHTK>z71 z`EPPI|5PfI((hJb=Np|UE`2y?B+zMwe*@PY0kuxI$YPowU8Ec!@@~;OeXMzaiUn`I z(!h@qbKh^@1PWeeSuM8muL`|AyV!X*xB=_a0v)~+vEa-Z75@hE*PigAYQMIy`}2(# zgeDo>h@GK>>%)E&hm)EaNRPL}n_9okrVH@#IJN+(IBaxvFlvHZyBbAn+=jft*~h%@A&* zY$hr(J#DA-+MZI%faPtOvfRA>dLwj9A>H$S`qiwo;`r7}yD|Y%tX1O-z&XOy5NeIl zL=v(VC2kWu_{hks@`HL8pv_|?W@JnMvOjh0_{t(yiyI<{-yoAf;)IYo)Y(}gN4yD% zN=GNlNN{iWea3Jkyu4ycd8Hu~;p)RlAJoy6iGDdVrE;m`-%Hmf` z(+Gd&aL6m=vv|avm!fV}am8k&2|kWDkqZAhWEy(`JhbB{k1-m&xVkek1$G0Zs->;6l-ju z)TrRr6bBU}w=NU=SQI$JLs!Loxv>2WkzI{M02Tw3MX`4myxr2D`0XYeM)7$a5wdHA zS+oyJN=Y#9RkYKsvf7!?y7+NUtV)DqCYu4gD;Kxzm$eypkxtvMgqs+S$`Pn`A0?(- zc&1tH)7=)QDNT+`D1c}DYe?hm{-w?jSk$S$!1Ihn^@X252E7Nk6y9qF1>@GlP~1rF zWAcFgRw{Y0Ofw9jL#9OXZA>Gl@m}tM--Lsf<*ZHurpHY}pH&FjV|~-M%KUqjxQqq&FQ4Z`v)qjYX-&CIfIl^Zkt!u8H{rz30_xAZGPQWXV$ddgQm?ly_2}x?c}DoJOg7>_KrGB*|$%1YJ(J z7%vDUaAp$x!pE&Jbh94tqbdaC@q&xW@L5cYo}lSB-AVQWy<(9>a_-fu=$>KdTbI{UB9(NiG{;jWbr>(l%{;}d3el4>Uzdu*kp%9XI8_@ix}j;t&?_D*uGYV z>x6}yEQgdjjBoWdg4~NEHu}nUH+p8c`T4^HgP@7cAbk=&1Fks3O}242Bb1v?%e8d{ z;ZR3ce~wDk3E9D{Jf<8-C)g)n3$^3#e4MVB9eZO&zCmmf)Y*>C5MN+AE2&80`PKoT zdE*u#Da##t&qw?vbn*AwkLeG~)vexA*@XvLh@3J1R+ax($)d^kVhzKCS$N9=zLHdI?ZX)ovR)-3D zX2$*c(hXlbL3Qv`w`(2X?t?Xjmw6zg&-Ydp-cVj0fF?Oo6#G)e&R1$TK%F$97V!j$ z@GgPZ+OlLaUaE#-z30NuoZGQ+e3Cs(G7x~Gs-B62BKt?{a8Q z;1#!ZhYoxL(@1&J15d)M0Fe!R6Gw%85rBpEmuv?lQ&P@rjD1FbsEDqi7ku1LLxf_c zmhiod0IaZuS$yQ7)nx5CpAm}K@YOY2vYC-@wb=JMiD;VMsyaXLwrluXoD%c_f4OW( z)XO8lvjvX!q|>hS8}Y&IABTs;`lE!`5Kzpx9Jen<6h7kpNdJWotV~T$04-b*88EQU zgcXF?OY(jGj{8Muv*c4PjcH9(#l1OO#MRq0J0Q{YXlsK?_K72J|BTG@<(d*Hk0U7! zsY($1e1^Dm~b-wQzs zOwi@Ldou;kn5=Ty?(foIL-w^g2D{%?me*|5*d1FpJ6v<#Z+8r63)-)KG}*EC&JEQ{ zn@Xn*40We}f9iBAo9gR5)TkT~4BZS?cxk^V*)utZZsudrzDRMs5Q=L^)smwP{~^x{ zK=reuO@HdoUX^7pg5v#!V9d>mEe0&wXyUp~H{GMx46=Jd2;FnPabbdeaiR74D^;us zN;_S$;@K1MhMk_WAOi`YCdPHCcxLItxj*a;&34#!kBKTB%^1<)=J~b85^wxOrs#D# zCYpXC31+W`d*pAYb{hpINOSGdp!aQBd@oz?(H~Z3@coW5wCp}&MIw;00fO?)PPh@9 zx-Ir*YFJP;MR+9P5ldBu8N-a&%Mfy!k4KM=!j_TJZOcEDDeWM@2o+bu#<>eZn1;+> zI5e*2;`wtzHPdCiXcTg|%bajMZ$a|ai^7?V($2`jYV8aiEP6@F?A`2XC?A>|(RV(S zGs^kntOTCb;cT^+y>5)vX;g^LrCZO~8^G*%)Vy!9x>#btf71P?JY@l68TBmBC{D1t zXq!D)Q9Z0n^5!c04O4uH_}%(=&K(a#Yi{}qzh?p~R|lp$8HJ_CIRr^pWE@Sj$42r? z!yVuAzMTl*2}ChK@f^tH5?Zp}3||_X)M0^boRVI?d!Vm-VI=pE7e*3kG{jM~OH{ut zH?)keACV@R^xzvfe>~B=p+GU7&`blI0{0=)?xrq z%_5IaR>d1GA`s1-T72mE>3-_Y2$)cxQ{~>XeV}WD;mrGF_mfZ_^Vv(_O4`g5S)TUj zqwE(?)awYbvWqZ+BlCf;HXQA7%cSp>-T9Wv;o%eOfruPm9wRNFTJXuX1Tc(VqWpjsaM|(6V zw)Xy=NM^qeVw-;1ZEmP|wOG(;8PhKv})GRB&=yR^tc{Vh`NIVAbmrE`A_PVUTAVNSZN37NG2O%hf zQSf#ZmrRZdk01L9PWMXuK5=a6qRBeWet4rL$643?ss;YB%K?!zXG&wkd!bMm+rVC1f$#Y9T2!eOx5LcOHsZ-S43 z+B0MeX(=*6NxX!_jiR(3Hq49*7n$tvi|oh*VRv77TTJuTqJAYd7~zjh5;OTYWImk9 zaF@r%AQ(=2UD=^W55Ky+Yuzkhy4)x`pEO`&`0pZKXSOQ5HgBr z#)dM_>6R8H;xK&ja?N3*XsE~v3O;zqqiKfY^?2yaW~F>vJ(q9KW4W5$;O~)Osrul) zDA#|D78d=W^s0a$g(>j#EQzk5sQKO52F6h-bLRb1vW(C<$0R!z-5S$Qc34hN7XnVC zmBIDWrCqz5vE0@xeyC8%@3~B%jUEd{;PkGL){zovm*2a0{TxeV6}6g=W;t89@_q}G zD#yOf3%9A11%K4}p;TfJU-l`8(;aKwI~j&}Nw|3k4;C%M1m*E+eYlTA>1R2Gx4X70 z^vT~ASLK=9m?w!G4gtr$c?v$NaNl|&^oKWZ|E z(T*Z@;|!ADH^(kn8pxj)G0#Iv)_Z>IgXDxrbuaVcf&T{PS<7lHFhwQjJ7rGc%jCX9@4b^Qg} zHi$cmZosjW)*)|g=c#xD&~&F_Q!(}g<+ zTz?|9QO9)X34}*eP=+`s>#M7nNs^07RIbTP*j*k1%&cszF`MSXRuhl(@{E)kIm zT97E!09z!#ecYZMnsT8$!nUtuK!cX27!KjkSku8lw1TFUMQPKS-LrjI4Sf7Lo%5He zxlHkoVUXRY7NErh(QvD5pg_M%9J!YmS1^9}CSDS@Z)l382Yj{pewoGdG*kP)*jZRI zXyCFGU9L)ke(rf7RmXvWGLlyM*NH3@R0@cKy<`I}Sf)Sjl*XX#F8YL@a8dRF@^hHn z!RtVFpIyH=^Rw;Rk0?qXa*SW-IPp`4K`d~th&dq*nE3}WyCGJGc9P7F)jzckqmj%x z7xsp7n$UQy?|t=pa>QzS5L~skyWOJPangRQSFq%*n`sDm?udSca*gzLzTFUkaLLx#s!YLarZ(KQ_Y*FI4!2prdUg5tZfn~-k zUKje&2?D2GDg%KGtBd^K+Om~2Eh;*pYNtrySPyD7T(rL>y;rip<3h^mkSbP+k|e%~ zl3_0?n$H9BvnNf~WBab&>{j80R;V}-Dp*kW^d1wHUh``G9LJ(?wZZz*$b%GoH(G^# z>?9rTHpsxPq{Zd1nXH4ORl(6$T}xaTN%x&!-G$EXVq{Cp}i+6y0vd+V_^sxARi~~jy34OV5l4Zi(6fg zB+20Xw&V&0=DxDyVSb&2oBkQyu_w0;f3Rm*8L#k)!umGQ)Y}^RWQ!OFU26Z6_LcI1 zFVBUU&Y7Z}ftbE#Yvr#4#+c*wXBc9&gfo1?H%=KuAh| zexcY9#jizeyNCuLp`1(Sv6puu>Nty++|nXU@ukp-)lG^kf&Xg41jZ8OFqdWA;4P#A zC!PaLT0-mRqrY_ik5_}BXI@8Z%&DM$=Pemuutl2Y?a&1Ow}I^y1JRWqO_S`0*K#i5 zBhjjV3TtY{|L#%pm!=^9n7!bnqnS)@nMX1e`+1Yf6I;R(fm!DKiccXa{WG#a%XDt& z=hAAf%uNfDP@>{uZ2De=kZkryN6Y1U-(hv_`IQgOnr(tuDOG~BDWwM%Jg)7AQAIxA z7lQ_b{-hOZ2?JXK9(gv~Z3t3wNxMv2I+lfoRM`z3H8~;d;=K+S;*SxkR+Eu#p$ie! zWanhc(h08ehcR}0}Z7%99uz6_vER`^laeawc>ZvfYZ~PwgXQI5Me>x5N8nQgV|^-!Y>xlUuU!5%|D6dLD63Xb#JA{dGRp;Md@B z*%Rn*KE=@*@Gee8455=F=Q;KRe7t48)na6{ioRSkW0j|X*vrR7oIYy|C^3dn?l4uz zo*xwnv+3bElWRyRtEKX7znLOusd0XmL zptbgO%s(OU4aFR|!WyWb6*o?-3{5796W%wN^zbBVAm}gw1+YaXT?!SF9gwu~pGMpw z<+LJN^pN-kZAH=^RE?m@G5@VlGOxlAOY|F8&J&MZf9izsXlbpeuALn_MRxqPD`OiO z?jVDDzsnn2_BhrFKfb(p0JC}`d#aOI76ftmNK{d6Ji=nfTln0y-s?JH@L+l%lxX}H z<$w8{3E5{`<_0vIs-`L6`CU`y(rdT@o*8~ansmC~j!Tl~>**0kqaM3^}nGqr&N0e=|)@H2I82 zYs6Zq9JvbJ_4tx){XjibagNSeeA-l+^DhQ+sWTy3SXhwkFO>=j)ekT$4sADkvnEn} zBTpqgrYhXn_t+P`ZjS1T%wa&onpDRuYOLf7LB39d=NdIAAb??TB?2v-2pd zl@O-=FIbFEvQpxLEdTgk>=N}U9MxfS3AplplWFDLdVuoS)g!ZVfa|JL?+r0k<6!|C zFy$rc-}#Od_9+iLrL-a7pi*D=VF~*I^9X0sjs|TsWTaDj1vRKcyxQ%>DMeOWJE`XSub}|LM+X$Kwk(5GMKU z78sULOWH=JlzS`AxWtDisv6(JE!sDtPOKF+`B%1lu1@qYdR2={;ggc+{NGNMC}1kX z=!=d0yCvRi;s=W`T5J@6*%hUD#`V`&2bu$(zA7{xu^BC3j<`ZI0 zup*}S>hZzgjpysR|Eyqpq0wpxr?Bbw(#__{Uf6Z}7+`+9z35MpIDtu63xBAIlS&Nf zCm3qoS6mKfX~3-1u||B(N0o%dB?Z9H1HuWaQqrPu)?T-SJQVfTeGk@@W27j4#P-Mv z%f^?0AVd~S5W76v6!p6a*)#}PiHXpHs<`Tu`DgPW_-09W+J)d&e zobT#Rf++OL>cZ-(TSZ@&znjxrup;prujtb2elhEP%f7mGYtfL_Y#ec`H^Kk4dD(x2 z@4a#~F4U`Ks_0~TayYTkwkez~jKi${kd@)s|LuIu9{KM6 z{=XBYrnIGUr{7RN+ar8VUYqfuNli$%KsD!`{MAf5UOYK2-+OL;ILEI)g3m1W=iWT< zOSRlYt3IznYPRUX`n)gG?|gW$@?H7L6myek`@>&seIC|L-!$=mXPHUXpUXu4UbycL2f+XS>ye|L%08v^>O!+ep_%DHAKK};z#DxF=&;Q|1001{I0B~jq0Pv;(0N9RM?cex68DeId(&qB= z0J_gI2mldo1%Uc2L3}2>&jbJf^B@4g&m7`ES{~&8<_6>e|4;cppj0fB$0uyUN>$TU zQ(lhO#KDfq$kf5ujLFl^@jn27-;?*VXlLeXMB-^@YwyDA`IYQ{Ab3B^|B;!=Nd5=J z)#fXiro0k~sDrZ^2`3Yn2}~yNg@lBJ-`UihS6NKre~EuyeI>JWb#>%rX7=##VDeyN za&Wd_X5r!CVFt4@v$8UNA{bq~>|KpK8SP!j|7Rut|9ZsCTuhv;99^v(>`DHs*T~qx z&Gjo8*?$fF@8AEtPcu)e|I?Da%m3=uX9t=8<1n)@ftmkz-JhcT|515G9c&$(RUC~> z%mi5Y{|E5@CjFmQ{wG?=%G1nNQ_RZF%--emjs!SZSpS#M|C96oDyjAVDfxeK{+A>_ z^MBp_zq+4i_PSw3x7}C&b@ut2#3cx9tbN%Wkie zUAM}P;^o=u<$$6*2qSPm3H;DxFy!DcZ7=6D;E)EByXv87p4`%iJ z3MD7HWJ7o*+c1)a2w@S?7VT<#=}qe0 z`V0C#+{YnxN6X;4us{xkDkDQgpbd`ZKrbH5|10UrB_i;Lp>;Qb+}OiRW# z9kY}FH_n;;UH&c}A-g_Kyr(GYYlyzOPcnO*Sd@u|C_~Mph1HTS54c7c$)!Y z8+M_v1F~R`WhE}l2G>Z!C2`@u?xQ;NIjPQT2*pvt;*uTAwU3y9++D>fMG-f0P zZW8)p@VV~oH`|*m{vAyLySlnW3kwT@QBhG{dd^GM9Fx=2Fup_O5noEUDRl&~u&~bj z{QP8c;bmn>T|GR)+uGV@S2Pf1T}T+i?+Y6^q3c{be?0&hJi~Ih%&)4Fx?O(WOU$$hua(jDgo0Ds>s$9Dw zk$3m!kFJ4Y)4EROiudvHaiwt>$(}ajrd~oBok@hc7y0DIhVMy@JG`IUglv2AH}Z;w z2Hr}y)<22espZ5=I1aY zx0BI(P?_s_etq5CY;0`IVVN2^UddW01M-v83dGf_?Q!K>7DN1sbeBI3p663@&|RV{ z&$4iJl`L<9I->djJiDhLf~}XOTK~IdS>~?WuOer)QX(~&yD-$$)QI(oMZId}u4B20 z25>0LAdQ+WBbzcz^j`X1y!n-!W8Hcv|lTJhiVL3t#5Rjlk@sjF|3tw5A!N5GL zDVnCKO_bU9+5Yv!#VM4%;<^6kZcZv-28Ex9Okfclm=(rvVjYIaGRmdzb(s9| zeEj|W_#@R+ZwJfBIVNxCsRMotpx_I$G6YNPdv&I_^5^;Ov^?D)Gb7{AR?qkE++H_D zs20Y?kV}@?Vex-S;P)QLpCTWVNRi;et+Y`oQ%*I~SxHTBRbR83veD;%&s~w1hm4UN z$OSwquNg1XJWZL+qTFSKto(a>tN>@(Rs8U(5u74A_>W6kgLPBCH&w)iI7I?iB z{CJwV#MbX)l}fwQw{+jte(v!)8-pi%@%d@3?am>~15|YPo8z%lFC*uykuzkMrh_M^@5Wxm|m_v9j zSOfp3Lq!?(f~&M#RzD)zqP=$=5ldzScoE^ z(B1GkknMC@k`tyvR?PMo2>}iPLs+Una(YfW=c+L-yOx)fGh#y>%J0(zLXq$Ib)m?n}it3bf((K5t%&HN6qE*PCIiX=; zHtqrj9zB{ZtAyFX9I**&F+LJ|Cj(QK*$KKiZSXhUr9UO=m2CLl=b78DN9jEuFFoJI z^a9;cK00xBe8T|aL23~OJ_iYs0;C*IYt*@(1?RK71Dsnni42ka9oI)l(bEA1q?bJBo)uluaI+K2*#}CoK_#kwGMPQF2eyKp2$^p?O4^reb!v-bjjij}FQ#d{NLTTlGn9ZR_UprGgp`J6lh0p^t_}T19Q4BhA*w)#sYz` z{aal=!O>CpYeMy;6BDnfu88}$fcFxf}g&&D#XLdUzTyWhvrg40I%(z5BUqogJJWt7|X zBp%lx`hiItT64JMIl*-(?@gOk8Sl)0JLr}oRWpb`$DmJj!&uJS1W(Pp4UJ|Vc7i-v zah+;tUkkpXvSt#~m$}+U9hJpC940&@SSRKwck{va@jC81hJs}VKMxNj95FcTAs;gT z^mI8%*{oi^$j&I5zNXuI#X|LNMER!xf~QOQ(o&ZT3#8ujfJXOCatBAsTmI3b-sk)V zi%xQLQ~N6$0JaJ#=XJy%J$ladb~9{hSf<0B8egsEk#R;yts%Wsx zpc#!k+`fHDoK4Y-rw&c7{}x+!W=wSHmT(b^a;>LM)nvC@!ppB%5p{!-lKul3B2~{_ ztMz7_UVbQdj%+Q+mXy4^F#xp(FEUPj&|OHBOw%~zJal9;PT={(zjqG$n$I{ufddeO z1GL;PvH0C=_o0kWq&DoAxiGOFJ`0AZ$W+K1KcRWg_SmvoX}oy&vt}ZJA~ihPpG+Zm z83s~yZ&&SK|2uhU6E>8gw@V)M6G4)v=L)o$}jHk7gGY?1+{-W?Du@u|%3`h-smN@F1&Tex+1DJY+)!opY&F4mJ zbyf|TqslE&HS-M|J-l0U-}L`0aSH$z^&vRXg)WYi7iH)i=`Ia$ zhv)%YcR4!!MNi&#JqD6L{=pjQPwJijJQUz2zzUcATM<(Q-;{8dFHm6hr>w*_quC7+ zq27ToU7S(fc*LaVlzFnhu2}H*t#VK8np;yS@l&{D74d*JA_Zbv)+3npoLHOuWV3!h zOXv3pacvp3yV^f>JaF|X;zONqjs z)7kQG#wYT&D-trf+NY>g6?DjCRr=-gUedjdIH8AzMe9raeC`O; zm}$a(7Ls zhGV_&1~W$&>M*Jcl%DKNUzzs9EXM-*DJJ@)eH%N2?k`3LyDs)cE(Q*yH z_QR!GBxYhBwAjv9XG2ARjx`B3do`gHyosQ0r3)4xvFA?U$Rf2R1~zGmhohDpHG+^4 zSb4k6(|@sz&>sbr1Y|-3OSTcvuC|aR+t~UqdKtFefE(xedne!RkDcIB(&iLh z@e?9aWF9eZEYrcMa{lvshI|p*GY&=w%;cF8b*Mv{@_*!5Sd}59q>kB4X#v5+(}7b4gmq(|w)eP_mKIlSBJ8jE-9N{2JUn*{kCh z7*cJluvwHPW~!Zlskknyr!bbM%650$-si#$IpAnodk&-C;(j78@-LRUv|~1X5%3gR z|KFA#&Mba6UWRU83fHJkE_jjd4Q_WpW`C>z{Fo2Fy0rdQQa)spt8w{Y?HUBKUOvA(@7(z&T0Mi4D z<^lmZC5pzt2u&`kVcxO5L~)`ll(q;lJwJNcVt{rEvc!z*)&_BBz0xCefVs|B@ zcjVN_#HftZ;CJylDPX*DuGL=M-GWktHAFGEd572{%siob*X{rYZKLRt_We=?iJ*nK>rT=hjHHO1?tqKhoDA_&J5 zrUIRYtP}<980sb-8f2_)jMt~CAwCH*c$%Y2_5D{ZvkTW>!X+^v!a<9epj|6VOV6LnC}H~Er<6E(P~vm`Q9_?XCRDv#z2ez4JuV2NN_iQu z3g2^Dk{N`=0FdH#KA>bYC1|`AM?E&Lo`f^W;AFXvgjl5gDFMyuT@hLG;%p4#&lC9U zxDMtbF%tOm(;TLb)2d#VA4{R<79LyedzO1YDgwmU_I8}{S;J7oS-h1&UUHpKd3Nck zS+u20hl%krqFqZzT!A9dI=;4 zwkXi++%l(c^SX+pt?ASz)ajdgo1Pz?}gcxVow zz*^EoVdW$`(eAfYBx^C4|9VloC_>B7D@8zAlMfh$g7Vr;Y8@Xoj1|}8S4Q| zMPuEJ6G=-hmvhbZl%YNtiF|JiiFbgu_$VsFIf4+C2a^kF=+bWp~y!mLAkttL>aVJxIWHg zu55hstBPJ&z9-1=_N)2`ihgfo?~9H1$jjf1;u^PvD%$L7(P8S|t$YcSU`|Abp1+Wo zFwt3MrwC}t!V;2nl^|7Pmxg&&uS9XHXmbF+Ikm$ok7ECmz<73mf6TVz!TK7j4XxOc z65JQSjKP7^`)CJDoZY!{E#lGhpNtZ5$$kipev6;xAQl)~5d zk&$g_#5>iucgWLWgFTXm2m3z=(KLIm7 z@EHN<8SxE;IE9!KXOg1w0edcX^J7FQVT9Mw2Els=L*m&z=+`5{S>C$f0MzZ(-d=?R zDL+fdWtc^YSTYXrrD8ppLE8;7(irHXwETQGnzaI=Aw0ckT#UpJm$;@W;sL#uGqWEZ zMgFR1I2(wto=0WcyRApLd#=c}T39oZ)ggCIi z(20WJRR*6EqSfcb|+g%lD&1+Nm#Yn0bPUu&G~y0 zcnMLkgtH|{QI|#-4Zf+aleDJfDEsR#`0=_do-aNVTCO~+EI?0kf;30+18Tvi$WWsI zPh(2Xe#nh7)iuuYs=K{|bjqACeFY51h5~xDuP85r*@Yv@Mc1WGd}An3z(-&)4{$b& z#e7*)byxrAnVghIP^(*P%7V#+k;Lx>wrHkJ-XI0PawgQlLNFp%nC z&VgW}_rBDXy8A`TiN-+<{dkbsx0vCMAsv;QzR-h+8%i`pAAlPeQCP?1vCPwxur6#BV8;;>z#@R_1ie$h>tdRtWv8Jz?|c=+4#^(jYH3)MCp)Jt zmico`NqmtNo19jVk=!xtuNiI*0t5<(TL$|umCL+|t|KeHTIf`nVUhs>mK^|0Pbi|~ zPbtgY_*SpUzoNU0gIQLhirm(o42!r>Txf=7bso%;0Tsb`U?u+%=4w9MSm!u(n^|at zbHsqANQpC~|(970ht2Cxnf8z;y7z)y7eG_wi~ z_UDv)$jbsP^#(E<*P}6M79GpA&+`u{73mg7llPQ6$5G}d1zn?7U|fBx`kfn8d$Mtp zZi71_&VNYr`4Cz1HbQ9Fe=jyK`!zRKWryrO31IJsK*2j$Wd#KCQ+&7d98IBf;~(P; z&)IBYemy8J9XNIHXUr0Cp;&C1fcD_~Ws(|L#}Q4BE|5$som6#fQfryPX@p=c3Q&dt z8p7_B_F!g2Q7ES;-l|AC%bq=Kq&rQ`VJ5U7(&Df2``lLd^vXIk$YJe1uq3loNS;$= z07A}=sv{q(kOw&+RbGrEBF?3J@kn#HQ-1S(&L4nDXD#q?&T5!w``ryNIxv95=l%yo z&9sem|1q+Sj>b-Ldv;J4(RZ$`REZOsHymLXaff$hA||3(q?1se5a&8kxghy-UE;8p z!kT3{Gs58zG=N?of+;H~@g-u$51z`9Qt6CRPHMvOxoi?ZXDn3F_~bS9Wq?67i%T|X z&xmu_9m`vjtDKgy4K)3~M=mcD8gVpDMLw zH3`Fk&m8c>$viHc4`Q|T+dc}i5Gz722n?qiNmpY9TJ_wl?4S6!-Q0bu{fJ57;gP^n z{PTeLcIg90qXoL7E_+++t?xA;9mXNseho9>!2HMhj`jfqvvMzSw;# zg|311Dr^5Qf1C`o0W62gP<(0(>a8g|W{6Gpe<3T@G6i4j>&`D)La#-c!`OJS+$G-O zvbP1_#^=D)NcyT>tEcY9!%&)$E(_f5&-pVU)1Dob#8 zBUdWO@OgPTnl2IOlnVaw7oD={&l35fUuykC33?N5o|qTmLQJI-3V;Xu&0Y}7r+s-RjFzi`g)=^bK##6{Ey=v)FIcENsEx<&tIQt$%REZY zwmY;}GJMELdItLSbt*zW3eps56yCw9af78)mOznwQ8k~(^|J$s^X9-A)J0?P*QGZu@5#>cX8nk#07h2jiJ!wk@?ARVe#JG{5 z87OX))l~3u&`7UQlmxJlxx^blY2d@VM}8Y*XpCZHWs13Jjc`_0#3v`chK~JqmJM-& zuzQGcQ5-c9l7l9U{1cQZGb!K@&*UAPCqqEsoZkulxNZ-NjK z_RajbXtB{LdX#U}!Y|S{Qi$ z(Q)t)fFUg&`qgDvJv3cQ?nL^Ky7=9RlOs{UeXqkI(h>^(MA8wr=$Z6j@?0QsGV;?p+0%+s8F_CvyWF^7{) z2zZi_T4#92MkxL~#|`F1Fp3ge=pNo9h|VPU(19vN@Gyp%;)-IpKQ%%g znfkUU3;I`4kYRSL^1mQJ)JIC9Q<#t94(v&VJGnj$5Uz4lg*CJkmtWo{ zk1Uc3hz42Fu$UPTE2R(=(ahB*Rb;y3IzfD9~!w|Sp2JPz*Jp7P6DTIY>aharC?uxZlKJ8y?PO%U5yAW<%xaKxMWSN15$1v=NTd|jbIfUwzXK%8 z0|T32Ktfr+aQj?fETPGrcu+yXs?P`w592>_RW=8W+B{^7e?y`UhPRScS@9*i7{J{V zf4x+*-MmOz`RyjyAAb{of3s8R&t8K{%qR1gb+R6PR4#9bSE$M~dE3P}fT;XC(Lo6Q zTe;dIMZ~ZDae!=`695@HW8((r<|cQ%_;uNFROND~8>(?-@{%X^J zgwa1Jjd@6{0c6Z%(#X-$7|%dc{mte)0au$UaWt*0Q!I!*V;u0HHy#J7a+V~8r&WCu zpA8KCFarEu!zv6xH{?V=ik%a8%b0j?2HC&gvABSyf#58G2h)F{o5CnVT7Y2+mvY4k z(g+p_cG4xMB;XPqLF9&%6J(p>53T8-xN@?%nimxD3^u@S15Yh_|GYuGz%;tjS*F&h zF?f9sLjkU4F+FG-9ZB70CarW-11beGpD_>Hpy`}Czr#LYUM;UJYT+nTs$7eh&><2xlBBJL=x-W)6(|{Td&nR5pWkkcXXt_Mg zfco#j?2rpk4nUD#=1(_J{qoW|sg~vtJ)E+mnWPs{O}Dbk)J?J{$ZBk~yT+{(&nSLWEM!Z`v5(O*#0wU@4WYk}f^!;hWzMQo4-y%I6?z8~g8_$FXOF~d_(x_UD9>8D5AYKMsFN4rJix7rN z{PR(DCEj204hr!{XK!5a<>|Mr)|bG$T<$ZrZ(%%_x(}|8Vu=(5f)@tnkW%^1Q_;Jp z{JpgPRqNC{fJNqN8}$u6RV5r1bWrg2$bGZs4lIe{VzU|4*0<#O5R@vcv|o1LiG1}@ z!}pWxItO5C#FV2=*eKSzSRmTS$u&n$wu9hESm$;IeaY~UDAvBCqYEW<`U$9hBU32+ z(JZQ9i6Epi`c3+5umlXoJR&;o4xJEeZ`c@=pk6hhmL?_8Q}FeRnD zAUKI=cd`WG&nFG!3Jk*t@%158simPtaPlH!YiyDU&suUIg_wqT>~(Bgscf|bLDa>} z#~Z#WhvO_25tHyOR+V9m48N5&l;>aWAGWFE@p&jQjn z0Tf&zWhbs|HEjl1>2IEyTB;Kye|HFuHcI{eAgAH#vavgXQ+H!<0h9VmIim37b!|Em z>-L|!>`==Pt^iWA&&H{-ddI9w7D^zXT7}~;$XREh>c`bbBQ3#l7=N{OMNkr;(BYF% zBrgOl{@LSt9!00fZJdB{aKh}7@)sl?~YUt~iVOusKw!xpwTQWalzM8zmFbwKMu?Y7p zo-a1|uYF~=Pb!#y?FON5i^0kaasHrUKzSKeF#Hp@31ohoXJIub-@$`8Py&gv3=k|h z$DXk1**UZSgjh?e_*Bw{3Q!NBuqpm)g-4qY-QW;&fHXJ=5ke?{-4xpp1GHC?99;Gz zb;MyT4pss`R0t!rsWOx(nvxw5uGaa{D48SCLBCH`QpBkiE8uhz{A&xwk>kv|chBi) z!6IB}cZuL`$RE<=PuxRPJ7^yV5=B74NZ5B}6epN53_#zot~i3wdx5vlzmKvJfy!F$ z6oHM)a^LP3a2w2!g&X)~0aY||S40qpS03SvusAE65EX@On37griZ;HczO6)MM1Uet zDN`aZcfaR4xZLIp7Rf)Q4|PJT{TCRjcd}75SChwe6~Whx*-$E^x!c@G&7@}TdmJjL zoR|mQGZ){=$s*B$MPd~pF(qJUhj>cJ2kiHgO^$0Q`SZX6aI4+LfqW(Xv;pELptL5) z<5Yck3)CPG0l_~&O3p`lu;|8sO40o{u ze;^sSxPt;3s}>xO9WfgtAu-VpPZAM6M_{Cn{m=^;D1`7=55!fPDq!MPxET=L>>|lW zLR^h)lvt8y_kM^^;NHQ@Utgs?YrCLMsJ8s_sgIj+Yl@vD@1{jono)@Pc64>ysH<(H zUUAXaU@bsGH~Xin+(>;Gt5Ckt2}mRLtYjf|(40dEm%g72 ziCWVOK<2DKIIZ>^$5UjSif}*6>TG|!Kga{iyxOGXp8IxZ3Hdy?+`T0&B(^}564DwLM#JSr$qmGu0zBUuWjQ+zfT_A}t zx53ztqlMc5vF=FVQzwAjh*Ez8pvf?D$rF7OMiaJwOq075v~@Kgn?{v&#_uVcnOO1Scss1|7Zh+x#P6Hqz$?L)v@4>XdS139)J_^MWnh3IChY&lKujWse z*TJ3uxmMv!va@nF&jn~Jygp*WgJ-?50;o{X9;KPW#6lpUSx6;a5-A-1B0m-*>!!T^=Z_xN zYN{}eJNL{)KBFIyjRPgdj^xMJ z5INcOfH0F&vIia!p(^SAFS98q2`D>Gnw=V_`3rIW2Zg(eAGeC~KvKjosl(zeR&5Q- z14uEpb0g9t^xQ{J&+6D{!GDu%p@C@+E4U+X%kuEnZv7F8x#{UeMgi~NmK_<1VGLUj zUrja;=7V{)VQ1mBdEGy4P9fo|;Qnu4S73j64e*KyahanwGpHHOV^IRN^A9sC{{gO7ccnm$1WlweV;Y~S?U*31(_p9&$ zSb;0y7m;VDuY3_PBAs{NysiS_h8rE*n)jx0`7bNOtrB_X+;M^=d=WbkT(VU6bg42R zHrRQ1rLHmcMi5A1EC_JgST3LxL|z+l#rU($YW@HYM=h%+AyQj)L1=#HNs*5!1yb+Q zArQCJ8`@uTv&r8zww{--_VTd@G(KiD0BJ|wp^q4h}x)V9wze3_j z4SE!GIDF*@tGkdMZxC3};GyPERNQtlm#ZKc_V{NW&)6@0Ws7Cr7L}_OsaO+>8xW41 z7B^4I4gnDMjhNyN@iv~GX~n<=ka0l1uC>rw98^tu4?W)`Z1&6>fKwRO{1%77gdA)Jm_WSsOZE^myR-dC?VzwlHuEGY?wBgy+u-tmdc=*}A=eL-b^cljw)iyBuFEpTUuiR6R?2eq9o4$C~hGvS4RbmvLQANK{l6@*9%6X%G$8 zT72w*q;y^|Pok$T;c&-&hRuM_*1w#qA!h$Ma~e+n<|xE@b=R|XqX5wN3fzMER(Zj}m;rBY2(`gPuyP!S%m~D4fI82s`PgXWC88Jw!zJV> zI29$C4PazW^*D*3a7rkQ{PtJ$Iv-K=M5c+!!J-()&`fWi(BZq!;|}acTUZA6ANsOJ ztuvhi$a8wP^!|tG!({Xo1of!yIVQVaP-Aewb+a>Pu-wg(1AAguzMfia1P`y<=N=qR zl_HB$I@Na($q6vlCgdw%XD;;<+2MCPU_LL(lPT-1#1V-*`+k~hB$$U1-*|LHoS+%b zZu>2zV<2IGIn=>s2`Oagwi63kg(NHAF07!TM)L!sw7U)s^g3)hpA&ZO3VY`%Q;6o6S7?Bd6@6J={l^uyCZde)S6Y6A2IfmL*<}`^gNPsxeWs7$VMx{Y* z=lQysib_ePLMoaTFY5E@>xy9VYkK?b;vwYavd17Ug3#_s7f_8cF`%`HGChwmqH42n zB)?nObB&K@(Gn&}?6-)OZ&~Z*wg7kGU-9ctdDQLi8TJ%3()MDGXHkLm0);UB5Cjpn ze|^+;LbCmxsPdOcnrL>;m~{w4#rN~_9SBNE$!EE93pD?V zrvd(0z1V@y6o4GDRjAFf>N!91k^N|V59tjea~qOnihZj_ zDm3q4&HI<15K#??Cz{>DoN&7W0Fy8+sO+KQ+McU=9dBfUeq(+rZ$T^1Y4bSFJU3?e z4rBsewuBNeyXswfa*k6r5*XVtD=3vyGCsYlAYqqo& zu~-F1BIId7;3$A>BvLl{AkmypzjQ@f930T=-Xa~G5FJZ78=y9;sL#OZuv{I0v* zy!2n$Dm3vjuE+e2>u~8gK)4(Hi&AsXED-K7gPDX?Y4<$HuZ(j@@&rPXslr)g8GeZ8 z6-$)rB~GlAFhj{lmcOh*-|{J>x6RVHYYu15b#MN{t3!fJ`(pkJ z&!7Tu1GxIB`Fc@Lq+EIcjHti)--^2MY2r6A+8B2R2OW?^UAry&eOz&7J{=t)GHL5{ z|9F){g+N}yZhZvS`MuoN`8+&OTAg}g58AiWn215nsv~(qBNH*vR(byX=pQ|!s2e1^ zNsdj>SQ#LxGIP8F<{P8O2InyZy3l2Eg&1Cf8CMW?9)Btd;EwETe#pchR(mw!ONHwG z^M2gpjuI?Y$YHt%rakAU%)*?-GA7?_0^CnLOTjfP_z@sVCP^|W&Vo^gtT&CHRDZ{9 zBFLr+X!QH5k}>xt7Yn2Nbyw-Z1<@;4TMyk_{I|2BR2)*Nzi@;5Q7(P9U-}tawv4ep zq`Q8l{1UJ|L=bA=+4m+co5+F|6Jp8bb2N_e61%YqzCo%KuOuMe99#v?5U>lo)Sr)V z@`<9gO5oSgfq<4LUu%Aq(U+=N8@bi$A?`FOwS^Qne^m11+nX2Fs&BikB7P53J{6wV@i zQlqyLVlodhKu7oF)eh?NV}}}TMg~`EB?wPhoWD%$6yFha6EFY;(DbyRf_~wJc$I*H zDaFk>(i+<+{>_x+mpxGDJVx$vq4iwLk*o(AL6kbb96FIf1*k*HNSm#|0X>H>V?KPC z*PNx(1gl#t%m!ge;wL+9J$ZoPTn-(7IoYs`kg^ovVpd6#TC+xpNp{Zl}?D9%ALrOtxozd-h2{p=1dwK-J7<9>j* z%K4s(H-?pZ#Mv=D>3s>f+*?17Umw4w zzd1P8BJfhDVgWi`Fl3>~rcFePFrr;A#~UnO4OWm|sS%@bh5{g019D+!e8xSr*q;_@}Vuihb*Z#Rz<|+1=wNcz2%?Z2>Qx$qydyLJd>tZ^=pe zoyJ^|QgJ0?U0eq0h#{)ZBRB2#FPtNNP`yLpY2SC7dQdJr z_X)il+xcFlVEKezG1|Zy$wXL;>z;2YmTu zn0FGqTEseraDSk~gU=R!uNl{6tZ_Ih3U{^xsgC8zdDif-WTG~O7OSO8@x`%RfV^M{ z@0@D>EW&PR3eQ?T*3~e&jggtBfgr~vJ@-e3%t+oqJFJ78Xy8Bu^O0$%$JoeGkk%^p z?E3KbnA8E{nr1ct55i!1{wCrx%Hyp#THk70ka6j~^33gl;&_1r<0=pqW%4$j79(5u zFEO{{Y>DRY7K4(4>(Fp14d58+X#jSl5KVi8JF-s?S_Xbg3=zB$Ns{{&o}J@D>oFg& zs=A?n_;%@r^p5UNofbp|tK_c4>blee3|m?~1DW^OD*cyY>+uKmI7b*GQg-Y2-az2} z6333Qb%ty=Tn0Ool}@8@(|$$e(Zk>058)jimjYEVN*@d`$@r0sEw5j(Ve%@!YNzx1 ze+C?F)I6OiEY44|SH`0Vc5^`O1xw)s++65w1;3{^lXobcCp&$>OnBMH6nnSx4a06trAu8}B zk>TPin;=|)aZ3Nvu{dco+ZiHi$>j*J2ORsP_!$eY^VGkbcH)fY*hebjj9j;2E=Dp& zOMwvy(Dnh)a1P>vac+W3lXj%Z30L*g66{TxJPAJrU+ag+=#VwDf6)9Ij1Y6c$Ku%q z?rP%T&w5}gJrq74@J077x;$K5rr(mIw5?w*M~A`+6lzwh*v zn+^LT^u|WizCu%hTF&GBqa~3@A2wVU?=k)-qZtq|~a8N7zuJWH&9hu&CZ&7{e^8A)UJlLK@^=D2r`p#3=PF1IXf z{es>_e6My){3*IqzT2&E_-ENPAeGgr`Ypv0hQDunbi2$1BMUrcwf{J?AP%@DHn;rE zbJ?sXgi9NIv_p%Kl27N*zAyh7w|scd47&2~ULKN#x9g@O8`ve#x!*T-&0&el=JZVq z9m(FY=Kesd#sy=sA_hs*IE<=_a`%_~YN#tk?@{)iU@ZaM7V^%~dA-puiRQSk*ZZ!2 z3^(u0-DpX(aPR6uz$;INY37(m4EBA-$v)fRsmT8S0%`}9_~@LpLh@;oGZq|ldDW|4 zHLIQ2dq4A;&-{&w0yqX($K$`soRbEi99jS-;Bi!Af_J|2?H}v!AN)@uSQjU97!r(w zwQ4m)Cxif;%@9O_dw(s30h1NQb$ihG|tMzKV^*mfj9iThw-Q8Mc<;9kd>G0uSxb zZ!{i6WX*xu1~9?&IB>vl$aD{>r@s*2g~o_4IEl-N&w`qWUsIjG_dCDyJ6}{)PJCDY z9Z5g1oQnpa94;RU7!JDbx##`AEjYc%KmY&+T1iAfRNDMo8Gx)7T8HTbNB~mS3~cKd zBT=dzVzQq=#~}{V&T%q6i3YlnNE+7;^0&kYpPl@Xr~yS6}$B8f;OQ%V+RjA4?2gjV2rIF~M%pj5_GYh&9Kqsp0V z30}~<7yk9{{_gMo_e6Z89tObZ>)7&FnZo4~Tts#lU?}k6fWepHfRnU4 zr49a#I(d)AK=m)a=ny0#rLOjUyaX9Y94@XTHnas2v`p;_S(M=eR&=5-sn+ExJgH-b z3J{#yVTqQPT=P^D@8DXP>``-8dOS1MsPfmO!pX;36gK)AD2+|+VZP^a0&GXah>>#-z+WrP%*DZ&WE+k%+j)L zIweV2jbYfLMn!}4e9WgF-gJ&LLZX#qZ(t|H11;W8W4F!QVUoc92B&id^|=-nzH-K7 zes5Adg(g!wXeAg%Lx?YnBl(=4fT3V4m=)E}kmIu-*7n5+%C_+BLx&E1;j^Fp?6(E3 zTllW_&s*{h3HrHE3_yL<<(hzX0+_%b*zeQ1fSa$r`s%l8+`CgM@@idntQ;g@5p(he zRp>99K)OIM+oBjvCMhh6Ff|ea(IhwsY0@RF;u1-^6W?B<%rrDB<0>4#7+%CMsC_JZ zo4wEu2A^gUc{^4{1oL4GLPjZ$3tg_l(H7)o3QQbB6!0;WP!iVWO zg8o(ywLGr-s1hRsxXSmrzFIhccOe-7XsC}1>4yopU;=!cJ{#OOdh4yXUMa#|r;cB% zPq6KjX*(t)ZPE;3L`bX3Zs?K0(<@`CM}(|K$rpl!>|r4g#=xPvAsW(-t>Jb8>J-W6 zrHZ^n8A5WH0>~f==^&pn7-AS@sCbBPWi+fnG+w_-8JLXKxB(3rV4d@LFeX}y@t(_v zHeetRb`Qp=`nxFND|%sGZR0O$XqgbRA6MT_2!;cS)8XU2d%ynmuRpJ~0bcm)#D&;M zKR%bMd{0-@`8kMnp&fPl<&2Q~gmH9&eBAd+LS-Wk;`j7adiq8;jt&U1{X$OP(CBE_ z3`e>|R0vBLiJqUw{)tDVm|j9$oQP48q}5>*)G}oxsTN0?T%GcH88JeI@@h|Cw(WvZ z>y#lMadH*GS9j*39m)_#KJq6!$Kq&PWonXWdtyiBX0`Y;tKG+i`N_%oea}CS#KXyM z#5pZury4}(J}3MIBfjc20^nZ^=S<-C0Y1deeZrp45rCg}G7ozmWm(aAey=C@S1fdv z1nSJ&ZoY3-JcomHFYodAenH@z(0Q0N&!^ypbq>^pt+iYmZRD2|-Tgex;qf@H$>aV0 zAB*qA23`+4G5tO#aI>U)-iy}XpEhE1!ZwHLq{HKW9(U1@@KdPRiA_^EQ9Zsn&f_mS zXgQ)UdSguuG`HP+@7Y(1_w=7y)!IR(?EI1@M9Q@!82R}Fo5Fofi2oiz>2@)I<+}$NWAZU=_ z@{@b-yZ6?s_v*c^nw_5RuY0C@d#7r8_qC?FA}$ss761Ua%1ZLuk3HgV!$5nycT1WN zK6WU!GHNmaP#uqbYmWLjrngkmRs#S()<;}809^mY?*M=o9{}t^0YEez0LWakziNp; z3goTzm2K420M17m0{}(Y0Vt0Y=&?~gHUL1*2LZ^BJ?JklAL-vxL_YF==)XXvwA!3U zBmF-ho(>X>`f8f=axU)H^dh``ynKw3SoHMt;_g;9qT2Eb|5AS(Nif1ZJzYg15FZ~O zULQeT7k66-|FdV$AbbK40Rf&z1doTWv!^+n$JvAFpGN+d9eHaHOLse0PdgW9`oDI~ zEnK`jB^Vk1PW12VpX;=S+x=%IXODlm_2?kvuLQ!+%Ln82B@X%bgObDoBGw+$g`rhhUPc!VIxxXZ*ZuxQQsSmfP|&f99wVAD z`u#URa+aABC5{r;{>SXe>#7*#Iq>!tutFM%>aSRq#1f9{+^5A)N zn^jxCuO$r^57P~Pe$eoy<%VY4%dc%8KQ3O(REQeoc-S|+WIP6!NM|FtVSVHH|0a3` zQ5{=B&+*_DgS05V(MO>z0Oq+ zJ3Xci3+fGXfV`&~e?8|cA2n>VahHx(E00N~&zGetLEuLH1O6=uj81GAD7F$p?TnZUnTynq(GO`vb`$);`Yi{Hg{3kT z%Bug33uQyG;2jsZgdsOHJ%k)Thu9UNkS7P+hZ?!i7ir3i%NqlTDHNz1+Ye9q`rq)U zBB(Gb(|IRZ;R$zE|`1$<&{3)<79DO`POBoLn2#UJ|qpU+=&#CV!qA?JI zTbY^3$!FNQfhXgi;-wB4P|xXCxiLD;{L|Ze=Xan6luOPRaZt%=z3i(Qt$Lj2cbyx@ zw+&v;uV2*Y0?;E{HdfX)#CyRCG$GU653J10+>zj+hIgc?8Hl%U@#=5M3W~W&IJpuf zOb0?!@7&zoPm*4(S-u83erkYD?ec!`tYTGCH{+yD{%R5D;c@z2T}vyWI9HLfA~|&* zQ_4DWTR6EeP}0xA!7(~LJ&lXkF!mW0(7u$?yrCYBiDK6Vgy@p9vYOeKIJ*fEJv}{w z`PVL3WYPL9W?R4eB#i7g4~K=j_S(qveXG#$N3hYo)$78kNxAiZGb7g0gYqzGO!Hb= zstlZ0bXmB{_D{?!Ojg9l80|1cp0PZ6`7YtSAOV4tQQyQw-)ZlKU_mIdu^ZW)86-rmcRK%~${)k@!E~*8_bL|>Uf|X@u zWgJCCMSK3=j=KdS9Fg4J-7ELGhE`W57-j>tInsgxlxBoPnQ@(1<_}1+-bgC<9N}cC z%}k40Euf=sU4J2|X?>mK9mvQWMm8IcWv7Jn`)pF9kcr zD3=Mt?niN4tUpNBDpYU^N24G1GXWsh^PM&Zjh{^G8@@7A=(B1shyBXVXkgHamEtCG zVS7f;_@hIt&_idlO$Tc;)BM@HxvNIK^;iP^(YC;wHq%$HY!-0BKY*~Xv3oCG{j92V zNON&SP_7!Xi0$*1^Bya|w?AGB0H1OIlDDru5~5@UPh(boBw**u;KOdtGURE2;^Ba1yZ??Q#Y;sa=j20{Ji9SDpgmqQ zQC3RWWd4@Sd@KVV%S3{rp@1e5-U zp?+I4SMg-4E;Lw9?BX z!S1Ji4bPHvLcihi>K8p)`B@o*($FvT!9D1i+YQBwUwnA0Nx5+0}?yzrF#gGkK z=DKhxO*viVOq1Go#vLg$d+qloqicezs%4^%31$csYvkpI3}C%~YpxkVHI|Zf-Y?VS z?oi}t=fTMaQTF=P!BQVIEM9EIYS=|nR|7sP&zR}-#6sy~?^!6V zSCTn&RPmwdBB1U_T)DJ)8^eimdgW*2r|tfGTU&C&7Eys3DBXm*KI)6U!91H{6r+c< z)2)+uk+LGZyn`uGBit#<-%WZeBdu5l1(R+DhZ22jpmJYsoqTGUyRtv9ST{P7H zM@2+@+6fDLeFKwqIkHQdMqk{zPJHIR-55ZTZk<^k)X{yDx6&T`Kuzq{r^;WKTEQPF@1zOv$-K zBloUOYh_`X)h9cZZIv#Gi$Xc)>W_b-N`KPr?QP||<*)%&Y-vuU0pUASeCRKc!8e(& z3_h2biquPgfB%I=20!UIgg56nReKgpTy!|TyZrg$c?O5TO>EFfA^-DtX%n?}`0A(u zKJdzbjc`X_?-x1Zr&Wd@9le!BRy0(R7W(p4V<(V;YNhoFkHxS@%d(c;FVKZguHTY2 z9StE}*<{#NEb-9zxh9G8OYmA|Chj0jj2}`6`vZUUtml`0BzuOF&yH0YK)p_On`;ZRt+gO58k5mrBbae%% z0kG*scY*?e;q)C72~W!(Cb3G4Yv0TAQl+wZu#)z1+{uP@m+q!x3IS}9s;84@*yLWJ zzi=ladQparBg^m_xK~!`+e=~ZNY6JqFXctyo`<1R5?8d2+a`6Vns+*ATYYjw*Mq*K zYCAZ+N^22g7{MXWV6bDTG3ZZ?J1WAAxK0|(%tDM{id$CbxbLN@IJq}%zJ)qg4v9)= zyb)xY@g`iu$mCtB1El-(F*R#NTriTE{3T-!wtTFOS~g`FVi?%Aep zVaKK)x=$vz?%i12?|ui=bwE?Y@wOu=qqvtA=(+IC&l6VK-O;ol_hdO}L5b*l;OiXNLoCjS)H zcqrP-Lb&chXBn;6Ck<|=^!#IYdUXCL!pcE#h1W}{DQ4L=lsV47ya1C^5F-tdJ z0fqiLw%E>9GPt$-Yr zjLU-Od_j-z3cn58DupTgsrk0Xu;9Us=Zj2{^h~n@$5fWZ@kQ95((!g7809tXz!Dgb z>AC|>7arOgi-*DdoJoS@E#ntHAgYhPmJXSPnw=3fGy&odncT`sB>QDsbSVmGtBA{s=j8h5D}$>D6X)Cn zt_Jm?lrEe}N@`S}NU$+*y8O%@;TqWS{btX4y^Ye-kUlv7O=g`rHd_HXPU!eY%Z3q4 zMQk}yb~d%c41LCiSoUPk7{{HTXeAcns0fpOoGuwPIj<^nByvOYe)to#4-0?>0c-f7 zWP`p<-b?n3e$11TVl;!6V)gSGPo-Dy$UJbAcUs4i_|xODD{$H8gs`0|OnrYtgwxZ0 z_lJ=Y6W%0*%~A>FEq80HIsm$a_1D{uITLSb;nR&Xcq#TK^k410prP@2w7Nl}7`}sZ z+D*2q)i_;^tt1763!5CJ*JAXH<*a;lIDX$zV@_D>ktFx+zNS`kpF*)*a=in*3 zCqG6pY6liM2_`#=l?XO7e|iF%mAGMA1IaG!1>_ln+0Xbr2oZLpuhL~FX6S>TMy)vL z=TX&^ZlgsZc?zmqA zvGu0=#9S{45jtp*DMZsyg#-gAs2n>Ks>4~_OvvO9VMWTvET?86M1*kU@C*(37My7C z3?*Nc{7K_N+or5c9w3=%Z`Yf%Ua$8vi1`xSuQ=x`Wr-0vArHpLt2uS9mIETmI&TA7 z^_|JHARi_8q=>Fd`j4t;xLuqb67%j073x#P_%hS2%0(mRYTvKHC{lka5mSNaW3ha1 zH*~pzPoBKS6Ta`i!m8D+M zG3`k4lV89{?#b2N=1=5}H}d)1(%)G-!rGkmLs*8kLq|${LWFlW)}PzuLu_kKX=@(e|RDILlYJLn{w2 z2aYt7e{=0yH!+8aP{{n~c5p}B9%DCw1BsI8v9u}|=yKclMnN$_pX>XEGNsOG~ zrV$5`UY_jq7$0F8{a8eC0+0t!E6;cd#^bq_79jDxak{@yZ{X1C0wd75tSO zKxuT(<ychn`0Cw#+1t415N9okm=K?nz9}2rXhEQ!j;0e9pYVqRzsu^n=oO={< zrF-?^LDwE8&wvIzck?C!g-c6_4`|TX$y0n;{*s z>j&u~ZI;G~#6=NLdV^4w3RdWy1IX+e_@~^v10W)l9rUt@EBVl6VLnL$HLrUzuNuO) zrZl8)ONDo!pAEUYE@0aPx-r{d#`Apgr#*PqgiDAAkfHbFIJ;+Gp&f^LcYOIw>Nui* z9^NcGq+=lLF=f~%C>ZZ=Rnk7;n)W^k?r&6&xWnTnC`7;*6BG7F3%~p1fA^=SPx>qh zyEiD(A6>l@a?4<{RV(_S_uStKIln-foc2O&ErMi zr8Rpf-%3Q~vSvA2o2_j1($lYi+3~kGu_k=iyL5(#Fr5v<)$83frc-8bBOP+|g^0n9*ny5`pKm+~=b4gJjm4b*rnF5Kk z2PRBanD2F*whIoMaF(#Mq}qgD{0uu@r5%We-k3rcXA{S`O!8p_V#XF_AS50sjNtYh z^p_oQ{C)8f`rlyfndlqlM?Pw^6PWJpb>7Jfn(Eh7iKQeq-xuK7N$NP zTe*)x81Ei8#J7s5f1bi&YZS1%PIfy#l+~E7FLt2MUFaBKX|=dr4)Yv~$#CgNc1?Pf zm*hr|X+zJ6+Wkd2x@bm_2RH-$4zYxv*w>*v_unu)&R+Zoy^J4hk8jW%{|2g4XTV>p zB*2Y-|CM<1vCINhh5-56vBVp=n?z%0PU*nc`)({>SHXHjuPW3G-^+>C;LJH}$k6nY zI_Koz9I{#;45;p!JTnGBxJJmI!Eue90fgbr?jBSFq~&|TXSJff$a(P5XHC*J7AEa4 zv!rTvVJJcIzne7{H#07>tb9mpL_&;0SE!_sf$S7|a-p$?!i-E(AQM1&@Hu3V9k^)1 zCM!bFFsh*x$J%dLgB@LBUN{?=vAn2GoNUp--ZTyvoh9p9kihe`cv)D!8c~b0wq5E% zT3x0Lo5!Kfc!y((@n*pTJX?*yfQg`s8|!>|`ug)Jt?DgvP54vbp|R_ANNlfg z#t4%`wt8Bfx!b3Or(JnWWe;lD2$Heo$h&|&dZ6kD@~HRzLtbRX98u#$@0<=qCQe8e zM@bs|hR)d|^O9u$$CY}MiA~%<65Wp$+QXe?Dp?|t>f7l^8(-hRm?;rUMZRbO4U+N2 zPIg>HY1|(FPB>YcFYJ3)TC#4|lDA#Kl4p?VTxqz#OP9xFBS$BHm%$BDr$n?O+^sv? z%eLsAHa{VVk=ACwxF-_*Ou)TUf}zMDz3CkzUR8pLEw^ocbH2rg?V-Vyz%@`~DdL4Q zpDg9#kn){QsQ(Y*VW)n|1&m& z+9xvXI)92$5gWj(2o9EvlaVKbRum#W`Y1AUZ=FoE%?aO)5owAk6uwaM$X7+eP*T=h zZ0q3OhwUWntyU!$jbUBHLy~K|miqd+)#=j2wqD~?Zr$bJDWf=Mglo+Ey3zy(t)rg0 z>*eHp8j;~MYDl?yjQj~e@@59nsq?auE|)D0XC$?x zVWuBaKc&KRjucTQ}&%# z8n$#g&g0HQiBNfa;%vwMO;Q3sPb+rA@MKd97Pfi-BW6Qkkh?;k!T^Kblfg_{(2!jh zV>VE87Z;ehT;Y?Bj+^jPSoW-C(Dqs34@-2X;MR`@xkjtpQIrz*6|hpAYU3O;PKP;t z45L;uu979#LEY(+;rZ_A$<~V9bAcKm0e>QL2|-y4&U8{>j-sjnRrTf6T%AFq7T&O8Tm78vTXIyv-~aqnYNI-vX19$dOn=G!(1Fc% zAlv04=`>N{DO^kx7B+-Bi8MA7IZ1pg;8Mw&)CBov8mNP2HNcg(QTI7+x(0i((H1(n zWwk{o&4k#qYB2-nlYV9cC$7^X8I@(bABa6Y@_`jEMd4=mo?{=pSP$0o>DzFi+;R~+ zD8ttfI|{2U!%O|JMuC;4o@+RU)gxxUZB%d)g{zd*%**pGV|!CYg_!lp7<=p3NHLAj z<60&rCPD^OKT#&#>dosEoIiM|wy8#yw8M3BS}yH!gv{sRto0VN8|XuQU;cESlSy#Z zDP-OHvW@I@(%wsvCo$FbZYwL}H~3Zb{646q%G{hD=9#d#P(};HuZPEOe!N4&wMzEU zK#yM*6`-w=96@a!#Ec|JAh9j_WS8JD+CwI3E*E^SvM?Ei@%Y%21 z%@RGL*zK!@(;=C!wn^N$KvHKN;5c7XL}QCqSCGq?pc3P+^kRV3Fm7=dKngWY5;tC-DKCEZryf|>=}G%FbO(0 zFLdmvT8_<;xcKOWuic9}Ay^jl zaTVV#2s({z>^J%$X6lew#rUw};DwM1*jU2k&YC&-6W1W%KwJ$7?}!Sa#wT9^d5x|w z$~?t(J^%jPePdJn?A7gv-6)5h)5!VxIRw(U7V0rmAvefJpo$F)s8>`~JrKR+Xq}Un zAQ<$^M>XmV)Q#aal+djvWAnVkw^_rap;mYgMiKWCAR_k|2JNROuenB{q`#)zK(JGh zAFY}bUlDI4*8G`7LL571+bMbFCFZgVvTYBVK=0|#4*ca{&d#Q3Sy}!B&;sv6Hw;ui zJqL$9S`6uUuGdyQozNdTWXS_xo__LK-=(}-^v2;Te8{OBMj|h7tbC~5L-WtYWPo)x zN(e_%w!QSG9mVP4LXWS=-KE|7BDXww+PZT_o#C%6^~|GGxVz!iI2t7sG9VBb?#qs} zR#8@VjT5D0gxbuql^xL<^Z=j6Jn7jUKGDfuZbmKfwH=c}B+YH1K&Fb*9UXa<2i2q0 zm%9Z|R$aF5x*Hy=4c!fv>w-g|4G3MH9LvO>teV=e2=JUjm_$~k1*c}{3(#d1nr;_jP$AgU+M#u+&|5(}PjS^?%ySYv68 z;==Nz>_WkCw>qlP{SX)MCLMc7J``#n-<+ViJULR*^|5((U%ZLTJ1G4*x|jl%SLs9G zWU-o<%ho_j^Y9G8J0Snv)WKqd6sAn$vSUPbUppm{LVTMZ(?fVk9uBJd17iE?W8ue54nMMi+ds(whF?PzY%V{yNkq)u1@5Bv^O`uSnQYLNeP7a`+6Powc zqw_*8D=jSPjK$Zl|9+Ab4E_^C%Hv1-Tu2*miT+`~r%1Z8b_?Q;uEb3BS!1c9>~F zp^TT=wCOMKUO%?CLIN>DnM~p95zW<}<&5IV8!ir59sQMZK1U2=sXS6-{8J$D7Rq^P zhP9e>20@#l^tbCj8WDx%=2CNsYE z->>eqIeG-p3?a2ezKP1!1Y$3s)6>19k~jOU`Rgd(K+(ns=(AHE2v~Zz;}G);sNIh{ zSIp<|*BI7z967%QqYVN2232>ukC{+@D?8Fj@pvk?(G#;aK78FF7 zz5aQ5x_Xa?5#~z_?Lj#q6lvt)b(M3YdFv0N8^V(~7&1Q-7~}-d@Tk*Gb#;?-Q&LcU zm6TQ0)q5;xS+ECw6-)r2LQKI9L9)x&BDb`E2&W}f>1g0|3WrP3M(m^~c-$2YmgKW< zQ(hXkM^&j$2~|!iU1hy!)>ryQ9$)h^8kOIGjY1_P-+PQh4T&iaUGY|zf%Nn4S2^Xd zjFPJ92_oX2WSn9{TWs3_a+2c0TGsnSSnor literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-trex-60x60@2x.png b/website/assets/images/app-icon-trex-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b591bb0f539f8f709b1ed2ac22cb5ac659c3f086 GIT binary patch literal 23787 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-tuple-60x60@2x.png b/website/assets/images/app-icon-tuple-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..15473dacf22932caa76f8a57884560f54012396b GIT binary patch literal 13985 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-twine-app-60x60@2x.png b/website/assets/images/app-icon-twine-app-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..81c1f582f0acf93a3b6736480054129c92a39da4 GIT binary patch literal 9383 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 F{{UYtu}1&^ literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-twobird-60x60@2x.png b/website/assets/images/app-icon-twobird-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f710029388f4e47e7cacf9841f6211759c58f1c9 GIT binary patch literal 8953 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 bbMqk2qXX}3OTqH*Um_}snhNFe7NP$Gt7xh( literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-typeface-60x60@2x.png b/website/assets/images/app-icon-typeface-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..07e0e2c56b0ce5025f49fee50aaa9a014ac748a8 GIT binary patch literal 21965 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 Hn*{z3bA}Hc literal 0 HcmV?d00001