From 95d3845906ea94e0e69245486708fc4e5bda0055 Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Mon, 23 Nov 2020 13:44:28 -0700 Subject: [PATCH] 0.2.5 initial commit Makefile incomplete --- .gitignore | 3 + LICENSE.md | 18 + Makefile | 22 + README.md | 1 + agent/.gitignore | 42 + agent/.stylish-haskell.yaml | 252 + agent/Changelog.md | 12 + agent/README.md | 7 + agent/TODO.md | 3 + agent/app/main.hs | 5 + agent/brittany.yaml | 60 + agent/build.sh | 7 + agent/config/agent.service | 14 + agent/config/journald.conf | 6 + agent/config/nginx.conf | 29 + agent/config/routes | 54 + agent/config/settings.yml | 39 + agent/config/torrc | 5 + agent/hie.yaml | 13 + agent/migrations/0.1.0::0.1.0 | 1 + agent/migrations/0.1.0::0.1.1 | 1 + agent/migrations/0.1.1::0.1.2 | 1 + agent/migrations/0.1.2::0.1.3 | 1 + agent/migrations/0.1.3::0.1.4 | 1 + agent/migrations/0.1.4::0.1.5 | 1 + agent/migrations/0.1.5::0.2.0 | 2 + agent/migrations/0.2.0::0.2.1 | 1 + agent/migrations/0.2.1::0.2.2 | 1 + agent/migrations/0.2.2::0.2.3 | 1 + agent/migrations/0.2.3::0.2.4 | 1 + agent/migrations/0.2.4::0.2.5 | 1 + agent/package.yaml | 181 + agent/src/Application.hs | 227 + agent/src/Auth.hs | 19 + agent/src/Constants.hs | 16 + agent/src/Daemon/AppNotifications.hs | 48 + agent/src/Daemon/RefreshProcDev.hs | 20 + agent/src/Daemon/ZeroConf.hs | 56 + agent/src/Foundation.hs | 219 + agent/src/Handler/Apps.hs | 760 + agent/src/Handler/Authenticate.hs | 9 + agent/src/Handler/Backups.hs | 218 + agent/src/Handler/Hosts.hs | 85 + agent/src/Handler/Icons.hs | 106 + agent/src/Handler/Login.hs | 75 + agent/src/Handler/Notifications.hs | 32 + agent/src/Handler/PasswordUpdate.hs | 36 + agent/src/Handler/PowerOff.hs | 28 + agent/src/Handler/Register.hs | 140 + agent/src/Handler/Register/Nginx.hs | 158 + agent/src/Handler/Register/Tor.hs | 44 + agent/src/Handler/SelfUpdate.hs | 51 + agent/src/Handler/SshKeys.hs | 39 + agent/src/Handler/Status.hs | 71 + agent/src/Handler/Tor.hs | 24 + agent/src/Handler/Types/Apps.hs | 178 + agent/src/Handler/Types/HmacSig.hs | 28 + agent/src/Handler/Types/Hosts.hs | 44 + agent/src/Handler/Types/Metrics.hs | 26 + agent/src/Handler/Types/Parse.hs | 32 + agent/src/Handler/Types/Register.hs | 65 + agent/src/Handler/Types/V0/Base.hs | 77 + agent/src/Handler/Types/V0/Specs.hs | 45 + agent/src/Handler/Types/V0/Ssh.hs | 25 + agent/src/Handler/Types/V0/Wifi.hs | 32 + agent/src/Handler/Util.hs | 16 + agent/src/Handler/V0.hs | 120 + agent/src/Handler/Wifi.hs | 76 + agent/src/Lib/Algebra/Domain/AppMgr.hs | 469 + agent/src/Lib/Algebra/Domain/AppMgr/TH.hs | 43 + agent/src/Lib/Algebra/Domain/AppMgr/Types.hs | 29 + agent/src/Lib/Algebra/State/RegistryUrl.hs | 84 + agent/src/Lib/Avahi.hs | 68 + agent/src/Lib/Background.hs | 46 + agent/src/Lib/ClientManifest.hs | 297 + agent/src/Lib/Crypto.hs | 53 + agent/src/Lib/Database.hs | 53 + agent/src/Lib/Error.hs | 283 + agent/src/Lib/External/AppManifest.hs | 100 + agent/src/Lib/External/AppMgr.hs | 291 + agent/src/Lib/External/Metrics/Df.hs | 40 + agent/src/Lib/External/Metrics/Iotop.hs | 58 + agent/src/Lib/External/Metrics/ProcDev.hs | 118 + agent/src/Lib/External/Metrics/Temperature.hs | 22 + agent/src/Lib/External/Metrics/Top.hs | 114 + agent/src/Lib/External/Metrics/Types.hs | 89 + agent/src/Lib/External/Registry.hs | 196 + agent/src/Lib/External/Specs/CPU.hs | 32 + agent/src/Lib/External/Specs/Common.hs | 13 + agent/src/Lib/External/Specs/Memory.hs | 12 + agent/src/Lib/External/Util.hs | 17 + agent/src/Lib/External/WpaSupplicant.hs | 102 + agent/src/Lib/IconCache.hs | 94 + agent/src/Lib/Metrics.hs | 158 + agent/src/Lib/Migration.hs | 96 + agent/src/Lib/Notifications.hs | 109 + agent/src/Lib/Password.hs | 77 + agent/src/Lib/ProductKey.hs | 12 + agent/src/Lib/SelfUpdate.hs | 226 + agent/src/Lib/Sound.hs | 248 + agent/src/Lib/Ssh.hs | 81 + agent/src/Lib/Ssl.hs | 355 + agent/src/Lib/Synchronizers.hs | 437 + agent/src/Lib/SystemCtl.hs | 23 + agent/src/Lib/SystemPaths.hs | 254 + agent/src/Lib/Tor.hs | 13 + agent/src/Lib/TyFam/ConditionalData.hs | 20 + agent/src/Lib/Types/Core.hs | 114 + agent/src/Lib/Types/Emver.hs | 258 + agent/src/Lib/Types/Emver/Orphans.hs | 40 + agent/src/Lib/Types/NetAddress.hs | 13 + agent/src/Lib/Types/ServerApp.hs | 40 + agent/src/Lib/Types/Url.hs | 50 + agent/src/Lib/WebServer.hs | 185 + agent/src/Model.hs | 62 + agent/src/Orphans/Digest.hs | 25 + agent/src/Orphans/UUID.hs | 18 + agent/src/Settings.hs | 85 + agent/src/Startlude.hs | 128 + agent/src/Startlude/ByteStream.hs | 13 + agent/src/Startlude/ByteStream/Char8.hs | 7 + agent/src/Util/Conduit.hs | 23 + agent/src/Util/File.hs | 12 + agent/src/Util/Function.hs | 16 + agent/src/Util/Text.hs | 24 + agent/stack.yaml | 25 + agent/test/ChecklistSpec.hs | 20 + agent/test/Lib/External/AppManifestSpec.hs | 77 + agent/test/Lib/SoundSpec.hs | 16 + agent/test/Lib/Types/EmverProp.hs | 149 + agent/test/Live/Metrics.hs | 22 + agent/test/Live/Serialize.hs | 30 + agent/test/Live/df.sample | 2 + agent/test/Live/iotop.sample | 119 + agent/test/Live/lscpu.sample | 15 + agent/test/Live/procDev.sample | 6 + agent/test/Live/test-configure-bitcoind | 2 + agent/test/Live/test-install-bitcoind | 2 + agent/test/Live/test-register | 3 + agent/test/Live/test-self-update | 3 + agent/test/Live/top.sample | 130 + agent/test/Main.hs | 13 + agent/test/Spec.hs | 1 + agent/weeder.dhall | 1 + appmgr/.github/workflows/rust.yml | 30 + appmgr/.gitignore | 2 + appmgr/Cargo.lock | 2599 +++ appmgr/Cargo.toml | 49 + appmgr/README.md | 10 + appmgr/build-dev.sh | 8 + appmgr/build-prod.sh | 9 + appmgr/src/apps.rs | 440 + appmgr/src/backup.rs | 238 + appmgr/src/config/mod.rs | 324 + appmgr/src/config/rule_parser.pest | 76 + appmgr/src/config/rules.rs | 1252 ++ appmgr/src/config/spec.rs | 1874 +++ appmgr/src/config/util.rs | 367 + appmgr/src/config/value.rs | 66 + appmgr/src/control.rs | 194 + appmgr/src/dependencies.rs | 276 + appmgr/src/disks.rs | 230 + appmgr/src/error.rs | 107 + appmgr/src/index.rs | 130 + appmgr/src/inspect.rs | 195 + appmgr/src/install.rs | 564 + appmgr/src/lib.rs | 51 + appmgr/src/logs.rs | 199 + appmgr/src/main.rs | 1645 ++ appmgr/src/manifest.rs | 76 + appmgr/src/pack.rs | 398 + appmgr/src/registry.rs | 66 + appmgr/src/remove.rs | 117 + appmgr/src/tor.rs | 414 + appmgr/src/update.rs | 80 + appmgr/src/util.rs | 553 + appmgr/src/version/mod.rs | 251 + appmgr/src/version/v0_1_0.rs | 278 + appmgr/src/version/v0_1_1.rs | 202 + appmgr/src/version/v0_1_2.rs | 104 + appmgr/src/version/v0_1_3.rs | 21 + appmgr/src/version/v0_1_4.rs | 21 + appmgr/src/version/v0_1_5.rs | 21 + appmgr/src/version/v0_2_0.rs | 98 + appmgr/src/version/v0_2_1.rs | 21 + appmgr/src/version/v0_2_2.rs | 21 + appmgr/src/version/v0_2_3.rs | 21 + appmgr/src/version/v0_2_4.rs | 21 + appmgr/src/version/v0_2_5.rs | 21 + make_image.sh | 5 + ui/.gitignore | 33 + ui/README.md | 19 + ui/angular.json | 144 + ui/browserslist | 12 + ui/build-send-beta.sh | 40 + ui/build-send.sh | 38 + ui/client-manifest.yaml | 117 + ui/ionic.config.json | 5 + ui/package-lock.json | 13885 ++++++++++++++++ ui/package.json | 62 + ui/postprocess.ts | 13 + ui/src/app/app-config/config-cursor.ts | 446 + ui/src/app/app-config/config-types.ts | 133 + ui/src/app/app-config/config-utilities.ts | 413 + ui/src/app/app-config/modal-presentable.ts | 27 + ui/src/app/app-routing.module.ts | 48 + ui/src/app/app.component.html | 159 + ui/src/app/app.component.scss | 13 + ui/src/app/app.component.ts | 190 + ui/src/app/app.module.ts | 41 + .../badge-menu.component.html | 12 + .../badge-menu.component.module.ts | 20 + .../badge-menu.component.scss | 17 + .../badge-menu-button/badge-menu.component.ts | 27 + .../config-header.component.html | 24 + .../config-header.component.module.ts | 20 + .../config-header.component.scss | 0 .../config-header/config-header.component.ts | 12 + .../dependency-list.component.html | 14 + .../dependency-list.component.module.ts | 28 + .../dependency-list.component.scss | 0 .../dependency-list.component.ts | 30 + .../installed-dependency-item.component.html | 33 + ...talled-dependency-item.component.module.ts | 22 + .../installed-dependency-item.component.scss | 30 + .../installed-dependency-item.component.ts | 113 + ...marketplace-dependency-item.component.html | 45 + ...tplace-dependency-item.component.module.ts | 22 + ...marketplace-dependency-item.component.scss | 35 + .../marketplace-dependency-item.component.ts | 88 + .../error-message.component.html | 6 + .../error-message.component.module.ts | 20 + .../error-message.component.scss | 10 + .../error-message/error-message.component.ts | 19 + .../information-popover.component.html | 11 + .../information-popover.component.module.ts | 20 + .../information-popover.component.scss | 0 .../information-popover.component.ts | 18 + .../complete/complete.component.html | 17 + .../complete/complete.component.module.ts | 20 + .../complete/complete.component.ts | 82 + .../dependencies/dependencies.component.html | 31 + .../dependencies.component.module.ts | 22 + .../dependencies/dependencies.component.ts | 127 + .../dependents/dependents.component.html | 42 + .../dependents/dependents.component.module.ts | 22 + .../dependents/dependents.component.ts | 59 + .../install-wizard.component.html | 52 + .../install-wizard.component.module.ts | 26 + .../install-wizard.component.scss | 79 + .../install-wizard.component.ts | 128 + .../app/components/install-wizard/loadable.ts | 11 + .../install-wizard/prebaked-wizards.ts | 161 + .../components/install-wizard/wizard-types.ts | 7 + .../object-config-item.component.html | 16 + .../object-config.component.html | 10 + .../object-config.component.module.ts | 24 + .../object-config.component.scss | 43 + .../object-config/object-config.component.ts | 101 + .../pwa-back-button/pwa-back.component.html | 3 + .../pwa-back.component.module.ts | 20 + .../pwa-back-button/pwa-back.component.scss | 0 .../pwa-back-button/pwa-back.component.ts | 16 + ui/src/app/components/qr/qr.component.html | 1 + .../app/components/qr/qr.component.module.ts | 18 + ui/src/app/components/qr/qr.component.scss | 0 ui/src/app/components/qr/qr.component.ts | 16 + .../recommendation-button.component.html | 9 + .../recommendation-button.component.module.ts | 20 + .../recommendation-button.component.scss | 0 .../recommendation-button.component.ts | 66 + .../components/status/status.component.html | 24 + .../status/status.component.module.ts | 16 + .../components/status/status.component.scss | 32 + .../app/components/status/status.component.ts | 56 + ui/src/app/guards/auth.guard.ts | 36 + ui/src/app/guards/deactivate.guard.ts | 26 + ui/src/app/guards/unauth.guard.ts | 26 + .../modals/app-backup/app-backup.module.ts | 15 + .../modals/app-backup/app-backup.page.html | 50 + .../modals/app-backup/app-backup.page.scss | 0 .../app/modals/app-backup/app-backup.page.ts | 206 + .../modal-injectable-token.ts | 3 + .../modal-injectable-type.ts | 4 + .../modal-injectable-value.ts | 16 + .../app-config-list/app-config-list.module.ts | 21 + .../app-config-list/app-config-list.page.html | 68 + .../app-config-list/app-config-list.page.scss | 0 .../app-config-list/app-config-list.page.ts | 146 + .../app-config-object.module.ts | 19 + .../app-config-object.page.html | 27 + .../app-config-object.page.scss | 0 .../app-config-object.page.ts | 57 + .../app-config-union.module.ts | 22 + .../app-config-union.page.html | 31 + .../app-config-union.page.scss | 0 .../app-config-union/app-config-union.page.ts | 58 + .../app-config-value.module.ts | 19 + .../app-config-value.page.html | 83 + .../app-config-value.page.scss | 0 .../app-config-value/app-config-value.page.ts | 173 + .../app-release-notes.module.ts | 15 + .../app-release-notes.page.html | 14 + .../app-release-notes.page.scss | 0 .../app-release-notes.page.ts | 20 + ui/src/app/models/app-model.ts | 161 + ui/src/app/models/app-types.ts | 122 + ui/src/app/models/model-preload.ts | 73 + ui/src/app/models/server-model.ts | 175 + ui/src/app/models/storage-keys.ts | 6 + ui/src/app/modules/sharing.module.ts | 52 + .../app-available-list.module.ts | 31 + .../app-available-list.page.html | 54 + .../app-available-list.page.scss | 6 + .../app-available-list.page.ts | 82 + .../app-available-show.module.ts | 42 + .../app-available-show.page.html | 115 + .../app-available-show.page.scss | 34 + .../app-available-show.page.ts | 249 + .../app-config/app-config.module.ts | 45 + .../app-config/app-config.page.html | 119 + .../app-config/app-config.page.scss | 0 .../apps-routes/app-config/app-config.page.ts | 244 + .../app-installed-list.module.ts | 36 + .../app-installed-list.page.html | 53 + .../app-installed-list.page.scss | 53 + .../app-installed-list.page.ts | 106 + .../app-installed-show.module.ts | 42 + .../app-installed-show.page.html | 163 + .../app-installed-show.page.scss | 41 + .../app-installed-show.page.ts | 300 + .../app-instructions.module.ts | 29 + .../app-instructions.page.html | 31 + .../app-instructions.page.scss | 0 .../app-instructions/app-instructions.page.ts | 37 + .../apps-routes/app-logs/app-logs.module.ts | 28 + .../apps-routes/app-logs/app-logs.page.html | 22 + .../apps-routes/app-logs/app-logs.page.scss | 0 .../apps-routes/app-logs/app-logs.page.ts | 50 + .../app-metrics/app-metrics.module.ts | 32 + .../app-metrics/app-metrics.page.html | 69 + .../app-metrics/app-metrics.page.scss | 3 + .../app-metrics/app-metrics.page.ts | 139 + .../apps-routes/app-metrics/metric-store.ts | 15 + .../pages/apps-routes/apps-routing.module.ts | 52 + .../authenticate-routing.module.ts | 17 + .../pages/authenticate/authenticate.module.ts | 21 + .../pages/authenticate/authenticate.page.html | 27 + .../pages/authenticate/authenticate.page.scss | 0 .../pages/authenticate/authenticate.page.ts | 44 + .../notifications/notifications.module.ts | 26 + .../notifications/notifications.page.html | 64 + .../notifications/notifications.page.scss | 3 + .../pages/notifications/notifications.page.ts | 98 + .../dev-options/dev-options.module.ts | 28 + .../dev-options/dev-options.page.html | 29 + .../dev-options/dev-options.page.scss | 0 .../dev-options/dev-options.page.ts | 42 + .../dev-ssh-keys/dev-ssh-keys.module.ts | 26 + .../dev-ssh-keys/dev-ssh-keys.page.html | 51 + .../dev-ssh-keys/dev-ssh-keys.page.scss | 0 .../dev-ssh-keys/dev-ssh-keys.page.ts | 56 + .../developer-routing.module.ts | 19 + .../app/pages/server-routes/lan/lan.module.ts | 28 + .../app/pages/server-routes/lan/lan.page.html | 67 + .../app/pages/server-routes/lan/lan.page.scss | 0 .../app/pages/server-routes/lan/lan.page.ts | 82 + .../server-config/server-config.module.ts | 30 + .../server-config/server-config.page.html | 29 + .../server-config/server-config.page.scss | 0 .../server-config/server-config.page.ts | 43 + .../server-metrics/server-metrics.module.ts | 28 + .../server-metrics/server-metrics.page.html | 32 + .../server-metrics/server-metrics.page.scss | 3 + .../server-metrics/server-metrics.page.ts | 70 + .../server-routes/server-routing.module.ts | 47 + .../server-show/server-show.module.ts | 32 + .../server-show/server-show.page.html | 86 + .../server-show/server-show.page.scss | 12 + .../server-show/server-show.page.ts | 222 + .../server-specs/server-specs.module.ts | 30 + .../server-specs/server-specs.page.html | 33 + .../server-specs/server-specs.page.scss | 0 .../server-specs/server-specs.page.ts | 53 + .../wifi/wifi-add/wifi-add.module.ts | 28 + .../wifi/wifi-add/wifi-add.page.html | 52 + .../wifi/wifi-add/wifi-add.page.scss | 0 .../wifi/wifi-add/wifi-add.page.ts | 67 + .../pages/server-routes/wifi/wifi.module.ts | 30 + .../pages/server-routes/wifi/wifi.page.html | 47 + .../pages/server-routes/wifi/wifi.page.scss | 0 .../app/pages/server-routes/wifi/wifi.page.ts | 102 + .../pages/server-routes/wifi/wifi.service.ts | 80 + ui/src/app/pipes/annotation-status.pipe.ts | 33 + ui/src/app/pipes/display-bulb.pipe.ts | 21 + ui/src/app/pipes/emver.pipe.ts | 64 + ui/src/app/pipes/icon.pipe.ts | 11 + ui/src/app/pipes/includes.pipe.ts | 10 + .../pipes/installed-latest-comparison.pipe.ts | 46 + ui/src/app/pipes/markdown.pipe.ts | 14 + ui/src/app/pipes/mask.pipe.ts | 12 + ui/src/app/pipes/peek-properties.pipe.ts | 11 + ui/src/app/pipes/truncate.pipe.ts | 32 + ui/src/app/pipes/typeof.pipe.ts | 10 + ui/src/app/services/api/API.def | 107 + ui/src/app/services/api/api-types.ts | 32 + .../app/services/api/api.service.factory.ts | 14 + ui/src/app/services/api/api.service.ts | 97 + ui/src/app/services/api/live-api.service.ts | 257 + ui/src/app/services/api/md-sample.md | 477 + ui/src/app/services/api/mock-api.service.ts | 1086 ++ ui/src/app/services/api/mock-app-fixures.ts | 289 + ui/src/app/services/auth.service.ts | 62 + ui/src/app/services/config.service.ts | 33 + ui/src/app/services/emver.service.ts | 21 + ui/src/app/services/http.service.ts | 118 + ui/src/app/services/loader.service.ts | 86 + ui/src/app/services/pwa-back.service.ts | 23 + ui/src/app/services/server-config.service.ts | 114 + ui/src/app/services/split-pane.service.ts | 10 + ui/src/app/services/sync.notifier.ts | 50 + ui/src/app/services/sync.service.ts | 79 + .../tracking-modal-controller.service.ts | 70 + ui/src/app/util/cleanup.ts | 15 + ui/src/app/util/countries.json | 252 + ui/src/app/util/map-subject.util.ts | 82 + ui/src/app/util/metrics.util.ts | 192 + ui/src/app/util/misc.util.ts | 161 + ui/src/app/util/property-subject.util.ts | 49 + ui/src/app/util/rxjs.util.ts | 53 + ui/src/app/util/status-rendering.ts | 31 + ui/src/app/util/types.util.ts | 1 + ui/src/app/util/web.util.ts | 32 + ui/src/app/util/webview.context.ts | 8 + ui/src/assets/favicon.ico | Bin 0 -> 7406 bytes .../fonts/Montserrat/Montserrat-Black.ttf | Bin 0 -> 257552 bytes .../Montserrat/Montserrat-BlackItalic.ttf | Bin 0 -> 261732 bytes .../fonts/Montserrat/Montserrat-Bold.ttf | Bin 0 -> 244468 bytes .../Montserrat/Montserrat-BoldItalic.ttf | Bin 0 -> 249556 bytes .../fonts/Montserrat/Montserrat-ExtraBold.ttf | Bin 0 -> 244868 bytes .../Montserrat/Montserrat-ExtraBoldItalic.ttf | Bin 0 -> 249776 bytes .../Montserrat/Montserrat-ExtraLight.ttf | Bin 0 -> 242128 bytes .../Montserrat-ExtraLightItalic.ttf | Bin 0 -> 246176 bytes .../fonts/Montserrat/Montserrat-Italic.ttf | Bin 0 -> 249088 bytes .../fonts/Montserrat/Montserrat-Light.ttf | Bin 0 -> 242068 bytes .../Montserrat/Montserrat-LightItalic.ttf | Bin 0 -> 246276 bytes .../fonts/Montserrat/Montserrat-Medium.ttf | Bin 0 -> 243180 bytes .../Montserrat/Montserrat-MediumItalic.ttf | Bin 0 -> 248044 bytes .../fonts/Montserrat/Montserrat-Regular.ttf | Bin 0 -> 245708 bytes .../fonts/Montserrat/Montserrat-SemiBold.ttf | Bin 0 -> 243816 bytes .../Montserrat/Montserrat-SemiBoldItalic.ttf | Bin 0 -> 249192 bytes .../fonts/Montserrat/Montserrat-Thin.ttf | Bin 0 -> 241436 bytes .../Montserrat/Montserrat-ThinItalic.ttf | Bin 0 -> 245372 bytes ui/src/assets/fonts/Montserrat/OFL.txt | 93 + ui/src/assets/fonts/Open_Sans/LICENSE.txt | 202 + .../assets/fonts/Open_Sans/OpenSans-Bold.ttf | Bin 0 -> 104120 bytes .../fonts/Open_Sans/OpenSans-BoldItalic.ttf | Bin 0 -> 92628 bytes .../fonts/Open_Sans/OpenSans-ExtraBold.ttf | Bin 0 -> 102076 bytes .../Open_Sans/OpenSans-ExtraBoldItalic.ttf | Bin 0 -> 92772 bytes .../fonts/Open_Sans/OpenSans-Italic.ttf | Bin 0 -> 92240 bytes .../assets/fonts/Open_Sans/OpenSans-Light.ttf | Bin 0 -> 101696 bytes .../fonts/Open_Sans/OpenSans-LightItalic.ttf | Bin 0 -> 92488 bytes .../fonts/Open_Sans/OpenSans-Regular.ttf | Bin 0 -> 96932 bytes .../fonts/Open_Sans/OpenSans-SemiBold.ttf | Bin 0 -> 100820 bytes .../Open_Sans/OpenSans-SemiBoldItalic.ttf | Bin 0 -> 92180 bytes ui/src/assets/img/issue-bulb.png | Bin 0 -> 946 bytes ui/src/assets/img/off-bulb.png | Bin 0 -> 305 bytes ui/src/assets/img/running-bulb.png | Bin 0 -> 1016 bytes ui/src/assets/img/service-icons/bitcoind.png | Bin 0 -> 26145 bytes ui/src/assets/img/service-icons/bitwarden.png | Bin 0 -> 12435 bytes .../img/service-icons/btc-rpc-proxy.png | Bin 0 -> 58548 bytes .../assets/img/service-icons/c-lightning.png | Bin 0 -> 52891 bytes ui/src/assets/img/service-icons/cups.png | Bin 0 -> 63490 bytes .../assets/img/service-icons/filebrowser.png | Bin 0 -> 32957 bytes .../img/service-icons/lightning-terminal.png | Bin 0 -> 56454 bytes ui/src/assets/img/service-icons/lnd.png | Bin 0 -> 8787 bytes ui/src/assets/img/service-icons/pastebin.png | Bin 0 -> 62141 bytes .../img/service-icons/ride-the-lightning.png | Bin 0 -> 25506 bytes ui/src/assets/img/warning-bulb.png | Bin 0 -> 948 bytes ui/src/assets/logo-full.png | Bin 0 -> 16716 bytes ui/src/assets/logo.png | Bin 0 -> 8789 bytes ui/src/environments/environment.prod.ts | 3 + ui/src/environments/environment.ts | 16 + ui/src/global.scss | 280 + ui/src/globals.d.ts | 1 + ui/src/index.html | 22 + ui/src/main.ts | 12 + ui/src/polyfills.ts | 70 + ui/src/theme/variables.scss | 273 + ui/src/zone-flags.ts | 5 + ui/test/assets/bitcoind.png | Bin 0 -> 26145 bytes ui/test/assets/bitwarden.png | Bin 0 -> 12435 bytes ui/test/assets/btc-rpc-proxy.png | Bin 0 -> 58548 bytes ui/test/assets/c-lightning.png | Bin 0 -> 52891 bytes ui/test/assets/cups.png | Bin 0 -> 63490 bytes ui/test/assets/filebrowser.png | Bin 0 -> 32957 bytes ui/test/assets/lightning-terminal.png | Bin 0 -> 56454 bytes ui/test/assets/lnd.png | Bin 0 -> 8787 bytes ui/test/assets/pastebin.png | Bin 0 -> 62141 bytes ui/test/assets/ride-the-lightning.png | Bin 0 -> 25506 bytes ui/tsconfig.json | 38 + ui/tslint.json | 47 + ui/use-mocks.json | 3 + 503 files changed, 53448 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.md create mode 100644 Makefile create mode 100644 README.md create mode 100644 agent/.gitignore create mode 100644 agent/.stylish-haskell.yaml create mode 100644 agent/Changelog.md create mode 100644 agent/README.md create mode 100644 agent/TODO.md create mode 100644 agent/app/main.hs create mode 100644 agent/brittany.yaml create mode 100755 agent/build.sh create mode 100644 agent/config/agent.service create mode 100644 agent/config/journald.conf create mode 100644 agent/config/nginx.conf create mode 100644 agent/config/routes create mode 100644 agent/config/settings.yml create mode 100644 agent/config/torrc create mode 100644 agent/hie.yaml create mode 100644 agent/migrations/0.1.0::0.1.0 create mode 100644 agent/migrations/0.1.0::0.1.1 create mode 100644 agent/migrations/0.1.1::0.1.2 create mode 100644 agent/migrations/0.1.2::0.1.3 create mode 100644 agent/migrations/0.1.3::0.1.4 create mode 100644 agent/migrations/0.1.4::0.1.5 create mode 100644 agent/migrations/0.1.5::0.2.0 create mode 100644 agent/migrations/0.2.0::0.2.1 create mode 100644 agent/migrations/0.2.1::0.2.2 create mode 100644 agent/migrations/0.2.2::0.2.3 create mode 100644 agent/migrations/0.2.3::0.2.4 create mode 100644 agent/migrations/0.2.4::0.2.5 create mode 100644 agent/package.yaml create mode 100644 agent/src/Application.hs create mode 100644 agent/src/Auth.hs create mode 100644 agent/src/Constants.hs create mode 100644 agent/src/Daemon/AppNotifications.hs create mode 100644 agent/src/Daemon/RefreshProcDev.hs create mode 100644 agent/src/Daemon/ZeroConf.hs create mode 100644 agent/src/Foundation.hs create mode 100644 agent/src/Handler/Apps.hs create mode 100644 agent/src/Handler/Authenticate.hs create mode 100644 agent/src/Handler/Backups.hs create mode 100644 agent/src/Handler/Hosts.hs create mode 100644 agent/src/Handler/Icons.hs create mode 100644 agent/src/Handler/Login.hs create mode 100644 agent/src/Handler/Notifications.hs create mode 100644 agent/src/Handler/PasswordUpdate.hs create mode 100644 agent/src/Handler/PowerOff.hs create mode 100644 agent/src/Handler/Register.hs create mode 100644 agent/src/Handler/Register/Nginx.hs create mode 100644 agent/src/Handler/Register/Tor.hs create mode 100644 agent/src/Handler/SelfUpdate.hs create mode 100644 agent/src/Handler/SshKeys.hs create mode 100644 agent/src/Handler/Status.hs create mode 100644 agent/src/Handler/Tor.hs create mode 100644 agent/src/Handler/Types/Apps.hs create mode 100644 agent/src/Handler/Types/HmacSig.hs create mode 100644 agent/src/Handler/Types/Hosts.hs create mode 100644 agent/src/Handler/Types/Metrics.hs create mode 100644 agent/src/Handler/Types/Parse.hs create mode 100644 agent/src/Handler/Types/Register.hs create mode 100644 agent/src/Handler/Types/V0/Base.hs create mode 100644 agent/src/Handler/Types/V0/Specs.hs create mode 100644 agent/src/Handler/Types/V0/Ssh.hs create mode 100644 agent/src/Handler/Types/V0/Wifi.hs create mode 100644 agent/src/Handler/Util.hs create mode 100644 agent/src/Handler/V0.hs create mode 100644 agent/src/Handler/Wifi.hs create mode 100644 agent/src/Lib/Algebra/Domain/AppMgr.hs create mode 100644 agent/src/Lib/Algebra/Domain/AppMgr/TH.hs create mode 100644 agent/src/Lib/Algebra/Domain/AppMgr/Types.hs create mode 100644 agent/src/Lib/Algebra/State/RegistryUrl.hs create mode 100644 agent/src/Lib/Avahi.hs create mode 100644 agent/src/Lib/Background.hs create mode 100644 agent/src/Lib/ClientManifest.hs create mode 100644 agent/src/Lib/Crypto.hs create mode 100644 agent/src/Lib/Database.hs create mode 100644 agent/src/Lib/Error.hs create mode 100644 agent/src/Lib/External/AppManifest.hs create mode 100644 agent/src/Lib/External/AppMgr.hs create mode 100644 agent/src/Lib/External/Metrics/Df.hs create mode 100644 agent/src/Lib/External/Metrics/Iotop.hs create mode 100644 agent/src/Lib/External/Metrics/ProcDev.hs create mode 100644 agent/src/Lib/External/Metrics/Temperature.hs create mode 100644 agent/src/Lib/External/Metrics/Top.hs create mode 100644 agent/src/Lib/External/Metrics/Types.hs create mode 100644 agent/src/Lib/External/Registry.hs create mode 100644 agent/src/Lib/External/Specs/CPU.hs create mode 100644 agent/src/Lib/External/Specs/Common.hs create mode 100644 agent/src/Lib/External/Specs/Memory.hs create mode 100644 agent/src/Lib/External/Util.hs create mode 100644 agent/src/Lib/External/WpaSupplicant.hs create mode 100644 agent/src/Lib/IconCache.hs create mode 100644 agent/src/Lib/Metrics.hs create mode 100644 agent/src/Lib/Migration.hs create mode 100644 agent/src/Lib/Notifications.hs create mode 100644 agent/src/Lib/Password.hs create mode 100644 agent/src/Lib/ProductKey.hs create mode 100644 agent/src/Lib/SelfUpdate.hs create mode 100644 agent/src/Lib/Sound.hs create mode 100644 agent/src/Lib/Ssh.hs create mode 100644 agent/src/Lib/Ssl.hs create mode 100644 agent/src/Lib/Synchronizers.hs create mode 100644 agent/src/Lib/SystemCtl.hs create mode 100644 agent/src/Lib/SystemPaths.hs create mode 100644 agent/src/Lib/Tor.hs create mode 100644 agent/src/Lib/TyFam/ConditionalData.hs create mode 100644 agent/src/Lib/Types/Core.hs create mode 100644 agent/src/Lib/Types/Emver.hs create mode 100644 agent/src/Lib/Types/Emver/Orphans.hs create mode 100644 agent/src/Lib/Types/NetAddress.hs create mode 100644 agent/src/Lib/Types/ServerApp.hs create mode 100644 agent/src/Lib/Types/Url.hs create mode 100644 agent/src/Lib/WebServer.hs create mode 100644 agent/src/Model.hs create mode 100644 agent/src/Orphans/Digest.hs create mode 100644 agent/src/Orphans/UUID.hs create mode 100644 agent/src/Settings.hs create mode 100644 agent/src/Startlude.hs create mode 100644 agent/src/Startlude/ByteStream.hs create mode 100644 agent/src/Startlude/ByteStream/Char8.hs create mode 100644 agent/src/Util/Conduit.hs create mode 100644 agent/src/Util/File.hs create mode 100644 agent/src/Util/Function.hs create mode 100644 agent/src/Util/Text.hs create mode 100644 agent/stack.yaml create mode 100644 agent/test/ChecklistSpec.hs create mode 100644 agent/test/Lib/External/AppManifestSpec.hs create mode 100644 agent/test/Lib/SoundSpec.hs create mode 100644 agent/test/Lib/Types/EmverProp.hs create mode 100644 agent/test/Live/Metrics.hs create mode 100644 agent/test/Live/Serialize.hs create mode 100644 agent/test/Live/df.sample create mode 100644 agent/test/Live/iotop.sample create mode 100644 agent/test/Live/lscpu.sample create mode 100755 agent/test/Live/procDev.sample create mode 100644 agent/test/Live/test-configure-bitcoind create mode 100644 agent/test/Live/test-install-bitcoind create mode 100755 agent/test/Live/test-register create mode 100755 agent/test/Live/test-self-update create mode 100644 agent/test/Live/top.sample create mode 100644 agent/test/Main.hs create mode 100644 agent/test/Spec.hs create mode 100644 agent/weeder.dhall create mode 100644 appmgr/.github/workflows/rust.yml create mode 100644 appmgr/.gitignore create mode 100644 appmgr/Cargo.lock create mode 100644 appmgr/Cargo.toml create mode 100644 appmgr/README.md create mode 100755 appmgr/build-dev.sh create mode 100755 appmgr/build-prod.sh create mode 100644 appmgr/src/apps.rs create mode 100644 appmgr/src/backup.rs create mode 100644 appmgr/src/config/mod.rs create mode 100644 appmgr/src/config/rule_parser.pest create mode 100644 appmgr/src/config/rules.rs create mode 100644 appmgr/src/config/spec.rs create mode 100644 appmgr/src/config/util.rs create mode 100644 appmgr/src/config/value.rs create mode 100644 appmgr/src/control.rs create mode 100644 appmgr/src/dependencies.rs create mode 100644 appmgr/src/disks.rs create mode 100644 appmgr/src/error.rs create mode 100644 appmgr/src/index.rs create mode 100644 appmgr/src/inspect.rs create mode 100644 appmgr/src/install.rs create mode 100644 appmgr/src/lib.rs create mode 100644 appmgr/src/logs.rs create mode 100644 appmgr/src/main.rs create mode 100644 appmgr/src/manifest.rs create mode 100644 appmgr/src/pack.rs create mode 100644 appmgr/src/registry.rs create mode 100644 appmgr/src/remove.rs create mode 100644 appmgr/src/tor.rs create mode 100644 appmgr/src/update.rs create mode 100644 appmgr/src/util.rs create mode 100644 appmgr/src/version/mod.rs create mode 100644 appmgr/src/version/v0_1_0.rs create mode 100644 appmgr/src/version/v0_1_1.rs create mode 100644 appmgr/src/version/v0_1_2.rs create mode 100644 appmgr/src/version/v0_1_3.rs create mode 100644 appmgr/src/version/v0_1_4.rs create mode 100644 appmgr/src/version/v0_1_5.rs create mode 100644 appmgr/src/version/v0_2_0.rs create mode 100644 appmgr/src/version/v0_2_1.rs create mode 100644 appmgr/src/version/v0_2_2.rs create mode 100644 appmgr/src/version/v0_2_3.rs create mode 100644 appmgr/src/version/v0_2_4.rs create mode 100644 appmgr/src/version/v0_2_5.rs create mode 100644 make_image.sh create mode 100644 ui/.gitignore create mode 100644 ui/README.md create mode 100644 ui/angular.json create mode 100644 ui/browserslist create mode 100755 ui/build-send-beta.sh create mode 100755 ui/build-send.sh create mode 100644 ui/client-manifest.yaml create mode 100644 ui/ionic.config.json create mode 100644 ui/package-lock.json create mode 100644 ui/package.json create mode 100644 ui/postprocess.ts create mode 100644 ui/src/app/app-config/config-cursor.ts create mode 100644 ui/src/app/app-config/config-types.ts create mode 100644 ui/src/app/app-config/config-utilities.ts create mode 100644 ui/src/app/app-config/modal-presentable.ts create mode 100644 ui/src/app/app-routing.module.ts create mode 100644 ui/src/app/app.component.html create mode 100644 ui/src/app/app.component.scss create mode 100644 ui/src/app/app.component.ts create mode 100644 ui/src/app/app.module.ts create mode 100644 ui/src/app/components/badge-menu-button/badge-menu.component.html create mode 100644 ui/src/app/components/badge-menu-button/badge-menu.component.module.ts create mode 100644 ui/src/app/components/badge-menu-button/badge-menu.component.scss create mode 100644 ui/src/app/components/badge-menu-button/badge-menu.component.ts create mode 100644 ui/src/app/components/config-header/config-header.component.html create mode 100644 ui/src/app/components/config-header/config-header.component.module.ts create mode 100644 ui/src/app/components/config-header/config-header.component.scss create mode 100644 ui/src/app/components/config-header/config-header.component.ts create mode 100644 ui/src/app/components/dependency-list/dependency-list.component.html create mode 100644 ui/src/app/components/dependency-list/dependency-list.component.module.ts create mode 100644 ui/src/app/components/dependency-list/dependency-list.component.scss create mode 100644 ui/src/app/components/dependency-list/dependency-list.component.ts create mode 100644 ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.html create mode 100644 ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.module.ts create mode 100644 ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.scss create mode 100644 ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.ts create mode 100644 ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.html create mode 100644 ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.module.ts create mode 100644 ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.scss create mode 100644 ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.ts create mode 100644 ui/src/app/components/error-message/error-message.component.html create mode 100644 ui/src/app/components/error-message/error-message.component.module.ts create mode 100644 ui/src/app/components/error-message/error-message.component.scss create mode 100644 ui/src/app/components/error-message/error-message.component.ts create mode 100644 ui/src/app/components/information-popover/information-popover.component.html create mode 100644 ui/src/app/components/information-popover/information-popover.component.module.ts create mode 100644 ui/src/app/components/information-popover/information-popover.component.scss create mode 100644 ui/src/app/components/information-popover/information-popover.component.ts create mode 100644 ui/src/app/components/install-wizard/complete/complete.component.html create mode 100644 ui/src/app/components/install-wizard/complete/complete.component.module.ts create mode 100644 ui/src/app/components/install-wizard/complete/complete.component.ts create mode 100644 ui/src/app/components/install-wizard/dependencies/dependencies.component.html create mode 100644 ui/src/app/components/install-wizard/dependencies/dependencies.component.module.ts create mode 100644 ui/src/app/components/install-wizard/dependencies/dependencies.component.ts create mode 100644 ui/src/app/components/install-wizard/dependents/dependents.component.html create mode 100644 ui/src/app/components/install-wizard/dependents/dependents.component.module.ts create mode 100644 ui/src/app/components/install-wizard/dependents/dependents.component.ts create mode 100644 ui/src/app/components/install-wizard/install-wizard.component.html create mode 100644 ui/src/app/components/install-wizard/install-wizard.component.module.ts create mode 100644 ui/src/app/components/install-wizard/install-wizard.component.scss create mode 100644 ui/src/app/components/install-wizard/install-wizard.component.ts create mode 100644 ui/src/app/components/install-wizard/loadable.ts create mode 100644 ui/src/app/components/install-wizard/prebaked-wizards.ts create mode 100644 ui/src/app/components/install-wizard/wizard-types.ts create mode 100644 ui/src/app/components/object-config/object-config-item.component.html create mode 100644 ui/src/app/components/object-config/object-config.component.html create mode 100644 ui/src/app/components/object-config/object-config.component.module.ts create mode 100644 ui/src/app/components/object-config/object-config.component.scss create mode 100644 ui/src/app/components/object-config/object-config.component.ts create mode 100644 ui/src/app/components/pwa-back-button/pwa-back.component.html create mode 100644 ui/src/app/components/pwa-back-button/pwa-back.component.module.ts create mode 100644 ui/src/app/components/pwa-back-button/pwa-back.component.scss create mode 100644 ui/src/app/components/pwa-back-button/pwa-back.component.ts create mode 100644 ui/src/app/components/qr/qr.component.html create mode 100644 ui/src/app/components/qr/qr.component.module.ts create mode 100644 ui/src/app/components/qr/qr.component.scss create mode 100644 ui/src/app/components/qr/qr.component.ts create mode 100644 ui/src/app/components/recommendation-button/recommendation-button.component.html create mode 100644 ui/src/app/components/recommendation-button/recommendation-button.component.module.ts create mode 100644 ui/src/app/components/recommendation-button/recommendation-button.component.scss create mode 100644 ui/src/app/components/recommendation-button/recommendation-button.component.ts create mode 100644 ui/src/app/components/status/status.component.html create mode 100644 ui/src/app/components/status/status.component.module.ts create mode 100644 ui/src/app/components/status/status.component.scss create mode 100644 ui/src/app/components/status/status.component.ts create mode 100644 ui/src/app/guards/auth.guard.ts create mode 100644 ui/src/app/guards/deactivate.guard.ts create mode 100644 ui/src/app/guards/unauth.guard.ts create mode 100644 ui/src/app/modals/app-backup/app-backup.module.ts create mode 100644 ui/src/app/modals/app-backup/app-backup.page.html create mode 100644 ui/src/app/modals/app-backup/app-backup.page.scss create mode 100644 ui/src/app/modals/app-backup/app-backup.page.ts create mode 100644 ui/src/app/modals/app-config-injectable/modal-injectable-token.ts create mode 100644 ui/src/app/modals/app-config-injectable/modal-injectable-type.ts create mode 100644 ui/src/app/modals/app-config-injectable/modal-injectable-value.ts create mode 100644 ui/src/app/modals/app-config-list/app-config-list.module.ts create mode 100644 ui/src/app/modals/app-config-list/app-config-list.page.html create mode 100644 ui/src/app/modals/app-config-list/app-config-list.page.scss create mode 100644 ui/src/app/modals/app-config-list/app-config-list.page.ts create mode 100644 ui/src/app/modals/app-config-object/app-config-object.module.ts create mode 100644 ui/src/app/modals/app-config-object/app-config-object.page.html create mode 100644 ui/src/app/modals/app-config-object/app-config-object.page.scss create mode 100644 ui/src/app/modals/app-config-object/app-config-object.page.ts create mode 100644 ui/src/app/modals/app-config-union/app-config-union.module.ts create mode 100644 ui/src/app/modals/app-config-union/app-config-union.page.html create mode 100644 ui/src/app/modals/app-config-union/app-config-union.page.scss create mode 100644 ui/src/app/modals/app-config-union/app-config-union.page.ts create mode 100644 ui/src/app/modals/app-config-value/app-config-value.module.ts create mode 100644 ui/src/app/modals/app-config-value/app-config-value.page.html create mode 100644 ui/src/app/modals/app-config-value/app-config-value.page.scss create mode 100644 ui/src/app/modals/app-config-value/app-config-value.page.ts create mode 100644 ui/src/app/modals/app-release-notes/app-release-notes.module.ts create mode 100644 ui/src/app/modals/app-release-notes/app-release-notes.page.html create mode 100644 ui/src/app/modals/app-release-notes/app-release-notes.page.scss create mode 100644 ui/src/app/modals/app-release-notes/app-release-notes.page.ts create mode 100644 ui/src/app/models/app-model.ts create mode 100644 ui/src/app/models/app-types.ts create mode 100644 ui/src/app/models/model-preload.ts create mode 100644 ui/src/app/models/server-model.ts create mode 100644 ui/src/app/models/storage-keys.ts create mode 100644 ui/src/app/modules/sharing.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-available-list/app-available-list.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.html create mode 100644 ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.scss create mode 100644 ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts create mode 100644 ui/src/app/pages/apps-routes/app-available-show/app-available-show.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html create mode 100644 ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.scss create mode 100644 ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts create mode 100644 ui/src/app/pages/apps-routes/app-config/app-config.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-config/app-config.page.html create mode 100644 ui/src/app/pages/apps-routes/app-config/app-config.page.scss create mode 100644 ui/src/app/pages/apps-routes/app-config/app-config.page.ts create mode 100644 ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.html create mode 100644 ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.scss create mode 100644 ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.ts create mode 100644 ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.html create mode 100644 ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.scss create mode 100644 ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.ts create mode 100644 ui/src/app/pages/apps-routes/app-instructions/app-instructions.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.html create mode 100644 ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.scss create mode 100644 ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.ts create mode 100644 ui/src/app/pages/apps-routes/app-logs/app-logs.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-logs/app-logs.page.html create mode 100644 ui/src/app/pages/apps-routes/app-logs/app-logs.page.scss create mode 100644 ui/src/app/pages/apps-routes/app-logs/app-logs.page.ts create mode 100644 ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html create mode 100644 ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.scss create mode 100644 ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.ts create mode 100644 ui/src/app/pages/apps-routes/app-metrics/metric-store.ts create mode 100644 ui/src/app/pages/apps-routes/apps-routing.module.ts create mode 100644 ui/src/app/pages/authenticate/authenticate-routing.module.ts create mode 100644 ui/src/app/pages/authenticate/authenticate.module.ts create mode 100644 ui/src/app/pages/authenticate/authenticate.page.html create mode 100644 ui/src/app/pages/authenticate/authenticate.page.scss create mode 100644 ui/src/app/pages/authenticate/authenticate.page.ts create mode 100644 ui/src/app/pages/notifications/notifications.module.ts create mode 100644 ui/src/app/pages/notifications/notifications.page.html create mode 100644 ui/src/app/pages/notifications/notifications.page.scss create mode 100644 ui/src/app/pages/notifications/notifications.page.ts create mode 100644 ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.module.ts create mode 100644 ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.html create mode 100644 ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.scss create mode 100644 ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.ts create mode 100644 ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.module.ts create mode 100644 ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.html create mode 100644 ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.scss create mode 100644 ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.ts create mode 100644 ui/src/app/pages/server-routes/developer-routes/developer-routing.module.ts create mode 100644 ui/src/app/pages/server-routes/lan/lan.module.ts create mode 100644 ui/src/app/pages/server-routes/lan/lan.page.html create mode 100644 ui/src/app/pages/server-routes/lan/lan.page.scss create mode 100644 ui/src/app/pages/server-routes/lan/lan.page.ts create mode 100644 ui/src/app/pages/server-routes/server-config/server-config.module.ts create mode 100644 ui/src/app/pages/server-routes/server-config/server-config.page.html create mode 100644 ui/src/app/pages/server-routes/server-config/server-config.page.scss create mode 100644 ui/src/app/pages/server-routes/server-config/server-config.page.ts create mode 100644 ui/src/app/pages/server-routes/server-metrics/server-metrics.module.ts create mode 100644 ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html create mode 100644 ui/src/app/pages/server-routes/server-metrics/server-metrics.page.scss create mode 100644 ui/src/app/pages/server-routes/server-metrics/server-metrics.page.ts create mode 100644 ui/src/app/pages/server-routes/server-routing.module.ts create mode 100644 ui/src/app/pages/server-routes/server-show/server-show.module.ts create mode 100644 ui/src/app/pages/server-routes/server-show/server-show.page.html create mode 100644 ui/src/app/pages/server-routes/server-show/server-show.page.scss create mode 100644 ui/src/app/pages/server-routes/server-show/server-show.page.ts create mode 100644 ui/src/app/pages/server-routes/server-specs/server-specs.module.ts create mode 100644 ui/src/app/pages/server-routes/server-specs/server-specs.page.html create mode 100644 ui/src/app/pages/server-routes/server-specs/server-specs.page.scss create mode 100644 ui/src/app/pages/server-routes/server-specs/server-specs.page.ts create mode 100644 ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.module.ts create mode 100644 ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.html create mode 100644 ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.scss create mode 100644 ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.ts create mode 100644 ui/src/app/pages/server-routes/wifi/wifi.module.ts create mode 100644 ui/src/app/pages/server-routes/wifi/wifi.page.html create mode 100644 ui/src/app/pages/server-routes/wifi/wifi.page.scss create mode 100644 ui/src/app/pages/server-routes/wifi/wifi.page.ts create mode 100644 ui/src/app/pages/server-routes/wifi/wifi.service.ts create mode 100644 ui/src/app/pipes/annotation-status.pipe.ts create mode 100644 ui/src/app/pipes/display-bulb.pipe.ts create mode 100644 ui/src/app/pipes/emver.pipe.ts create mode 100644 ui/src/app/pipes/icon.pipe.ts create mode 100644 ui/src/app/pipes/includes.pipe.ts create mode 100644 ui/src/app/pipes/installed-latest-comparison.pipe.ts create mode 100644 ui/src/app/pipes/markdown.pipe.ts create mode 100644 ui/src/app/pipes/mask.pipe.ts create mode 100644 ui/src/app/pipes/peek-properties.pipe.ts create mode 100644 ui/src/app/pipes/truncate.pipe.ts create mode 100644 ui/src/app/pipes/typeof.pipe.ts create mode 100644 ui/src/app/services/api/API.def create mode 100644 ui/src/app/services/api/api-types.ts create mode 100644 ui/src/app/services/api/api.service.factory.ts create mode 100644 ui/src/app/services/api/api.service.ts create mode 100644 ui/src/app/services/api/live-api.service.ts create mode 100644 ui/src/app/services/api/md-sample.md create mode 100644 ui/src/app/services/api/mock-api.service.ts create mode 100644 ui/src/app/services/api/mock-app-fixures.ts create mode 100644 ui/src/app/services/auth.service.ts create mode 100644 ui/src/app/services/config.service.ts create mode 100644 ui/src/app/services/emver.service.ts create mode 100644 ui/src/app/services/http.service.ts create mode 100644 ui/src/app/services/loader.service.ts create mode 100644 ui/src/app/services/pwa-back.service.ts create mode 100644 ui/src/app/services/server-config.service.ts create mode 100644 ui/src/app/services/split-pane.service.ts create mode 100644 ui/src/app/services/sync.notifier.ts create mode 100644 ui/src/app/services/sync.service.ts create mode 100644 ui/src/app/services/tracking-modal-controller.service.ts create mode 100644 ui/src/app/util/cleanup.ts create mode 100644 ui/src/app/util/countries.json create mode 100644 ui/src/app/util/map-subject.util.ts create mode 100644 ui/src/app/util/metrics.util.ts create mode 100644 ui/src/app/util/misc.util.ts create mode 100644 ui/src/app/util/property-subject.util.ts create mode 100644 ui/src/app/util/rxjs.util.ts create mode 100644 ui/src/app/util/status-rendering.ts create mode 100644 ui/src/app/util/types.util.ts create mode 100644 ui/src/app/util/web.util.ts create mode 100644 ui/src/app/util/webview.context.ts create mode 100644 ui/src/assets/favicon.ico create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-Black.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-BlackItalic.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-Bold.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-BoldItalic.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-ExtraBold.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-ExtraBoldItalic.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-ExtraLight.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-ExtraLightItalic.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-Italic.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-Light.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-LightItalic.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-Medium.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-MediumItalic.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-Regular.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-SemiBold.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-SemiBoldItalic.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-Thin.ttf create mode 100644 ui/src/assets/fonts/Montserrat/Montserrat-ThinItalic.ttf create mode 100644 ui/src/assets/fonts/Montserrat/OFL.txt create mode 100644 ui/src/assets/fonts/Open_Sans/LICENSE.txt create mode 100644 ui/src/assets/fonts/Open_Sans/OpenSans-Bold.ttf create mode 100644 ui/src/assets/fonts/Open_Sans/OpenSans-BoldItalic.ttf create mode 100644 ui/src/assets/fonts/Open_Sans/OpenSans-ExtraBold.ttf create mode 100644 ui/src/assets/fonts/Open_Sans/OpenSans-ExtraBoldItalic.ttf create mode 100644 ui/src/assets/fonts/Open_Sans/OpenSans-Italic.ttf create mode 100644 ui/src/assets/fonts/Open_Sans/OpenSans-Light.ttf create mode 100644 ui/src/assets/fonts/Open_Sans/OpenSans-LightItalic.ttf create mode 100644 ui/src/assets/fonts/Open_Sans/OpenSans-Regular.ttf create mode 100644 ui/src/assets/fonts/Open_Sans/OpenSans-SemiBold.ttf create mode 100644 ui/src/assets/fonts/Open_Sans/OpenSans-SemiBoldItalic.ttf create mode 100644 ui/src/assets/img/issue-bulb.png create mode 100644 ui/src/assets/img/off-bulb.png create mode 100644 ui/src/assets/img/running-bulb.png create mode 100644 ui/src/assets/img/service-icons/bitcoind.png create mode 100644 ui/src/assets/img/service-icons/bitwarden.png create mode 100644 ui/src/assets/img/service-icons/btc-rpc-proxy.png create mode 100644 ui/src/assets/img/service-icons/c-lightning.png create mode 100644 ui/src/assets/img/service-icons/cups.png create mode 100644 ui/src/assets/img/service-icons/filebrowser.png create mode 100644 ui/src/assets/img/service-icons/lightning-terminal.png create mode 100644 ui/src/assets/img/service-icons/lnd.png create mode 100644 ui/src/assets/img/service-icons/pastebin.png create mode 100644 ui/src/assets/img/service-icons/ride-the-lightning.png create mode 100644 ui/src/assets/img/warning-bulb.png create mode 100644 ui/src/assets/logo-full.png create mode 100644 ui/src/assets/logo.png create mode 100644 ui/src/environments/environment.prod.ts create mode 100644 ui/src/environments/environment.ts create mode 100644 ui/src/global.scss create mode 100644 ui/src/globals.d.ts create mode 100644 ui/src/index.html create mode 100644 ui/src/main.ts create mode 100644 ui/src/polyfills.ts create mode 100644 ui/src/theme/variables.scss create mode 100644 ui/src/zone-flags.ts create mode 100644 ui/test/assets/bitcoind.png create mode 100644 ui/test/assets/bitwarden.png create mode 100644 ui/test/assets/btc-rpc-proxy.png create mode 100644 ui/test/assets/c-lightning.png create mode 100644 ui/test/assets/cups.png create mode 100644 ui/test/assets/filebrowser.png create mode 100644 ui/test/assets/lightning-terminal.png create mode 100644 ui/test/assets/lnd.png create mode 100644 ui/test/assets/pastebin.png create mode 100644 ui/test/assets/ride-the-lightning.png create mode 100644 ui/tsconfig.json create mode 100644 ui/tslint.json create mode 100644 ui/use-mocks.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..fef391c2e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/*.img +/buster.zip +/product_key \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 000000000..6700cd931 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,18 @@ +# START9 PERSONAL USE LICENSE v1.0 + +This license governs the use of the accompanying Software. If you use the Software, you accept this license. If you do not accept the license, do not use the Software. + +1. **Definitions** + a. "Licensor" means the copyright owner, Start9 Labs, Inc, or its successor(s) in interest, or a future assignee of the copyright. + b. "Source Code" means the code made available to you by the Licensor pursuant to the terms of this license and any derivative works based thereon. + c. "Object Code" means any non-source form of the Source Code, including the machine-language output by a compiler or assembler. + d. "Distribute" means to convey or to publish and generally has the same meaning here as under U.S. Copyright law. + e. "Personal Use" means accessing, copying, reviewing, auditing, running, testing, or modifying the Source Code. +2. **Grant of Rights** + a. Subject to the terms of this license, the Licensor grants you, the licensee, a non-exclusive, worldwide, royalty-free copyright license to the Source Code for Personal Use only. + b. Subject to the terms of this license, the Licensor grants you, the licensee, the right to Distribute the Source Code or modifications to the Source Code. + c. Distributing the Object Code, or any Object Code created based on your modifications to the Source Code, is not permitted under the terms of this license without express written consent of the Licensor. + d. If you Distribute the Source Code, or if permission is granted to Distribute the Object Code, you expressly undertake not to remove, or modify, in any manner, the copyright notices attached to the Source Code, and displayed in any output of the Object Code when run, and to reproduce these notices, in an identical manner, in any distributed copies of the Source Code or Object Code together with a copy of this license. If you Distribute a modified copy of the Software or a derivative work based thereon, the work must carry prominent notices stating that you modified it, and giving a relevant date. + e. The terms of this license will apply to anyone who comes into possession of a copy of the Source Code or Object Code, and any modifications or derivative works based thereon, made by anyone. +3. **Disclaimer.** THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Licensor has no obligation to support recipients of the Source Code or Object Code. +4. **Contributions.** You hereby grant to Licensor a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license to use and exploit any modifications or derivative works based on the Source Code of which you are the author. diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..dc3a22f4e --- /dev/null +++ b/Makefile @@ -0,0 +1,22 @@ +APPMGR_SRC := $(shell find appmgr/src) appmgr/Cargo.toml appmgr/Cargo.lock + +.DELETE_ON_ERROR: + +all: embassy.img + +embassy.img: buster.img product_key appmgr/target/armv7-unknown-linux-musleabihf/release/appmgr ui/www agent/dist/agent agent/config/agent.service + ./make_image.sh + +buster.img: + wget -O buster.zip https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2020-08-24/2020-08-20-raspios-buster-armhf-lite.zip + unzip buster.zip + rm buster.zip + mv 2020-08-20-raspios-buster-armhf-lite.img buster.img + +product_key: + echo "X\c" > product_key + cat /dev/random | base32 | head -c11 | tr '[:upper:]' '[:lower:]' >> product_key + +appmgr/target/armv7-unknown-linux-musleabihf/release/appmgr: $(APPMGR_SRC) + docker run --rm -it -v ~/.cargo/registry:/root/.cargo/registry -v "$(shell pwd)"/appmgr:/home/rust/src start9/rust-arm-cross:latest cargo build --release --features=production + docker run --rm -it -v ~/.cargo/registry:/root/.cargo/registry -v "$(shell pwd)"/appmgr:/home/rust/src start9/rust-arm-cross:latest arm-linux-gnueabi-strip target/armv7-unknown-linux-gnueabihf/release/appmgr \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 000000000..723d40c52 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Embassy OS diff --git a/agent/.gitignore b/agent/.gitignore new file mode 100644 index 000000000..68f879c68 --- /dev/null +++ b/agent/.gitignore @@ -0,0 +1,42 @@ +dist* +static/tmp/ +static/combined/ +config/client_session_key.aes +*.hi +*.o +*.sqlite3 +*.sqlite3-shm +*.sqlite3-wal +.hsenv* +cabal-dev/ +.stack-work/ +.stack-work-devel/ +yesod-devel/ +.cabal-sandbox +cabal.sandbox.config +.DS_Store +*.swp +*.keter +*~ +.vscode +*.cabal +\#* +start9-companion-server.cabal +stack.yaml.lock +*.env +agent_* +agent.* +agent* +!agent.service +executables/* +hidden/* +cabal.project.local +dump/* +*.tar.gz +assets/ +911.txt +model +product_key +build-send.sh +*.aes +*.hie diff --git a/agent/.stylish-haskell.yaml b/agent/.stylish-haskell.yaml new file mode 100644 index 000000000..77f782fc0 --- /dev/null +++ b/agent/.stylish-haskell.yaml @@ -0,0 +1,252 @@ +# stylish-haskell configuration file +# ================================== + +# The stylish-haskell tool is mainly configured by specifying steps. These steps +# are a list, so they have an order, and one specific step may appear more than +# once (if needed). Each file is processed by these steps in the given order. +steps: + # Convert some ASCII sequences to their Unicode equivalents. This is disabled + # by default. + # - unicode_syntax: + # # In order to make this work, we also need to insert the UnicodeSyntax + # # language pragma. If this flag is set to true, we insert it when it's + # # not already present. You may want to disable it if you configure + # # language extensions using some other method than pragmas. Default: + # # true. + # add_language_pragma: true + + # Align the right hand side of some elements. This is quite conservative + # and only applies to statements where each element occupies a single + # line. All default to true. + - simple_align: + cases: true + top_level_patterns: true + records: true + + # Import cleanup + - imports: + # There are different ways we can align names and lists. + # + # - global: Align the import names and import list throughout the entire + # file. + # + # - file: Like global, but don't add padding when there are no qualified + # imports in the file. + # + # - group: Only align the imports per group (a group is formed by adjacent + # import lines). + # + # - none: Do not perform any alignment. + # + # Default: global. + align: global + + # The following options affect only import list alignment. + # + # List align has following options: + # + # - after_alias: Import list is aligned with end of import including + # 'as' and 'hiding' keywords. + # + # > import qualified Data.List as List (concat, foldl, foldr, head, + # > init, last, length) + # + # - with_alias: Import list is aligned with start of alias or hiding. + # + # > import qualified Data.List as List (concat, foldl, foldr, head, + # > init, last, length) + # + # - with_module_name: Import list is aligned `list_padding` spaces after + # the module name. + # + # > import qualified Data.List as List (concat, foldl, foldr, head, + # init, last, length) + # + # This is mainly intended for use with `pad_module_names: false`. + # + # > import qualified Data.List as List (concat, foldl, foldr, head, + # init, last, length, scanl, scanr, take, drop, + # sort, nub) + # + # - new_line: Import list starts always on new line. + # + # > import qualified Data.List as List + # > (concat, foldl, foldr, head, init, last, length) + # + # Default: after_alias + list_align: after_alias + + # Right-pad the module names to align imports in a group: + # + # - true: a little more readable + # + # > import qualified Data.List as List (concat, foldl, foldr, + # > init, last, length) + # > import qualified Data.List.Extra as List (concat, foldl, foldr, + # > init, last, length) + # + # - false: diff-safe + # + # > import qualified Data.List as List (concat, foldl, foldr, init, + # > last, length) + # > import qualified Data.List.Extra as List (concat, foldl, foldr, + # > init, last, length) + # + # Default: true + pad_module_names: true + + # Long list align style takes effect when import is too long. This is + # determined by 'columns' setting. + # + # - inline: This option will put as much specs on same line as possible. + # + # - new_line: Import list will start on new line. + # + # - new_line_multiline: Import list will start on new line when it's + # short enough to fit to single line. Otherwise it'll be multiline. + # + # - multiline: One line per import list entry. + # Type with constructor list acts like single import. + # + # > import qualified Data.Map as M + # > ( empty + # > , singleton + # > , ... + # > , delete + # > ) + # + # Default: inline + long_list_align: inline + + # Align empty list (importing instances) + # + # Empty list align has following options + # + # - inherit: inherit list_align setting + # + # - right_after: () is right after the module name: + # + # > import Vector.Instances () + # + # Default: inherit + empty_list_align: inherit + + # List padding determines indentation of import list on lines after import. + # This option affects 'long_list_align'. + # + # - : constant value + # + # - module_name: align under start of module name. + # Useful for 'file' and 'group' align settings. + # + # Default: 4 + list_padding: 4 + + # Separate lists option affects formatting of import list for type + # or class. The only difference is single space between type and list + # of constructors, selectors and class functions. + # + # - true: There is single space between Foldable type and list of it's + # functions. + # + # > import Data.Foldable (Foldable (fold, foldl, foldMap)) + # + # - false: There is no space between Foldable type and list of it's + # functions. + # + # > import Data.Foldable (Foldable(fold, foldl, foldMap)) + # + # Default: true + separate_lists: true + + # Space surround option affects formatting of import lists on a single + # line. The only difference is single space after the initial + # parenthesis and a single space before the terminal parenthesis. + # + # - true: There is single space associated with the enclosing + # parenthesis. + # + # > import Data.Foo ( foo ) + # + # - false: There is no space associated with the enclosing parenthesis + # + # > import Data.Foo (foo) + # + # Default: false + space_surround: false + + # Language pragmas + - language_pragmas: + + # We can generate different styles of language pragma lists. + # + # - vertical: Vertical-spaced language pragmas, one per line. + # + # - compact: A more compact style. + # + # - compact_line: Similar to compact, but wrap each line with + # `{-#LANGUAGE #-}'. + # + # Default: vertical. + style: vertical + + # Align affects alignment of closing pragma brackets. + # + # - true: Brackets are aligned in same column. + # + # - false: Brackets are not aligned together. There is only one space + # between actual import and closing bracket. + # + # Default: true + align: true + + # stylish-haskell can detect redundancy of some language pragmas. If this + # is set to true, it will remove those redundant pragmas. Default: true. + remove_redundant: false + + # Replace tabs by spaces. This is disabled by default. + - tabs: + # Number of spaces to use for each tab. Default: 8, as specified by the + # Haskell report. + spaces: 4 + + # Remove trailing whitespace + - trailing_whitespace: {} + + # Squash multiple spaces between the left and right hand sides of some + # elements into single spaces. Basically, this undoes the effect of + # simple_align but is a bit less conservative. + # - squash: {} + +# A common setting is the number of columns (parts of) code will be wrapped +# to. Different steps take this into account. Default: 80. +columns: 120 + +# By default, line endings are converted according to the OS. You can override +# preferred format here. +# +# - native: Native newline format. CRLF on Windows, LF on other OSes. +# +# - lf: Convert to LF ("\n"). +# +# - crlf: Convert to CRLF ("\r\n"). +# +# Default: native. +newline: native + +# Sometimes, language extensions are specified in a cabal file or from the +# command line instead of using language pragmas in the file. stylish-haskell +# needs to be aware of these, so it can parse the file correctly. +# +# No language extensions are enabled by default. +language_extensions: + - NoImplicitPrelude + - FlexibleContexts + - FlexibleInstances + - GeneralizedNewtypeDeriving + - LambdaCase + - MultiWayIf + - NamedFieldPuns + - NumericUnderscores + - OverloadedStrings + - TypeApplications diff --git a/agent/Changelog.md b/agent/Changelog.md new file mode 100644 index 000000000..c5162c552 --- /dev/null +++ b/agent/Changelog.md @@ -0,0 +1,12 @@ +# 0.2.5 + +- Upgrade to GHC 8.10.2 / Stackage nightly-2020-09-29 +- Remove internet connectivity check from startup sequence +- Move ssh setup to synchronizers +- Adds new dependency management structure +- Changes version implementation from semver to new "emver" implementation +- Adds autoconfigure feature +- Remaps "Restarting" container status to "Crashed" for better UX +- Persists logs after restart +- Rewrites nginx ssl conf during UI upgrade +- Implements better caching strategy for static assets \ No newline at end of file diff --git a/agent/README.md b/agent/README.md new file mode 100644 index 000000000..4b31a7dc7 --- /dev/null +++ b/agent/README.md @@ -0,0 +1,7 @@ +# Design Decision Log + +* 1/4/20 - Switching from HTTPS to HTTP over local LAN. Due to eventual Tor support/default, this gives +us the neatest slot for the Tor support + * This means it is possible to snoop on traffic between the companion app and the server if you + have a LAN presence. + * This also makes it possible to masquerade as the server if you have a LAN presence \ No newline at end of file diff --git a/agent/TODO.md b/agent/TODO.md new file mode 100644 index 000000000..79d19f3dd --- /dev/null +++ b/agent/TODO.md @@ -0,0 +1,3 @@ +* When adding ssh keys, don't add if identical one exists +* When adding ssh keys, check for newline at the end of the file. if not exists, add it. +* If `appmgr stop ` throws no error, but completes without the app being stopped, we need to restart dockerd. diff --git a/agent/app/main.hs b/agent/app/main.hs new file mode 100644 index 000000000..035cf5583 --- /dev/null +++ b/agent/app/main.hs @@ -0,0 +1,5 @@ +import Application ( appMain ) +import Startlude + +main :: IO () +main = appMain diff --git a/agent/brittany.yaml b/agent/brittany.yaml new file mode 100644 index 000000000..e07b9b930 --- /dev/null +++ b/agent/brittany.yaml @@ -0,0 +1,60 @@ +conf_debug: + dconf_roundtrip_exactprint_only: false + dconf_dump_bridoc_simpl_par: false + dconf_dump_ast_unknown: false + dconf_dump_bridoc_simpl_floating: false + dconf_dump_config: false + dconf_dump_bridoc_raw: false + dconf_dump_bridoc_final: false + dconf_dump_bridoc_simpl_alt: false + dconf_dump_bridoc_simpl_indent: false + dconf_dump_annotations: false + dconf_dump_bridoc_simpl_columns: false + dconf_dump_ast_full: false +conf_forward: + options_ghc: + - -XNoImplicitPrelude + - -XBlockArguments + - -XFlexibleContexts + - -XFlexibleInstances + - -XGeneralizedNewtypeDeriving + - -XKindSignatures + - -XLambdaCase + - -XMultiWayIf + - -XNamedFieldPuns + - -XNumericUnderscores + - -XOverloadedStrings + - -XTemplateHaskell + - -XTypeApplications +conf_errorHandling: + econf_ExactPrintFallback: ExactPrintFallbackModeInline + econf_Werror: false + econf_omit_output_valid_check: false + econf_produceOutputOnErrors: false +conf_preprocessor: + ppconf_CPPMode: CPPModeWarn + ppconf_hackAroundIncludes: false +conf_obfuscate: false +conf_roundtrip_exactprint_only: false +conf_version: 1 +conf_layout: + lconfig_reformatModulePreamble: true + lconfig_altChooser: + tag: AltChooserBoundedSearch + contents: 3 + lconfig_allowSingleLineExportList: false + lconfig_importColumn: 50 + lconfig_hangingTypeSignature: true + lconfig_importAsColumn: 50 + lconfig_alignmentLimit: 30 + lconfig_allowHangingQuasiQuotes: true + lconfig_indentListSpecial: true + lconfig_indentAmount: 4 + lconfig_alignmentBreakOnMultiline: true + lconfig_experimentalSemicolonNewlines: false + lconfig_cols: 120 + lconfig_indentPolicy: IndentPolicyFree + lconfig_indentWhereSpecial: false + lconfig_columnAlignMode: + tag: ColumnAlignModeMajority + contents: 0.7 diff --git a/agent/build.sh b/agent/build.sh new file mode 100755 index 000000000..82cd44b54 --- /dev/null +++ b/agent/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +cat config/settings.yml | grep app-mgr-version-spec +cat package.yaml | grep version + +stack --local-bin-path ./executables build --copy-bins #--flag start9-agent:disable-auth +upx ./executables/agent diff --git a/agent/config/agent.service b/agent/config/agent.service new file mode 100644 index 000000000..791d68d08 --- /dev/null +++ b/agent/config/agent.service @@ -0,0 +1,14 @@ +[Unit] +Description=Boot process for system reset. +After=network.target lifeline.service avahi-daemon.service systemd-time-wait-sync.service +Requires=network.target +Wants=avahi-daemon.service + +[Service] +Type=simple +ExecStart=/usr/local/bin/agent +Restart=always +RestartSec=3 + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/agent/config/journald.conf b/agent/config/journald.conf new file mode 100644 index 000000000..47951df4c --- /dev/null +++ b/agent/config/journald.conf @@ -0,0 +1,6 @@ +[Journal] +Storage=persistent +SystemMaxUse=100M +SystemMaxFileSize=10M +MaxRetentionSec=1month +MaxFileSec=1week \ No newline at end of file diff --git a/agent/config/nginx.conf b/agent/config/nginx.conf new file mode 100644 index 000000000..fa6f87b13 --- /dev/null +++ b/agent/config/nginx.conf @@ -0,0 +1,29 @@ +user www-data; +worker_processes 1; +pid /run/nginx.pid; +include /etc/nginx/modules-enabled/*.conf; + +events { + worker_connections 768; + multi_accept on; +} + +http { + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + gzip on; + + server_names_hash_bucket_size 128; + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; +} \ No newline at end of file diff --git a/agent/config/routes b/agent/config/routes new file mode 100644 index 000000000..ace977d7d --- /dev/null +++ b/agent/config/routes @@ -0,0 +1,54 @@ +/auth AuthR Auth getAuth !noAuth + +/git GitR GET +/authenticate AuthenticateR GET +/version VersionR GET !noAuth +/versionLatest VersionLatestR GET !noAuth +/v0 ServerR GET PATCH + +/v0/name NameR PATCH + +/v0/specs SpecsR GET +/v0/metrics MetricsR GET + +/v0/sshKeys SshKeysR GET POST +/v0/sshKeys/#Text SshKeyByFingerprintR DELETE +/v0/password PasswordR PATCH + +/v0/apps/store AvailableAppsR GET -- reg reliant +/v0/apps/installed InstalledAppsR GET +/v0/apps/#AppId/store AvailableAppByIdR GET -- reg reliant + +/v0/apps/#AppId/store/#VersionRange AvailableAppVersionInfoR GET -- reg reliant +/v0/apps/#AppId/installed InstalledAppByIdR GET +/v0/apps/#AppId/logs AppLogsByIdR GET +/v0/apps/#AppId/install InstallNewAppR POST -- reg reliant +/v0/apps/#AppId/config AppConfigR GET PATCH +/v0/apps/#AppId/start StartServerAppR POST +/v0/apps/#AppId/restart RestartServerAppR POST +/v0/apps/#AppId/stop StopServerAppR POST +/v0/apps/#AppId/uninstall UninstallAppR POST +/v0/apps/#AppId/notifications AppNotificationsR GET +/v0/apps/#AppId/metrics AppMetricsR GET +/v0/apps/#AppId/icon AppIconR GET !noAuth !cached +/v0/apps/#AppId/icon/store AvailableAppIconR GET !noAuth !cached -- reg reliant +/v0/apps/#AppId/backup CreateBackupR POST +/v0/apps/#AppId/backup/stop StopBackupR POST +/v0/apps/#AppId/backup/restore RestoreBackupR POST +/v0/apps/#AppId/autoconfig/#AppId AutoconfigureR POST + +/v0/disks ListDisksR GET + +/v0/update UpdateAgentR POST +/v0/wifi WifiR GET POST +/v0/wifi/#Text WifiBySsidR POST DELETE + +/v0/notifications NotificationsR GET +/v0/notifications/#UUID NotificationR DELETE + +/v0/shutdown ShutdownR POST +/v0/restart RestartR POST + +/v0/register RegisterR POST !noAuth +/v0/hosts HostsR GET !noAuth +/v0/certificate CertificateR GET \ No newline at end of file diff --git a/agent/config/settings.yml b/agent/config/settings.yml new file mode 100644 index 000000000..e86956673 --- /dev/null +++ b/agent/config/settings.yml @@ -0,0 +1,39 @@ +# Values formatted like "_env:YESOD_ENV_VAR_NAME:default_value" can be overridden by the specified environment variable. +# See https://github.com/yesodweb/yesod/wiki/Configuration#overriding-configuration-values-with-environment-variables + +static-dir: "_env:YESOD_STATIC_DIR:static" +host: "_env:YESOD_HOST:*4" # any IPv4 host +port: 5959 # NB: The port `yesod devel` uses is distinct from this value. Set the `yesod devel` port from the command line. +ip-from-header: "_env:YESOD_IP_FROM_HEADER:false" +detailed-logging: "_env:DETAILED_LOGGING:false" + +# Default behavior: determine the application root from the request headers. +# Uncomment to set an explicit approot +#approot: "_env:YESOD_APPROOT:http://localhost:3000" + +# By default, `yesod devel` runs in development, and built executables use +# production settings (see below). To override this, use the following: +# +# development: false + +# Optional values with the following production defaults. +# In development, they default to the inverse. +# +# detailed-logging: false +# should-log-all: false +# reload-templates: false +# mutable-static: false +# skip-combining: false +# auth-dummy-login : false + +# NB: If you need a numeric value (e.g. 123) to parse as a String, wrap it in single quotes (e.g. "_env:YESOD_PGPASS:'123'") +# See https://github.com/yesodweb/yesod/wiki/Configuration#parsing-numeric-values-as-strings +cors-override-star: "_env:CORS_OVERRIDE_STAR:" +filesystem-base: "_env:FILESYSTEM_BASE:/" +database: + database: "start9_agent.sqlite3" + poolsize: "_env:YESOD_SQLITE_POOLSIZE:10" + +app-mgr-version-spec: "=0.2.5" + +#analytics: UA-YOURCODE diff --git a/agent/config/torrc b/agent/config/torrc new file mode 100644 index 000000000..68ede8e27 --- /dev/null +++ b/agent/config/torrc @@ -0,0 +1,5 @@ +SOCKSPort 0.0.0.0:9050 # Default: Bind to localhost:9050 for local connections. +HiddenServiceDir /var/lib/tor/agent/ +HiddenServicePort 5959 127.0.0.1:5959 +HiddenServicePort 80 127.0.0.1:80 +HiddenServicePort 443 127.0.0.1:443 \ No newline at end of file diff --git a/agent/hie.yaml b/agent/hie.yaml new file mode 100644 index 000000000..ed5bc79c8 --- /dev/null +++ b/agent/hie.yaml @@ -0,0 +1,13 @@ +cradle: + stack: + - path: "./src" + component: "ambassador-agent:lib" + + - path: "./app/main.hs" + component: "ambassador-agent:exe:agent" + + - path: "./test" + component: "ambassador-agent:test:agent-test" + + - path: "./" + component: "ambassador-agent:lib" \ No newline at end of file diff --git a/agent/migrations/0.1.0::0.1.0 b/agent/migrations/0.1.0::0.1.0 new file mode 100644 index 000000000..b928005e2 --- /dev/null +++ b/agent/migrations/0.1.0::0.1.0 @@ -0,0 +1 @@ +SELECT TRUE; \ No newline at end of file diff --git a/agent/migrations/0.1.0::0.1.1 b/agent/migrations/0.1.0::0.1.1 new file mode 100644 index 000000000..cb9f5d239 --- /dev/null +++ b/agent/migrations/0.1.0::0.1.1 @@ -0,0 +1 @@ +CREATE TABLE "replay_nonce"("id" VARCHAR PRIMARY KEY,"created_at" TIMESTAMP NOT NULL); \ No newline at end of file diff --git a/agent/migrations/0.1.1::0.1.2 b/agent/migrations/0.1.1::0.1.2 new file mode 100644 index 000000000..b928005e2 --- /dev/null +++ b/agent/migrations/0.1.1::0.1.2 @@ -0,0 +1 @@ +SELECT TRUE; \ No newline at end of file diff --git a/agent/migrations/0.1.2::0.1.3 b/agent/migrations/0.1.2::0.1.3 new file mode 100644 index 000000000..b928005e2 --- /dev/null +++ b/agent/migrations/0.1.2::0.1.3 @@ -0,0 +1 @@ +SELECT TRUE; \ No newline at end of file diff --git a/agent/migrations/0.1.3::0.1.4 b/agent/migrations/0.1.3::0.1.4 new file mode 100644 index 000000000..3471bf585 --- /dev/null +++ b/agent/migrations/0.1.3::0.1.4 @@ -0,0 +1 @@ +SELECT TRUE; diff --git a/agent/migrations/0.1.4::0.1.5 b/agent/migrations/0.1.4::0.1.5 new file mode 100644 index 000000000..3471bf585 --- /dev/null +++ b/agent/migrations/0.1.4::0.1.5 @@ -0,0 +1 @@ +SELECT TRUE; diff --git a/agent/migrations/0.1.5::0.2.0 b/agent/migrations/0.1.5::0.2.0 new file mode 100644 index 000000000..fa220ddf7 --- /dev/null +++ b/agent/migrations/0.1.5::0.2.0 @@ -0,0 +1,2 @@ +DROP TABLE authorized_key; +DROP TABLE replay_nonce; diff --git a/agent/migrations/0.2.0::0.2.1 b/agent/migrations/0.2.0::0.2.1 new file mode 100644 index 000000000..b928005e2 --- /dev/null +++ b/agent/migrations/0.2.0::0.2.1 @@ -0,0 +1 @@ +SELECT TRUE; \ No newline at end of file diff --git a/agent/migrations/0.2.1::0.2.2 b/agent/migrations/0.2.1::0.2.2 new file mode 100644 index 000000000..3471bf585 --- /dev/null +++ b/agent/migrations/0.2.1::0.2.2 @@ -0,0 +1 @@ +SELECT TRUE; diff --git a/agent/migrations/0.2.2::0.2.3 b/agent/migrations/0.2.2::0.2.3 new file mode 100644 index 000000000..b928005e2 --- /dev/null +++ b/agent/migrations/0.2.2::0.2.3 @@ -0,0 +1 @@ +SELECT TRUE; \ No newline at end of file diff --git a/agent/migrations/0.2.3::0.2.4 b/agent/migrations/0.2.3::0.2.4 new file mode 100644 index 000000000..b928005e2 --- /dev/null +++ b/agent/migrations/0.2.3::0.2.4 @@ -0,0 +1 @@ +SELECT TRUE; \ No newline at end of file diff --git a/agent/migrations/0.2.4::0.2.5 b/agent/migrations/0.2.4::0.2.5 new file mode 100644 index 000000000..b928005e2 --- /dev/null +++ b/agent/migrations/0.2.4::0.2.5 @@ -0,0 +1 @@ +SELECT TRUE; \ No newline at end of file diff --git a/agent/package.yaml b/agent/package.yaml new file mode 100644 index 000000000..5d4df9213 --- /dev/null +++ b/agent/package.yaml @@ -0,0 +1,181 @@ +name: ambassador-agent +version: 0.2.5 + +default-extensions: +- NoImplicitPrelude +- BlockArguments +- ConstraintKinds +- DataKinds +- DeriveAnyClass +- DeriveFunctor +- DeriveGeneric +- DerivingStrategies +- EmptyCase +- FlexibleContexts +- FlexibleInstances +- GADTs +- GeneralizedNewtypeDeriving +- InstanceSigs +- KindSignatures +- LambdaCase +- MultiParamTypeClasses +- MultiWayIf +- NamedFieldPuns +- NumericUnderscores +- OverloadedStrings +- PolyKinds +- RankNTypes +- StandaloneDeriving +- StandaloneKindSignatures +- TupleSections +- TypeApplications +- TypeFamilies +- TypeOperators + +dependencies: +- base >=4.9.1.0 && <5 +- aeson +- aeson-flatten +- attoparsec +- bytestring +- casing +- comonad +- conduit +- conduit-extra +- containers +- cryptonite +- cryptonite-conduit +- data-default +- directory +- errors +- exceptions +- exinst +- fast-logger +- file-embed +- filelock +- filepath +- fused-effects +- fused-effects-th +- git-embed +- http-api-data +- http-client +- http-client-tls +- http-conduit +- http-types +- interpolate +- iso8601-time +- lens +- lens-aeson +- lifted-async +- lifted-base +- memory +- mime-types +- monad-control +- monad-logger +- persistent +- persistent-sqlite +- persistent-template +- process +- process-extras +- protolude +- resourcet +- regex-compat # TODO: trim this dep +- shell-conduit +- singletons +- stm +- streaming +- streaming-bytestring +- streaming-conduit +- streaming-utils +- tar-conduit +- template-haskell +- text >=0.11 && <2.0 +- time +- transformers +- transformers-base +- typed-process +- unix +- unliftio # TODO: trim this dep +- unliftio-core # TODO: trim this dep +- unordered-containers +- uuid +- wai +- wai-cors +- wai-extra +- warp +- yaml +- yesod +- yesod-auth +- yesod-core +- yesod-form +- yesod-persistent + +flags: + library-only: + manual: false + default: false + description: Build for use with "yesod devel" + dev: + manual: false + default: false + description: Turn on development settings, like auto-reload templates. + disable-auth: + manual: false + default: false + description: disable authorization checks +library: + source-dirs: src + when: + - condition: (flag(dev)) || (flag(library-only)) + then: + cpp-options: -DDEVELOPMENT + ghc-options: + - -Wall + - -Wunused-packages + - -fwarn-tabs + - -O0 + - -fdefer-typed-holes + else: + ghc-options: + - -Wall + - -Wunused-packages + - -fwarn-tabs + - -O2 + - -fdefer-typed-holes + - condition: (flag(disable-auth)) + cpp-options: -DDISABLE_AUTH +tests: + agent-test: + source-dirs: test + main: Main.hs + ghc-options: + - -Wall + - -fdefer-typed-holes + dependencies: + - ambassador-agent + - hspec >=2.0.0 + - hspec-expectations + - hedgehog + - yesod-test + - random + when: + - condition: false + other-modules: Paths_ambassador_agent + +executables: + agent: + source-dirs: app + main: main.hs + ghc-options: + - -Wall + - -threaded + - -rtsopts + - -with-rtsopts=-N + - -fdefer-typed-holes + dependencies: + - ambassador-agent + when: + - buildable: false + condition: flag(library-only) + - condition: false + other-modules: Paths_ambassador_agent diff --git a/agent/src/Application.hs b/agent/src/Application.hs new file mode 100644 index 000000000..1be93162b --- /dev/null +++ b/agent/src/Application.hs @@ -0,0 +1,227 @@ +{-# LANGUAGE CPP #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeFamilies #-} +module Application + ( appMain + , makeFoundation + , makeLogWare + -- * for DevelMain + , getApplicationRepl + , getAppSettings + , shutdownAll + , shutdownWeb + , startWeb + -- * for GHCI + , handler + , runDb + , getAgentCtx + ) +where + +import Startlude hiding (runReader) + +import Control.Concurrent.STM.TVar ( newTVarIO ) +import Control.Monad.Logger +import Control.Effect.Labelled ( Labelled, runLabelled ) +import qualified Data.HashMap.Strict as HM +import Data.IORef + +import Database.Persist.Sql +import Database.Persist.Sqlite ( createSqlitePool + , runSqlite + , sqlPoolSize + , sqlDatabase + ) +import Git.Embed +import Network.HTTP.Client.TLS ( getGlobalManager ) +import Network.Wai +import Network.Wai.Handler.Warp ( getPort ) +import System.Directory ( createDirectoryIfMissing ) +import System.Environment ( setEnv ) +import System.IO hiding ( putStrLn, writeFile ) +import System.Log.FastLogger ( defaultBufSize + , newStdoutLoggerSet + ) +import Yesod.Core +import Yesod.Default.Config2 +import Yesod.Persist.Core + +import Constants +import qualified Daemon.AppNotifications as AppNotifications +import Daemon.RefreshProcDev +import Daemon.ZeroConf +import Foundation +import Lib.Algebra.State.RegistryUrl +import Lib.Database +import Lib.External.Metrics.ProcDev +import Lib.SelfUpdate +import Lib.Sound +import Lib.SystemPaths +import Lib.WebServer +import Model +import Settings +import Lib.Background + +appMain :: IO () +appMain = do + hSetBuffering stdout LineBuffering + args <- getArgs + + -- Get the settings from all relevant sources + settings <- loadYamlSettings [] [configSettingsYmlValue] useEnv + + settings' <- case args of + ["--port", n] -> case readMaybe @Word16 $ toS n of + Just n' -> pure $ settings { appPort = n' } + Nothing -> do + die . toS $ "Invalid Port: " <> n + ["--git-hash"] -> do + putStrLn @Text $embedGitRevision + exitWith ExitSuccess + ["--version"] -> do + putStrLn @Text (show agentVersion) + exitWith ExitSuccess + _ -> pure settings + createDirectoryIfMissing False (toS $ agentDataDirectory `relativeTo` appFilesystemBase settings') + + -- Generate the foundation from the settings + foundation <- makeFoundation settings' + + startupSequence foundation + +-- | This function allocates resources (such as a database connection pool), +-- performs initialization and returns a foundation datatype value. This is also +-- the place to put your migrate statements to have automatic database +-- migrations handled by Yesod. +makeFoundation :: AppSettings -> IO AgentCtx +makeFoundation appSettings = do + now <- getCurrentTime + -- Some basic initializations: HTTP connection manager, logger, and static + -- subsite. + appLogger <- newStdoutLoggerSet defaultBufSize >>= makeYesodLogger + appHttpManager <- getGlobalManager + appWebServerThreadId <- newIORef Nothing + appSelfUpdateSpecification <- newEmptyMVar + appIsUpdating <- newIORef Nothing + appIsUpdateFailed <- newIORef Nothing + appBackgroundJobs <- newTVarIO (JobCache HM.empty) + def <- getDefaultProcDevMetrics + appProcDevMomentCache <- newIORef (now, mempty, def) + + -- We need a log function to create a connection pool. We need a connection + -- pool to create our foundation. And we need our foundation to get a + -- logging function. To get out of this loop, we initially create a + -- temporary foundation without a real connection pool, get a log function + -- from there, and then create the real foundation. + let mkFoundation appConnPool appIconTags = AgentCtx { .. } + -- The AgentCtx {..} syntax is an example of record wild cards. For more + -- information, see: + -- https://ocharles.org.uk/blog/posts/2014-12-04-record-wildcards.html + tempFoundation = mkFoundation + (panic "connPool forced in tempFoundation") + (panic "iconTags forced in tempFoundation") + logFunc = messageLoggerSource tempFoundation appLogger + + db <- interpDb dbPath + + -- Create the database connection pool, will create sqlite file if doesn't already exist + pool <- flip runLoggingT logFunc $ createSqlitePool (toS db) (sqlPoolSize . appDatabaseConf $ appSettings) + + -- run migrations only if agent in charge + when (appPort appSettings == 5959) $ do + runSqlite db $ runMigration migrateAll + void . interpDb $ ensureCoherentDbVersion pool logFunc + + iconTags <- if appPort appSettings == 5959 + then do + iconDigests <- runSqlPool (selectList [] []) pool + newTVarIO . HM.fromList $ (unIconDigestKey . entityKey &&& iconDigestTag . entityVal) <$> iconDigests + else newTVarIO HM.empty + + -- Return the foundation + pure $ mkFoundation pool iconTags + where + interpDb :: (Labelled "sqlDatabase" (ReaderT Text)) (Labelled "filesystemBase" (ReaderT Text) IO) a -> IO a + interpDb = injectFilesystemBaseFromContext appSettings + . flip runReaderT (sqlDatabase . appDatabaseConf $ appSettings) + . runLabelled @"sqlDatabase" + +getAppSettings :: IO AppSettings +getAppSettings = loadYamlSettings [configSettingsYml] [] useEnv + + +startupSequence :: AgentCtx -> IO () +startupSequence foundation = do + +#ifdef DISABLE_AUTH + withAgentVersionLog_ "[WARNING] Agent auth disabled!" +#endif + + injectFilesystemBaseFromContext (appSettings foundation) . runRegistryUrlIOC $ getRegistryUrl >>= \case + Nothing -> pure () + Just x -> liftIO $ do + withAgentVersionLog "Detected Alternate Registry URL" x + -- this is so that appmgr inherits the alternate registry url when it is called. + setEnv "REGISTRY_URL" (show x) + + -- proc dev metrics refresh loop + withAgentVersionLog_ "Initializing proc dev refresh loop" + void . forkIO . forever $ forkIO (refreshProcDev foundation) >> threadDelay 5_000_000 + withAgentVersionLog_ "Proc dev metrics refreshing" + + -- web + withAgentVersionLog_ "Starting web server" + void . forkIO . startWeb $ foundation + withAgentVersionLog_ "Web server running" + + -- all these actions are destructive in some way, and only webserver is needed for self-update + when (appPort (appSettings foundation) == 5959) $ do + synchronizeSystemState foundation agentVersion + + -- app notifications refresh loop + withAgentVersionLog_ "Initializing app notifications refresh loop" + void . forkIO . forever $ forkIO (runReaderT AppNotifications.fetchAndSave foundation) >> threadDelay 5_000_000 + withAgentVersionLog_ "App notifications refreshing" + + -- reloading avahi daemon + -- DRAGONS! make sure this step happens AFTER system synchronization + withAgentVersionLog_ "Publishing Agent to Avahi Daemon" + runReaderT publishAgentToAvahi foundation + withAgentVersionLog_ "Avahi Daemon reloaded with Agent service" + + when (appPort (appSettings foundation) == 5959) $ do + playSong 400 marioCoin + + withAgentVersionLog_ "Listening for Self-Update Signal" + waitForUpdateSignal foundation + +-------------------------------------------------------------- +-- Functions for DevelMain.hs (a way to run the AgentCtx from GHCi) +-------------------------------------------------------------- + +getApplicationRepl :: IO (Int, AgentCtx, Application) +getApplicationRepl = do + foundation <- getAppSettings >>= makeFoundation + wsettings <- getDevSettings $ warpSettings foundation + app1 <- makeApplication foundation + return (getPort wsettings, foundation, app1) + +getAgentCtx :: IO AgentCtx +getAgentCtx = getAppSettings >>= makeFoundation + +--------------------------------------------- +-- Functions for use in development with GHCi +--------------------------------------------- + +-- | Run a handler +handler :: Handler a -> IO a +handler h = getAppSettings >>= makeFoundation >>= flip unsafeHandler h + +-- | Run DB queries +runDb :: ReaderT SqlBackend Handler a -> IO a +runDb = handler . runDB + diff --git a/agent/src/Auth.hs b/agent/src/Auth.hs new file mode 100644 index 000000000..069495337 --- /dev/null +++ b/agent/src/Auth.hs @@ -0,0 +1,19 @@ +{-# LANGUAGE DeriveDataTypeable #-} +{-# LANGUAGE ViewPatterns #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE QuasiQuotes #-} +module Auth where + +import Startlude + +import Yesod.Core + +data Auth = Auth + +getAuth :: a -> Auth +getAuth = const Auth + +mkYesodSubData "Auth" [parseRoutes| +/login LoginR POST +/logout LogoutR POST +|] diff --git a/agent/src/Constants.hs b/agent/src/Constants.hs new file mode 100644 index 000000000..158c2bc80 --- /dev/null +++ b/agent/src/Constants.hs @@ -0,0 +1,16 @@ +module Constants where + +import Startlude + +import Data.Version ( showVersion ) +import Lib.Types.Emver ( Version ) +import Paths_ambassador_agent ( version ) + +agentVersion :: Version +agentVersion = fromString $ showVersion version + +withAgentVersionLog :: (Show a, MonadIO m) => Text -> a -> m () +withAgentVersionLog t a = liftIO $ putStrLn @Text $ show agentVersion <> "-- " <> t <> ": " <> show a + +withAgentVersionLog_ :: Text -> IO () +withAgentVersionLog_ t = putStrLn @Text $ show agentVersion <> "-- " <> t diff --git a/agent/src/Daemon/AppNotifications.hs b/agent/src/Daemon/AppNotifications.hs new file mode 100644 index 000000000..afb3f074b --- /dev/null +++ b/agent/src/Daemon/AppNotifications.hs @@ -0,0 +1,48 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +module Daemon.AppNotifications where + +import Startlude + +import qualified Data.HashMap.Strict as HM +import Data.UUID.V4 +import Data.Time.Clock.POSIX +import Database.Persist.Sql + +import Foundation +import Lib.Error +import Lib.Algebra.Domain.AppMgr as AppMgr2 +import Lib.External.AppMgr as AppMgr +import Lib.Types.Core +import Lib.Types.Emver +import Model + +toModelNotif :: (AppId, Version) -> AppMgrNotif -> Notification +toModelNotif (appId, appVersion) AppMgrNotif {..} = + let prefix = (<> "1") $ case appMgrNotifLevel of + INFO -> "0" + SUCCESS -> "1" + WARN -> "2" + ERROR -> "3" + in Notification (posixSecondsToUTCTime . fromRational $ appMgrNotifTime) + Nothing + appId + appVersion + (prefix <> show appMgrNotifCode) + appMgrNotifTitle + appMgrNotifMessage + +fetchAndSave :: ReaderT AgentCtx IO () +fetchAndSave = handleErr $ do + pool <- asks appConnPool + apps <- HM.toList <$> AppMgr2.runAppMgrCliC (AppMgr2.list [AppMgr2.flags| |]) + for_ apps $ \(appId, AppMgr2.InfoRes { infoResVersion }) -> do + notifs <- AppMgr.notifications appId + let mods = toModelNotif (appId, infoResVersion) <$> notifs + keys <- liftIO $ replicateM (length mods) (NotificationKey <$> nextRandom) + let ents = zipWith Entity keys mods + lift $ flip runSqlPool pool $ insertEntityMany ents + where + handleErr m = runExceptT m >>= \case + Left e -> putStrLn (errorMessage $ toError e) + Right _ -> pure () diff --git a/agent/src/Daemon/RefreshProcDev.hs b/agent/src/Daemon/RefreshProcDev.hs new file mode 100644 index 000000000..f958c1d72 --- /dev/null +++ b/agent/src/Daemon/RefreshProcDev.hs @@ -0,0 +1,20 @@ +module Daemon.RefreshProcDev where + +import Startlude + +import Data.IORef + +import Foundation +import Lib.Error +import Lib.External.Metrics.ProcDev + +refreshProcDev :: AgentCtx -> IO () +refreshProcDev agentCtx = do + let procDevCache = appProcDevMomentCache agentCtx + (oldTime, oldMoment, _) <- liftIO . readIORef . appProcDevMomentCache $ agentCtx + + eProcDev <- runS9ErrT $ getProcDevMetrics (oldTime, oldMoment) + case eProcDev of + Left e -> putStrLn @Text . show $ e + Right (newTime, newMoment, newMetrics) -> liftIO $ writeIORef procDevCache (newTime, newMoment, newMetrics) + diff --git a/agent/src/Daemon/ZeroConf.hs b/agent/src/Daemon/ZeroConf.hs new file mode 100644 index 000000000..b9a34cd7f --- /dev/null +++ b/agent/src/Daemon/ZeroConf.hs @@ -0,0 +1,56 @@ +{-# LANGUAGE TypeApplications #-} +module Daemon.ZeroConf where + +import Startlude hiding ( ask ) + +import Control.Lens +import Control.Effect.Reader.Labelled ( ask ) +import Control.Monad.Trans.Reader ( withReaderT ) +import Crypto.Hash +import Data.ByteArray ( convert ) +import Data.ByteArray.Encoding +import qualified Data.ByteString as BS +import System.FilePath.Lens + +import Foundation +import qualified Lib.Avahi as Avahi +import Lib.ProductKey +import Lib.SystemPaths + +import Settings + +start9AgentServicePrefix :: IsString a => a +start9AgentServicePrefix = "start9-" + +getStart9AgentHostname :: (HasFilesystemBase sig m, MonadIO m, ConvertText Text a) => m a +getStart9AgentHostname = do + base <- ask @"filesystemBase" + suffix <- + liftIO + $ decodeUtf8 + . convertToBase Base16 + . BS.take 4 + . convert + . hashWith SHA256 + . encodeUtf8 + <$> getProductKey base + pure . toS $ start9AgentServicePrefix <> suffix + +getStart9AgentHostnameLocal :: (HasFilesystemBase sig m, MonadIO m) => m Text +getStart9AgentHostnameLocal = getStart9AgentHostname <&> (<> ".local") + +publishAgentToAvahi :: ReaderT AgentCtx IO () +publishAgentToAvahi = do + filesystemBase <- asks $ appFilesystemBase . appSettings + start9AgentService <- injectFilesystemBase filesystemBase getStart9AgentHostname + lift $ Avahi.createDaemonConf $ toS start9AgentService + agentPort <- asks $ appPort . appSettings + services <- lift Avahi.listServices + let serviceNames = view basename <$> services + unless (start9AgentService `elem` serviceNames) $ withReaderT appSettings $ Avahi.createService + (toS start9AgentService) + (Avahi.WildcardsEnabled, "%h") + "_http._tcp" + agentPort + lift Avahi.reload + diff --git a/agent/src/Foundation.hs b/agent/src/Foundation.hs new file mode 100644 index 000000000..0ef1fd60f --- /dev/null +++ b/agent/src/Foundation.hs @@ -0,0 +1,219 @@ +{-# LANGUAGE CPP #-} +{-# LANGUAGE InstanceSigs #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE PartialTypeSignatures #-} +{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE ViewPatterns #-} + +module Foundation where + +import Startlude + +import qualified Control.Effect.Labelled as FE +import qualified Control.Carrier.Lift as FE +import Control.Concurrent.STM +import Control.Monad.Base +import Control.Monad.Logger ( LogSource ) +import Control.Monad.Trans.Control +import Crypto.Hash ( MD5, Digest ) +import qualified Data.HashMap.Strict as HM +import Data.IORef +import Data.Set +import Data.UUID +import Database.Persist as Persist +import Database.Persist.Sql +import Network.HTTP.Client (Manager) +import Network.HTTP.Types (status200) +import Network.Wai +import Yesod.Core +import Yesod.Core.Types +import Yesod.Auth ( AuthenticationResult(..) + , Creds(..) + , YesodAuth(..) + , YesodAuthPersist + , maybeAuth + ) +import qualified Yesod.Auth.Message as Msg +import Yesod.Form +import qualified Yesod.Core.Unsafe as Unsafe +import Yesod.Persist.Core + +import Auth +import Constants +import Lib.Algebra.State.RegistryUrl +import Lib.Background +import Lib.Error +import Lib.External.Metrics.ProcDev +import Lib.SystemPaths +import Lib.Types.Core +import Lib.Types.Emver +import Model +import Settings + + +-- | The foundation datatype for your application. This can be a good place to +-- keep settings and values requiring initialization before your application +-- starts running, such as database connections. Every handler will have +-- access to the data present here. + +data AgentCtx = AgentCtx + { appSettings :: AppSettings + , appHttpManager :: Manager + , appConnPool :: ConnectionPool -- ^ Database connection pool. + , appLogger :: Logger + , appWebServerThreadId :: IORef (Maybe ThreadId) + , appIsUpdating :: IORef (Maybe Version) + , appIsUpdateFailed :: IORef (Maybe S9Error) + , appProcDevMomentCache :: IORef (UTCTime, ProcDevMomentStats, ProcDevMetrics) + , appSelfUpdateSpecification :: MVar VersionRange + , appBackgroundJobs :: TVar JobCache + , appIconTags :: TVar (HM.HashMap AppId (Digest MD5)) + } + +setWebProcessThreadId :: ThreadId -> AgentCtx -> IO () +setWebProcessThreadId tid a = writeIORef (appWebServerThreadId a) . Just $ tid + +-- This is where we define all of the routes in our application. For a full +-- explanation of the syntax, please see: +-- http://www.yesodweb.com/book/routing-and-handlers +-- +-- Note that this is really half the story; in Application.hs, mkYesodDispatch +-- generates the rest of the code. Please see the following documentation +-- for an explanation for this split: +-- http://www.yesodweb.com/book/scaffolding-and-the-site-template#scaffolding-and-the-site-template_foundation_and_application_modules +-- +-- This function also generates the following type synonyms: +-- type Handler = HandlerT AgentCtx IO +mkYesodData "AgentCtx" $(parseRoutesFile "config/routes") + +noCacheUnlessSpecified :: Handler a -> Handler a +noCacheUnlessSpecified action = do + getCurrentRoute >>= \case + Nothing -> action + Just r -> if "cached" `member` routeAttrs r + then action + else addHeader "Cache-Control" "no-store" >> action +-- Please see the documentation for the Yesod typeclass. There are a number +-- of settings which can be configured by overriding methods here. +instance Yesod AgentCtx where + approot = ApprootRelative + authRoute _ = Nothing + + isAuthorized route _ | "noAuth" `member` routeAttrs route = pure Authorized + -- HACK! So that updating from 0.1.5 to 0.2.x doesn't leave you unreachable during system sync + -- in the old companion + | (fst $ renderRoute route) == ["v0"] = do + isUpdating <- fmap isJust $ getsYesod appIsUpdating >>= liftIO . readIORef + fresh <- fmap Startlude.null . runDB $ selectList ([] :: [Filter Account]) [] + if isUpdating && fresh + then sendResponseStatus status200 (object ["status" .= ("UPDATING" :: Text)]) + else requireSessionAuth + | otherwise = requireSessionAuth + +-- Yesod Middleware allows you to run code before and after each handler function. +-- The defaultYesodMiddleware adds the response header "Vary: Accept, Accept-Language" and performs authorization checks. +-- Some users may also want to add the defaultCsrfMiddleware, which: +-- a) Sets a cookie with a CSRF token in it. +-- b) Validates that incoming write requests include that token in either a header or POST parameter. +-- To add it, chain it together with the defaultMiddleware: yesodMiddleware = defaultYesodMiddleware . defaultCsrfMiddleware +-- For details, see the CSRF documentation in the Yesod.Core.Handler module of the yesod-core package. + yesodMiddleware :: ToTypedContent res => Handler res -> Handler res + yesodMiddleware = defaultYesodMiddleware . cutoffDuringUpdate . noCacheUnlessSpecified + +-- What messages should be logged. The following includes all messages when +-- in development, and warnings and errors in production. + shouldLogIO :: AgentCtx -> LogSource -> LogLevel -> IO Bool + shouldLogIO app _source level = + return $ appShouldLogAll (appSettings app) || level == LevelInfo || level == LevelWarn || level == LevelError + + makeLogger :: AgentCtx -> IO Logger + makeLogger = return . appLogger + + makeSessionBackend :: AgentCtx -> IO (Maybe SessionBackend) + makeSessionBackend ctx = strictSameSiteSessions $ do + filepath <- injectFilesystemBaseFromContext settings $ getAbsoluteLocationFor sessionSigningKeyPath + fmap Just $ defaultClientSessionBackend minutes $ toS filepath + where + settings = appSettings ctx + minutes = 7 * 24 * 60 -- 7 days + +instance RenderMessage AgentCtx FormMessage where + renderMessage _ _ = defaultFormMessage +instance YesodAuth AgentCtx where + type AuthId AgentCtx = AccountId + loginDest _ = AuthenticateR + logoutDest _ = AuthenticateR + authPlugins _ = [] + + -- This gets called on login, but after HashDB's postLoginR handler is called. This validates the username and password, so creds here are legit. + authenticate creds = liftHandler $ runDB $ do + x <- getBy $ UniqueAccount $ credsIdent creds + pure $ case x of + Just (Entity uid _) -> Authenticated uid + Nothing -> UserError Msg.NoIdentifierProvided + +instance YesodAuthPersist AgentCtx + +-- How to run database actions. +instance YesodPersist AgentCtx where + type YesodPersistBackend AgentCtx = SqlBackend + runDB :: SqlPersistT Handler a -> Handler a + runDB action = runSqlPool action . appConnPool =<< getYesod + +instance YesodPersistRunner AgentCtx where + getDBRunner :: Handler (DBRunner AgentCtx, Handler ()) + getDBRunner = defaultGetDBRunner appConnPool + +unsafeHandler :: AgentCtx -> Handler a -> IO a +unsafeHandler = Unsafe.fakeHandlerGetLogger appLogger + +appLogFunc :: AgentCtx -> LogFunc +appLogFunc = appLogger >>= flip messageLoggerSource + +cutoffDuringUpdate :: Handler a -> Handler a +cutoffDuringUpdate m = do + appIsUpdating <- getsYesod appIsUpdating >>= liftIO . readIORef + case appIsUpdating of + Just _ -> do + path <- asks $ pathInfo . reqWaiRequest . handlerRequest + case path of + [v] | v == "v" <> (show . major $ agentVersion) -> m + _ -> handleS9ErrT $ throwE UpdateInProgressE + Nothing -> m + +-- Returns authorized iff there is a valid (non-expired, signed + encrypted) session containing an account. +-- The only way for such a session to exist is if a previous login succeeded +requireSessionAuth :: Handler AuthResult +requireSessionAuth = do +#ifdef DISABLE_AUTH + pure Authorized +#else + maybeAuth >>= \case + Nothing -> pure AuthenticationRequired + Just _ -> pure Authorized +#endif + +type AgentRunner m = + RegistryUrlIOC (FE.Labelled "filesystemBase" (ReaderT Text) (FE.Labelled "httpManager" (ReaderT Manager) (FE.LiftC (ReaderT AgentCtx m)))) + +runInContext :: MonadResource m => AgentRunner m a -> ReaderT AgentCtx m a +runInContext action = do + ctx <- ask + let s = appSettings ctx + action + & runRegistryUrlIOC + & FE.runLabelled @"filesystemBase" + & flip runReaderT (appFilesystemBase s) + & FE.runLabelled @"httpManager" + & flip runReaderT (appHttpManager ctx) + & FE.runM + +instance MonadBase IO Handler where + liftBase m = HandlerFor $ const m +instance MonadBaseControl IO Handler where + type StM Handler a = a + liftBaseWith f = HandlerFor $ \handlerData -> f (($ handlerData) . unHandlerFor) + restoreM = pure diff --git a/agent/src/Handler/Apps.hs b/agent/src/Handler/Apps.hs new file mode 100644 index 000000000..4e5fc61eb --- /dev/null +++ b/agent/src/Handler/Apps.hs @@ -0,0 +1,760 @@ +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TupleSections #-} +{-# LANGUAGE TypeApplications #-} +module Handler.Apps where + +import Startlude hiding ( modify + , execState + , asks + , Reader + , runReader + , catchError + , forkFinally + , empty + ) + +import Control.Carrier.Reader +import Control.Carrier.Error.Church +import Control.Carrier.Lift +import qualified Control.Concurrent.Async.Lifted + as LAsync +import qualified Control.Concurrent.Lifted as Lifted +import qualified Control.Exception.Lifted as Lifted +import Control.Concurrent.STM.TVar +import Control.Effect.Empty hiding ( guard ) +import Control.Effect.Labelled ( HasLabelled + , Labelled + , runLabelled + ) +import Control.Lens hiding ( (??) ) +import Control.Monad.Logger +import Control.Monad.Trans.Control ( MonadBaseControl ) +import Data.Aeson +import Data.Aeson.Lens +import qualified Data.ByteString.Lazy as LBS +import Data.IORef +import qualified Data.HashMap.Lazy as HML +import qualified Data.HashMap.Strict as HM +import qualified Data.List.NonEmpty as NE +import Data.Singletons +import Data.Singletons.Prelude.Bool ( SBool(..) + , If + ) +import Data.Singletons.Prelude.List ( Elem ) + +import Database.Persist +import Database.Persist.Sql ( ConnectionPool ) +import Database.Persist.Sqlite ( runSqlPool ) +import Exinst +import Network.HTTP.Types +import Yesod.Core.Content +import Yesod.Core.Json +import Yesod.Core.Handler hiding ( cached ) +import Yesod.Core.Types ( JSONResponse(..) ) +import Yesod.Persist.Core + +import Foundation +import Handler.Backups +import Handler.Icons +import Handler.Types.Apps +import Handler.Util +import qualified Lib.Algebra.Domain.AppMgr as AppMgr2 +import Lib.Algebra.State.RegistryUrl +import Lib.Background +import Lib.Error +import qualified Lib.External.AppMgr as AppMgr +import qualified Lib.External.Registry as Reg +import Lib.IconCache +import qualified Lib.Notifications as Notifications +import Lib.SystemPaths +import Lib.TyFam.ConditionalData +import Lib.Types.Core +import Lib.Types.Emver +import Lib.Types.ServerApp +import Model +import Settings +import Crypto.Hash + +pureLog :: Show a => a -> Handler a +pureLog = liftA2 (*>) ($logInfo . show) pure + +logRet :: ToJSON a => Handler a -> Handler a +logRet = (>>= liftA2 (*>) ($logInfo . decodeUtf8 . LBS.toStrict . encode) pure) + +mkAppStatus :: HM.HashMap AppId (BackupJobType, a) -> AppId -> AppContainerStatus -> AppStatus +mkAppStatus hm appId status = case HM.lookup appId hm of + Nothing -> AppStatusAppMgr status + Just (CreateBackup , _) -> AppStatusTmp CreatingBackup + Just (RestoreBackup, _) -> AppStatusTmp RestoringBackup + + +type AllEffects m + = AppMgr2.AppMgrCliC + ( RegistryUrlIOC + ( Labelled + "iconTagCache" + (ReaderT (TVar (HM.HashMap AppId (Digest MD5)))) + ( Labelled + "filesystemBase" + (ReaderT Text) + ( Labelled + "databaseConnection" + (ReaderT ConnectionPool) + (ReaderT AgentCtx (ErrorC S9Error (LiftC m))) + ) + ) + ) + ) + +intoHandler :: AllEffects Handler x -> Handler x +intoHandler m = do + ctx <- getYesod + let fsbase = appFilesystemBase . appSettings $ ctx + runM + . handleS9ErrC + . flip runReaderT ctx + . flip runReaderT (appConnPool ctx) + . runLabelled @"databaseConnection" + . flip runReaderT fsbase + . runLabelled @"filesystemBase" + . flip runReaderT (appIconTags ctx) + . runLabelled @"iconTagCache" + . runRegistryUrlIOC + . AppMgr2.runAppMgrCliC + $ m +{-# INLINE intoHandler #-} + +-- TODO nasty. Also, note that if AppMgr.getInstalledApp fails for any app we will not return available apps res. +getAvailableAppsR :: Handler (JSONResponse [AppAvailablePreview]) +getAvailableAppsR = disableEndpointOnFailedUpdate . intoHandler $ JSONResponse <$> getAvailableAppsLogic + +getAvailableAppsLogic :: ( Has (Reader AgentCtx) sig m + , Has (Error S9Error) sig m + , Has RegistryUrl sig m + , Has AppMgr2.AppMgr sig m + , MonadIO m + , MonadBaseControl IO m + ) + => m [AppAvailablePreview] +getAvailableAppsLogic = do + jobCache <- asks appBackgroundJobs >>= liftIO . readTVarIO + let installCache = inspect SInstalling jobCache + (Reg.AppManifestRes apps, serverApps) <- LAsync.concurrently Reg.getAppManifest + (AppMgr2.list [AppMgr2.flags|-s -d|]) + let remapped = remapAppMgrInfo jobCache serverApps + pure $ foreach apps $ \app@StoreApp { storeAppId } -> + let installing = + ( (storeAppVersionInfoVersion . snd . installInfo &&& const (AppStatusTmp Installing)) + . fst + <$> HM.lookup storeAppId installCache + ) + installed = ((view _2 &&& view _1) <$> HM.lookup storeAppId remapped) + in storeAppToAvailablePreview app $ installing <|> installed + +getAvailableAppByIdR :: AppId -> Handler (JSONResponse AppAvailableFull) +getAvailableAppByIdR appId = + disableEndpointOnFailedUpdate . intoHandler $ JSONResponse <$> getAvailableAppByIdLogic appId + +getAvailableAppByIdLogic :: ( Has (Reader AgentCtx) sig m + , Has (Error S9Error) sig m + , Has RegistryUrl sig m + , Has AppMgr2.AppMgr sig m + , MonadIO m + , MonadBaseControl IO m + ) + => AppId + -> m AppAvailableFull +getAvailableAppByIdLogic appId = do + let storeAppId' = storeAppId + jobCache <- asks appBackgroundJobs >>= liftIO . readTVarIO + let installCache = inspect SInstalling jobCache + (Reg.AppManifestRes storeApps, serverApps) <- LAsync.concurrently Reg.getAppManifest + (AppMgr2.list [AppMgr2.flags|-s -d|]) + StoreApp {..} <- pure (find ((== appId) . storeAppId) storeApps) `orThrowM` NotFoundE "appId" (show appId) + let remapped = remapAppMgrInfo jobCache serverApps + let installingInfo = + ( (storeAppVersionInfoVersion . snd . installInfo &&& const (AppStatusTmp Installing)) + . fst + <$> HM.lookup appId installCache + ) + <|> ((view _2 &&& view _1) <$> HM.lookup appId remapped) + let latest = extract storeAppVersions + dependencies <- AppMgr2.checkDependencies (AppMgr2.LocalOnly False) + appId + (Just . exactly $ storeAppVersionInfoVersion latest) + enrichedDeps <- maybe (throwError (NotFoundE "dependencyId for" (show appId))) pure $ flip + HML.traverseWithKey + dependencies + \depId depInfo -> + let + base = storeAppToAppBase <$> find ((== depId) . storeAppId') storeApps + status = + (HM.lookup depId installCache $> AppStatusTmp Installing) <|> (view _1 <$> HM.lookup depId remapped) + in + (, status, depInfo) <$> base + let dependencyRequirements = fmap (dependencyInfoToDependencyRequirement (AsInstalled SFalse)) enrichedDeps + pure AppAvailableFull + { appAvailableFullBase = AppBase + appId + storeAppTitle + (storeIconUrl appId (storeAppVersionInfoVersion $ extract storeAppVersions)) + , appAvailableFullInstallInfo = installingInfo + , appAvailableFullVersionLatest = storeAppVersionInfoVersion latest + , appAvailableFullDescriptionShort = storeAppDescriptionShort + , appAvailableFullDescriptionLong = storeAppDescriptionLong + , appAvailableFullReleaseNotes = storeAppVersionInfoReleaseNotes latest + , appAvailableFullDependencyRequirements = HM.elems dependencyRequirements + , appAvailableFullVersions = storeAppVersionInfoVersion <$> storeAppVersions + } + +getAppLogsByIdR :: AppId -> Handler (JSONResponse [Text]) +getAppLogsByIdR appId = disableEndpointOnFailedUpdate $ handleS9ErrT $ do + logs <- AppMgr.getAppLogs appId + pure . JSONResponse . lines $ logs + +getInstalledAppsR :: Handler (JSONResponse [AppInstalledPreview]) +getInstalledAppsR = disableEndpointOnFailedUpdate . intoHandler $ JSONResponse <$> getInstalledAppsLogic + +cached :: MonadIO m => m a -> m (m a) +cached action = do + ref <- liftIO $ newIORef Nothing + pure $ liftIO (readIORef ref) >>= \case + Nothing -> action >>= liftA2 (*>) (liftIO . writeIORef ref . Just) pure + Just x -> pure x + +getInstalledAppsLogic :: (Has (Reader AgentCtx) sig m, Has AppMgr2.AppMgr sig m, MonadIO m) => m [AppInstalledPreview] +getInstalledAppsLogic = do + jobCache <- asks appBackgroundJobs >>= liftIO . readTVarIO + let installCache = installInfo . fst <$> inspect SInstalling jobCache + serverApps <- AppMgr2.list [AppMgr2.flags|-s -d|] + let remapped = remapAppMgrInfo jobCache serverApps + installingPreviews = flip + HM.mapWithKey + installCache + \installingId (StoreApp {..}, StoreAppVersionInfo {..}) -> AppInstalledPreview + { appInstalledPreviewBase = AppBase installingId + storeAppTitle + (iconUrl installingId storeAppVersionInfoVersion) + , appInstalledPreviewStatus = AppStatusTmp Installing + , appInstalledPreviewVersionInstalled = storeAppVersionInfoVersion + , appInstalledPreviewTorAddress = Nothing + } + installedPreviews = flip + HML.mapWithKey + remapped + \appId (s, v, AppMgr2.InfoRes {..}) -> AppInstalledPreview + { appInstalledPreviewBase = AppBase appId infoResTitle (iconUrl appId v) + , appInstalledPreviewStatus = s + , appInstalledPreviewVersionInstalled = v + , appInstalledPreviewTorAddress = infoResTorAddress + } + + pure $ HML.elems $ HML.union installingPreviews installedPreviews + +getInstalledAppByIdR :: AppId -> Handler (JSONResponse AppInstalledFull) +getInstalledAppByIdR appId = + disableEndpointOnFailedUpdate . intoHandler $ JSONResponse <$> getInstalledAppByIdLogic appId + +getInstalledAppByIdLogic :: ( Has (Reader AgentCtx) sig m + , Has RegistryUrl sig m + , Has (Error S9Error) sig m + , Has AppMgr2.AppMgr sig m + , MonadIO m + , MonadBaseControl IO m + ) + => AppId + -> m AppInstalledFull +getInstalledAppByIdLogic appId = do + jobCache <- asks appBackgroundJobs >>= liftIO . readTVarIO + let installCache = installInfo . fst <$> inspect SInstalling jobCache + db <- asks appConnPool + backupTime' <- LAsync.async $ liftIO $ flip runSqlPool db $ getLastSuccessfulBackup appId + let installing = do + backupTime <- lift $ LAsync.wait backupTime' + hoistMaybe $ HM.lookup appId installCache <&> \(StoreApp {..}, StoreAppVersionInfo {..}) -> AppInstalledFull + { appInstalledFullBase = AppBase appId storeAppTitle (iconUrl appId storeAppVersionInfoVersion) + , appInstalledFullStatus = AppStatusTmp Installing + , appInstalledFullVersionInstalled = storeAppVersionInfoVersion + , appInstalledFullInstructions = Nothing + , appInstalledFullLastBackup = backupTime + , appInstalledFullTorAddress = Nothing + , appInstalledFullConfiguredRequirements = [] + } + serverApps <- AppMgr2.list [AppMgr2.flags|-s -d|] + let remapped = remapAppMgrInfo jobCache serverApps + appManifestFetchCached <- cached Reg.getAppManifest + let + installed = do + (status, version, AppMgr2.InfoRes {..}) <- hoistMaybe (HM.lookup appId remapped) + instructions' <- lift $ LAsync.async $ AppMgr2.instructions appId + requirements <- LAsync.runConcurrently $ flip + HML.traverseWithKey + (HML.filter AppMgr2.dependencyInfoRequired infoResDependencies) + \depId depInfo -> LAsync.Concurrently $ do + let + fromInstalled = (AppMgr2.infoResTitle &&& AppMgr2.infoResVersion) + <$> hoistMaybe (HM.lookup depId serverApps) + let fromStore = do + Reg.AppManifestRes res <- lift appManifestFetchCached + (storeAppTitle &&& storeAppVersionInfoVersion . extract . storeAppVersions) + <$> hoistMaybe (find ((== depId) . storeAppId) res) + (title, v) <- fromInstalled <|> fromStore + let base = AppBase depId title (iconUrl depId v) + let + depStatus = + (HM.lookup depId installCache $> AppStatusTmp Installing) + <|> (view _1 <$> HM.lookup depId remapped) + pure $ dependencyInfoToDependencyRequirement (AsInstalled STrue) (base, depStatus, depInfo) + instructions <- lift $ LAsync.wait instructions' + backupTime <- lift $ LAsync.wait backupTime' + pure AppInstalledFull { appInstalledFullBase = AppBase appId infoResTitle (iconUrl appId version) + , appInstalledFullStatus = status + , appInstalledFullVersionInstalled = version + , appInstalledFullInstructions = instructions + , appInstalledFullLastBackup = backupTime + , appInstalledFullTorAddress = infoResTorAddress + , appInstalledFullConfiguredRequirements = HM.elems requirements + } + runMaybeT (installing <|> installed) `orThrowM` NotFoundE "appId" (show appId) + +postUninstallAppR :: AppId -> Handler (JSONResponse (WithBreakages ())) +postUninstallAppR appId = do + dry <- AppMgr2.DryRun . isJust <$> lookupGetParam "dryrun" + disableEndpointOnFailedUpdate . intoHandler $ JSONResponse <$> postUninstallAppLogic appId dry + +postUninstallAppLogic :: ( HasFilesystemBase sig m + , Has (Reader AgentCtx) sig m + , Has (Error S9Error) sig m + , Has AppMgr2.AppMgr sig m + , MonadIO m + , HasLabelled "databaseConnection" (Reader ConnectionPool) sig m + , HasLabelled "iconTagCache" (Reader (TVar (HM.HashMap AppId (Digest MD5)))) sig m + ) + => AppId + -> AppMgr2.DryRun + -> m (WithBreakages ()) +postUninstallAppLogic appId dryrun = do + jobCache <- asks appBackgroundJobs >>= liftIO . readTVarIO + let tmpStatuses = statuses jobCache + serverApps <- AppMgr2.list [AppMgr2.flags| |] + when (not $ HM.member appId serverApps) $ throwError (AppNotInstalledE appId) + case HM.lookup appId tmpStatuses of + Just Installing -> throwError (TemporarilyForbiddenE appId "uninstall" (show Installing)) + Just CreatingBackup -> throwError (TemporarilyForbiddenE appId "uninstall" (show CreatingBackup)) + Just RestoringBackup -> throwError (TemporarilyForbiddenE appId "uninstall" (show RestoringBackup)) + _ -> pure () + let flags = if coerce dryrun then Left dryrun else Right (AppMgr2.Purge True) + breakageIds <- HM.keys . AppMgr2.unBreakageMap <$> AppMgr2.remove flags appId + bs <- pure (traverse (hydrate $ (AppMgr2.infoResTitle &&& AppMgr2.infoResVersion) <$> serverApps) breakageIds) + `orThrowM` InternalE "Reported app breakage for app that isn't installed, contact support" + when (not $ coerce dryrun) $ clearIcon appId + pure $ WithBreakages bs () + +type InstallResponse :: Bool -> Type +data InstallResponse a = InstallResponse (If a (WithBreakages ()) AppInstalledFull) +instance ToJSON (Some1 InstallResponse) where + toJSON (Some1 STrue (InstallResponse a)) = toJSON a + toJSON (Some1 SFalse (InstallResponse a)) = toJSON a +postInstallNewAppR :: AppId -> Handler (JSONResponse (Some1 InstallResponse)) +postInstallNewAppR appId = do + dryrun <- isJust <$> lookupGetParam "dryrun" + InstallNewAppReq { installNewAppVersion } <- requireCheckJsonBody + disableEndpointOnFailedUpdate . intoHandler $ JSONResponse <$> do + withSomeSing dryrun $ \sb -> Some1 sb . InstallResponse <$> postInstallNewAppLogic appId installNewAppVersion sb + +postInstallNewAppLogic :: forall sig m a + . ( Has (Reader AgentCtx) sig m + , HasLabelled "databaseConnection" (Reader ConnectionPool) sig m + , HasLabelled "iconTagCache" (Reader (TVar (HM.HashMap AppId (Digest MD5)))) sig m + , Has (Error S9Error) sig m + , Has RegistryUrl sig m + , Has AppMgr2.AppMgr sig m + , HasFilesystemBase sig m + , MonadIO m + , MonadBaseControl IO m + ) + => AppId + -> Version + -> SBool a + -> m (If a (WithBreakages ()) AppInstalledFull) +postInstallNewAppLogic appId appVersion dryrun = do + db <- asks appConnPool + full <- (Just <$> getInstalledAppByIdLogic appId) `catchError` \case + NotFoundE "appId" appId' -> + if AppId appId' == appId then pure Nothing else throwError (NotFoundE "appId" appId') + other -> throwError other + case full of + Just aif@AppInstalledFull{} -> if appInstalledFullVersionInstalled aif == appVersion + then pure $ case dryrun of + STrue -> WithBreakages [] () + SFalse -> aif + else installIt db True + Nothing -> installIt db False + where + installIt :: ConnectionPool -> Bool -> m (If a (WithBreakages ()) AppInstalledFull) + installIt db isUpdate = do + jobCacheTVar <- asks appBackgroundJobs + store@StoreApp {..} <- Reg.getStoreAppInfo appId `orThrowM` NotFoundE "appId" (show appId) + vinfo@StoreAppVersionInfo{} <- + find ((== appVersion) . storeAppVersionInfoVersion) storeAppVersions + `orThrowPure` NotFoundE "version" (show appVersion) + -- if it is a dry run of an update we don't want to modify the cache + case dryrun of + STrue -> if not isUpdate + then pure $ WithBreakages [] () + else do + serverApps' <- LAsync.async $ AppMgr2.list [AppMgr2.flags| |] + hm <- AppMgr2.update (AppMgr2.DryRun True) appId (Just $ exactly appVersion) + (serverApps :: HM.HashMap AppId (AppMgr2.InfoRes ( 'Right '[]))) <- LAsync.wait serverApps' + breakages <- + traverse (hydrate ((AppMgr2.infoResTitle &&& AppMgr2.infoResVersion) <$> serverApps)) + (HM.keys $ AppMgr2.unBreakageMap hm) + `orThrowPure` InternalE + "Breakage reported for app that isn't installed, contact support" + pure $ WithBreakages breakages () + SFalse -> do + let + action = do + iconAction <- LAsync.async $ saveIcon (toS storeAppIconUrl) + let install = if isUpdate + then void $ AppMgr2.update (AppMgr2.DryRun False) appId (Just $ exactly appVersion) + else AppMgr2.install (AppMgr2.NoCache True) appId (Just $ exactly appVersion) + let + success = liftIO $ void $ flip runSqlPool db $ Notifications.emit + appId + appVersion + Notifications.InstallSuccess + let failure e = liftIO $ do + let notif = case e of + AppMgrE _ ec -> Notifications.InstallFailedAppMgrExitCode ec + _ -> Notifications.InstallFailedS9Error e + void $ flip runSqlPool db $ Notifications.emit appId appVersion notif + putStrLn @Text (show e) + let todo = do + install + () <- LAsync.wait iconAction + success + todo `catchError` failure + tid <- action `Lifted.forkFinally` const postInstall + liftIO $ atomically $ modifyTVar' jobCacheTVar (insertJob appId (Install store vinfo) tid) + getInstalledAppByIdLogic appId + postInstall :: m () + postInstall = do + jobCache <- asks appBackgroundJobs + pool <- asks appConnPool + liftIO . atomically $ modifyTVar jobCache (deleteJob appId) + ls <- AppMgr2.list [AppMgr2.flags| |] + LAsync.forConcurrently_ (HM.toList ls) $ \(k, AppMgr2.InfoRes {..}) -> when + infoResNeedsRestart + ( postRestartServerAppLogic k + `catchError` \e -> liftIO $ runSqlPool + (void $ Notifications.emit k infoResVersion (Notifications.RestartFailed e)) + pool + ) + + +postStartServerAppR :: AppId -> Handler () +postStartServerAppR appId = disableEndpointOnFailedUpdate . intoHandler $ postStartServerAppLogic appId + +postStartServerAppLogic :: (Has (Error S9Error) sig m, Has AppMgr2.AppMgr sig m, Has (Reader AgentCtx) sig m, MonadIO m) + => AppId + -> m () +postStartServerAppLogic appId = do + jobCache <- asks appBackgroundJobs >>= liftIO . readTVarIO + info <- AppMgr2.info [AppMgr2.flags|-s -d|] appId `orThrowM` AppNotInstalledE appId + (status, _, _) <- (HM.lookup appId $ remapAppMgrInfo jobCache (HM.singleton appId info)) + `orThrowPure` InternalE "Remapping magically deleted keys between source and target structures" + case status of + AppStatusAppMgr Stopped -> AppMgr2.start appId + other -> throwError $ AppStateActionIncompatibleE appId other Start + +postRestartServerAppR :: AppId -> Handler () +postRestartServerAppR appId = disableEndpointOnFailedUpdate . intoHandler $ postRestartServerAppLogic appId + +postRestartServerAppLogic :: ( Has (Reader AgentCtx) sig m + , Has AppMgr2.AppMgr sig m + , Has (Error S9Error) sig m + , MonadBaseControl IO m + , MonadIO m + ) + => AppId + -> m () +postRestartServerAppLogic appId = do + jobCache <- asks appBackgroundJobs + answer <- Lifted.newEmptyMVar + void . Lifted.fork $ do + tid <- Lifted.myThreadId + problem <- liftIO . atomically $ do + JobCache jobs <- readTVar jobCache + case HM.lookup appId jobs of + Just (Some1 s _, _) -> pure (Just . throwError $ TemporarilyForbiddenE appId "restart" (show s)) + Nothing -> do + modifyTVar jobCache (insertJob appId RestartApp tid) + pure Nothing + case problem of + Nothing -> do + AppMgr2.restart appId `Lifted.finally` (liftIO . atomically) (modifyTVar jobCache (deleteJob appId)) + Lifted.putMVar answer Nothing + Just p -> Lifted.putMVar answer (Just p) + Lifted.takeMVar answer >>= \case + Nothing -> pure () + Just p -> p + + +postStopServerAppR :: AppId -> Handler (JSONResponse (WithBreakages ())) +postStopServerAppR appId = disableEndpointOnFailedUpdate do + dryrun <- isJust <$> lookupGetParam "dryrun" + mRes <- intoHandler $ runMaybeT (JSONResponse <$> postStopServerAppLogic appId (AppMgr2.DryRun dryrun)) + case mRes of + Nothing -> sendResponseStatus status200 () + Just x -> pure x + +postStopServerAppLogic :: ( Has Empty sig m + , Has (Reader AgentCtx) sig m + , Has (Error S9Error) sig m + , Has AppMgr2.AppMgr sig m + , MonadIO m + , MonadBaseControl IO m + ) + => AppId + -> AppMgr2.DryRun + -> m (WithBreakages ()) +postStopServerAppLogic appId dryrun = do + jobCache <- asks appBackgroundJobs + titles <- (AppMgr2.infoResTitle &&& AppMgr2.infoResVersion) <<$>> AppMgr2.list [AppMgr2.flags| |] + let stopIt = do + breakages <- AppMgr2.stop dryrun appId + bases <- traverse (hydrate titles) (HM.keys $ AppMgr2.unBreakageMap breakages) + `orThrowPure` InternalE "Breakages reported for app that isn't installed, contact support" + pure $ WithBreakages bases () + status <- AppMgr2.infoResStatus <<$>> AppMgr2.info [AppMgr2.flags|-S|] appId + case (dryrun, status) of + (_ , Nothing ) -> throwError $ NotFoundE "appId" (show appId) + (AppMgr2.DryRun False, Just Running) -> do + tid <- (void stopIt) + `Lifted.forkFinally` const ((liftIO . atomically) (modifyTVar jobCache (deleteJob appId))) + liftIO . atomically $ modifyTVar jobCache (insertJob appId StopApp tid) + empty + (AppMgr2.DryRun True , Just Running ) -> stopIt + (AppMgr2.DryRun False, Just Restarting) -> do + tid <- (void stopIt) + `Lifted.forkFinally` const ((liftIO . atomically) (modifyTVar jobCache (deleteJob appId))) + liftIO . atomically $ modifyTVar jobCache (insertJob appId StopApp tid) + empty + (AppMgr2.DryRun True, Just Restarting) -> stopIt + (_, Just other) -> throwError $ AppStateActionIncompatibleE appId (AppStatusAppMgr other) Stop + +getAppConfigR :: AppId -> Handler TypedContent +getAppConfigR = + disableEndpointOnFailedUpdate + . handleS9ErrT + . fmap (TypedContent typeJson . toContent) + . AppMgr.getConfigurationAndSpec + +patchAppConfigR :: AppId -> Handler (JSONResponse (WithBreakages ())) +patchAppConfigR appId = disableEndpointOnFailedUpdate $ do + dryrun <- isJust <$> lookupGetParam "dryrun" + value <- requireCheckJsonBody @_ @Value + realVal <- + runM . handleS9ErrC $ ((value ^? key "config") `orThrowPure` (InvalidRequestE value "Missing 'config' key")) + intoHandler $ JSONResponse <$> patchAppConfigLogic appId (AppMgr2.DryRun dryrun) realVal + +patchAppConfigLogic :: ( Has (Reader AgentCtx) sig m + , Has (Error S9Error) sig m + , Has AppMgr2.AppMgr sig m + , MonadBaseControl IO m + , MonadIO m + ) + => AppId + -> AppMgr2.DryRun + -> Value + -> m (WithBreakages ()) +patchAppConfigLogic appId dryrun cfg = do + serverApps <- AppMgr2.list [AppMgr2.flags| |] + AppMgr2.ConfigureRes {..} <- AppMgr2.configure dryrun appId (Just cfg) + when (not $ coerce dryrun) $ for_ configureResNeedsRestart postRestartServerAppLogic + breakages <- + traverse (hydrate ((AppMgr2.infoResTitle &&& AppMgr2.infoResVersion) <$> serverApps)) + (HM.keys configureResStopped) + `orThrowPure` InternalE "Breakage reported for app that is not installed, contact support" + pure $ WithBreakages breakages () + + +getAppNotificationsR :: AppId -> Handler (JSONResponse [Entity Notification]) +getAppNotificationsR appId = disableEndpointOnFailedUpdate $ runDB $ do + page <- lookupGetParam "page" `orDefaultTo` 1 + pageSize <- lookupGetParam "perPage" `orDefaultTo` 20 + evs <- selectList [NotificationAppId ==. appId] + [Desc NotificationCreatedAt, LimitTo pageSize, OffsetBy ((page - 1) * pageSize)] + let toArchive = fmap entityKey $ filter ((== Nothing) . notificationArchivedAt . entityVal) evs + void $ Notifications.archive toArchive + pure $ JSONResponse evs + where + orDefaultTo :: (Monad m, Read a) => m (Maybe Text) -> a -> m a + orDefaultTo m a = do + m' <- m + case m' >>= readMaybe . toS of + Nothing -> pure a + Just x -> pure x + +getAppMetricsR :: AppId -> Handler TypedContent +getAppMetricsR appId = + disableEndpointOnFailedUpdate . handleS9ErrT $ fmap (TypedContent typeJson . toContent) $ AppMgr.stats appId + +getAvailableAppVersionInfoR :: AppId -> VersionRange -> Handler (JSONResponse AppVersionInfo) +getAvailableAppVersionInfoR appId version = + disableEndpointOnFailedUpdate . intoHandler $ JSONResponse <$> getAvailableAppVersionInfoLogic appId version + +getAvailableAppVersionInfoLogic :: ( Has (Reader AgentCtx) sig m + , Has (Error S9Error) sig m + , Has RegistryUrl sig m + , Has AppMgr2.AppMgr sig m + , MonadIO m + , MonadBaseControl IO m + ) + => AppId + -> VersionRange + -> m AppVersionInfo +getAvailableAppVersionInfoLogic appId appVersionSpec = do + jobCache <- asks appBackgroundJobs >>= liftIO . readTVarIO + Reg.AppManifestRes storeApps <- Reg.getAppManifest + let titles = + (storeAppTitle &&& storeAppVersionInfoVersion . extract . storeAppVersions) <$> indexBy storeAppId storeApps + StoreApp {..} <- find ((== appId) . storeAppId) storeApps `orThrowPure` NotFoundE "appId" (show appId) + serverApps <- AppMgr2.list [AppMgr2.flags|-s -d|] + let remapped = remapAppMgrInfo jobCache serverApps + StoreAppVersionInfo {..} <- + maximumMay (NE.filter ((<|| appVersionSpec) . storeAppVersionInfoVersion) storeAppVersions) + `orThrowPure` NotFoundE "version spec " (show appVersionSpec) + dependencies <- AppMgr2.checkDependencies (AppMgr2.LocalOnly False) + appId + (Just $ exactly storeAppVersionInfoVersion) + requirements <- flip HML.traverseWithKey dependencies $ \depId depInfo -> do + base <- hydrate titles depId `orThrowPure` NotFoundE "metadata for" (show depId) + let status = + (HM.lookup depId (inspect SInstalling jobCache) $> AppStatusTmp Installing) + <|> (view _1 <$> HM.lookup depId remapped) + pure $ dependencyInfoToDependencyRequirement (AsInstalled SFalse) (base, status, depInfo) + pure AppVersionInfo { appVersionInfoVersion = storeAppVersionInfoVersion + , appVersionInfoReleaseNotes = storeAppVersionInfoReleaseNotes + , appVersionInfoDependencyRequirements = HM.elems requirements + } + +postAutoconfigureR :: AppId -> AppId -> Handler (JSONResponse (WithBreakages AutoconfigureChangesRes)) +postAutoconfigureR dependency dependent = do + dry <- AppMgr2.DryRun . isJust <$> lookupGetParam "dryrun" + disableEndpointOnFailedUpdate . intoHandler $ JSONResponse <$> postAutoconfigureLogic dependency dependent dry + +postAutoconfigureLogic :: ( Has (Reader AgentCtx) sig m + , Has AppMgr2.AppMgr sig m + , Has (Error S9Error) sig m + , MonadBaseControl IO m + , MonadIO m + ) + => AppId + -> AppId + -> AppMgr2.DryRun + -> m (WithBreakages AutoconfigureChangesRes) +postAutoconfigureLogic dependency dependent dry = do + -- IMPORTANT! AppMgr reverses arguments from the endpoint + appData <- AppMgr2.list [AppMgr2.flags| |] + let apps = HM.keys appData + case (dependency `elem` apps, dependent `elem` apps) of + (False, _ ) -> throwError $ NotFoundE "appId" (show dependency) + (_ , False) -> throwError $ NotFoundE "appId" (show dependent) + _ -> pure () + AppMgr2.AutoconfigureRes {..} <- AppMgr2.autoconfigure dry dependent dependency + when (not $ coerce dry) $ for_ (AppMgr2.configureResNeedsRestart autoconfigureConfigRes) postRestartServerAppLogic + let titles = (AppMgr2.infoResTitle &&& AppMgr2.infoResVersion) <$> appData + bases <- traverse (hydrate titles) (HM.keys (AppMgr2.configureResStopped autoconfigureConfigRes)) + `orThrowPure` InternalE "Breakages reported for app that isn't installed, contact support" + pure $ WithBreakages bases (AutoconfigureChangesRes $ HM.lookup dependency autoconfigureChanged) + +indexBy :: (Eq k, Hashable k) => (v -> k) -> [v] -> HM.HashMap k v +indexBy = flip foldr HM.empty . (>>= HM.insertWith const) +{-# INLINE indexBy #-} + +hydrate :: HM.HashMap AppId (Text, Version) -> AppId -> Maybe AppBase +hydrate titles appId = HM.lookup appId titles <&> \(t, v) -> AppBase appId t (iconUrl appId v) + +remapAppMgrInfo :: (Elem 'AppMgr2.IncludeDependencies ls ~ 'True, Elem 'AppMgr2.IncludeStatus ls ~ 'True) + => JobCache + -> HM.HashMap AppId (AppMgr2.InfoRes ( 'Right ls)) -- ^ AppMgr response + -> HM.HashMap AppId (AppStatus, Version, AppMgr2.InfoRes ( 'Right ls)) +remapAppMgrInfo jobCache serverApps = flip + HML.mapWithKey + serverApps + \appId infoRes@AppMgr2.InfoRes {..} -> + let refinedDepInfo = flip + HML.mapWithKey + infoResDependencies + \depId depInfo -> + case + ( HM.lookup depId tmpStatuses + , AppMgr2.infoResStatus <$> HM.lookup depId serverApps + , AppMgr2.dependencyInfoError depInfo + ) + of + -- mute all of the not-running violations that are currently backing up and container is paused + (Just CreatingBackup, Just Paused, Just AppMgr2.NotRunning) -> + depInfo { AppMgr2.dependencyInfoError = Nothing } + (_, _, _) -> depInfo + realViolations = + any (isJust . AppMgr2.dependencyInfoError <&&> AppMgr2.dependencyInfoRequired) refinedDepInfo + (status, version) = + maybe (AppStatusAppMgr infoResStatus, infoResVersion) (first AppStatusTmp) + $ ((, infoResVersion) <$> HM.lookup appId tmpStatuses) + <|> (guard (not infoResIsConfigured || infoResIsRecoverable) $> (NeedsConfig, infoResVersion)) + <|> (guard realViolations $> (BrokenDependencies, infoResVersion)) + <|> (guard (infoResStatus == Restarting) $> (Crashed, infoResVersion)) + in ( status + , version + , infoRes + { AppMgr2.infoResDependencies = case status of + AppStatusTmp NeedsConfig -> HM.empty + _ -> refinedDepInfo + } + ) + where tmpStatuses = statuses jobCache + +storeAppToAppBase :: StoreApp -> AppBase +storeAppToAppBase StoreApp {..} = + AppBase storeAppId storeAppTitle (storeIconUrl storeAppId (storeAppVersionInfoVersion $ extract storeAppVersions)) + +storeAppToAvailablePreview :: StoreApp -> Maybe (Version, AppStatus) -> AppAvailablePreview +storeAppToAvailablePreview s@StoreApp {..} installed = AppAvailablePreview + (storeAppToAppBase s) + (storeAppVersionInfoVersion $ extract storeAppVersions) + storeAppDescriptionShort + installed + +type AsInstalled :: Bool -> Type +newtype AsInstalled a = AsInstalled { unAsInstalled :: SBool a } +dependencyInfoToDependencyRequirement :: AsInstalled a + -> (AppBase, Maybe AppStatus, AppMgr2.DependencyInfo) + -> (AppDependencyRequirement (If a Strip Keep)) +dependencyInfoToDependencyRequirement asInstalled (base, status, AppMgr2.DependencyInfo {..}) = do + let appDependencyRequirementBase = base + let appDependencyRequirementDescription = dependencyInfoDescription + let appDependencyRequirementVersionSpec = dependencyInfoVersionSpec + let appDependencyRequirementViolation = case (status, dependencyInfoError) of + (Just s@(AppStatusTmp Installing), _) -> Just $ IncompatibleStatus s + (Nothing, _ ) -> Just Missing + (_ , Just AppMgr2.NotInstalled) -> Just Missing + (_, Just (AppMgr2.InvalidVersion _ _)) -> Just IncompatibleVersion + (_, Just (AppMgr2.UnsatisfiedConfig reasons)) -> Just . IncompatibleConfig $ reasons + (Just s , Just AppMgr2.NotRunning ) -> Just $ IncompatibleStatus s + (_ , Nothing ) -> Nothing + case asInstalled of + AsInstalled STrue -> + let appDependencyRequirementReasonOptional = () + appDependencyRequirementDefault = () + in AppDependencyRequirement { .. } + AsInstalled SFalse -> + let appDependencyRequirementReasonOptional = dependencyInfoReasonOptional + appDependencyRequirementDefault = dependencyInfoRequired + in AppDependencyRequirement { .. } diff --git a/agent/src/Handler/Authenticate.hs b/agent/src/Handler/Authenticate.hs new file mode 100644 index 000000000..2e6476971 --- /dev/null +++ b/agent/src/Handler/Authenticate.hs @@ -0,0 +1,9 @@ +module Handler.Authenticate where + +import Startlude + +import Foundation + +-- handled by auth switch in Foundation +getAuthenticateR :: Handler () +getAuthenticateR = pure () diff --git a/agent/src/Handler/Backups.hs b/agent/src/Handler/Backups.hs new file mode 100644 index 000000000..128badf1d --- /dev/null +++ b/agent/src/Handler/Backups.hs @@ -0,0 +1,218 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +module Handler.Backups where + +import Startlude hiding ( Reader + , ask + , runReader + ) + +import Control.Effect.Labelled hiding ( Handler ) +import Control.Effect.Reader.Labelled +import Control.Carrier.Error.Church +import Control.Carrier.Lift +import Control.Carrier.Reader ( runReader ) +import Data.Aeson +import qualified Data.HashMap.Strict as HM +import Data.UUID.V4 +import Database.Persist.Sql +import Yesod.Auth +import Yesod.Core +import Yesod.Core.Types + +import Foundation +import Handler.Util +import Lib.Error +import qualified Lib.External.AppMgr as AppMgr +import qualified Lib.Notifications as Notifications +import Lib.Password +import Lib.Types.Core +import Lib.Types.Emver +import Model +import qualified Lib.Algebra.Domain.AppMgr as AppMgr2 +import Lib.Background +import Control.Concurrent.STM +import Exinst + + +data CreateBackupReq = CreateBackupReq + { createBackupLogicalName :: FilePath + , createBackupPassword :: Maybe Text + } + deriving (Eq, Show) +instance FromJSON CreateBackupReq where + parseJSON = withObject "Create Backup Req" $ \o -> do + createBackupLogicalName <- o .: "logicalname" + createBackupPassword <- o .:? "password" .!= Nothing + pure CreateBackupReq { .. } + +data RestoreBackupReq = RestoreBackupReq + { restoreBackupLogicalName :: FilePath + , restoreBackupPassword :: Maybe Text + } + deriving (Eq, Show) +instance FromJSON RestoreBackupReq where + parseJSON = withObject "Restore Backup Req" $ \o -> do + restoreBackupLogicalName <- o .: "logicalname" + restoreBackupPassword <- o .:? "password" .!= Nothing + pure RestoreBackupReq { .. } + +-- Handlers + +postCreateBackupR :: AppId -> Handler () +postCreateBackupR appId = disableEndpointOnFailedUpdate $ do + req <- requireCheckJsonBody + AgentCtx {..} <- getYesod + account <- entityVal <$> requireAuth + case validatePass account <$> (createBackupPassword req) of + Just False -> runM . handleS9ErrC $ throwError BackupPassInvalidE + _ -> + createBackupLogic appId req + & AppMgr2.runAppMgrCliC + & runLabelled @"databaseConnection" + & runReader appConnPool + & runLabelled @"backgroundJobCache" + & runReader appBackgroundJobs + & handleS9ErrC + & runM + + +postStopBackupR :: AppId -> Handler () +postStopBackupR appId = disableEndpointOnFailedUpdate $ do + cache <- getsYesod appBackgroundJobs + stopBackupLogic appId & runLabelled @"backgroundJobCache" & runReader cache & handleS9ErrC & runM + +postRestoreBackupR :: AppId -> Handler () +postRestoreBackupR appId = disableEndpointOnFailedUpdate $ do + req <- requireCheckJsonBody + AgentCtx {..} <- getYesod + restoreBackupLogic appId req + & AppMgr2.runAppMgrCliC + & runLabelled @"databaseConnection" + & runReader appConnPool + & runLabelled @"backgroundJobCache" + & runReader appBackgroundJobs + & handleS9ErrC + & runM + +getListDisksR :: Handler (JSONResponse [AppMgr.DiskInfo]) +getListDisksR = fmap JSONResponse . runM . handleS9ErrC $ listDisksLogic + + +-- Logic + +createBackupLogic :: ( HasLabelled "backgroundJobCache" (Reader (TVar JobCache)) sig m + , HasLabelled "databaseConnection" (Reader ConnectionPool) sig m + , Has (Error S9Error) sig m + , Has AppMgr2.AppMgr sig m + , MonadIO m + ) + => AppId + -> CreateBackupReq + -> m () +createBackupLogic appId CreateBackupReq {..} = do + jobCache <- ask @"backgroundJobCache" + db <- ask @"databaseConnection" + version <- fmap AppMgr2.infoResVersion $ AppMgr2.info [AppMgr2.flags| |] appId `orThrowM` NotFoundE "appId" + (show appId) + res <- liftIO . atomically $ do + (JobCache jobs) <- readTVar jobCache + case HM.lookup appId jobs of + Just (Some1 SCreatingBackup _, _) -> pure (Left $ BackupE appId "Already creating backup") + Just (Some1 SRestoringBackup _, _) -> pure (Left $ BackupE appId "Cannot backup during restore") + Just (Some1 _ _, _) -> pure (Left $ BackupE appId "Cannot backup: incompatible status") + Nothing -> do + -- this panic is here because we don't have the threadID yet, and it is required. We want to write the + -- TVar anyway though so that we don't accidentally launch multiple backup jobs + -- TODO: consider switching to MVar's for this + modifyTVar jobCache (insertJob appId Backup $ panic "ThreadID prematurely forced") + pure $ Right () + case res of + Left e -> throwError e + Right () -> do + tid <- liftIO . forkIO $ do + appmgrRes <- runExceptT (AppMgr.backupCreate createBackupPassword appId createBackupLogicalName) + atomically $ modifyTVar' jobCache (deleteJob appId) + let notif = case appmgrRes of + Left e -> Notifications.BackupFailed e + Right _ -> Notifications.BackupSucceeded + flip runSqlPool db $ do + void $ insertBackupResult appId version (isRight appmgrRes) + void $ Notifications.emit appId version notif + liftIO . atomically $ modifyTVar jobCache (insertJob appId Backup tid) + +stopBackupLogic :: ( HasLabelled "backgroundJobCache" (Reader (TVar JobCache)) sig m + , Has (Error S9Error) sig m + , MonadIO m + ) + => AppId + -> m () +stopBackupLogic appId = do + jobCache <- ask @"backgroundJobCache" + res <- liftIO . atomically $ do + (JobCache jobs) <- readTVar jobCache + case HM.lookup appId jobs of + Just (Some1 SCreatingBackup _, tid) -> do + modifyTVar jobCache (deleteJob appId) + pure (Right tid) + Just (Some1 SRestoringBackup _, _) -> pure (Left $ BackupE appId "Cannot interrupt restore") + _ -> pure (Left $ NotFoundE "backup job" (show appId)) + case res of + Left e -> throwError e + Right tid -> liftIO $ killThread tid + +restoreBackupLogic :: ( HasLabelled "backgroundJobCache" (Reader (TVar JobCache)) sig m + , HasLabelled "databaseConnection" (Reader ConnectionPool) sig m + , Has (Error S9Error) sig m + , Has AppMgr2.AppMgr sig m + , MonadIO m + ) + => AppId + -> RestoreBackupReq + -> m () +restoreBackupLogic appId RestoreBackupReq {..} = do + jobCache <- ask @"backgroundJobCache" + db <- ask @"databaseConnection" + version <- fmap AppMgr2.infoResVersion $ AppMgr2.info [AppMgr2.flags| |] appId `orThrowM` NotFoundE "appId" + (show appId) + res <- liftIO . atomically $ do + (JobCache jobs) <- readTVar jobCache + case HM.lookup appId jobs of + Just (Some1 SCreatingBackup _, _) -> pure (Left $ BackupE appId "Cannot restore during backup") + Just (Some1 SRestoringBackup _, _) -> pure (Left $ BackupE appId "Already restoring backup") + Just (Some1 _ _, _) -> pure (Left $ BackupE appId "Cannot backup: incompatible status") + Nothing -> do + -- this panic is here because we don't have the threadID yet, and it is required. We want to write the + -- TVar anyway though so that we don't accidentally launch multiple backup jobs + -- TODO: consider switching to MVar's for this + modifyTVar jobCache (insertJob appId Restore $ panic "ThreadID prematurely forced") + pure $ Right () + case res of + Left e -> throwError e + Right _ -> do + tid <- liftIO . forkIO $ do + appmgrRes <- runExceptT (AppMgr.backupRestore restoreBackupPassword appId restoreBackupLogicalName) + atomically $ modifyTVar jobCache (deleteJob appId) + let notif = case appmgrRes of + Left e -> Notifications.RestoreFailed e + Right _ -> Notifications.RestoreSucceeded + flip runSqlPool db $ void $ Notifications.emit appId version notif + liftIO . atomically $ modifyTVar jobCache (insertJob appId Restore tid) + + +listDisksLogic :: (Has (Error S9Error) sig m, MonadIO m) => m [AppMgr.DiskInfo] +listDisksLogic = runExceptT AppMgr.diskShow >>= liftEither + +insertBackupResult :: MonadIO m => AppId -> Version -> Bool -> SqlPersistT m (Entity BackupRecord) +insertBackupResult appId appVersion succeeded = do + uuid <- liftIO nextRandom + now <- liftIO getCurrentTime + let k = (BackupRecordKey uuid) + let v = (BackupRecord now appId appVersion succeeded) + insertKey k v + pure $ Entity k v + +getLastSuccessfulBackup :: MonadIO m => AppId -> SqlPersistT m (Maybe UTCTime) +getLastSuccessfulBackup appId = backupRecordCreatedAt . entityVal <<$>> selectFirst + [BackupRecordAppId ==. appId, BackupRecordSucceeded ==. True] + [Desc BackupRecordCreatedAt] diff --git a/agent/src/Handler/Hosts.hs b/agent/src/Handler/Hosts.hs new file mode 100644 index 000000000..d3a6e2955 --- /dev/null +++ b/agent/src/Handler/Hosts.hs @@ -0,0 +1,85 @@ +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} +module Handler.Hosts where + +import Startlude hiding ( ask ) + +import Control.Carrier.Lift ( runM ) +import Control.Carrier.Error.Church +import Data.Conduit +import qualified Data.Conduit.Binary as CB +import Data.Time.ISO8601 +import Yesod.Core hiding ( expiresAt ) + +import Foundation +import Daemon.ZeroConf +import Handler.Register ( produceProofOfKey + , checkExistingPasswordRegistration + ) +import Handler.Types.Hosts +import Handler.Types.Register +import Lib.Crypto +import Lib.Error +import Lib.Password ( rootAccountName ) +import Lib.ProductKey +import Lib.Ssl +import Lib.SystemPaths +import Lib.Tor +import Settings + +getHostsR :: Handler HostsRes +getHostsR = handleS9ErrT $ do + settings <- getsYesod appSettings + productKey <- liftIO . getProductKey . appFilesystemBase $ settings + hostParams <- extractHostsQueryParams + + verifyHmac productKey hostParams + verifyTimestampNotExpired $ hostsParamsExpiration hostParams + + mClaimedAt <- checkExistingPasswordRegistration rootAccountName + case mClaimedAt of + Nothing -> pure $ NullReply + Just claimedAt -> do + fmap HostsRes . mapExceptT (liftIO . runM . injectFilesystemBaseFromContext settings) $ getRegistration + productKey + claimedAt + +verifyHmac :: MonadIO m => Text -> HostsParams -> S9ErrT m () +verifyHmac productKey params = do + let computedHmacDigest = computeHmac productKey hostsParamsExpiration hostsParamsSalt + unless (hostsParamsHmac == computedHmacDigest) $ throwE unauthorizedHmac + where + HostsParams { hostsParamsHmac, hostsParamsExpiration, hostsParamsSalt } = params + unauthorizedHmac = ClientCryptographyE "Unauthorized hmac" + +verifyTimestampNotExpired :: MonadIO m => Text -> S9ErrT m () +verifyTimestampNotExpired expirationTimestamp = do + now <- liftIO getCurrentTime + case parseISO8601 . toS $ expirationTimestamp of + Nothing -> throwE $ TTLExpirationE "invalid timestamp" + Just expiration -> when (expiration < now) (throwE $ TTLExpirationE "expired") + +getRegistration :: (MonadIO m, HasFilesystemBase sig m, Has (Error S9Error) sig m) => Text -> UTCTime -> m RegisterRes +getRegistration productKey registerResClaimedAt = do + torAddress <- getAgentHiddenServiceUrlMaybe >>= \case + Nothing -> throwError $ NotFoundE "prior registration" "torAddress" + Just t -> pure $ t + caCert <- readSystemPath rootCaCertPath >>= \case + Nothing -> throwError $ NotFoundE "prior registration" "cert" + Just t -> pure t + + -- create an hmac of the torAddress + caCert for front end + registerResTorAddressSig <- produceProofOfKey productKey torAddress + registerResCertSig <- produceProofOfKey productKey caCert + + let registerResCertName = root_CA_CERT_NAME + registerResLanAddress <- getStart9AgentHostnameLocal + + pure RegisterRes { .. } + +getCertificateR :: Handler TypedContent +getCertificateR = do + base <- getsYesod $ appFilesystemBase . appSettings + respondSource "application/x-x509-ca-cert" + $ CB.sourceFile (toS $ rootCaCertPath `relativeTo` base) + .| awaitForever sendChunkBS diff --git a/agent/src/Handler/Icons.hs b/agent/src/Handler/Icons.hs new file mode 100644 index 000000000..4eed8ca33 --- /dev/null +++ b/agent/src/Handler/Icons.hs @@ -0,0 +1,106 @@ +{-# LANGUAGE PartialTypeSignatures #-} +module Handler.Icons where + +import Startlude hiding ( Reader + , runReader + ) + +import Control.Carrier.Error.Either +import Control.Carrier.Lift +import Data.Conduit +import Data.Conduit.Binary as CB +import qualified Data.Text as T +import Network.HTTP.Simple +import System.FilePath.Posix +import Yesod.Core + +import Foundation +import Lib.Algebra.State.RegistryUrl +import Lib.Error +import qualified Lib.External.Registry as Reg +import Lib.IconCache +import Lib.SystemPaths hiding ( () ) +import Lib.Types.Core +import Lib.Types.ServerApp +import Settings +import Control.Carrier.Reader hiding ( asks ) +import Control.Effect.Labelled ( runLabelled ) +import qualified Data.HashMap.Strict as HM +import Control.Concurrent.STM ( modifyTVar + , readTVarIO + ) +import Crypto.Hash.Conduit ( hashFile ) +import Lib.Types.Emver + +iconUrl :: AppId -> Version -> Text +iconUrl appId version = (foldMap (T.cons '/') . fst . renderRoute . AppIconR $ appId) <> "?" <> show version + +storeIconUrl :: AppId -> Version -> Text +storeIconUrl appId version = + (foldMap (T.cons '/') . fst . renderRoute . AvailableAppIconR $ appId) <> "?" <> show version + +getAppIconR :: AppId -> Handler TypedContent +getAppIconR appId = handleS9ErrT $ do + ctx <- getYesod + let iconTags = appIconTags ctx + storedTag <- liftIO $ readTVarIO iconTags >>= pure . HM.lookup appId + path <- case storedTag of + Nothing -> interp ctx $ do + findIcon appId >>= \case + Nothing -> fetchIcon + Just fp -> do + tag <- hashFile fp + saveTag appId tag + pure fp + Just x -> do + setWeakEtag (show x) + interp ctx $ findIcon appId >>= \case + Nothing -> do + liftIO $ atomically $ modifyTVar iconTags (HM.delete appId) + fetchIcon + Just fp -> pure fp + cacheSeconds 86_400 + lift $ respondSource (parseContentType path) $ CB.sourceFile path .| awaitForever sendChunkBS + where + fetchIcon = do + url <- find ((== appId) . storeAppId) . Reg.storeApps <$> Reg.getAppManifest >>= \case + Nothing -> throwError $ NotFoundE "icon" (show appId) + Just x -> pure . toS $ storeAppIconUrl x + bp <- getAbsoluteLocationFor iconBasePath + saveIcon url + pure (toS bp takeFileName url) + interp ctx = + mapExceptT (liftIO . runM) + . runReader (appConnPool ctx) + . runLabelled @"databaseConnection" + . runReader (appFilesystemBase $ appSettings ctx) + . runLabelled @"filesystemBase" + . runReader (appIconTags ctx) + . runLabelled @"iconTagCache" + . runRegistryUrlIOC + + +getAvailableAppIconR :: AppId -> Handler TypedContent +getAvailableAppIconR appId = handleS9ErrT $ do + s <- getsYesod appSettings + url <- do + find ((== appId) . storeAppId) . Reg.storeApps <$> interp s Reg.getAppManifest >>= \case + Nothing -> throwE $ NotFoundE "icon" (show appId) + Just x -> pure . toS $ storeAppIconUrl x + req <- case parseRequest url of + Nothing -> throwE $ RegistryParseE (toS url) "invalid url" + Just x -> pure x + cacheSeconds 86_400 + lift $ respondSource (parseContentType url) $ httpSource req getResponseBody .| awaitForever sendChunkBS + where interp s = ExceptT . liftIO . runError . injectFilesystemBaseFromContext s . runRegistryUrlIOC + +parseContentType :: FilePath -> ContentType +parseContentType = contentTypeMapping . takeExtension + where + contentTypeMapping ext = case ext of + ".png" -> typePng + ".jpeg" -> typeJpeg + ".jpg" -> typeJpeg + ".gif" -> typeGif + ".svg" -> typeSvg + _ -> typePlain diff --git a/agent/src/Handler/Login.hs b/agent/src/Handler/Login.hs new file mode 100644 index 000000000..d4241fd9b --- /dev/null +++ b/agent/src/Handler/Login.hs @@ -0,0 +1,75 @@ +{-# LANGUAGE CPP #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE ConstraintKinds #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} + +module Handler.Login + ( HasPasswordHash(..) + , defaultStrength + , setPasswordStrength + , setPassword + , validatePass + -- * Interface to database and Yesod.Auth + , validateUserWithPasswordHash + -- Login Route Handler + , postLoginR + -- Logout Route Handler + , postLogoutR + ) +where + +import Startlude +import Data.Aeson ( withObject ) +import Yesod.Auth ( setCredsRedirect + , clearCreds + , Creds(..) + ) +import Yesod.Core +import Yesod.Persist + +import Auth +import Foundation +import Lib.Password +import Model + +-- Internal data type for receiving JSON encoded accountIdentifier and password +data LoginReq = LoginReq + { loginReqName :: Text + , loginReqPassword :: Text + } + +instance FromJSON LoginReq where + parseJSON = withObject "Login Request" $ \o -> do + -- future version can pass an accountIdentifier + let loginReqName = rootAccountName + loginReqPassword <- o .: "password" + pure LoginReq { .. } + +-- the redirect in the 'then' block gets picked up by the 'authenticate' +-- function in the YesodAuth instance for AgentCtx +postLoginR :: SubHandlerFor Auth AgentCtx TypedContent +postLoginR = do + LoginReq name password <- requireCheckJsonBody + isValid <- liftHandler $ validateUserWithPasswordHash (UniqueAccount name) password + if isValid then liftHandler $ setCredsRedirect $ Creds "hashdb" name [] else notAuthenticated + +-- the redirect in the 'then' block gets picked up by the 'authenticate' +-- function in the YesodAuth instance for AgentCtx +postLogoutR :: SubHandlerFor Auth AgentCtx () +postLogoutR = liftHandler $ clearCreds False + +-- | Given a user unique identifier and password in plaintext, validate them against +-- the database values. This function simply looks up the user id in the +-- database and calls 'validatePass' to do the work. +validateUserWithPasswordHash :: Unique Account -> Text -> Handler Bool +validateUserWithPasswordHash name password = do + account <- runDB $ getBy name + pure case account of + Nothing -> False + Just account' -> flip validatePass password . entityVal $ account' + diff --git a/agent/src/Handler/Notifications.hs b/agent/src/Handler/Notifications.hs new file mode 100644 index 000000000..9d99a1076 --- /dev/null +++ b/agent/src/Handler/Notifications.hs @@ -0,0 +1,32 @@ +module Handler.Notifications where + +import Startlude + +import Data.UUID +import Database.Persist +import Yesod.Core.Handler +import Yesod.Core.Types ( JSONResponse(..) ) +import Yesod.Persist.Core + +import Foundation +import qualified Lib.Notifications as Notification +import Model + +getNotificationsR :: Handler (JSONResponse [Entity Notification]) +getNotificationsR = runDB $ do + page <- lookupGetParam "page" `orDefaultTo` 1 + pageSize <- lookupGetParam "perPage" `orDefaultTo` 20 + evs <- selectList [] [Desc NotificationCreatedAt, LimitTo pageSize, OffsetBy ((page - 1) * pageSize)] + let toArchive = fmap entityKey $ filter ((== Nothing) . notificationArchivedAt . entityVal) evs + void $ Notification.archive toArchive + pure $ JSONResponse evs + where + orDefaultTo :: (Monad m, Read a) => m (Maybe Text) -> a -> m a + orDefaultTo m a = do + m' <- m + case m' >>= readMaybe . toS of + Nothing -> pure a + Just x -> pure x + +deleteNotificationR :: UUID -> Handler () +deleteNotificationR notifId = runDB $ delete (coerce @_ @(Key Notification) notifId) diff --git a/agent/src/Handler/PasswordUpdate.hs b/agent/src/Handler/PasswordUpdate.hs new file mode 100644 index 000000000..afcbb1e22 --- /dev/null +++ b/agent/src/Handler/PasswordUpdate.hs @@ -0,0 +1,36 @@ +{-# LANGUAGE RecordWildCards #-} +module Handler.PasswordUpdate where + +import Startlude hiding ( ask ) + +import Data.Aeson +import Yesod.Core hiding ( expiresAt ) +import Yesod.Persist + + +import Foundation +import Lib.Error +import Lib.Password +import Model + +patchPasswordR :: Handler () +patchPasswordR = handleS9ErrT $ do + PasswordUpdateReq {..} <- requireCheckJsonBody + updateAccountRegistration rootAccountName passwordUpdateReqPassword +data PasswordUpdateReq = PasswordUpdateReq + { passwordUpdateReqPassword :: Text + } deriving (Eq, Show) +instance FromJSON PasswordUpdateReq where + parseJSON = withObject "Update Password" $ \o -> do + passwordUpdateReqPassword <- o .: "value" + pure PasswordUpdateReq { .. } + +updateAccountRegistration :: Text -> Text -> S9ErrT Handler () +updateAccountRegistration acctName newPassword = do + now <- liftIO $ getCurrentTime + account <- (lift . runDB . getBy $ UniqueAccount acctName) >>= \case + Nothing -> throwE $ NotFoundE "account" acctName + Just a -> pure a + + account' <- setPassword newPassword $ (entityVal account) { accountUpdatedAt = now } + (lift . runDB $ Yesod.Persist.replace (entityKey account) account') diff --git a/agent/src/Handler/PowerOff.hs b/agent/src/Handler/PowerOff.hs new file mode 100644 index 000000000..d48552723 --- /dev/null +++ b/agent/src/Handler/PowerOff.hs @@ -0,0 +1,28 @@ +module Handler.PowerOff where + +import Startlude + +import System.Process + +import Foundation +import Lib.Sound +import Yesod.Core.Handler +import Network.HTTP.Types + +postShutdownR :: Handler () +postShutdownR = do + liftIO $ callCommand "/bin/sync" + liftIO $ playSong 400 marioDeath + void $ liftIO $ forkIO $ do + threadDelay 1_000_000 + callCommand "/sbin/shutdown now" + sendResponseStatus status200 () + +postRestartR :: Handler () +postRestartR = do + liftIO $ callCommand "/bin/sync" + liftIO $ playSong 400 marioDeath + void $ liftIO $ forkIO $ do + threadDelay 1_000_000 + callCommand "/sbin/reboot" + sendResponseStatus status200 () \ No newline at end of file diff --git a/agent/src/Handler/Register.hs b/agent/src/Handler/Register.hs new file mode 100644 index 000000000..a6a2c24a5 --- /dev/null +++ b/agent/src/Handler/Register.hs @@ -0,0 +1,140 @@ +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} +module Handler.Register where + +import Startlude hiding ( ask ) + +import Control.Carrier.Error.Either ( runError ) +import Control.Carrier.Lift +import Control.Effect.Throw ( liftEither ) +import Crypto.Cipher.Types +import Data.ByteArray.Sized +import qualified Data.ByteString as BS +import qualified Data.Text as T +import Database.Persist +import Network.HTTP.Types.Status +import Yesod.Core hiding ( expiresAt ) +import Yesod.Persist.Core + +import Daemon.ZeroConf +import Foundation +import Handler.Register.Nginx +import Handler.Register.Tor +import Handler.Types.HmacSig +import Handler.Types.Register +import Lib.Crypto +import Lib.Error +import Lib.Password +import Lib.ProductKey +import Lib.Ssl +import Lib.SystemPaths +import Model +import Settings + +postRegisterR :: Handler RegisterRes +postRegisterR = handleS9ErrT $ do + settings <- getsYesod appSettings + + productKey <- liftIO . getProductKey . appFilesystemBase $ settings + req <- requireCheckJsonBody + + -- Decrypt torkey and password. This acts as product key authentication. + torKeyFileContents <- decryptTorkey productKey req + password <- decryptPassword productKey req + rsaKeyFileContents <- decryptRSAKey productKey req + + -- Check for existing registration. + checkExistingPasswordRegistration rootAccountName >>= \case + Nothing -> pure () + Just _ -> sendResponseStatus (Status 209 "Preexisting") () + + -- install new tor hidden service key and restart tor + registerResTorAddress <- runM (injectFilesystemBaseFromContext settings $ bootupTor torKeyFileContents) >>= \case + Just t -> pure t + Nothing -> throwE TorServiceTimeoutE + + -- install new ssl CA cert + nginx conf and restart nginx + registerResCert <- + runM . handleS9ErrC . (>>= liftEither) . liftIO . runM . injectFilesystemBaseFromContext settings $ do + bootupHttpNginx + runError @S9Error $ bootupSslNginx rsaKeyFileContents + + -- create an hmac of the torAddress + caCert for front end + registerResTorAddressSig <- produceProofOfKey productKey registerResTorAddress + registerResCertSig <- produceProofOfKey productKey registerResCert + + -- must match CN in config/csr.conf + let registerResCertName = root_CA_CERT_NAME + registerResLanAddress <- runM . injectFilesystemBaseFromContext settings $ getStart9AgentHostnameLocal + + -- registration successful, save the password hash + registerResClaimedAt <- saveAccountRegistration rootAccountName password + pure RegisterRes { .. } + + +decryptTorkey :: MonadIO m => Text -> RegisterReq -> S9ErrT m ByteString +decryptTorkey productKey RegisterReq { registerTorKey, registerTorCtrCounter, registerTorKdfSalt } = do + aesKey <- case mkAesKey registerTorKdfSalt productKey of + Just k -> pure k + Nothing -> throwE ProductKeyE + + torKeyFileContents <- case makeIV registerTorCtrCounter of + Just counter -> pure $ decryptAes256Ctr aesKey counter (unSizedByteArray registerTorKey) + Nothing -> throwE $ ClientCryptographyE "invalid torkey aes ctr counter" + + unless (torKeyPrefix `BS.isPrefixOf` torKeyFileContents) (throwE $ ClientCryptographyE "invalid tor key encryption") + + pure torKeyFileContents + where torKeyPrefix = "== ed25519v1-secret: type0 ==" + +decryptPassword :: MonadIO m => Text -> RegisterReq -> S9ErrT m Text +decryptPassword productKey RegisterReq { registerPassword, registerPasswordCtrCounter, registerPasswordKdfSalt } = do + aesKey <- case mkAesKey registerPasswordKdfSalt productKey of + Just k -> pure k + Nothing -> throwE ProductKeyE + + password <- case makeIV registerPasswordCtrCounter of + Just counter -> pure $ decryptAes256Ctr aesKey counter registerPassword + Nothing -> throwE $ ClientCryptographyE "invalid password aes ctr counter" + + let decoded = decodeUtf8 password + unless (passwordPrefix `T.isPrefixOf` decoded) (throwE $ ClientCryptographyE "invalid password encryption") + + -- drop password prefix in this case + pure . T.drop (T.length passwordPrefix) $ decoded + where passwordPrefix = "== password ==" + +decryptRSAKey :: MonadIO m => Text -> RegisterReq -> S9ErrT m ByteString +decryptRSAKey productKey RegisterReq { registerRsa, registerRsaCtrCounter, registerRsaKdfSalt } = do + aesKey <- case mkAesKey registerRsaKdfSalt productKey of + Just k -> pure k + Nothing -> throwE ProductKeyE + + cert <- case makeIV registerRsaCtrCounter of + Just counter -> pure $ decryptAes256Ctr aesKey counter registerRsa + Nothing -> throwE $ ClientCryptographyE "invalid password aes ctr counter" + + unless (certPrefix `BS.isPrefixOf` cert) (throwE $ ClientCryptographyE "invalid cert encryption") + + pure cert + where certPrefix = "-----BEGIN RSA PRIVATE KEY-----" + + +checkExistingPasswordRegistration :: Text -> S9ErrT Handler (Maybe UTCTime) +checkExistingPasswordRegistration acctIdentifier = lift . runDB $ do + mAccount <- getBy $ UniqueAccount acctIdentifier + pure $ fmap (accountCreatedAt . entityVal) mAccount + +saveAccountRegistration :: Text -> Text -> S9ErrT Handler UTCTime +saveAccountRegistration acctName password = lift . runDB $ do + now <- liftIO getCurrentTime + account <- setPassword password $ accountNoPw now + insert_ account + pure now + where accountNoPw t = Account t t acctName "" + +produceProofOfKey :: MonadIO m => Text -> Text -> m HmacSig +produceProofOfKey key message = do + salt <- random16 + let hmac = computeHmac key message salt + pure $ HmacSig hmac message salt diff --git a/agent/src/Handler/Register/Nginx.hs b/agent/src/Handler/Register/Nginx.hs new file mode 100644 index 000000000..59b4da6bc --- /dev/null +++ b/agent/src/Handler/Register/Nginx.hs @@ -0,0 +1,158 @@ +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE QuasiQuotes #-} +module Handler.Register.Nginx where + +import Startlude hiding ( ask + , catchError + ) + +import Control.Carrier.Error.Church +import Control.Effect.Lift +import qualified Control.Effect.Reader.Labelled + as Fused +import qualified Data.ByteString as BS +import System.Directory +import Daemon.ZeroConf +import Lib.ClientManifest +import Lib.Error +import Lib.Ssl +import Lib.Synchronizers +import Lib.SystemPaths +import Lib.Tor +import System.Posix ( removeLink ) + +-- Left error, Right CA cert for hmac signing +bootupSslNginx :: (HasFilesystemBase sig m, Has (Error S9Error) sig m, Has (Lift IO) sig m, MonadIO m) + => ByteString + -> m Text +bootupSslNginx rsaKeyFileContents = do + -- we need to ensure if the ssl setup fails that we remove all openssl key material and the nginx ssl conf before + -- starting again + resetSslState + cert <- writeSslKeyAndCert rsaKeyFileContents + sid <- getStart9AgentHostname + installAmbassadorUiNginxHTTPS (sslOverrides sid) "start9-ambassador-ssl.conf" + pure cert + where + sslOverrides sid = + let hostname = sid <> ".local" + in NginxSiteConfOverride + { nginxSiteConfOverrideAdditionalServerName = hostname + , nginxSiteConfOverrideListen = 443 + , nginxSiteConfOverrideSsl = Just $ NginxSsl { nginxSslKeyPath = entityKeyPath sid + , nginxSslCertPath = entityCertPath sid + , nginxSslOnlyServerNames = [hostname] + } + } + +resetSslState :: (HasFilesystemBase sig m, Has (Lift IO) sig m, MonadIO m) => m () +resetSslState = do + base <- Fused.ask @"filesystemBase" + host <- getStart9AgentHostname + -- remove all files we explicitly create + traverse_ + (liftIO . removePathForcibly . toS . flip relativeTo base) + [ rootCaKeyPath + , relBase $ (rootCaCertPath `relativeTo` "/") <> ".csr" + , rootCaCertPath + , intermediateCaKeyPath + , relBase $ (intermediateCaCertPath `relativeTo` "/") <> ".csr" + , intermediateCaCertPath + , entityKeyPath host + , relBase $ (entityCertPath host `relativeTo` "/") <> ".csr" + , entityCertPath host + , entityConfPath host + , nginxSitesAvailable nginxSslConf + ] + liftIO $ do + withCurrentDirectory (toS $ flip relativeTo base $ rootCaDirectory <> "/newcerts") + $ listDirectory "." + >>= traverse_ removePathForcibly + withCurrentDirectory (toS $ flip relativeTo base $ intermediateCaDirectory <> "/newcerts") + $ listDirectory "." + >>= traverse_ removePathForcibly + writeFile (toS $ flip relativeTo base $ rootCaDirectory <> "/index.txt") "" + writeFile (toS $ flip relativeTo base $ intermediateCaDirectory <> "/index.txt") "" + _ <- liftIO $ try @SomeException . removeLink . toS $ (nginxSitesEnabled nginxSslConf) `relativeTo` base + pure () + + +bootupHttpNginx :: (HasFilesystemBase sig m, MonadIO m) => m () +bootupHttpNginx = installAmbassadorUiNginxHTTP "start9-ambassador.conf" + +writeSslKeyAndCert :: (MonadIO m, HasFilesystemBase sig m, Has (Error S9Error) sig m) => ByteString -> m Text +writeSslKeyAndCert rsaKeyFileContents = do + directory <- toS <$> getAbsoluteLocationFor sslDirectory + caKeyPath <- toS <$> getAbsoluteLocationFor rootCaKeyPath + caConfPath <- toS <$> getAbsoluteLocationFor rootCaOpenSslConfPath + caCertPath <- toS <$> getAbsoluteLocationFor rootCaCertPath + intCaKeyPath <- toS <$> getAbsoluteLocationFor intermediateCaKeyPath + intCaConfPath <- toS <$> getAbsoluteLocationFor intermediateCaOpenSslConfPath + intCaCertPath <- toS <$> getAbsoluteLocationFor intermediateCaCertPath + sid <- getStart9AgentHostname + entKeyPath <- toS <$> getAbsoluteLocationFor (entityKeyPath sid) + entConfPath <- toS <$> getAbsoluteLocationFor (entityConfPath sid) + entCertPath <- toS <$> getAbsoluteLocationFor (entityCertPath sid) + torAddr <- getAgentHiddenServiceUrl + + let hostname = sid <> ".local" + + liftIO $ createDirectoryIfMissing False directory + liftIO $ BS.writeFile caKeyPath rsaKeyFileContents + + (exit, str1, str2) <- writeRootCaCert caConfPath caKeyPath caCertPath + liftIO $ do + putStrLn @Text "openssl logs" + putStrLn @Text "exit code: " + print exit + putStrLn @String $ "stdout: " <> str1 + putStrLn @String $ "stderr: " <> str2 + case exit of + ExitSuccess -> pure () + ExitFailure ec -> throwError $ OpenSslE "root" ec str1 str2 + + (exit', str1', str2') <- writeIntermediateCert $ DeriveCertificate { applicantConfPath = intCaConfPath + , applicantKeyPath = intCaKeyPath + , applicantCertPath = intCaCertPath + , signingConfPath = caConfPath + , signingKeyPath = caKeyPath + , signingCertPath = caCertPath + , duration = 3650 + } + liftIO $ do + putStrLn @Text "openssl logs" + putStrLn @Text "exit code: " + print exit' + putStrLn @String $ "stdout: " <> str1' + putStrLn @String $ "stderr: " <> str2' + case exit' of + ExitSuccess -> pure () + ExitFailure ec -> throwError $ OpenSslE "intermediate" ec str1' str2' + + + liftIO $ BS.writeFile entConfPath (domain_CSR_CONF hostname) + + (exit'', str1'', str2'') <- writeLeafCert + DeriveCertificate { applicantConfPath = entConfPath + , applicantKeyPath = entKeyPath + , applicantCertPath = entCertPath + , signingConfPath = intCaConfPath + , signingKeyPath = intCaKeyPath + , signingCertPath = intCaCertPath + , duration = 365 + } + hostname + torAddr + + liftIO $ do + putStrLn @Text "openssl logs" + putStrLn @Text "exit code: " + print exit'' + putStrLn @String $ "stdout: " <> str1'' + putStrLn @String $ "stderr: " <> str2'' + case exit'' of + ExitSuccess -> pure () + ExitFailure ec -> throwError $ OpenSslE "leaf" ec str1' str2' + + readSystemPath' rootCaCertPath diff --git a/agent/src/Handler/Register/Tor.hs b/agent/src/Handler/Register/Tor.hs new file mode 100644 index 000000000..d93f3c24e --- /dev/null +++ b/agent/src/Handler/Register/Tor.hs @@ -0,0 +1,44 @@ +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} +module Handler.Register.Tor where + +import Startlude hiding ( ask ) + +import Control.Effect.Reader.Labelled +import qualified Data.ByteString as BS +import System.Directory +import System.Process +import Lib.SystemCtl +import Lib.SystemPaths +import Lib.Tor + +bootupTor :: (HasFilesystemBase sig m, MonadIO m) => ByteString -> m (Maybe Text) +bootupTor torKeyFileContents = do + base <- ask @"filesystemBase" + writeTorPrivateKeyFile torKeyFileContents + + putStrLn @Text "restarting tor" + liftIO . void $ systemCtl RestartService "tor" + putStrLn @Text "restarted tor" + + liftIO . fmap (join . hush) $ race + (threadDelay 30_000_000) + (runMaybeT . asum . repeat $ MaybeT . fmap hush $ try @SomeException + (threadDelay 100_000 *> injectFilesystemBase base getAgentHiddenServiceUrl) + ) + +writeTorPrivateKeyFile :: (MonadIO m, HasFilesystemBase sig m) => ByteString -> m () +writeTorPrivateKeyFile contents = do + directory <- fmap toS . getAbsoluteLocationFor $ agentTorHiddenServiceDirectory + privateKeyFilePath <- fmap toS . getAbsoluteLocationFor $ agentTorHiddenServicePrivateKeyPath + liftIO $ do + -- Clean out directory + removePathForcibly directory + createDirectory directory + + -- write private key file + BS.writeFile privateKeyFilePath contents + + -- Set ownership and permissions so tor executable can generate other files + callCommand $ "chown -R debian-tor:debian-tor " <> directory + callCommand $ "chmod 2700 " <> directory \ No newline at end of file diff --git a/agent/src/Handler/SelfUpdate.hs b/agent/src/Handler/SelfUpdate.hs new file mode 100644 index 000000000..c94da316d --- /dev/null +++ b/agent/src/Handler/SelfUpdate.hs @@ -0,0 +1,51 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TemplateHaskell #-} + +module Handler.SelfUpdate where + +import Startlude + +import Control.Carrier.Error.Either +import Data.Aeson +import Yesod.Core + +import Foundation +import Lib.Algebra.State.RegistryUrl +import Lib.Error +import Lib.External.Registry +import Lib.SystemPaths +import Lib.Types.Emver + +newtype UpdateAgentReq = UpdateAgentReq { updateAgentVersionSpecification :: VersionRange } deriving (Eq, Show) + +instance FromJSON UpdateAgentReq where + parseJSON = withObject "update agent request" $ fmap UpdateAgentReq . (.: "version") + +newtype UpdateAgentRes = UpdateAgentRes { status :: UpdateInitStatus } deriving (Eq) +instance ToJSON UpdateAgentRes where + toJSON (UpdateAgentRes status) = object ["status" .= status] + +instance ToTypedContent UpdateAgentRes where + toTypedContent = toTypedContent . toJSON +instance ToContent UpdateAgentRes where + toContent = toContent . toJSON + + +data UpdateInitStatus = UpdatingAlreadyInProgress | UpdatingCommence deriving (Show, Eq) +instance ToJSON UpdateInitStatus where + toJSON UpdatingAlreadyInProgress = String "UPDATING_ALREADY_IN_PROGRESS" + toJSON UpdatingCommence = String "UPDATING_COMMENCE" + +postUpdateAgentR :: Handler UpdateAgentRes +postUpdateAgentR = handleS9ErrT $ do + settings <- getsYesod appSettings + avs <- updateAgentVersionSpecification <$> requireCheckJsonBody + mVersion <- interp settings $ getLatestAgentVersionForSpec avs + + when (isNothing mVersion) $ throwE $ NoCompliantAgentE avs + + updateSpecBox <- getsYesod appSelfUpdateSpecification + success <- liftIO $ tryPutMVar updateSpecBox avs + + if success then pure $ UpdateAgentRes UpdatingCommence else pure $ UpdateAgentRes UpdatingAlreadyInProgress + where interp s = ExceptT . liftIO . runError . injectFilesystemBaseFromContext s . runRegistryUrlIOC diff --git a/agent/src/Handler/SshKeys.hs b/agent/src/Handler/SshKeys.hs new file mode 100644 index 000000000..6224bb1e2 --- /dev/null +++ b/agent/src/Handler/SshKeys.hs @@ -0,0 +1,39 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +module Handler.SshKeys where + +import Startlude + +import Yesod.Core +import Yesod.Core.Types ( JSONResponse(..) ) + +import Foundation +import Lib.Error +import Lib.Ssh +import Util.Function +import Handler.Types.V0.Ssh + +postSshKeysR :: Handler SshKeyFingerprint +postSshKeysR = handleS9ErrT $ do + settings <- getsYesod appSettings + key <- sshKey <$> requireCheckJsonBody + case fingerprint key of + Left e -> throwE $ InvalidSshKeyE (toS e) + Right fp -> do + runReaderT (createSshKey key) settings + pure $ uncurry3 SshKeyFingerprint fp + +deleteSshKeyByFingerprintR :: Text -> Handler () +deleteSshKeyByFingerprintR key = handleS9ErrT $ do + settings <- getsYesod appSettings + runReaderT (deleteSshKey key) settings >>= \case + True -> pure () + False -> throwE $ NotFoundE "sshKey" key + +getSshKeysR :: Handler (JSONResponse [SshKeyFingerprint]) -- deprecated in 0.2.0 +getSshKeysR = handleS9ErrT $ do + settings <- getsYesod appSettings + keys <- runReaderT getSshKeys settings + JSONResponse <$> case traverse fingerprint keys of + Left e -> throwE $ InvalidSshKeyE (toS e) + Right as -> pure $ uncurry3 SshKeyFingerprint <$> as diff --git a/agent/src/Handler/Status.hs b/agent/src/Handler/Status.hs new file mode 100644 index 000000000..4066ccce5 --- /dev/null +++ b/agent/src/Handler/Status.hs @@ -0,0 +1,71 @@ +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TemplateHaskell #-} +module Handler.Status where + +import Startlude + +import Control.Carrier.Error.Either +import Data.Aeson.Encoding +import Git.Embed +import Yesod.Core.Handler +import Yesod.Core.Json +import Yesod.Core.Types + +import Constants +import Daemon.ZeroConf +import Foundation +import Handler.Types.Metrics +import Handler.Types.V0.Specs +import Handler.Types.V0.Base +import Lib.Algebra.State.RegistryUrl +import Lib.Error +import Lib.External.Metrics.Df +import qualified Lib.External.Registry as Reg +import Lib.External.Specs.CPU +import Lib.External.Specs.Memory +import Lib.Metrics +import Lib.SystemPaths hiding ( () ) +import Lib.Tor +import Settings +import Control.Carrier.Lift ( runM ) + +getVersionR :: Handler AppVersionRes +getVersionR = pure . AppVersionRes $ agentVersion + +getVersionLatestR :: Handler VersionLatestRes +getVersionLatestR = handleS9ErrT $ do + s <- getsYesod appSettings + v <- interp s $ Reg.getLatestAgentVersion + pure $ VersionLatestRes v + where interp s = ExceptT . liftIO . runError . injectFilesystemBaseFromContext s . runRegistryUrlIOC + + +getSpecsR :: Handler Encoding -- deprecated in 0.2.0 +getSpecsR = handleS9ErrT $ do + settings <- getsYesod appSettings + specsCPU <- liftIO getCpuInfo + specsMem <- liftIO getMem + specsDisk <- fmap show . metricDiskSize <$> getDfMetrics + specsNetworkId <- lift . runM . injectFilesystemBaseFromContext settings $ getStart9AgentHostname + specsTorAddress <- lift . runM . injectFilesystemBaseFromContext settings $ getAgentHiddenServiceUrl + + let specsAgentVersion = agentVersion + returnJsonEncoding SpecsRes { .. } + +getMetricsR :: Handler (JSONResponse MetricsRes) +getMetricsR = do + app <- getYesod + fmap (JSONResponse . MetricsRes) . handleS9ErrT . getServerMetrics $ app + +embassyNamePath :: SystemPath +embassyNamePath = "/root/agent/name.txt" + +patchServerR :: Handler () +patchServerR = do + PatchServerReq { patchServerReqName } <- requireCheckJsonBody @_ @PatchServerReq + base <- getsYesod $ appFilesystemBase . appSettings + liftIO $ writeFile (toS $ embassyNamePath `relativeTo` base) patchServerReqName + +getGitR :: Handler Text +getGitR = pure $embedGitRevision + diff --git a/agent/src/Handler/Tor.hs b/agent/src/Handler/Tor.hs new file mode 100644 index 000000000..a12f9b6bf --- /dev/null +++ b/agent/src/Handler/Tor.hs @@ -0,0 +1,24 @@ +module Handler.Tor where + +import Startlude + +import Data.Aeson +import Yesod.Core + +import Foundation +import Lib.SystemPaths +import Lib.Tor +import Control.Carrier.Lift ( runM ) + +newtype GetTorRes = GetTorRes { unGetTorRes :: Text } +instance ToJSON GetTorRes where + toJSON a = object ["torAddress" .= unGetTorRes a] +instance ToContent GetTorRes where + toContent = toContent . toJSON +instance ToTypedContent GetTorRes where + toTypedContent = toTypedContent . toJSON + +getTorAddressR :: Handler GetTorRes +getTorAddressR = do + settings <- getsYesod appSettings + runM $ GetTorRes <$> injectFilesystemBaseFromContext settings getAgentHiddenServiceUrl diff --git a/agent/src/Handler/Types/Apps.hs b/agent/src/Handler/Types/Apps.hs new file mode 100644 index 000000000..548db4b02 --- /dev/null +++ b/agent/src/Handler/Types/Apps.hs @@ -0,0 +1,178 @@ +{-# LANGUAGE StandaloneKindSignatures #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +module Handler.Types.Apps where + +import Startlude + +import Data.Aeson +import Data.Aeson.Flatten +import Data.Singletons + +import Lib.TyFam.ConditionalData +import Lib.Types.Core +import Lib.Types.Emver +import Lib.Types.Emver.Orphans ( ) +import Lib.Types.NetAddress +data AppBase = AppBase + { appBaseId :: AppId + , appBaseTitle :: Text + , appBaseIconUrl :: Text + } + deriving (Eq, Show) +instance ToJSON AppBase where + toJSON AppBase {..} = object ["id" .= appBaseId, "title" .= appBaseTitle, "iconURL" .= appBaseIconUrl] + +data AppAvailablePreview = AppAvailablePreview + { appAvailablePreviewBase :: AppBase + , appAvailablePreviewVersionLatest :: Version + , appAvailablePreviewDescriptionShort :: Text + , appAvailablePreviewInstallInfo :: Maybe (Version, AppStatus) + } + deriving (Eq, Show) +instance ToJSON AppAvailablePreview where + toJSON AppAvailablePreview {..} = mergeTo (toJSON appAvailablePreviewBase) $ object + [ "versionLatest" .= appAvailablePreviewVersionLatest + , "descriptionShort" .= appAvailablePreviewDescriptionShort + , "versionInstalled" .= (fst <$> appAvailablePreviewInstallInfo) + , "status" .= (snd <$> appAvailablePreviewInstallInfo) + ] + +data AppInstalledPreview = AppInstalledPreview + { appInstalledPreviewBase :: AppBase + , appInstalledPreviewStatus :: AppStatus + , appInstalledPreviewVersionInstalled :: Version + , appInstalledPreviewTorAddress :: Maybe TorAddress + } + deriving (Eq, Show) +instance ToJSON AppInstalledPreview where + toJSON AppInstalledPreview {..} = mergeTo (toJSON appInstalledPreviewBase) $ object + [ "status" .= appInstalledPreviewStatus + , "versionInstalled" .= appInstalledPreviewVersionInstalled + , "torAddress" .= (unTorAddress <$> appInstalledPreviewTorAddress) + ] + +data InstallNewAppReq = InstallNewAppReq + { installNewAppVersion :: Version + , installNewAppDryRun :: Bool + } + deriving (Eq, Show) +instance FromJSON InstallNewAppReq where + parseJSON = withObject "Install New App Request" $ \o -> do + installNewAppVersion <- o .: "version" + installNewAppDryRun <- o .:? "dryRun" .!= False + pure InstallNewAppReq { .. } + +data AppAvailableFull = AppAvailableFull + { appAvailableFullBase :: AppBase + , appAvailableFullInstallInfo :: Maybe (Version, AppStatus) + , appAvailableFullVersionLatest :: Version + , appAvailableFullDescriptionShort :: Text + , appAvailableFullDescriptionLong :: Text + , appAvailableFullReleaseNotes :: Text + , appAvailableFullDependencyRequirements :: [Full AppDependencyRequirement] + , appAvailableFullVersions :: NonEmpty Version + } + -- deriving Eq +instance ToJSON AppAvailableFull where + toJSON AppAvailableFull {..} = mergeTo + (toJSON appAvailableFullBase) + (object + [ "versionInstalled" .= fmap fst appAvailableFullInstallInfo + , "status" .= fmap snd appAvailableFullInstallInfo + , "versionLatest" .= appAvailableFullVersionLatest + , "descriptionShort" .= appAvailableFullDescriptionShort + , "descriptionLong" .= appAvailableFullDescriptionLong + , "versions" .= appAvailableFullVersions + , "releaseNotes" .= appAvailableFullReleaseNotes + , "serviceRequirements" .= appAvailableFullDependencyRequirements + ] + ) + +type AppDependencyRequirement :: (Type ~> Type) -> Type +data AppDependencyRequirement f = AppDependencyRequirement + { appDependencyRequirementBase :: AppBase + , appDependencyRequirementReasonOptional :: Apply f (Maybe Text) + , appDependencyRequirementDefault :: Apply f Bool + , appDependencyRequirementDescription :: Maybe Text + , appDependencyRequirementViolation :: Maybe ApiDependencyViolation + , appDependencyRequirementVersionSpec :: VersionRange + } +instance ToJSON (AppDependencyRequirement Strip) where + toJSON AppDependencyRequirement {..} = mergeTo (toJSON appDependencyRequirementBase) $ object + [ "versionSpec" .= appDependencyRequirementVersionSpec + , "description" .= appDependencyRequirementDescription + , "violation" .= appDependencyRequirementViolation + ] +instance ToJSON (AppDependencyRequirement Keep) where + toJSON r = + let stripped = r { appDependencyRequirementReasonOptional = (), appDependencyRequirementDefault = () } + in + mergeTo + (toJSON @(AppDependencyRequirement Strip) stripped) + (object + [ "optional" .= appDependencyRequirementReasonOptional r + , "default" .= appDependencyRequirementDefault r + ] + ) + +-- filter non required dependencies in installed show +-- mute violations downstream of version for installing apps +data AppInstalledFull = AppInstalledFull + { appInstalledFullBase :: AppBase + , appInstalledFullStatus :: AppStatus + , appInstalledFullVersionInstalled :: Version + , appInstalledFullTorAddress :: Maybe TorAddress + , appInstalledFullInstructions :: Maybe Text + , appInstalledFullLastBackup :: Maybe UTCTime + , appInstalledFullConfiguredRequirements :: [Stripped AppDependencyRequirement] + } +instance ToJSON AppInstalledFull where + toJSON AppInstalledFull {..} = object + [ "instructions" .= appInstalledFullInstructions + , "lastBackup" .= appInstalledFullLastBackup + , "configuredRequirements" .= appInstalledFullConfiguredRequirements + , "torAddress" .= (unTorAddress <$> appInstalledFullTorAddress) + , "id" .= appBaseId appInstalledFullBase + , "title" .= appBaseTitle appInstalledFullBase + , "iconURL" .= appBaseIconUrl appInstalledFullBase + , "versionInstalled" .= appInstalledFullVersionInstalled + , "status" .= appInstalledFullStatus + ] + +data AppVersionInfo = AppVersionInfo + { appVersionInfoVersion :: Version + , appVersionInfoReleaseNotes :: Text + , appVersionInfoDependencyRequirements :: [Full AppDependencyRequirement] + } +instance ToJSON AppVersionInfo where + toJSON AppVersionInfo {..} = object + [ "version" .= appVersionInfoVersion + , "releaseNotes" .= appVersionInfoReleaseNotes + , "serviceRequirements" .= appVersionInfoDependencyRequirements + ] + +data ApiDependencyViolation + = Missing + | IncompatibleVersion + | IncompatibleConfig [Text] -- rule violations + | IncompatibleStatus AppStatus + +instance ToJSON ApiDependencyViolation where + toJSON Missing = object ["name" .= ("missing" :: Text)] + toJSON IncompatibleVersion = object ["name" .= ("incompatible-version" :: Text)] + toJSON (IncompatibleConfig ruleViolations) = + object ["name" .= ("incompatible-config" :: Text), "ruleViolations" .= ruleViolations] + toJSON (IncompatibleStatus status) = object ["name" .= ("incompatible-status" :: Text), "status" .= status] + +data WithBreakages a = WithBreakages [AppBase] a +instance {-# Overlappable #-} ToJSON a => ToJSON (WithBreakages a) where + toJSON (WithBreakages breakages thing) = mergeTo (toJSON thing) (object ["breakages" .= breakages]) +instance ToJSON (WithBreakages ()) where + toJSON (WithBreakages breakages _) = object ["breakages" .= breakages] + +newtype AutoconfigureChangesRes = AutoconfigureChangesRes + { autoconfigureChangesConfig :: Maybe Value + } +instance ToJSON AutoconfigureChangesRes where + toJSON AutoconfigureChangesRes {..} = object ["config" .= autoconfigureChangesConfig] diff --git a/agent/src/Handler/Types/HmacSig.hs b/agent/src/Handler/Types/HmacSig.hs new file mode 100644 index 000000000..73a0bf624 --- /dev/null +++ b/agent/src/Handler/Types/HmacSig.hs @@ -0,0 +1,28 @@ +{-# LANGUAGE RecordWildCards #-} +module Handler.Types.HmacSig where + +import Startlude + +import Crypto.Hash +import Data.Aeson +import Data.ByteArray.Encoding +import Data.ByteArray.Sized +import Yesod.Core + +import Handler.Types.Parse + +data HmacSig = HmacSig + { sigHmac :: Digest SHA256 + , sigMessage :: Text + , sigSalt :: SizedByteArray 16 ByteString + } + deriving (Eq, Show) + +instance ToJSON HmacSig where + toJSON (HmacSig {..}) = + object ["hmac" .= fromUnsizedBs Base16 sigHmac, "message" .= sigMessage, "salt" .= fromSizedBs Base16 sigSalt] + +instance ToTypedContent HmacSig where + toTypedContent = toTypedContent . toJSON +instance ToContent HmacSig where + toContent = toContent . toJSON diff --git a/agent/src/Handler/Types/Hosts.hs b/agent/src/Handler/Types/Hosts.hs new file mode 100644 index 000000000..20b18b6e1 --- /dev/null +++ b/agent/src/Handler/Types/Hosts.hs @@ -0,0 +1,44 @@ +{-# LANGUAGE RecordWildCards #-} +module Handler.Types.Hosts where + +import Startlude + +import Crypto.Hash +import Data.Aeson +import Data.ByteArray.Encoding +import Data.ByteArray.Sized +import Yesod.Core + +import Handler.Types.Parse +import Handler.Types.Register +import Lib.Error + +data HostsParams = HostsParams + { hostsParamsHmac :: Digest SHA256 -- hmac of an expiration timestamp + , hostsParamsExpiration :: Text -- This is a UTC time text string. we leave it as text as it is precisely this which is signed by the above hmac. + , hostsParamsSalt :: SizedByteArray 16 ByteString + } + +data HostsRes = NullReply | HostsRes RegisterRes + deriving (Eq, Show) + +instance ToJSON HostsRes where + toJSON NullReply = Null + toJSON (HostsRes registerRes) = toJSON registerRes + +instance ToTypedContent HostsRes where + toTypedContent = toTypedContent . toJSON +instance ToContent HostsRes where + toContent = toContent . toJSON + +extractHostsQueryParams :: MonadHandler m => S9ErrT m HostsParams +extractHostsQueryParams = do + hostsParamsHmac <- lookupGetParam "hmac" <&> (>>= sizedBs @32 Base16 >=> digestFromByteString) >>= orThrow400 "hmac" + hostsParamsSalt <- lookupGetParam "salt" <&> (>>= sizedBs @16 Base16) >>= orThrow400 "salt" + hostsParamsExpiration <- lookupGetParam "message" >>= orThrow400 "message" + + pure HostsParams { .. } + where + orThrow400 desc = \case + Nothing -> throwE $ HostsParamsE desc + Just p -> pure p diff --git a/agent/src/Handler/Types/Metrics.hs b/agent/src/Handler/Types/Metrics.hs new file mode 100644 index 000000000..9427179b5 --- /dev/null +++ b/agent/src/Handler/Types/Metrics.hs @@ -0,0 +1,26 @@ +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} +module Handler.Types.Metrics where + +import Startlude + +import Lib.Metrics + +import Data.Aeson +import Yesod.Core.Content + +newtype MetricsRes = MetricsRes { unMetricsRes :: ServerMetrics } +instance ToJSON MetricsRes where + toJSON = toJSON . unMetricsRes + toEncoding = toEncoding . unMetricsRes +instance ToTypedContent MetricsRes where + toTypedContent = toTypedContent . toJSON +instance ToContent MetricsRes where + toContent = toContent . toJSON + +newtype PatchServerReq = PatchServerReq { patchServerReqName :: Text } +instance FromJSON PatchServerReq where + parseJSON = withObject "Patch Server Request" $ \o -> do + patchServerReqName <- o .: "name" + pure $ PatchServerReq { patchServerReqName } diff --git a/agent/src/Handler/Types/Parse.hs b/agent/src/Handler/Types/Parse.hs new file mode 100644 index 000000000..6ddba1f32 --- /dev/null +++ b/agent/src/Handler/Types/Parse.hs @@ -0,0 +1,32 @@ +module Handler.Types.Parse where + +import Startlude + +import Control.Monad.Fail +import Data.Aeson.Types +import Data.ByteArray +import Data.ByteArray.Encoding +import Data.ByteArray.Sized + +mToParser :: String -> Maybe a -> Parser a +mToParser failureText = \case + Nothing -> fail failureText + Just t -> pure t + +toUnsizedBs :: String -> Base -> Text -> Parser ByteString +toUnsizedBs failureText base = mToParser failureText . unsizedBs base + +unsizedBs :: Base -> Text -> Maybe ByteString +unsizedBs base = hush . convertFromBase base . encodeUtf8 + +toSizedBs :: KnownNat n => String -> Base -> Text -> Parser (SizedByteArray n ByteString) +toSizedBs failureText base = mToParser failureText . sizedBs base + +sizedBs :: KnownNat n => Base -> Text -> Maybe (SizedByteArray n ByteString) +sizedBs base = sizedByteArray <=< unsizedBs base + +fromUnsizedBs :: ByteArrayAccess ba => Base -> ba -> Text +fromUnsizedBs base = decodeUtf8 . convertToBase base + +fromSizedBs :: (KnownNat n, ByteArrayAccess ba) => Base -> SizedByteArray n ba -> Text +fromSizedBs b = fromUnsizedBs b . unSizedByteArray diff --git a/agent/src/Handler/Types/Register.hs b/agent/src/Handler/Types/Register.hs new file mode 100644 index 000000000..ccc78f28c --- /dev/null +++ b/agent/src/Handler/Types/Register.hs @@ -0,0 +1,65 @@ +{-# LANGUAGE RecordWildCards #-} +module Handler.Types.Register where + +import Startlude + +import Data.Aeson +import Data.ByteArray.Encoding +import Data.ByteArray.Sized +import Yesod.Core + +import Handler.Types.HmacSig +import Handler.Types.Parse + +data RegisterReq = RegisterReq + { registerTorKey :: SizedByteArray 96 ByteString -- Represents a tor private key along with tor private key file prefix. + , registerTorCtrCounter :: SizedByteArray 16 ByteString + , registerTorKdfSalt :: SizedByteArray 16 ByteString + , registerPassword :: ByteString -- Encrypted password + , registerPasswordCtrCounter :: SizedByteArray 16 ByteString + , registerPasswordKdfSalt :: SizedByteArray 16 ByteString + , registerRsa :: ByteString -- Encrypted RSA key + , registerRsaCtrCounter :: SizedByteArray 16 ByteString + , registerRsaKdfSalt :: SizedByteArray 16 ByteString + } + deriving (Eq, Show) + + +data RegisterRes = RegisterRes + { registerResClaimedAt :: UTCTime + , registerResTorAddressSig :: HmacSig + , registerResCertSig :: HmacSig + , registerResCertName :: Text + , registerResLanAddress :: Text + } + deriving (Eq, Show) + +instance FromJSON RegisterReq where + parseJSON = withObject "Register Tor Request" $ \o -> do + registerTorKey <- o .: "torkey" >>= toSizedBs "Invalid torkey encryption" Base16 + registerTorCtrCounter <- o .: "torkeyCounter" >>= toSizedBs "Invalid torkey ctr counter" Base16 + registerTorKdfSalt <- o .: "torkeySalt" >>= toSizedBs "Invalid torkey pbkdf2 salt" Base16 + + registerPassword <- o .: "password" >>= toUnsizedBs "Invalid password encryption" Base16 + registerPasswordCtrCounter <- o .: "passwordCounter" >>= toSizedBs "Invalid password ctr counter" Base16 + registerPasswordKdfSalt <- o .: "passwordSalt" >>= toSizedBs "Invalid password pbkdf2 salt" Base16 + + registerRsa <- o .: "rsaKey" >>= toUnsizedBs "Invalid rsa encryption" Base16 + registerRsaCtrCounter <- o .: "rsaCounter" >>= toSizedBs "Invalid rsa ctr counter" Base16 + registerRsaKdfSalt <- o .: "rsaSalt" >>= toSizedBs "Invalid rsa pbkdf2 salt" Base16 + + pure RegisterReq { .. } + +instance ToJSON RegisterRes where + toJSON (RegisterRes {..}) = object + [ "claimedAt" .= registerResClaimedAt + , "torAddressSig" .= registerResTorAddressSig + , "certSig" .= registerResCertSig + , "certName" .= registerResCertName + , "lanAddress" .= registerResLanAddress + ] + +instance ToTypedContent RegisterRes where + toTypedContent = toTypedContent . toJSON +instance ToContent RegisterRes where + toContent = toContent . toJSON diff --git a/agent/src/Handler/Types/V0/Base.hs b/agent/src/Handler/Types/V0/Base.hs new file mode 100644 index 000000000..d4fda857a --- /dev/null +++ b/agent/src/Handler/Types/V0/Base.hs @@ -0,0 +1,77 @@ +{-# LANGUAGE RecordWildCards #-} +module Handler.Types.V0.Base where + +import Startlude + +import Data.Aeson +import Database.Persist +import Yesod.Core + +import Handler.Types.V0.Ssh +import Handler.Types.V0.Specs +import Handler.Types.V0.Wifi +import Lib.Types.Core +import Lib.Types.Emver +import Model + +data VersionLatestRes = VersionLatestRes + { versionLatestVersion :: Version + } + deriving (Eq, Show) +instance ToJSON VersionLatestRes where + toJSON VersionLatestRes {..} = object $ ["versionLatest" .= versionLatestVersion] +instance ToTypedContent VersionLatestRes where + toTypedContent = toTypedContent . toJSON +instance ToContent VersionLatestRes where + toContent = toContent . toJSON + +data ServerRes = ServerRes + { serverId :: Text + , serverName :: Text + , serverStatus :: Maybe AppStatus + , serverStatusAt :: UTCTime + , serverVersionInstalled :: Version + , serverNotifications :: [Entity Notification] + , serverWifi :: WifiList + , serverSsh :: [SshKeyFingerprint] + , serverAlternativeRegistryUrl :: Maybe Text + , serverSpecs :: SpecsRes + } + deriving (Eq, Show) + +type JsonEncoding a = Encoding +jsonEncode :: (Monad m, ToJSON a) => a -> m (JsonEncoding a) +jsonEncode = returnJsonEncoding + +instance ToJSON ServerRes where + toJSON ServerRes {..} = object + [ "serverId" .= serverId + , "name" .= serverName + , "status" .= case serverStatus of + Nothing -> String "UPDATING" + Just stat -> toJSON stat + , "versionInstalled" .= serverVersionInstalled + , "versionLatest" .= Null + , "notifications" .= serverNotifications + , "wifi" .= serverWifi + , "ssh" .= serverSsh + , "alternativeRegistryUrl" .= serverAlternativeRegistryUrl + , "specs" .= serverSpecs + ] +instance ToTypedContent ServerRes where + toTypedContent = toTypedContent . toJSON +instance ToContent ServerRes where + toContent = toContent . toJSON + +newtype AppVersionRes = AppVersionRes + { unAppVersionRes :: Version } deriving (Eq, Show) +instance ToJSON AppVersionRes where + toJSON AppVersionRes { unAppVersionRes } = object ["version" .= unAppVersionRes] +instance FromJSON AppVersionRes where + parseJSON = withObject "app version response" $ \o -> do + av <- o .: "version" + pure $ AppVersionRes av +instance ToContent AppVersionRes where + toContent = toContent . toJSON +instance ToTypedContent AppVersionRes where + toTypedContent = toTypedContent . toJSON diff --git a/agent/src/Handler/Types/V0/Specs.hs b/agent/src/Handler/Types/V0/Specs.hs new file mode 100644 index 000000000..954cfff75 --- /dev/null +++ b/agent/src/Handler/Types/V0/Specs.hs @@ -0,0 +1,45 @@ +{-# LANGUAGE RecordWildCards #-} +module Handler.Types.V0.Specs where + +import Startlude + +import Lib.Types.Emver +import Lib.Types.Emver.Orphans ( ) + +import Data.Aeson +import Yesod.Core + +data SpecsRes = SpecsRes + { specsCPU :: Text + , specsMem :: Text + , specsDisk :: Maybe Text + , specsNetworkId :: Text + , specsAgentVersion :: Version + , specsTorAddress :: Text + } + deriving (Eq, Show) + +instance ToJSON SpecsRes where + toJSON SpecsRes {..} = object + [ "EmbassyOS Version" .= specsAgentVersion + , "Tor Address" .= specsTorAddress + , "Network ID" .= specsNetworkId + , "CPU" .= specsCPU + , "Memory" .= specsMem + , "Disk" .= specsDisk + ] + toEncoding SpecsRes {..} = + pairs + . fold + $ [ "EmbassyOS Version" .= specsAgentVersion + , "Tor Address" .= specsTorAddress + , "Network ID" .= specsNetworkId + , "CPU" .= specsCPU + , "Memory" .= specsMem + , "Disk" .= specsDisk + ] + +instance ToTypedContent SpecsRes where + toTypedContent = toTypedContent . toJSON +instance ToContent SpecsRes where + toContent = toContent . toJSON diff --git a/agent/src/Handler/Types/V0/Ssh.hs b/agent/src/Handler/Types/V0/Ssh.hs new file mode 100644 index 000000000..35dd6c8dc --- /dev/null +++ b/agent/src/Handler/Types/V0/Ssh.hs @@ -0,0 +1,25 @@ +{-# LANGUAGE RecordWildCards #-} +module Handler.Types.V0.Ssh where + +import Startlude + +import Lib.Ssh + +import Data.Aeson +import Yesod.Core + +newtype SshKeyModReq = SshKeyModReq { sshKey :: Text } deriving (Eq, Show) +instance FromJSON SshKeyModReq where + parseJSON = withObject "ssh key" $ fmap SshKeyModReq . (.: "sshKey") + +data SshKeyFingerprint = SshKeyFingerprint + { sshKeyAlg :: SshAlg + , sshKeyHash :: Text + , sshKeyHostname :: Text + } deriving (Eq, Show) +instance ToJSON SshKeyFingerprint where + toJSON SshKeyFingerprint {..} = object ["alg" .= sshKeyAlg, "hash" .= sshKeyHash, "hostname" .= sshKeyHostname] +instance ToTypedContent SshKeyFingerprint where + toTypedContent = toTypedContent . toJSON +instance ToContent SshKeyFingerprint where + toContent = toContent . toJSON diff --git a/agent/src/Handler/Types/V0/Wifi.hs b/agent/src/Handler/Types/V0/Wifi.hs new file mode 100644 index 000000000..e52193c6d --- /dev/null +++ b/agent/src/Handler/Types/V0/Wifi.hs @@ -0,0 +1,32 @@ +{-# LANGUAGE RecordWildCards #-} +module Handler.Types.V0.Wifi where + +import Startlude + +import Data.Aeson +import Yesod.Core + +data AddWifiReq = AddWifiReq + { addWifiSsid :: Text + , addWifiPassword :: Text + , addWifiCountry :: Text + , skipConnect :: Bool + } deriving (Eq, Show) +instance FromJSON AddWifiReq where + parseJSON = withObject "AddWifiReq" $ \o -> do + addWifiSsid <- o .: "ssid" + addWifiPassword <- o .: "password" + addWifiCountry <- o .:? "country" .!= "US" + skipConnect <- o .:? "skipConnect" .!= False + pure AddWifiReq { .. } + +data WifiList = WifiList + { wifiListCurrent :: Maybe Text + , wifiListSsids :: [Text] + } deriving (Eq, Show) +instance ToJSON WifiList where + toJSON WifiList {..} = object ["current" .= wifiListCurrent, "ssids" .= wifiListSsids] +instance ToTypedContent WifiList where + toTypedContent = toTypedContent . toJSON +instance ToContent WifiList where + toContent = toContent . toJSON diff --git a/agent/src/Handler/Util.hs b/agent/src/Handler/Util.hs new file mode 100644 index 000000000..5349b3dc9 --- /dev/null +++ b/agent/src/Handler/Util.hs @@ -0,0 +1,16 @@ +module Handler.Util where + +import Startlude + +import Data.IORef +import Yesod.Core + +import Foundation +import Lib.Error + +disableEndpointOnFailedUpdate :: Handler a -> Handler a +disableEndpointOnFailedUpdate m = handleS9ErrT $ do + updateFailed <- getsYesod appIsUpdateFailed >>= liftIO . readIORef + case updateFailed of + Just e -> throwE e + Nothing -> lift m diff --git a/agent/src/Handler/V0.hs b/agent/src/Handler/V0.hs new file mode 100644 index 000000000..c2b010cc5 --- /dev/null +++ b/agent/src/Handler/V0.hs @@ -0,0 +1,120 @@ +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TemplateHaskell #-} +module Handler.V0 where + +import Startlude hiding ( runReader ) + +import Control.Carrier.Lift ( runM ) +import Data.Aeson +import Data.IORef +import qualified Data.Text as T +import Database.Persist +import Yesod.Core.Handler +import Yesod.Persist.Core +import Yesod.Core.Json + +import Constants +import Daemon.ZeroConf +import Foundation +import Handler.Types.V0.Specs +import Handler.Types.V0.Ssh +import Handler.Types.V0.Base +import Handler.Types.V0.Wifi +import Lib.Error +import Lib.External.Metrics.Df +import Lib.External.Specs.CPU +import Lib.External.Specs.Memory +import qualified Lib.External.WpaSupplicant as WpaSupplicant +import Lib.Notifications +import Lib.SystemPaths +import Lib.Ssh +import Lib.Tor +import Lib.Types.Core +import Model +import Settings +import Util.Function + + +getServerR :: Handler (JsonEncoding ServerRes) +getServerR = handleS9ErrT $ do + settings <- getsYesod appSettings + now <- liftIO getCurrentTime + isUpdating <- getsYesod appIsUpdating >>= liftIO . readIORef + + let status = if isJust isUpdating then Nothing else Just Running + + notifs <- case isUpdating of + Nothing -> lift . runDB $ do + notif <- selectList [NotificationArchivedAt ==. Nothing] [Desc NotificationCreatedAt] + void . archive . fmap entityKey $ notif + pure notif + Just _ -> pure [] + + alternativeRegistryUrl <- runM $ injectFilesystemBaseFromContext settings $ readSystemPath altRegistryUrlPath + name <- runM $ injectFilesystemBaseFromContext settings $ readSystemPath serverNamePath + ssh <- readFromPath settings sshKeysFilePath >>= parseSshKeys + wifi <- WpaSupplicant.runWlan0 $ liftA2 WifiList WpaSupplicant.getCurrentNetwork WpaSupplicant.listNetworks + specs <- getSpecs settings + let sid = T.drop 7 $ specsNetworkId specs + + jsonEncode ServerRes { serverId = specsNetworkId specs + , serverName = fromMaybe ("Embassy:" <> sid) name + , serverStatus = AppStatusAppMgr <$> status + , serverStatusAt = now + , serverVersionInstalled = agentVersion + , serverNotifications = notifs + , serverWifi = wifi + , serverSsh = ssh + , serverAlternativeRegistryUrl = alternativeRegistryUrl + , serverSpecs = specs + } + where + parseSshKeys :: Text -> S9ErrT Handler [SshKeyFingerprint] + parseSshKeys keysContent = do + let keys = lines . T.strip $ keysContent + case traverse fingerprint keys of + Left e -> throwE $ InvalidSshKeyE (toS e) + Right as -> pure $ uncurry3 SshKeyFingerprint <$> as + +getSpecs :: MonadIO m => AppSettings -> S9ErrT m SpecsRes +getSpecs settings = do + specsCPU <- liftIO getCpuInfo + specsMem <- liftIO getMem + specsDisk <- fmap show . metricDiskSize <$> getDfMetrics + specsNetworkId <- runM $ injectFilesystemBaseFromContext settings getStart9AgentHostname + specsTorAddress <- runM $ injectFilesystemBaseFromContext settings getAgentHiddenServiceUrl + + let specsAgentVersion = agentVersion + pure $ SpecsRes { .. } + +readFromPath :: MonadIO m => AppSettings -> SystemPath -> S9ErrT m Text +readFromPath settings sp = runM (injectFilesystemBaseFromContext settings (readSystemPath sp)) >>= \case + Nothing -> throwE $ MissingFileE sp + Just res -> pure res + +--------------------- UPDATES TO SERVER ------------------------- + +newtype PatchReq = PatchReq { patchValue :: Text } deriving(Eq, Show) +instance FromJSON PatchReq where + parseJSON = withObject "Patch Request" $ \o -> PatchReq <$> o .: "value" + +newtype NullablePatchReq = NullablePatchReq { mpatchValue :: Maybe Text } deriving(Eq, Show) +instance FromJSON NullablePatchReq where + parseJSON = withObject "Nullable Patch Request" $ \o -> NullablePatchReq <$> o .:? "value" + +patchNameR :: Handler () +patchNameR = patchFile serverNamePath + +patchFile :: SystemPath -> Handler () +patchFile path = do + settings <- getsYesod appSettings + PatchReq val <- requireCheckJsonBody + runM $ injectFilesystemBaseFromContext settings $ writeSystemPath path val + +patchNullableFile :: SystemPath -> Handler () +patchNullableFile path = do + settings <- getsYesod appSettings + NullablePatchReq mVal <- requireCheckJsonBody + runM $ injectFilesystemBaseFromContext settings $ case mVal of + Just val -> writeSystemPath path $ T.strip val + Nothing -> deleteSystemPath path diff --git a/agent/src/Handler/Wifi.hs b/agent/src/Handler/Wifi.hs new file mode 100644 index 000000000..0b973ca87 --- /dev/null +++ b/agent/src/Handler/Wifi.hs @@ -0,0 +1,76 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TemplateHaskell #-} +module Handler.Wifi where + +import Startlude + +import Data.String.Interpolate.IsString +import qualified Data.Text as T +import Network.HTTP.Types +import Yesod.Core + +import Constants +import Foundation +import Handler.Types.V0.Wifi +import Lib.Error +import qualified Lib.External.WpaSupplicant as WpaSupplicant + +getWifiR :: Handler WifiList +getWifiR = WpaSupplicant.runWlan0 $ liftA2 WifiList WpaSupplicant.getCurrentNetwork WpaSupplicant.listNetworks + +postWifiR :: Handler () +postWifiR = handleS9ErrT $ do + AddWifiReq { addWifiSsid, addWifiPassword, addWifiCountry, skipConnect } <- requireCheckJsonBody + unless (T.all isAscii addWifiSsid) $ throwE InvalidSsidE + unless (T.all isAscii addWifiPassword) $ throwE InvalidPskE + + _ <- liftIO . forkIO . WpaSupplicant.runWlan0 $ do + lift $ withAgentVersionLog_ [i|Adding new WiFi network: '#{addWifiSsid}'|] + WpaSupplicant.addNetwork addWifiSsid addWifiPassword addWifiCountry + unless skipConnect $ do + mCurrent <- WpaSupplicant.getCurrentNetwork + connected <- WpaSupplicant.selectNetwork addWifiSsid addWifiCountry + unless connected do + lift $ withAgentVersionLog_ [i|Failed to add new WiFi network: '#{addWifiSsid}'|] + WpaSupplicant.removeNetwork addWifiSsid + case mCurrent of + Nothing -> pure () + Just current -> void $ WpaSupplicant.selectNetwork current addWifiSsid + sendResponseStatus status200 () + + +postWifiBySsidR :: Text -> Handler () +postWifiBySsidR ssid = handleS9ErrT $ do + unless (T.all isAscii ssid) $ throwE InvalidSsidE + + -- TODO: Front end never sends this on switching between networks. This means that we can only + -- switch to US networks. + country <- fromMaybe "US" <$> lookupGetParam "country" + _ <- liftIO . forkIO . WpaSupplicant.runWlan0 $ do + mCurrent <- WpaSupplicant.getCurrentNetwork + connected <- WpaSupplicant.selectNetwork ssid country + if connected + then lift $ withAgentVersionLog_ [i|Successfully connected to WiFi: #{ssid}|] + else do + lift $ withAgentVersionLog_ [i|Failed to add new WiFi network: '#{ssid}'|] + case mCurrent of + Nothing -> lift $ withAgentVersionLog_ [i|No WiFi to revert to!|] + Just current -> void $ WpaSupplicant.selectNetwork current country + sendResponseStatus status200 () + +deleteWifiBySsidR :: Text -> Handler () +deleteWifiBySsidR ssid = handleS9ErrT $ do + unless (T.all isAscii ssid) $ throwE InvalidSsidE + WpaSupplicant.runWlan0 $ do + current <- WpaSupplicant.getCurrentNetwork + case current of + Nothing -> deleteIt + Just ssid' -> if ssid == ssid' + then do + eth0 <- WpaSupplicant.isConnectedToEthernet + if eth0 + then deleteIt + else lift $ throwE WifiOrphaningE + else deleteIt + where deleteIt = void $ WpaSupplicant.removeNetwork ssid diff --git a/agent/src/Lib/Algebra/Domain/AppMgr.hs b/agent/src/Lib/Algebra/Domain/AppMgr.hs new file mode 100644 index 000000000..445d596e5 --- /dev/null +++ b/agent/src/Lib/Algebra/Domain/AppMgr.hs @@ -0,0 +1,469 @@ +{-# OPTIONS_GHC -fno-warn-name-shadowing #-} -- because of my sheer laziness in dealing with conditional data +{-# OPTIONS_GHC -fno-show-valid-hole-fits #-} -- to not make dev'ing this module cripplingly slow +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE StandaloneKindSignatures #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE NoMonomorphismRestriction #-} +module Lib.Algebra.Domain.AppMgr + ( module Lib.Algebra.Domain.AppMgr + , module Lib.Algebra.Domain.AppMgr.Types + , module Lib.Algebra.Domain.AppMgr.TH + ) +where + +import Startlude + +import Control.Algebra +import Control.Effect.Error +import Control.Effect.TH +import Data.Aeson +import Data.Aeson.Types ( Parser ) +import qualified Data.HashMap.Strict as HM +import Data.Singletons.Prelude hiding ( Error ) +import Data.Singletons.Prelude.Either +import qualified Data.String as String +import Exinst + +import Lib.Algebra.Domain.AppMgr.Types +import Lib.Algebra.Domain.AppMgr.TH +import Lib.Error +import Lib.External.AppManifest +import Lib.TyFam.ConditionalData +import Lib.Types.Core ( AppId(..) + , AppContainerStatus(..) + ) +import Lib.Types.NetAddress +import Lib.Types.Emver +import Control.Monad.Trans.Class ( MonadTrans ) +import qualified Data.ByteString.Lazy as LBS +import System.Process.Typed +import Data.String.Interpolate.IsString + ( i ) +import Control.Monad.Base ( MonadBase(..) ) +import Control.Monad.Fail ( MonadFail(fail) ) +import Control.Monad.Trans.Resource ( MonadResource(..) ) +import Control.Monad.Trans.Control ( defaultLiftBaseWith + , defaultRestoreM + , MonadTransControl(..) + , MonadBaseControl(..) + ) +import qualified Data.ByteString.Char8 as C8 + + +type InfoRes :: Either OnlyInfoFlag [IncludeInfoFlag] -> Type +data InfoRes a = InfoRes + { infoResTitle :: Include (IsRight a) Text + , infoResVersion :: Include (IsRight a) Version + , infoResTorAddress :: Include (IsRight a) (Maybe TorAddress) + , infoResIsConfigured :: Include (IsRight a) Bool + , infoResIsRecoverable :: Include (IsRight a) Bool + , infoResNeedsRestart :: Include (IsRight a) Bool + , infoResConfig :: Include (Either_ (DefaultEqSym1 'OnlyConfig) (ElemSym1 'IncludeConfig) a) Value + , infoResDependencies + :: Include + (Either_ (DefaultEqSym1 'OnlyDependencies) (ElemSym1 'IncludeDependencies) a) + (HM.HashMap AppId DependencyInfo) + , infoResManifest + :: Include (Either_ (DefaultEqSym1 'OnlyManifest) (ElemSym1 'IncludeManifest) a) (Some1 AppManifest) + , infoResStatus :: Include (Either_ (DefaultEqSym1 'OnlyStatus) (ElemSym1 'IncludeStatus) a) AppContainerStatus + } +instance SingI (a :: Either OnlyInfoFlag [IncludeInfoFlag]) => FromJSON (InfoRes a) where + parseJSON = withObject "AppMgr Info/List Response" $ \o -> do + let recurse :: forall (a :: [IncludeInfoFlag]) . SingI a => Value -> Parser (InfoRes ( 'Right a)) + recurse = parseJSON @(InfoRes ( 'Right a)) + let infoResConfig = () + let infoResDependencies = () + let infoResManifest = () + let infoResStatus = () + case sing @a of + SLeft f -> do + let infoResTitle = () + let infoResVersion = () + let infoResTorAddress = () + let infoResIsConfigured = () + let infoResIsRecoverable = () + let infoResNeedsRestart = () + case f of + SOnlyConfig -> let infoResConfig = (Object o) in pure InfoRes { .. } + SOnlyDependencies -> parseJSON (Object o) >>= \infoResDependencies -> pure InfoRes { .. } + SOnlyManifest -> parseJSON (Object o) >>= \infoResManifest -> pure InfoRes { .. } + SOnlyStatus -> o .: "status" >>= \infoResStatus -> pure InfoRes { .. } + SRight ls -> do + infoResTitle <- o .: "title" + infoResVersion <- o .: "version" + infoResTorAddress <- TorAddress <<$>> o .: "tor-address" + infoResIsConfigured <- o .: "configured" + infoResIsRecoverable <- o .:? "recoverable" .!= False + infoResNeedsRestart <- o .:? "needs-restart" .!= False + let base = (InfoRes { .. } :: InfoRes ( 'Right '[])) + case ls of + SNil -> pure base + SCons SIncludeConfig (rest :: Sing b) -> do + InfoRes {..} <- withSingI rest $ recurse @b (Object o) + infoResConfig <- o .: "config" + pure InfoRes { .. } + SCons SIncludeDependencies (rest :: Sing b) -> do + InfoRes {..} <- withSingI rest $ recurse @b (Object o) + infoResDependencies <- o .: "dependencies" + pure InfoRes { .. } + SCons SIncludeManifest (rest :: Sing b) -> do + InfoRes {..} <- withSingI rest $ recurse @b (Object o) + infoResManifest <- o .: "manifest" + pure InfoRes { .. } + SCons SIncludeStatus (rest :: Sing b) -> do + InfoRes {..} <- withSingI rest $ recurse @b (Object o) + infoResStatus <- o .: "status" + pure InfoRes { .. } + +data DependencyInfo = DependencyInfo + { dependencyInfoVersionSpec :: VersionRange + , dependencyInfoReasonOptional :: Maybe Text + , dependencyInfoDescription :: Maybe Text + , dependencyInfoConfigRules :: [ConfigRule] + , dependencyInfoRequired :: Bool + , dependencyInfoError :: Maybe DependencyViolation + } + deriving (Eq, Show) +instance FromJSON DependencyInfo where + parseJSON = withObject "AppMgr DependencyInfo" $ \o -> do + dependencyInfoVersionSpec <- o .: "version" + dependencyInfoReasonOptional <- o .: "optional" + dependencyInfoDescription <- o .: "description" + dependencyInfoConfigRules <- o .: "config" + dependencyInfoRequired <- o .: "required" + dependencyInfoError <- o .:? "error" + pure DependencyInfo { .. } + +data ConfigRule = ConfigRule + { configRuleRule :: Text + , configRuleDescription :: Text + , configRuleSuggestions :: [ConfigRuleSuggestion] + } + deriving (Eq, Show) +instance FromJSON ConfigRule where + parseJSON = withObject "AppMgr Config Rule" $ \o -> do + configRuleRule <- o .: "rule" + configRuleDescription <- o .: "description" + configRuleSuggestions <- o .: "suggestions" + pure ConfigRule { .. } +data ConfigRuleSuggestion + = SuggestionPush Text Value + | SuggestionSet Text Target + | SuggestionDelete Text + deriving (Eq, Show) +instance FromJSON ConfigRuleSuggestion where + parseJSON = withObject "AppMgr ConfigRule Suggestion" $ \o -> do + let push = do + o' <- o .: "PUSH" + t <- o' .: "to" + v <- o' .: "value" + pure $ SuggestionPush t v + let set = do + o' <- o .: "SET" + v <- o' .: "var" + t <- parseJSON (Object o') + pure $ SuggestionSet v t + let delete = SuggestionDelete <$> o .: "DELETE" + push <|> set <|> delete + +data Target + = To Text + | ToValue Value + | ToEntropy Text Word16 + deriving (Eq, Show) +instance FromJSON Target where + parseJSON = withObject "Suggestion SET Target" $ \o -> do + (To <$> o .: "to") <|> (ToValue <$> o .: "to-value") <|> do + o' <- o .: "to-entropy" + ToEntropy <$> o' .: "charset" <*> o' .: "len" + +data DependencyError + = Violation DependencyViolation + | PointerUpdateError Text + | Other Text + deriving (Eq, Show) +instance FromJSON DependencyError where + parseJSON v = (Violation <$> parseJSON v) <|> case v of + Object o -> (PointerUpdateError <$> o .: "pointer-update-error") <|> (Other <$> o .: "other") + other -> fail $ "Invalid DependencyError. Expected Object, got " <> (show other) + +data DependencyViolation + = NotInstalled + | NotRunning + | InvalidVersion VersionRange Version + | UnsatisfiedConfig [Text] + deriving (Eq, Show) +instance FromJSON DependencyViolation where + parseJSON (String "not-installed") = pure NotInstalled + parseJSON (String "not-running" ) = pure NotRunning + parseJSON (Object o) = + let version = do + o' <- o .: "incorrect-version" + s <- o' .: "expected" + v <- o' .: "received" + pure $ InvalidVersion s v + config = UnsatisfiedConfig <$> o .: "config-unsatisfied" + in version <|> config + parseJSON other = fail $ "Invalid Dependency Violation" <> show other + +data AutoconfigureRes = AutoconfigureRes + { autoconfigureConfigRes :: ConfigureRes + , autoconfigureChanged :: HM.HashMap AppId Value + } +instance FromJSON AutoconfigureRes where + parseJSON = withObject "AppMgr AutoconfigureRes" $ \o -> do + autoconfigureConfigRes <- parseJSON (Object o) + autoconfigureChanged <- o .: "changed" + pure AutoconfigureRes { .. } + +data ConfigureRes = ConfigureRes + { configureResNeedsRestart :: [AppId] + , configureResStopped :: HM.HashMap AppId (AppId, DependencyError) -- TODO: Consider making this nested hashmaps + } + deriving Eq +instance FromJSON ConfigureRes where + parseJSON = withObject "AppMgr ConfigureRes" $ \o -> do + configureResNeedsRestart <- o .: "needs-restart" + configureResStopped' <- o .: "stopped" + configureResStopped <- for + configureResStopped' + \v -> do + depId <- v .: "dependency" + depError <- v .: "error" + pure (depId, depError) + pure ConfigureRes { .. } + +newtype BreakageMap = BreakageMap { unBreakageMap :: HM.HashMap AppId (AppId, DependencyError) } +instance FromJSON BreakageMap where + parseJSON = withObject "Breakage Map" $ \o -> do + fmap (BreakageMap . HM.fromList) $ for (HM.toList o) $ \(k, v) -> do + case v of + Object v' -> do + depId <- v' .: "dependency" + depError <- v' .: "error" + pure (AppId k, (depId, depError)) + otherwise -> fail $ "Expected Breakage Object, got" <> show otherwise + +data AppMgr (m :: Type -> Type) k where + -- Backup ::_ + CheckDependencies ::LocalOnly -> AppId -> Maybe VersionRange -> AppMgr m (HM.HashMap AppId DependencyInfo) + Configure ::DryRun -> AppId -> Maybe Value -> AppMgr m ConfigureRes + Autoconfigure ::DryRun -> AppId -> AppId -> AppMgr m AutoconfigureRes + -- Disks ::_ + Info ::Sing (flags :: Either OnlyInfoFlag [IncludeInfoFlag]) -> AppId -> AppMgr m (Maybe (InfoRes flags)) + InfoRaw ::OnlyInfoFlag -> AppId -> AppMgr m (Maybe Text) + -- Inspect ::_ + Install ::NoCache -> AppId -> Maybe VersionRange -> AppMgr m () + Instructions ::AppId -> AppMgr m (Maybe Text) + List ::Sing ('Right (flags :: [IncludeInfoFlag])) -> AppMgr m (HM.HashMap AppId (InfoRes ('Right flags))) + -- Logs ::_ + -- Notifications ::_ + -- Pack ::_ + Remove ::Either DryRun Purge -> AppId -> AppMgr m BreakageMap + Restart ::AppId -> AppMgr m () + -- SelfUpdate ::_ + -- Semver ::_ + Start ::AppId -> AppMgr m () + Stop ::DryRun -> AppId -> AppMgr m BreakageMap + -- Tor ::_ + Update ::DryRun -> AppId -> Maybe VersionRange -> AppMgr m BreakageMap + -- Verify ::_ +makeSmartConstructors ''AppMgr + +newtype AppMgrCliC m a = AppMgrCliC { runAppMgrCliC :: m a } + deriving newtype (Functor, Applicative, Monad, MonadIO) +instance MonadTrans AppMgrCliC where + lift = AppMgrCliC +instance MonadResource m => MonadResource (AppMgrCliC m) where + liftResourceT = lift . liftResourceT +instance MonadBase IO m => MonadBase IO (AppMgrCliC m) where + liftBase = AppMgrCliC . liftBase +instance MonadTransControl AppMgrCliC where + type StT AppMgrCliC a = a + liftWith f = AppMgrCliC $ f $ runAppMgrCliC + restoreT = AppMgrCliC +instance MonadBaseControl IO m => MonadBaseControl IO (AppMgrCliC m) where + type StM (AppMgrCliC m) a = StM m a + liftBaseWith = defaultLiftBaseWith + restoreM = defaultRestoreM + +instance (Has (Error S9Error) sig m, Algebra sig m, MonadIO m) => Algebra (AppMgr :+: sig) (AppMgrCliC m) where + alg hdl sig ctx = case sig of + (L (CheckDependencies (LocalOnly b) appId version)) -> do + let local = if b then ("--local-only" :) else id + args = "check-dependencies" : local [versionSpec version (show appId), "--json"] + (ec, out) <- readProcessInheritStderr "appmgr" args "" + res <- case ec of + ExitSuccess -> case eitherDecodeStrict out of + Left e -> throwError $ AppMgrParseE (toS $ String.unwords args) (decodeUtf8 out) e + Right x -> pure x + ExitFailure 6 -> throwError $ NotFoundE "appId@version" (versionSpec version (show appId)) + ExitFailure n -> throwError $ AppMgrE "check-dependencies" n + pure $ ctx $> res + (L (Configure (DryRun b) appId cfg)) -> do + let dryrun = if b then ("--dry-run" :) else id + let input = case cfg of + Nothing -> "" + Just x -> LBS.toStrict $ encode x + let args = "configure" : dryrun [show appId, "--json", "--stdin"] + (ec, out, e) <- readProcessWithExitCode' "appmgr" args input + res <- case ec of + ExitSuccess -> case eitherDecodeStrict out of + Left e -> throwError $ AppMgrParseE (toS $ String.unwords args) (decodeUtf8 out) e + Right x -> pure x + ExitFailure 4 -> throwError $ (AppMgrInvalidConfigE . decodeUtf8) e -- doesn't match spec + ExitFailure 5 -> throwError $ (AppMgrInvalidConfigE . decodeUtf8) e -- doesn't match rules + ExitFailure n -> throwError $ AppMgrE "configure" n + pure $ ctx $> res + (L (Autoconfigure (DryRun dry) dependent dependency)) -> do + let flags = (if dry then ("--dry-run" :) else id) . ("--json" :) + let args = "autoconfigure-dependency" : flags [show dependent, show dependency] + (ec, out) <- readProcessInheritStderr "appmgr" args "" + res <- case ec of + ExitSuccess -> case eitherDecodeStrict out of + Left e -> throwError $ AppMgrParseE (toS $ String.unwords args) (decodeUtf8 out) e + Right a -> pure a + ExitFailure n -> throwError $ AppMgrE "autoconfigure-dependency" n + pure $ ctx $> res + (L (Info fs appId)) -> do + let args = case fromSing fs of + Left o -> ["info", genExclusiveFlag o, show appId, "--json"] + Right ls -> "info" : ((genInclusiveFlag <$> ls) <> [show appId, "--json"]) + (ec, out) <- readProcessInheritStderr "appmgr" args "" + res <- case ec of + ExitSuccess -> case withSingI fs $ eitherDecodeStrict out of + Left e -> throwError $ AppMgrParseE (show args) (decodeUtf8 out) e + Right x -> pure $ Just x + ExitFailure 6 -> pure Nothing + ExitFailure n -> throwError $ AppMgrE "info" n + pure $ ctx $> res + (L (InfoRaw f appId)) -> do + let args = ["info", genExclusiveFlag f, show appId, "--json"] + (ec, out) <- readProcessInheritStderr "appmgr" args "" + res <- case ec of + ExitSuccess -> pure (Just $ decodeUtf8 out) + ExitFailure 6 -> pure Nothing + ExitFailure n -> throwError $ AppMgrE "info (raw)" n + pure $ ctx $> res + (L (Install (NoCache b) appId version)) -> do + let nocache = if b then ("--no-cache" :) else id + let versionSpec :: (IsString a, Semigroup a, ConvertText String a) => a -> a + versionSpec = case version of + Nothing -> id + Just x -> (<> [i|@#{x}|]) + let args = "install" : nocache [versionSpec (show appId)] + (ec, _) <- readProcessInheritStderr "appmgr" args "" + case ec of + ExitSuccess -> pure ctx + ExitFailure 6 -> throwError $ NotFoundE "appId" (show appId) + ExitFailure n -> throwError $ AppMgrE "install" n + (L (Instructions appId)) -> do + (ec, out) <- readProcessInheritStderr "appmgr" ["instructions", show appId] "" + case ec of + ExitSuccess -> pure $ ctx $> Just (decodeUtf8 out) + ExitFailure 6 -> pure $ ctx $> Nothing + ExitFailure n -> throwError $ AppMgrE "instructions" n + (L (List (SRight flags))) -> do + let renderedFlags = (genInclusiveFlag <$> fromSing flags) <> ["--json"] + let args = "list" : renderedFlags + (ec, out) <- readProcessInheritStderr "appmgr" args "" + res <- case ec of + ExitSuccess -> case withSingI flags $ eitherDecodeStrict out of + Left e -> throwError $ AppMgrParseE (toS $ String.unwords args) (decodeUtf8 out) e + Right x -> pure x + ExitFailure n -> throwError $ AppMgrE "list" n + pure $ ctx $> res + (L (Remove dryorpurge appId)) -> do + let args = "remove" : case dryorpurge of + Left (DryRun True) -> ["--dry-run", show appId, "--json"] + Right (Purge True) -> ["--purge", show appId, "--json"] + _ -> [show appId] + (ec, out) <- readProcessInheritStderr "appmgr" args "" + res <- case ec of + ExitSuccess -> case eitherDecodeStrict out of + Left e -> throwError $ AppMgrParseE (toS $ String.unwords args) (decodeUtf8 out) e + Right x -> pure x + ExitFailure 6 -> throwError $ NotFoundE "appId" (show appId) + ExitFailure n -> throwError $ AppMgrE (toS $ String.unwords args) n + pure $ ctx $> res + (L (Restart appId)) -> do + (ec, _) <- readProcessInheritStderr "appmgr" ["restart", show appId] "" + case ec of + ExitSuccess -> pure ctx + ExitFailure 6 -> throwError $ NotFoundE "appId" (show appId) + ExitFailure n -> throwError $ AppMgrE "restart" n + (L (Start appId)) -> do + (ec, _) <- readProcessInheritStderr "appmgr" ["start", show appId] "" + case ec of + ExitSuccess -> pure ctx + ExitFailure 6 -> throwError $ NotFoundE "appId" (show appId) + ExitFailure n -> throwError $ AppMgrE "start" n + (L (Stop (DryRun dry) appId)) -> do + let args = "stop" : (if dry then ("--dry-run" :) else id) [show appId, "--json"] + (ec, out) <- readProcessInheritStderr "appmgr" args "" + case ec of + ExitSuccess -> case eitherDecodeStrict out of + Left e -> throwError $ AppMgrParseE (toS $ String.unwords args) (decodeUtf8 out) e + Right x -> pure $ ctx $> x + ExitFailure 6 -> throwError $ NotFoundE "appId" (show appId) + ExitFailure n -> throwError $ AppMgrE (toS $ String.unwords args) n + (L (Update (DryRun dry) appId version)) -> do + let args = "update" : (if dry then ("--dry-run" :) else id) [versionSpec version (show appId), "--json"] + (ec, out) <- readProcessInheritStderr "appmgr" args "" + case ec of + ExitSuccess -> + let output = if not dry then fromMaybe "" $ lastMay (C8.lines out) else out + in case eitherDecodeStrict output of + Left e -> throwError $ AppMgrParseE (toS $ String.unwords args) (decodeUtf8 out) e + Right x -> pure $ ctx $> x + ExitFailure 6 -> + throwError $ NotFoundE "appId@version" ([i|#{appId}#{maybe "" (('@':) . show) version}|]) + ExitFailure n -> throwError $ AppMgrE (toS $ String.unwords args) n + R other -> AppMgrCliC $ alg (runAppMgrCliC . hdl) other ctx + where + versionSpec :: (IsString a, Semigroup a, ConvertText String a) => Maybe VersionRange -> a -> a + versionSpec v = case v of + Nothing -> id + Just x -> (<> [i|@#{x}|]) + {-# INLINE alg #-} + +genInclusiveFlag :: IncludeInfoFlag -> String +genInclusiveFlag = \case + IncludeConfig -> "-c" + IncludeDependencies -> "-d" + IncludeManifest -> "-m" + IncludeStatus -> "-s" + +genExclusiveFlag :: OnlyInfoFlag -> String +genExclusiveFlag = \case + OnlyConfig -> "-C" + OnlyDependencies -> "-D" + OnlyManifest -> "-M" + OnlyStatus -> "-S" + +readProcessInheritStderr :: MonadIO m => String -> [String] -> ByteString -> m (ExitCode, ByteString) +readProcessInheritStderr a b c = liftIO $ do + let pc = + setStdin (byteStringInput $ LBS.fromStrict c) + $ setStderr inherit + $ setEnvInherit + $ setStdout byteStringOutput + $ (System.Process.Typed.proc a b) + withProcessWait pc + $ \process -> atomically $ liftA2 (,) (waitExitCodeSTM process) (fmap LBS.toStrict $ getStdout process) + +readProcessWithExitCode' :: MonadIO m => String -> [String] -> ByteString -> m (ExitCode, ByteString, ByteString) +readProcessWithExitCode' a b c = liftIO $ do + let pc = + setStdin (byteStringInput $ LBS.fromStrict c) + $ setStderr byteStringOutput + $ setEnvInherit + $ setStdout byteStringOutput + $ (System.Process.Typed.proc a b) + withProcessWait pc $ \process -> atomically $ liftA3 (,,) + (waitExitCodeSTM process) + (fmap LBS.toStrict $ getStdout process) + (fmap LBS.toStrict $ getStderr process) diff --git a/agent/src/Lib/Algebra/Domain/AppMgr/TH.hs b/agent/src/Lib/Algebra/Domain/AppMgr/TH.hs new file mode 100644 index 000000000..bf516c54d --- /dev/null +++ b/agent/src/Lib/Algebra/Domain/AppMgr/TH.hs @@ -0,0 +1,43 @@ +{-# LANGUAGE TemplateHaskell #-} +module Lib.Algebra.Domain.AppMgr.TH where + +import Startlude + +import Data.Singletons +import Data.String +import Language.Haskell.TH.Syntax +import Language.Haskell.TH.Quote ( QuasiQuoter(..) ) + +import Lib.Algebra.Domain.AppMgr.Types + +flags :: QuasiQuoter +flags = QuasiQuoter + { quoteType = \s -> + let + w = Data.String.words s + additive [] = Just [] + additive (f : fs) = case f of + "-s" -> ('IncludeStatus :) <$> additive fs + "-c" -> ('IncludeConfig :) <$> additive fs + "-d" -> ('IncludeDependencies :) <$> additive fs + "-m" -> ('IncludeManifest :) <$> additive fs + _ -> Nothing + exclusive [f] = case f of + "-S" -> Just 'OnlyStatus + "-C" -> Just 'OnlyConfig + "-D" -> Just 'OnlyDependencies + "-M" -> Just 'OnlyManifest + _ -> Nothing + exclusive _ = Nothing + typ = case eitherA (exclusive w) (additive w) of + Nothing -> panic $ "Invalid Flags: '" <> toS s <> "'" + Just (Left o ) -> pure $ AppT (PromotedT 'Left) (PromotedT $ o) + Just (Right ls) -> pure $ AppT + (PromotedT 'Right) + (foldr (\f fs -> AppT (AppT PromotedConsT . PromotedT $ f) fs) PromotedNilT ls) + in + typ + , quoteExp = \s -> AppTypeE (VarE 'sing) <$> quoteType flags s + , quotePat = panic "appmgr 'flags' cannot be used in patterns" + , quoteDec = panic "appmgr 'flags' cannot be used in declarations" + } diff --git a/agent/src/Lib/Algebra/Domain/AppMgr/Types.hs b/agent/src/Lib/Algebra/Domain/AppMgr/Types.hs new file mode 100644 index 000000000..6947edb92 --- /dev/null +++ b/agent/src/Lib/Algebra/Domain/AppMgr/Types.hs @@ -0,0 +1,29 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE UndecidableInstances #-} +module Lib.Algebra.Domain.AppMgr.Types where + +import Startlude + +import Data.Singletons.TH + +newtype LocalOnly = LocalOnly { unLocalOnly :: Bool } +newtype NoCache = NoCache { unNoCache :: Bool } +newtype Purge = Purge { unPurge :: Bool } +newtype DryRun = DryRun { unDryRun :: Bool } + +$(singletons [d| + data IncludeInfoFlag + = IncludeConfig + | IncludeDependencies + | IncludeManifest + | IncludeStatus deriving (Eq, Show) |]) + +$(singletons [d| + data OnlyInfoFlag + = OnlyConfig + | OnlyDependencies + | OnlyManifest + | OnlyStatus deriving (Eq, Show) |]) + diff --git a/agent/src/Lib/Algebra/State/RegistryUrl.hs b/agent/src/Lib/Algebra/State/RegistryUrl.hs new file mode 100644 index 000000000..683b75227 --- /dev/null +++ b/agent/src/Lib/Algebra/State/RegistryUrl.hs @@ -0,0 +1,84 @@ +{-# LANGUAGE UndecidableInstances #-} +module Lib.Algebra.State.RegistryUrl where + +import Startlude hiding ( State + , get + , put + ) + +import Control.Algebra +import Control.Effect.State +import Control.Monad.Catch +import Control.Monad.Trans.Class +import Control.Monad.Trans.Resource +import qualified Data.Text as T + +import Lib.SystemPaths +import Lib.Types.Url +import Control.Monad.Trans.Control +import Control.Monad.Base + +data RegistryUrl (m :: Type -> Type) k where + GetRegistryUrl ::RegistryUrl m (Maybe Url) + PutRegistryUrl ::Url -> RegistryUrl m () + +getRegistryUrl :: Has RegistryUrl sig m => m (Maybe Url) +getRegistryUrl = send GetRegistryUrl + +putRegistryUrl :: Has RegistryUrl sig m => Url -> m () +putRegistryUrl = send . PutRegistryUrl + + +newtype RegistryUrlIOC m a = RegistryUrlIOC { runRegistryUrlIOC :: m a } + deriving newtype (Functor, Applicative, Monad, MonadIO) + +instance MonadTrans RegistryUrlIOC where + lift = RegistryUrlIOC + +instance MonadThrow m => MonadThrow (RegistryUrlIOC m) where + throwM = lift . throwM + +instance MonadResource m => MonadResource (RegistryUrlIOC m) where + liftResourceT = lift . liftResourceT + +instance MonadTransControl RegistryUrlIOC where + type StT RegistryUrlIOC a = a + liftWith f = RegistryUrlIOC $ f $ runRegistryUrlIOC + restoreT = RegistryUrlIOC +instance MonadBase IO m => MonadBase IO (RegistryUrlIOC m) where + liftBase = RegistryUrlIOC . liftBase +instance MonadBaseControl IO m => MonadBaseControl IO (RegistryUrlIOC m) where + type StM (RegistryUrlIOC m) a = StM m a + liftBaseWith = defaultLiftBaseWith + restoreM = defaultRestoreM + +-- the semantics of this are currently as follows, url fetches will fail with an empty value if the path does not exist +-- as well as if the url in the file desired does not parse as a url +instance (MonadIO m, Algebra sig m, HasFilesystemBase sig m) => Algebra (RegistryUrl :+: sig) (RegistryUrlIOC m) where + alg hdl sig ctx = case sig of + L GetRegistryUrl -> do + result <- readSystemPath altRegistryUrlPath + case result of + Nothing -> pure $ ctx $> Nothing + Just raw -> + let stripped = T.strip raw + in case parseUrl stripped of + Left _ -> do + putStrLn @Text $ "Could not parse alternate registry url: " <> stripped + pure $ ctx $> Nothing + Right url -> pure $ ctx $> (Just url) + L (PutRegistryUrl url) -> do + writeSystemPath altRegistryUrlPath (show url) + pure ctx + R other -> RegistryUrlIOC $ alg (runRegistryUrlIOC . hdl) other ctx + {-# INLINE alg #-} + + +newtype RegistryUrlStateC m a = RegistryUrlStateC { runRegistryUrlStateC :: m a } + deriving newtype (Functor, Applicative, Monad, MonadIO) +instance (Monad m, Has (State (Maybe Url)) sig m) => Algebra (RegistryUrl :+: sig) (RegistryUrlStateC m) where + alg hdl sig ctx = case sig of + L GetRegistryUrl -> (ctx $>) <$> get + L (PutRegistryUrl url) -> (ctx $>) <$> put (Just url) + R other -> RegistryUrlStateC $ alg (runRegistryUrlStateC . hdl) other ctx + diff --git a/agent/src/Lib/Avahi.hs b/agent/src/Lib/Avahi.hs new file mode 100644 index 000000000..ca74aea65 --- /dev/null +++ b/agent/src/Lib/Avahi.hs @@ -0,0 +1,68 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TypeApplications #-} +module Lib.Avahi where + +import Startlude hiding ( (<.>) ) + +import Data.String.Interpolate.IsString +import qualified Data.Text as T +import System.Directory + +import Lib.Error +import Lib.SystemCtl +import Lib.SystemPaths +import Settings + +avahiConf :: Text -> Text +avahiConf hostname = T.drop 1 $ [i| +[server] +host-name=#{hostname} +domain-name=local +use-ipv4=yes +use-ipv6=no +allow-interfaces=wlan0,eth0 +ratelimit-interval-usec=100000 +ratelimit-burst=1000 + +[wide-area] +enable-wide-area=yes + +[publish] + +[reflector] + +[rlimits] +|] + +data WildcardReplacement = + WildcardsEnabled + | WildcardsDisabled + deriving (Eq, Show) + +serviceConfig :: (WildcardReplacement, Text) -> Text -> Word16 -> Text +serviceConfig (wildcards, name) protocol port = T.drop 1 $ [i| + + + + #{name} + + #{protocol} + #{port} + +|] + +createService :: (MonadReader AppSettings m, MonadIO m) => Text -> (WildcardReplacement, Text) -> Text -> Word16 -> m () +createService title params proto port = do + base <- asks appFilesystemBase + liftIO $ writeFile (toS $ avahiServicePath title `relativeTo` base) $ serviceConfig params proto port + +createDaemonConf :: Text -> IO () +createDaemonConf = writeFile "/etc/avahi/avahi-daemon.conf" . avahiConf + +listServices :: IO [FilePath] +listServices = listDirectory "/etc/avahi/services" + +reload :: IO () +reload = do + ec <- systemCtl RestartService "avahi-daemon" + unless (ec == ExitSuccess) $ throwIO . AvahiE $ "systemctl restart avahi-daemon" <> show ec diff --git a/agent/src/Lib/Background.hs b/agent/src/Lib/Background.hs new file mode 100644 index 000000000..c6fa11e06 --- /dev/null +++ b/agent/src/Lib/Background.hs @@ -0,0 +1,46 @@ +module Lib.Background where + +import Startlude hiding ( mapMaybe ) + +import Data.HashMap.Strict +import Data.Singletons +import Data.Singletons.Decide +import Exinst + +import Lib.Types.Core +import Lib.Types.ServerApp + +type JobMetadata :: AppTmpStatus -> Type +data JobMetadata a where + Install ::StoreApp -> StoreAppVersionInfo -> JobMetadata 'Installing + Backup ::JobMetadata 'CreatingBackup + Restore ::JobMetadata 'RestoringBackup + StopApp ::JobMetadata 'StoppingT + RestartApp ::JobMetadata 'RestartingT + +jobType :: JobMetadata a -> SAppTmpStatus a +jobType = \case + Install _ _ -> SInstalling + Backup -> SCreatingBackup + Restore -> SRestoringBackup + StopApp -> SStoppingT + RestartApp -> SRestartingT + +newtype JobCache = JobCache { unJobCache :: HashMap AppId (Some1 JobMetadata, ThreadId) } + +inspect :: SAppTmpStatus a -> JobCache -> HashMap AppId (JobMetadata a, ThreadId) +inspect stat (JobCache cache) = flip mapMaybe cache $ \(Some1 sa jm, tid) -> case stat %~ sa of + Proved Refl -> Just (jm, tid) + Disproved _ -> Nothing + +statuses :: JobCache -> HashMap AppId AppTmpStatus +statuses (JobCache cache) = some1SingRep . fst <$> cache + +installInfo :: JobMetadata 'Installing -> (StoreApp, StoreAppVersionInfo) +installInfo (Install a b) = (a, b) + +insertJob :: AppId -> JobMetadata a -> ThreadId -> JobCache -> JobCache +insertJob appId jm tid = JobCache . insert appId (withSingI (jobType jm) (some1 jm), tid) . unJobCache + +deleteJob :: AppId -> JobCache -> JobCache +deleteJob appId = JobCache . delete appId . unJobCache diff --git a/agent/src/Lib/ClientManifest.hs b/agent/src/Lib/ClientManifest.hs new file mode 100644 index 000000000..1cc3f6059 --- /dev/null +++ b/agent/src/Lib/ClientManifest.hs @@ -0,0 +1,297 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TupleSections #-} +module Lib.ClientManifest where + +import Startlude hiding ( takeWhile + , toList + ) +import qualified Protolude.Base as P + +import Control.Error.Util +import Control.Monad.Fail +import Data.Aeson +import Data.Attoparsec.Text +import Data.HashMap.Strict +import qualified Data.Map.Strict as Map + ( toList ) +import Data.Singletons.TypeLits +import Data.String.Interpolate.IsString +import qualified Data.Text as T +import qualified Data.Yaml as Yaml +import Exinst +import Network.Mime +import Numeric.Natural +import Streaming.Prelude as Stream + hiding ( show + , for + , toList + , cons + ) +import System.IO ( hClose ) + +import Lib.Error +import Lib.SystemPaths +import Lib.Types.NetAddress +import Lib.Types.Core +import Lib.Types.Emver + +data ClientManifest (n :: Nat) where + V0 ::ClientManifestV0 -> ClientManifest 0 + +deriving instance Show (ClientManifest a) + +instance Dict1 Show ClientManifest where + dict1 sn = case sn of + SNat -> Dict + +data ClientManifestV0 = ClientManifestV0 + { clientManifestV0AppId :: AppId + , clientManifestV0AppVersion :: Version + , clientManifestV0Main :: SystemPath + , clientManifestV0UriRewrites :: HashMap UriPattern LanExp + , clientManifestV0ErrorFiles :: HashMap Int FilePath + , clientManifestV0MimeRules :: MimeMap + , clientManifestV0MimeDefault :: MimeType + } + deriving Show + +data UriPattern = MatchExact Text | MatchPrefix Text + deriving (Eq, Show, Generic, Hashable) +newtype LanExp = LanExp { unLanExp :: (AppId, LanIp -> Text) } +instance Show LanExp where + show (LanExp (AppId appId, f)) = toS . f . LanIp $ "{{" <> appId <> "}}" + +parseUriPattern :: Parser UriPattern +parseUriPattern = do + cons <- char '=' *> pure MatchExact <|> pure MatchPrefix + cons . toS <$> takeWhile1 (not . isSpace) + +parseUriRewrite :: Parser (UriPattern, LanExp) +parseUriRewrite = do + pat <- parseUriPattern + skipSpace + void $ char '-' *> char '>' + skipSpace + tgt <- parseUriTarget + pure (pat, tgt) + +parseUriTarget :: Parser LanExp +parseUriTarget = do + proto <- (string "https" <|> string "http") + opener <- string "://" <* string "{{" + host <- takeWhile1 (not . (== '}')) + closer <- string "}}" *> string ":" + port <- decimal @Word16 + path <- takeWhile1 (not . isSpace) + pure . LanExp $ (AppId host, \ip -> proto <> opener <> unLanIp ip <> closer <> show port <> path) + +instance FromJSON (Some1 ClientManifest) where + parseJSON = withObject "Client Manifest" $ \o -> do + v <- o .: "manifest-version" + case (v :: Natural) of + 0 -> some1 . V0 <$> parseJSON (Object o) + _ -> fail $ "Unsupported Manifest Version: " <> show v + +instance FromJSON ClientManifestV0 where + parseJSON = withObject "Client Manifest V0" $ \o -> do + clientManifestV0AppId <- o .: "app-id" + clientManifestV0AppVersion <- o .: "app-version" + clientManifestV0Main <- relBase <$> o .: "main-is" + clientManifestV0UriRewrites <- fmap fromList $ o .: "uri-rewrites" >>= \rewrites -> do + for (fmap (parseOnly parseUriRewrite) rewrites) $ \case + Right r -> pure r + Left e -> fail $ "Invalid Rewrite Rule: " <> e + clientManifestV0ErrorFiles <- fromMaybe mempty <$> o .: "error-pages" + clientManifestV0MimeRules <- encodeUtf8 <<$>> o .: "mime-types" + clientManifestV0MimeDefault <- encodeUtf8 <$> o .: "mime-default" + pure ClientManifestV0 { .. } + +testClientManifest :: ByteString +testClientManifest = [i| +manifest-version: 0 +app-id: start9-ambassador +app-version: 0.2.0 +main-is: /index.html +uri-rewrites: + - =/api -> http://{{start9-ambassador}}:5959/authenticate + - /api -> http://{{start9-ambassador}}:5959/ +error-pages: + 404: /err404.html +mime-types: + bin: application/octet-stream + json: application/json +mime-default: text/plain +|] + +data NginxSiteConf = NginxSiteConf + { nginxSiteConfAppId :: AppId + , nginxSiteConfAppVersion :: Version + , nginxSiteConfRoot :: SystemPath + , nginxSiteConfListen :: Word16 + , nginxSiteConfServerName :: [Text] + , nginxSiteConfLocations :: [NginxLocation] + , nginxSiteConfIndex :: SystemPath + , nginxSiteConfMimeMappings :: HashMap MimeType [Extension] + , nginxSiteConfErrorPages :: HashMap Int SystemPath + , nginxSiteConfDefaultMime :: MimeType + , nginxSiteConfSsl :: Maybe NginxSsl + } + deriving Show + +data NginxLocation = NginxLocation + { nginxLocationPattern :: UriPattern + , nginxLocationTarget :: Text + } + deriving Show + +data NginxSsl = NginxSsl + { nginxSslKeyPath :: SystemPath + , nginxSslCertPath :: SystemPath + , nginxSslOnlyServerNames :: [Text] + } + deriving Show + +transpileV0ToNginx :: MonadReader (HashMap AppId (TorAddress, LanIp)) m => ClientManifest 0 -> S9ErrT m NginxSiteConf +transpileV0ToNginx (V0 ClientManifestV0 {..}) = do + hm <- ask + let nginxSiteConfAppId = clientManifestV0AppId + let nginxSiteConfAppVersion = clientManifestV0AppVersion + let nginxSiteConfRoot = "/var/www/html" <> relBase (unAppId clientManifestV0AppId) + let nginxSiteConfListen = 80 + nginxSiteConfServerName <- + pure . unTorAddress . fst <$> lookup clientManifestV0AppId hm ?? (EnvironmentValE clientManifestV0AppId) + nginxSiteConfLocations <- for (toList clientManifestV0UriRewrites) $ \(pat, (LanExp (appId, tgt))) -> do + lan <- snd <$> lookup appId hm ?? EnvironmentValE appId + pure $ NginxLocation pat (tgt lan) + let nginxSiteConfIndex = clientManifestV0Main + let nginxSiteConfErrorPages = fmap fromString clientManifestV0ErrorFiles + let nginxSiteConfMimeMappings = + flip execState Data.HashMap.Strict.empty $ for (Map.toList clientManifestV0MimeRules) $ \(ext, mime) -> do + modify (alter (maybe (Just [ext]) (Just . (ext :))) mime) + let nginxSiteConfDefaultMime = clientManifestV0MimeDefault + let nginxSiteConfSsl = Nothing + pure NginxSiteConf { .. } + +-- TODO WRONG, this caching disabled for all uri rewrites +-- this hack is ok for ambassador-ui, but does not generalize +-- we might want to deprecate this means of cachine anyway though +-- see: https://developers.google.com/web/ilt/pwa/caching-files-with-service-worker#cache_then_network +nginxConfGen :: MonadState Int m => NginxSiteConf -> Stream (Of Text) m () +nginxConfGen NginxSiteConf {..} = do + emit "server {" + indent $ do + emit $ "root " <> nginxSiteConfRoot `relativeTo` "/" <> ";" + + case nginxSiteConfSsl of + Nothing -> emit $ "listen " <> show nginxSiteConfListen <> ";" + Just _ -> emit $ "listen " <> show nginxSiteConfListen <> " ssl;" + + emit $ "server_name " <> (T.intercalate " " nginxSiteConfServerName) <> ";" + + case nginxSiteConfSsl of + Nothing -> pure () + Just NginxSsl {..} -> do + emit $ "ssl_certificate " <> (nginxSslCertPath `relativeTo` "/") <> ";" + emit $ "ssl_certificate_key " <> (nginxSslKeyPath `relativeTo` "/") <> ";" + + for_ nginxSiteConfLocations $ \(NginxLocation pat tgt) -> do + case pat of + MatchExact p -> emit $ "location = " <> p <> " {" + MatchPrefix p -> emit $ "location " <> p <> " {" + indent $ do + emit $ "proxy_pass " <> tgt <> ";" + emit $ "proxy_set_header Host $host;" + emit "}" + emit "location = / {" + indent $ do + emit $ "add_header X-Consulate-App-ID " <> (show nginxSiteConfAppId) <> ";" + emit $ "add_header X-Consulate-App-Version " <> (show nginxSiteConfAppVersion) <> ";" + emit $ "add_header Cache-Control private;" + emit $ "expires 86400;" + emit $ "etag on;" + emit $ "index " <> nginxSiteConfIndex `relativeTo` "/" <> ";" + emit "}" + for_ (toList nginxSiteConfErrorPages) $ \(ec, path) -> do + emit $ "error_page " <> show ec <> " " <> (path `relativeTo` "/") <> ";" + emit $ "location = " <> path `relativeTo` "/" <> " {" + indent $ do + emit $ "add_header X-Consulate-App-ID " <> (show nginxSiteConfAppId) <> ";" + emit $ "add_header X-Consulate-App-Version " <> (show nginxSiteConfAppVersion) <> ";" + emit "internal;" + emit "}" + emit "location / {" + indent $ do + emit $ "add_header X-Consulate-App-ID " <> (show nginxSiteConfAppId) <> ";" + emit $ "add_header X-Consulate-App-Version " <> (show nginxSiteConfAppVersion) <> ";" + emit $ "add_header Cache-Control private;" + emit $ "expires 86400;" + emit $ "etag on;" + emit "}" + emit "types {" + indent $ for_ (toList nginxSiteConfMimeMappings) $ \(typ, exts) -> do + emit $ decodeUtf8 typ <> " " <> T.unwords exts <> ";" + emit "}" + emit $ "default_type " <> decodeUtf8 nginxSiteConfDefaultMime <> ";" + emit "}" + case nginxSslOnlyServerNames <$> nginxSiteConfSsl of + Nothing -> pure () + Just [] -> pure () + Just ls -> do + emit "server {" + indent $ do + emit "listen 80;" + emit $ "server_name " <> T.intercalate " " ls <> ";" + emit $ "return 301 https://$host$request_uri;" + emit "}" + where + emit :: MonadState Int m => Text -> Stream (Of Text) m () + emit t = get >>= \n -> yield $ T.replicate n "\t" <> t + indent :: MonadState Int m => m a -> m a + indent m = modify (+ (1 :: Int)) *> m <* modify (subtract (1 :: Int)) + +data NginxSiteConfOverride = NginxSiteConfOverride + { nginxSiteConfOverrideAdditionalServerName :: Text + , nginxSiteConfOverrideListen :: Word16 + , nginxSiteConfOverrideSsl :: Maybe NginxSsl + } +overrideNginx :: NginxSiteConfOverride -> NginxSiteConf -> NginxSiteConf +overrideNginx NginxSiteConfOverride {..} nginxSiteConf = nginxSiteConf + { nginxSiteConfServerName = previousServerNames <> [nginxSiteConfOverrideAdditionalServerName] + , nginxSiteConfListen = nginxSiteConfOverrideListen + , nginxSiteConfSsl = nginxSiteConfOverrideSsl + } + where previousServerNames = nginxSiteConfServerName nginxSiteConf + +-- takes if' app-manifest, converts it to an nginx conf, writes it to of' +transpile :: (MonadReader (HashMap AppId (TorAddress, LanIp)) m, MonadIO m) + => Maybe NginxSiteConfOverride + -> FilePath + -> FilePath + -> m Bool +transpile mOverride if' of' = do + oh <- liftIO $ openFile of' WriteMode + hm <- ask + contents <- liftIO $ toS <$> Startlude.readFile if' + case Yaml.decodeEither' (encodeUtf8 contents) :: Either Yaml.ParseException (Some1 ClientManifest) of + Left e -> do + Startlude.print e + liftIO $ hClose oh + pure False + Right (Some1 _ cm) -> case cm of + cmv0@(V0 _) -> case runExceptT (fmap overrides $ transpileV0ToNginx cmv0) hm of + Left e -> do + Startlude.print e + liftIO $ hClose oh + pure False + Right nsc -> do + flip (evalStateT @_ @Int) 0 $ Stream.toHandle oh $ Stream.toHandle stdout $ Stream.copy + (Stream.map toS $ nginxConfGen nsc) + liftIO $ hClose oh + pure True + where + overrides = case mOverride of + Nothing -> id + Just o -> overrideNginx o + diff --git a/agent/src/Lib/Crypto.hs b/agent/src/Lib/Crypto.hs new file mode 100644 index 000000000..205356e7b --- /dev/null +++ b/agent/src/Lib/Crypto.hs @@ -0,0 +1,53 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE ScopedTypeVariables #-} +module Lib.Crypto where + +import Startlude + +import Control.Arrow +import Crypto.Cipher.AES +import Crypto.Cipher.Types +import Crypto.Error +import Crypto.Hash as Hash +import Crypto.KDF.PBKDF2 +import Crypto.MAC.HMAC +import Crypto.Random +import Data.Maybe +import Data.ByteArray.Sized as BA +import Data.ByteString as BS + +-- expands given key by pbkdf2 +computeHmac :: Text -> Text -> SizedByteArray 16 ByteString -> Digest SHA256 +computeHmac key message salt = hmacGetDigest $ hmac (pbkdf2 salt' key) (encodeUtf8 message) + where salt' = unSizedByteArray salt + +mkAesKey :: SizedByteArray 16 ByteString -> Text -> Maybe AES256 +mkAesKey salt = pbkdf2 salt' >>> cipherInit >>> \case + CryptoPassed k -> Just k + CryptoFailed _ -> Nothing + where salt' = unSizedByteArray salt + +pbkdf2 :: ByteString -> Text -> ByteString +pbkdf2 salt key = fastPBKDF2_SHA256 pbkdf2Parameters (encodeUtf8 key) salt + where pbkdf2Parameters = Parameters 100000 32 -- 32 is the length in *bytes* of the output key + +encryptAes256Ctr :: AES256 -> IV AES256 -> ByteString -> ByteString +encryptAes256Ctr = ctrCombine + +decryptAes256Ctr :: AES256 -> IV AES256 -> ByteString -> ByteString +decryptAes256Ctr = encryptAes256Ctr + +random16 :: MonadIO m => m (SizedByteArray 16 ByteString) +random16 = randomBytes +random8 :: MonadIO m => m (SizedByteArray 8 ByteString) +random8 = randomBytes +random32 :: MonadIO m => m (SizedByteArray 32 ByteString) +random32 = randomBytes + +randomBytes :: forall m n . (MonadIO m, KnownNat n) => m (SizedByteArray n ByteString) +randomBytes = liftIO $ fromJust . sizedByteArray <$> getRandomBytes byteCount + where + casing :: SizedByteArray n ByteString + casing = BA.zero + byteCount = BS.length $ unSizedByteArray casing diff --git a/agent/src/Lib/Database.hs b/agent/src/Lib/Database.hs new file mode 100644 index 000000000..043b05eeb --- /dev/null +++ b/agent/src/Lib/Database.hs @@ -0,0 +1,53 @@ +module Lib.Database where + +import Startlude hiding ( throwIO + , Reader + ) + +import Control.Effect.Reader.Labelled +import Control.Monad.Logger +import Database.Persist.Sql +import System.Directory + +import Constants +import Lib.Migration +import Lib.SystemPaths +import Lib.Types.Emver +import Model +import Util.Function + +------------------------------------------------------------------------------------------------------------------------ +-- Migrations +------------------------------------------------------------------------------------------------------------------------ + +data UpMigrationHistory = UpMigrationHistory (Maybe Version) (Maybe Version) -- previous db version, current db version. + +type Logger = Loc -> LogSource -> LogLevel -> LogStr -> IO () + +ensureCoherentDbVersion :: (HasFilesystemBase sig m, HasLabelled "sqlDatabase" (Reader Text) sig m, MonadIO m) + => ConnectionPool + -> Logger + -> m UpMigrationHistory +ensureCoherentDbVersion pool logFunc = do + db <- dbPath + mDbVersion <- liftIO $ doesFileExist (toS db) >>= \case + True -> runSqlPool getCurrentDbVersion pool -- get db version if db exists + False -> pure Nothing + + liftIO $ case mDbVersion of + Nothing -> initializeDb agentVersion pool logFunc + Just dbVersion -> upMigration pool dbVersion agentVersion + +initializeDb :: Version -> ConnectionPool -> Logger -> IO UpMigrationHistory +initializeDb av = runLoggingT .* runSqlPool $ do + now <- liftIO getCurrentTime + runMigration migrateAll + void . insertEntity $ ExecutedMigration now now av av + pure $ UpMigrationHistory Nothing (Just agentVersion) + +upMigration :: ConnectionPool -> Version -> Version -> IO UpMigrationHistory +upMigration pool dbVersion currentAgentVersion = if dbVersion < currentAgentVersion + then do + ioMigrationDbVersion pool dbVersion currentAgentVersion + pure $ UpMigrationHistory (Just dbVersion) (Just currentAgentVersion) + else pure $ UpMigrationHistory (Just dbVersion) Nothing diff --git a/agent/src/Lib/Error.hs b/agent/src/Lib/Error.hs new file mode 100644 index 000000000..6a687b5b7 --- /dev/null +++ b/agent/src/Lib/Error.hs @@ -0,0 +1,283 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TemplateHaskell #-} + +module Lib.Error where + +import Startlude + +import Control.Carrier.Error.Church +import Data.Aeson hiding ( Error ) +import Data.String.Interpolate.IsString +import qualified Data.Yaml as Yaml +import qualified GHC.Show ( Show(..) ) +import Network.HTTP.Types +import System.Process +import Yesod.Core hiding ( ErrorResponse ) + +import Lib.SystemPaths +import Lib.Types.Core +import Lib.Types.Emver + + +type S9ErrT m = ExceptT S9Error m + +data S9Error = + ProductKeyE + | RegistrationE + | NoCompliantAgentE VersionRange + | PersistentE Text + | WifiConnectionE + | AppMgrParseE Text Text String + | AppMgrInvalidConfigE Text + | AppMgrE Text Int + | AvahiE Text + | MetricE Text + | AppMgrVersionE Version VersionRange + | RegistryUnreachableE + | RegistryParseE Text Text + | AppNotInstalledE AppId + | AppStateActionIncompatibleE AppId AppStatus AppAction + | UpdateSelfE UpdateSelfStep Text + | InvalidSshKeyE Text + | InvalidSsidE + | InvalidPskE + | InvalidRequestE Value Text + | NotFoundE Text Text + | UpdateInProgressE + | TemporarilyForbiddenE AppId Text Text + | TorServiceTimeoutE + | NginxSslE Text + | WifiOrphaningE + | NoPasswordExistsE + | HostsParamsE Text + | MissingFileE SystemPath + | ClientCryptographyE Text + | TTLExpirationE Text + | ManifestParseE AppId Yaml.ParseException + | EnvironmentValE AppId + | InternalE Text + | BackupE AppId Text + | BackupPassInvalidE + | OpenSslE Text Int String String +data UpdateSelfStep = + GetLatestCompliantVersion + | GetYoungAgentBinary + | ShutdownWeb + | StartupYoungAgent + | PingYoungAgent ProcessHandle +instance Show S9Error where + show = show . toError + +instance Exception S9Error + +newtype InternalS9Error = InternalS9Error Text deriving (Eq, Show) +instance Exception InternalS9Error + +-- | Redact any sensitive data in this function +toError :: S9Error -> ErrorResponse +toError = \case + ProductKeyE -> ErrorResponse PRODUCT_KEY_ERROR "The product key is invalid" + RegistrationE -> ErrorResponse REGISTRATION_ERROR "The product already has an owner" + NoCompliantAgentE spec -> ErrorResponse AGENT_UPDATE_ERROR [i|No valid agent version for spec #{spec}|] + PersistentE t -> ErrorResponse DATABASE_ERROR t + WifiConnectionE -> ErrorResponse WIFI_ERROR "Could not connect to wifi" + AppMgrInvalidConfigE e -> ErrorResponse APPMGR_CONFIG_ERROR e + AppMgrParseE cmd result e -> + ErrorResponse APPMGR_PARSE_ERROR [i|"appmgr #{cmd}" yielded an unparseable result:#{result}\nError: #{e}|] + AppMgrE cmd code -> ErrorResponse APPMGR_ERROR [i|"appmgr #{cmd}" exited with #{code}|] + AppMgrVersionE av avs -> + ErrorResponse APPMGR_ERROR [i|"appmgr version #{av}" fails to satisfy requisite spec #{avs}|] + AvahiE e -> ErrorResponse AVAHI_ERROR [i|#{e}|] + MetricE m -> ErrorResponse METRICS_ERROR [i|failed to provide metrics: #{m}|] + RegistryUnreachableE -> ErrorResponse REGISTRY_ERROR [i|registry is unreachable|] + RegistryParseE path msg -> ErrorResponse REGISTRY_ERROR [i|registry "#{path}" failed to parse: #{msg}|] + AppNotInstalledE appId -> ErrorResponse APP_NOT_INSTALLED [i|#{appId} is not installed|] + AppStateActionIncompatibleE appId status action -> ErrorResponse APP_ACTION_FORBIDDEN $ case (status, action) of + (AppStatusAppMgr Dead, _) -> [i|#{appId} cannot be #{action}ed because it is dead...contact support?|] + (AppStatusAppMgr Removing, _) -> [i|#{appId} cannot be #{action}ed because it is being removed|] + (AppStatusAppMgr Running, Start) -> [i|#{appId} is already running|] + (AppStatusAppMgr Stopped, Stop) -> [i|#{appId} is already stopped|] + (AppStatusAppMgr Restarting, Start) -> [i|#{appId} is already running|] + (AppStatusAppMgr Running, Stop) -> [i|Running apps should be stoppable, this is a bug, contact support|] + (AppStatusAppMgr Stopped, Start) -> [i|Stopped apps should be startable, this is a bug, contact support|] + (AppStatusAppMgr Restarting, Stop) -> [i|Restarting apps should be stoppable, this is a bug, contact support|] + (AppStatusAppMgr Paused, _) -> [i|Paused is not an externally visible state, this is a bug, contact support|] + (AppStatusTmp NeedsConfig, Start) -> [i|#{appId} cannot be started because it is not configured|] + (AppStatusTmp NeedsConfig, Stop) -> [i|#{appId} is already stopped|] + (AppStatusTmp BrokenDependencies, Start) -> [i|Cannot start service: Dependency Issue|] + (AppStatusTmp _, _) -> [i|Cannot issue control actions to apps in temporary states|] + UpdateSelfE step e -> ErrorResponse SELF_UPDATE_ERROR $ case step of + GetLatestCompliantVersion -> [i|could not find a compliant version for the specification|] + GetYoungAgentBinary -> [i|could not get young agent binary: #{e}|] + ShutdownWeb -> [i|could not shutdown web: #{e}|] + StartupYoungAgent -> [i|could not startup young agent: #{e}|] + PingYoungAgent _ -> [i|could not ping young agent: #{e}|] + InvalidSshKeyE key -> ErrorResponse INVALID_SSH_KEY [i|The ssh key "#{key}" is invalid|] + InvalidSsidE -> ErrorResponse INVALID_SSID [i|The ssid is invalid. Only ASCII characters allowed.|] + InvalidPskE -> ErrorResponse INVALID_SSID [i|The wifi password is invalid. Only ASCII characters allowed.|] + InvalidRequestE val reason -> ErrorResponse INVALID_REQUEST [i|The body #{encode val} is invalid: #{reason}|] + NotFoundE resource val -> ErrorResponse RESOURCE_NOT_FOUND [i|The #{resource} #{val} was not found|] + UpdateInProgressE -> + ErrorResponse UPDATE_IN_PROGRESS [i|Your request could not be completed because your server is updating|] + TemporarilyForbiddenE appId action st -> + ErrorResponse APP_ACTION_FORBIDDEN [i|The #{action} for #{appId} is temporarily forbidden because it is #{st}|] + TorServiceTimeoutE -> + ErrorResponse INTERNAL_ERROR [i|The MeshOS Tor Service could not be started...contact support|] + NginxSslE e -> ErrorResponse INTERNAL_ERROR [i|MeshOS could not be started with SSL #{e}|] + WifiOrphaningE -> ErrorResponse + WIFI_ERROR + [i|You cannot delete the wifi network you are currently connected to unless on ethernet|] + ManifestParseE appId e -> + ErrorResponse INTERNAL_ERROR [i|There was an error inspecting the manifest for #{appId}: #{e}|] + NoPasswordExistsE -> ErrorResponse REGISTRATION_ERROR [i|Unauthorized. No password has been registered|] + MissingFileE sp -> ErrorResponse RESOURCE_NOT_FOUND [i|File not found as #{leaf sp}|] + ClientCryptographyE desc -> ErrorResponse REGISTRATION_ERROR [i|Cryptography failure: #{desc}|] + TTLExpirationE desc -> ErrorResponse REGISTRATION_ERROR [i|TTL Expiration failure: #{desc}|] + EnvironmentValE appId -> ErrorResponse SYNCHRONIZATION_ERROR [i|Could not read environment values for #{appId}|] + HostsParamsE key -> ErrorResponse REGISTRATION_ERROR [i|Missing or invalid parameter #{key}|] + InternalE msg -> ErrorResponse INTERNAL_ERROR msg + BackupE appId reason -> ErrorResponse BACKUP_ERROR [i|Backup failed for #{appId}: #{reason}|] + BackupPassInvalidE -> ErrorResponse BACKUP_ERROR [i|Password provided for backups is invalid|] + OpenSslE cert ec stdout' stderr' -> + ErrorResponse OPENSSL_ERROR [i|OPENSSL ERROR: #{cert} - #{show ec <> "\n" <> stdout' <> "\n" <> stderr'}|] + +data ErrorCode = + PRODUCT_KEY_ERROR + | REGISTRATION_ERROR + | AGENT_UPDATE_ERROR + | DATABASE_ERROR + | WIFI_ERROR + | APPMGR_CONFIG_ERROR + | APPMGR_PARSE_ERROR + | APPMGR_ERROR + | AVAHI_ERROR + | REGISTRY_ERROR + | APP_NOT_INSTALLED + | APP_NOT_CONFIGURED + | APP_ACTION_FORBIDDEN + | SELF_UPDATE_ERROR + | INVALID_SSH_KEY + | INVALID_SSID + | INVALID_PSK + | INVALID_REQUEST + | INVALID_HEADER + | MISSING_HEADER + | METRICS_ERROR + | RESOURCE_NOT_FOUND + | UPDATE_IN_PROGRESS + | INTERNAL_ERROR + | SYNCHRONIZATION_ERROR + | BACKUP_ERROR + | OPENSSL_ERROR + deriving (Eq, Show) +instance ToJSON ErrorCode where + toJSON = String . show + +data ErrorResponse = ErrorResponse + { errorCode :: ErrorCode + , errorMessage :: Text + } + deriving (Eq, Show) +instance ToJSON ErrorResponse where + toJSON ErrorResponse {..} = object ["code" .= errorCode, "message" .= errorMessage] +instance ToContent ErrorResponse where + toContent = toContent . toJSON +instance ToTypedContent ErrorResponse where + toTypedContent = toTypedContent . toJSON + +instance ToTypedContent S9Error where + toTypedContent = toTypedContent . toJSON . toError +instance ToContent S9Error where + toContent = toContent . toJSON . toError + +toStatus :: S9Error -> Status +toStatus = \case + ProductKeyE -> status401 + RegistrationE -> status403 + NoCompliantAgentE _ -> status404 + PersistentE _ -> status500 + WifiConnectionE -> status500 + AppMgrParseE _ _ _ -> status500 + AppMgrInvalidConfigE _ -> status400 + AppMgrE _ _ -> status500 + AppMgrVersionE _ _ -> status500 + AvahiE _ -> status500 + MetricE _ -> status500 + RegistryUnreachableE -> status500 + RegistryParseE _ _ -> status500 + AppNotInstalledE _ -> status404 + AppStateActionIncompatibleE _ status action -> case (status, action) of + (AppStatusAppMgr Dead , _ ) -> status500 + (AppStatusAppMgr Removing , _ ) -> status403 + (AppStatusAppMgr Running , Start) -> status200 + (AppStatusAppMgr Running , Stop ) -> status200 + (AppStatusAppMgr Restarting , Start) -> status200 + (AppStatusAppMgr Restarting , Stop ) -> status200 + (AppStatusAppMgr Stopped , Start) -> status200 + (AppStatusAppMgr Stopped , Stop ) -> status200 + (AppStatusAppMgr Paused , _ ) -> status403 + (AppStatusTmp NeedsConfig, Start) -> status403 + (AppStatusTmp NeedsConfig, Stop ) -> status200 + (AppStatusTmp _ , _ ) -> status403 + UpdateSelfE _ _ -> status500 + InvalidSshKeyE _ -> status400 + InvalidSsidE -> status400 + InvalidPskE -> status400 + InvalidRequestE _ _ -> status400 + NotFoundE _ _ -> status404 + UpdateInProgressE -> status403 + TemporarilyForbiddenE _ _ _ -> status403 + TorServiceTimeoutE -> status500 + NginxSslE _ -> status500 + WifiOrphaningE -> status403 + ManifestParseE _ _ -> status500 + NoPasswordExistsE -> status401 + MissingFileE _ -> status500 + ClientCryptographyE _ -> status401 + TTLExpirationE _ -> status403 + EnvironmentValE _ -> status500 + HostsParamsE _ -> status400 + BackupE _ _ -> status500 + BackupPassInvalidE -> status403 + InternalE _ -> status500 + OpenSslE _ _ _ _ -> status500 + +handleS9ErrC :: (MonadHandler m, MonadLogger m) => ErrorC S9Error m a -> m a +handleS9ErrC action = + let handleIt e = do + $logError $ show e + toStatus >>= sendResponseStatus $ e + in runErrorC action handleIt pure + +handleS9ErrT :: (MonadHandler m, MonadLogger m) => S9ErrT m a -> m a +handleS9ErrT action = do + runExceptT action >>= \case + Left e -> do + $logError $ show e + toStatus >>= sendResponseStatus $ e + Right a -> pure a + +runS9ErrT :: MonadIO m => S9ErrT m a -> m (Either S9Error a) +runS9ErrT = runExceptT + +logS9ErrT :: (MonadIO m, MonadLogger m) => S9ErrT m a -> m (Maybe a) +logS9ErrT x = runS9ErrT x >>= \case + Left e -> do + $logError $ show e + pure Nothing + Right a -> pure $ Just a + +handleS9ErrNuclear :: MonadIO m => S9ErrT m a -> m a +handleS9ErrNuclear action = runExceptT action >>= \case + Left e -> throwIO e + Right a -> pure a + +orThrowM :: Has (Error e) sig m => m (Maybe a) -> e -> m a +orThrowM action e = action >>= maybe (throwError e) pure +{-# INLINE orThrowM #-} + +orThrowPure :: Has (Error e) sig m => Maybe a -> e -> m a +orThrowPure thing e = maybe (throwError e) pure thing +{-# INLINE orThrowPure #-} + diff --git a/agent/src/Lib/External/AppManifest.hs b/agent/src/Lib/External/AppManifest.hs new file mode 100644 index 000000000..b35dccfeb --- /dev/null +++ b/agent/src/Lib/External/AppManifest.hs @@ -0,0 +1,100 @@ +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} +module Lib.External.AppManifest where + +import Startlude hiding ( ask ) + +import Control.Effect.Reader.Labelled +import Data.Aeson +import Data.Singletons.TypeLits +import qualified Data.HashMap.Strict as HM +import qualified Data.Yaml as Yaml +import Exinst + +import Lib.Error +import Lib.SystemPaths +import Lib.Types.Core +import Lib.Types.Emver +import Lib.Types.Emver.Orphans ( ) +import Control.Monad.Fail ( MonadFail(fail) ) + +data ImageType = ImageTypeTar + deriving (Eq, Show) + +instance FromJSON ImageType where + parseJSON = withText "Image Type" $ \case + "tar" -> pure ImageTypeTar + wat -> fail $ "Unknown Image Type: " <> toS wat + +data OnionVersion = OnionV2 | OnionV3 + deriving (Eq, Ord, Show) + +instance FromJSON OnionVersion where + parseJSON = withText "Onion Version" $ \case + "v2" -> pure OnionV2 + "v3" -> pure OnionV3 + wat -> fail $ "Unknown Onion Version: " <> toS wat + +data AssetMapping = AssetMapping + { assetMappingSource :: FilePath + , assetMappingDest :: FilePath + , assetMappingOverwrite :: Bool + } + deriving (Eq, Show) + +instance FromJSON AssetMapping where + parseJSON = withObject "Asset Mapping" $ \o -> do + assetMappingSource <- o .: "src" + assetMappingDest <- o .: "dst" + assetMappingOverwrite <- o .: "overwrite" + pure $ AssetMapping { .. } + +data AppManifest (n :: Nat) where + AppManifestV0 ::{ appManifestV0Id :: AppId + , appManifestV0Version :: Version + , appManifestV0Title :: Text + , appManifestV0DescShort :: Text + , appManifestV0DescLong :: Text + , appManifestV0ReleaseNotes :: Text + , appManifestV0PortMapping :: HM.HashMap Word16 Word16 + , appManifestV0ImageType :: ImageType + , appManifestV0Mount :: FilePath + , appManifestV0Assets :: [AssetMapping] + , appManifestV0OnionVersion :: OnionVersion + , appManifestV0Dependencies :: HM.HashMap AppId VersionRange + } -> AppManifest 0 + +instance FromJSON (Some1 AppManifest) where + parseJSON = withObject "App Manifest" $ \o -> do + o .: "compat" >>= \case + ("v0" :: Text) -> Some1 (SNat @0) <$> parseJSON (Object o) + compat -> fail $ "Unknown Manifest Version: " <> toS compat + +instance FromJSON (AppManifest 0) where + parseJSON = withObject "App Manifest V0" $ \o -> do + appManifestV0Id <- o .: "id" + appManifestV0Version <- o .: "version" + appManifestV0Title <- o .: "title" + appManifestV0DescShort <- o .: "description" >>= (.: "short") + appManifestV0DescLong <- o .: "description" >>= (.: "long") + appManifestV0ReleaseNotes <- o .: "release-notes" + appManifestV0PortMapping <- o .: "ports" >>= fmap HM.fromList . traverse parsePortMapping + appManifestV0ImageType <- o .: "image" >>= (.: "type") + appManifestV0Mount <- o .: "mount" + appManifestV0Assets <- o .: "assets" >>= traverse parseJSON + appManifestV0OnionVersion <- o .: "hidden-service-version" + appManifestV0Dependencies <- o .:? "dependencies" .!= HM.empty >>= traverse parseDepInfo + pure $ AppManifestV0 { .. } + where + parsePortMapping = withObject "Port Mapping" $ \o -> liftA2 (,) (o .: "tor") (o .: "internal") + parseDepInfo = withObject "Dep Info" $ (.: "version") + +getAppManifest :: (MonadIO m, HasFilesystemBase sig m) => AppId -> S9ErrT m (Maybe (Some1 AppManifest)) +getAppManifest appId = do + base <- ask @"filesystemBase" + ExceptT $ first (ManifestParseE appId) <$> liftIO + (Yaml.decodeFileEither . toS $ (appMgrAppPath appId <> "manifest.yaml") `relativeTo` base) + +uiAvailable :: AppManifest n -> Bool +uiAvailable = \case + AppManifestV0 { appManifestV0PortMapping } -> elem 80 (HM.keys appManifestV0PortMapping) diff --git a/agent/src/Lib/External/AppMgr.hs b/agent/src/Lib/External/AppMgr.hs new file mode 100644 index 000000000..da3ad3054 --- /dev/null +++ b/agent/src/Lib/External/AppMgr.hs @@ -0,0 +1,291 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE GADTs #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TupleSections #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeFamilies #-} + +module Lib.External.AppMgr where + +import Startlude hiding ( hPutStrLn + , toS + ) + +import Control.Monad.Fail +import Data.Aeson +import qualified Data.ByteString as BS +import qualified Data.ByteString.Lazy as LBS +import qualified Data.HashMap.Strict as HM +import Data.String.Interpolate.IsString +import Data.Text ( unpack ) +import qualified Data.Yaml as Yaml +import Exinst +import Numeric.Natural +import System.IO.Error +import System.Process +import System.Process.Typed hiding ( createPipe ) + +import Lib.Error +import Lib.SystemPaths +import Lib.Types.Core +import Lib.Types.NetAddress +import Lib.Types.Emver +import qualified Data.ByteString.Char8 as B8 +import qualified Data.Attoparsec.Text as Atto + +readProcessWithExitCode' :: MonadIO m => String -> [String] -> ByteString -> m (ExitCode, ByteString, ByteString) +readProcessWithExitCode' a b c = liftIO $ do + let pc = + setStdin (byteStringInput $ LBS.fromStrict c) + $ setStderr byteStringOutput + $ setEnvInherit + $ setStdout byteStringOutput + $ (System.Process.Typed.proc a b) + withProcessWait pc $ \process -> atomically $ liftA3 (,,) + (waitExitCodeSTM process) + (fmap LBS.toStrict $ getStdout process) + (fmap LBS.toStrict $ getStderr process) + +readProcessInheritStderr :: MonadIO m => String -> [String] -> ByteString -> m (ExitCode, ByteString) +readProcessInheritStderr a b c = liftIO $ do + let pc = + setStdin (byteStringInput $ LBS.fromStrict c) + $ setStderr inherit + $ setEnvInherit + $ setStdout byteStringOutput + $ (System.Process.Typed.proc a b) + withProcessWait pc + $ \process -> atomically $ liftA2 (,) (waitExitCodeSTM process) (fmap LBS.toStrict $ getStdout process) + +torRepair :: MonadIO m => m ExitCode +torRepair = liftIO $ system "appmgr tor repair" + +getConfigurationAndSpec :: MonadIO m => AppId -> S9ErrT m Text +getConfigurationAndSpec appId = fmap decodeUtf8 $ do + (ec, out) <- readProcessInheritStderr "appmgr" ["info", show appId, "-C", "--json"] "" + case ec of + ExitSuccess -> pure out + ExitFailure n -> throwE $ AppMgrE [i|info #{appId} -C \--json|] n + +getAppMgrVersion :: MonadIO m => S9ErrT m Version +getAppMgrVersion = do + (code, out) <- liftIO $ readProcessInheritStderr "appmgr" ["semver"] "" + case code of + ExitSuccess -> case hush $ Atto.parseOnly parseVersion $ decodeUtf8 out of + Nothing -> throwE $ AppMgrParseE "semver" "" (B8.unpack out) + Just av -> pure av + ExitFailure n -> throwE $ AppMgrE "semver" n + +installNewAppMgr :: MonadIO m => VersionRange -> S9ErrT m Version +installNewAppMgr avs = do + getAppMgrVersion >>= \case + Version (0, 1, 0, _) -> void $ readProcessInheritStderr "appmgr" ["self-update", "=0.1.1"] "" + _ -> pure () + (ec, _) <- readProcessInheritStderr "appmgr" ["self-update", show avs] "" + case ec of + ExitSuccess -> getAppMgrVersion + ExitFailure n -> throwE $ AppMgrE [i|self-update #{avs}|] n + +torShow :: MonadIO m => AppId -> S9ErrT m (Maybe Text) +torShow appId = do + (ec, out) <- liftIO $ readProcessInheritStderr "appmgr" ["tor", "show", show appId] "" + case ec of + ExitSuccess -> pure $ Just (decodeUtf8 out) + ExitFailure n -> case n of + 6 -> pure Nothing + n' -> throwE $ AppMgrE "tor show" n' + +getAppLogs :: MonadIO m => AppId -> m Text +getAppLogs appId = liftIO $ do + (pipeRead, pipeWrite) <- createPipe + (_, _, _, handleProcess) <- createProcess (System.Process.proc "appmgr" ["logs", "--tail", "40", show appId]) + { std_out = UseHandle pipeWrite + , std_err = UseHandle pipeWrite + } + void $ waitForProcess handleProcess + content <- BS.hGetContents pipeRead + pure $ decodeUtf8 content + +notifications :: MonadIO m => AppId -> S9ErrT m [AppMgrNotif] +notifications appId = do + (ec, bs) <- readProcessInheritStderr "appmgr" ["notifications", show appId, "--json"] "" + case ec of + ExitSuccess -> case eitherDecodeStrict bs of + Left e -> throwE $ AppMgrParseE "notifications" (decodeUtf8 bs) e + Right x -> pure x + ExitFailure n -> throwE $ AppMgrE [i|notifications #{appId} \--json|] n + +stats :: MonadIO m => AppId -> S9ErrT m Text +stats appId = fmap decodeUtf8 $ do + (ec, out) <- readProcessInheritStderr "appmgr" ["stats", show appId, "--json"] "" + case ec of + ExitSuccess -> pure out + ExitFailure n -> throwE $ AppMgrE [i|stats #{appId} \--json|] n + +torReload :: MonadIO m => S9ErrT m () +torReload = do + (ec, _) <- readProcessInheritStderr "appmgr" ["tor", "reload"] "" + case ec of + ExitSuccess -> pure () + ExitFailure n -> throwE $ AppMgrE "tor reload" n + +diskShow :: MonadIO m => S9ErrT m [DiskInfo] +diskShow = do + (ec, bs) <- readProcessInheritStderr "appmgr" ["disks", "show", "--json"] "" + case ec of + ExitSuccess -> case eitherDecodeStrict bs of + Left e -> throwE $ AppMgrParseE "disk info" (decodeUtf8 bs) e + Right x -> pure x + ExitFailure n -> throwE $ AppMgrE "disk show" n + +backupCreate :: MonadIO m => Maybe Text -> AppId -> FilePath -> S9ErrT m () +backupCreate password appId disk = do + let args = case password of + Nothing -> ["backup", "create", "-p", "\"\"", show appId, disk] + Just p' -> ["backup", "create", "-p", unpack p', show appId, disk] + (ec, _) <- readProcessInheritStderr "appmgr" args "" + case ec of + ExitFailure n | n < 0 -> throwE $ BackupE appId "Interrupted" + | n == 7 -> throwE $ BackupPassInvalidE + | otherwise -> throwE $ AppMgrE "backup" n + ExitSuccess -> pure () + +backupRestore :: MonadIO m => Maybe Text -> AppId -> FilePath -> S9ErrT m () +backupRestore password appId disk = do + let args = case password of + Nothing -> ["backup", "restore", "-p", "\"\"", show appId, disk] + Just p' -> ["backup", "restore", "-p", unpack p', show appId, disk] + (ec, _) <- readProcessInheritStderr "appmgr" args "" + case ec of + ExitFailure n | n < 0 -> throwE $ BackupE appId "Interrupted" + | n == 7 -> throwE $ BackupPassInvalidE + | otherwise -> throwE $ AppMgrE "backup" n + ExitSuccess -> pure () + +data AppMgrLevel = + INFO + | SUCCESS + | WARN + | ERROR + deriving (Eq, Show, Read) + +instance FromJSON AppMgrLevel where + parseJSON = withText "Level" $ \t -> case readMaybe t of + Nothing -> fail $ "Invalid Level: " <> unpack t + Just x -> pure x + +data AppMgrNotif = AppMgrNotif + { appMgrNotifTime :: Rational + , appMgrNotifLevel :: AppMgrLevel + , appMgrNotifCode :: Natural + , appMgrNotifTitle :: Text + , appMgrNotifMessage :: Text + } + deriving (Eq, Show) + +instance FromJSON AppMgrNotif where + parseJSON = withObject "appmgr notification res" $ \o -> do + appMgrNotifTime <- o .: "time" + appMgrNotifLevel <- o .: "level" + appMgrNotifCode <- o .: "code" + appMgrNotifTitle <- o .: "title" + appMgrNotifMessage <- o .: "message" + pure AppMgrNotif { .. } + +type Manifest = Some1 ManifestStructure +data ManifestStructure (n :: Nat) where + ManifestV0 ::{ manifestTitle :: Text + } -> ManifestStructure 0 + +instance FromJSON (Some1 ManifestStructure) where + parseJSON = withObject "app manifest" $ \o -> do + o .: "compat" >>= \t -> case (t :: Text) of + "v0" -> some1 <$> parseJSON @(ManifestStructure 0) (Object o) + other -> fail $ "Unknown Compat Version" <> unpack other + +instance FromJSON (ManifestStructure 0) where + parseJSON = withObject "manifest v0" $ \o -> do + manifestTitle <- o .: "title" + pure $ ManifestV0 { .. } + +torrcBase :: SystemPath +torrcBase = "/root/appmgr/tor/torrc" + +torServicesYaml :: SystemPath +torServicesYaml = "/root/appmgr/tor/services.yaml" + +appMgrAppsDirectory :: SystemPath +appMgrAppsDirectory = "/root/appmgr/apps" + +readLanIps :: (MonadReader Text m, MonadIO m) => S9ErrT m (HM.HashMap AppId LanIp) +readLanIps = do + base <- ask + contents <- + liftIO $ (Just <$> readFile (unpack $ torServicesYaml `relativeTo` base)) `catch` \(e :: IOException) -> + if isDoesNotExistError e then pure Nothing else throwIO e + case contents of + Nothing -> pure HM.empty + Just contents' -> do + val <- case Yaml.decodeEither' (encodeUtf8 contents') of + Left e -> throwE $ AppMgrParseE "lan ip" contents' (show e) + Right a -> pure a + case Yaml.parseEither parser val of + Left e -> throwE $ AppMgrParseE "lan ip" (show val) e + Right a -> pure a + where + parser :: Value -> Yaml.Parser (HM.HashMap AppId LanIp) + parser = withObject "Tor Services Yaml" $ \o -> do + hm <- o .: "map" + let (services, infos) = unzip $ HM.toList hm + ips <- traverse ipParser infos + pure . HM.fromList $ zip (AppId <$> services) ips + ipParser :: Value -> Yaml.Parser LanIp + ipParser = withObject "Service Info" $ \o -> do + ip <- o .: "ip" + pure $ LanIp ip + +data DiskInfo = DiskInfo + { diskInfoDescription :: Maybe Text + , diskInfoSize :: Text + , diskInfoLogicalName :: FilePath + , diskInfoPartitions :: [PartitionInfo] + } + deriving (Eq, Show) +instance FromJSON DiskInfo where + parseJSON = withObject "Disk Info" $ \o -> do + diskInfoDescription <- o .: "description" + diskInfoSize <- o .: "size" + diskInfoLogicalName <- o .: "logicalname" + diskInfoPartitions <- o .: "partitions" + pure DiskInfo { .. } +instance ToJSON DiskInfo where + toJSON DiskInfo {..} = object + [ "description" .= diskInfoDescription + , "size" .= diskInfoSize + , "logicalname" .= diskInfoLogicalName + , "partitions" .= diskInfoPartitions + ] + +data PartitionInfo = PartitionInfo + { partitionInfoLogicalName :: FilePath + , partitionInfoSize :: Maybe Text + , partitionInfoIsMounted :: Bool + , partitionInfoLabel :: Maybe Text + } + deriving (Eq, Show) +instance FromJSON PartitionInfo where + parseJSON = withObject "Partition Info" $ \o -> do + partitionInfoLogicalName <- o .: "logicalname" + partitionInfoSize <- o .: "size" + partitionInfoIsMounted <- o .: "is-mounted" + partitionInfoLabel <- o .: "label" + pure PartitionInfo { .. } +instance ToJSON PartitionInfo where + toJSON PartitionInfo {..} = object + [ "logicalname" .= partitionInfoLogicalName + , "size" .= partitionInfoSize + , "isMounted" .= partitionInfoIsMounted + , "label" .= partitionInfoLabel + ] diff --git a/agent/src/Lib/External/Metrics/Df.hs b/agent/src/Lib/External/Metrics/Df.hs new file mode 100644 index 000000000..cc9bd8d53 --- /dev/null +++ b/agent/src/Lib/External/Metrics/Df.hs @@ -0,0 +1,40 @@ +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE RecordWildCards #-} + +module Lib.External.Metrics.Df where + +import Startlude + +import System.Process + +import Lib.Error +import Lib.External.Metrics.Types + +-- Disk :: Size Used Avail Use% +data DfMetrics = DfMetrics + { metricDiskSize :: Maybe Gigabytes + , metricDiskUsed :: Maybe Gigabytes + , metricDiskAvailable :: Maybe Gigabytes + , metricDiskUsedPercentage :: Maybe Percentage + } deriving (Eq, Show) + +getDfMetrics :: MonadIO m => S9ErrT m DfMetrics +getDfMetrics = fmap parseDf runDf + +runDf :: MonadIO m => S9ErrT m Text +runDf = do + (_, output, err') <- liftIO $ readProcessWithExitCode "df" ["-a", "/"] "" + unless (null err') $ throwE . MetricE $ "df command failed with " <> toS err' + pure $ toS output + +parseDf :: Text -> DfMetrics +parseDf t = + let dataLine = words <$> lines t `atMay` 1 + metricDiskSize = fmap oneKBlocksToGigs . readMaybe =<< (`atMay` 1) =<< dataLine + metricDiskUsed = fmap oneKBlocksToGigs . readMaybe =<< (`atMay` 2) =<< dataLine + metricDiskAvailable = fmap oneKBlocksToGigs . readMaybe =<< (`atMay` 3) =<< dataLine + metricDiskUsedPercentage = readMaybe =<< (`atMay` 4) =<< dataLine + in DfMetrics { .. } + +oneKBlocksToGigs :: Double -> Gigabytes +oneKBlocksToGigs s = Gigabytes $ s / 1e6 diff --git a/agent/src/Lib/External/Metrics/Iotop.hs b/agent/src/Lib/External/Metrics/Iotop.hs new file mode 100644 index 000000000..306892b78 --- /dev/null +++ b/agent/src/Lib/External/Metrics/Iotop.hs @@ -0,0 +1,58 @@ +{-# LANGUAGE FlexibleContexts #-} + +module Lib.External.Metrics.Iotop where + +import Startlude + +import qualified Data.HashMap.Strict as HM +import System.Process + +import Lib.Error +import Lib.External.Metrics.Types +import Lib.External.Util +import Util.Text + +data IotopMetrics = IotopMetrics + { metricCurrentRead :: Maybe BytesPerSecond + , metricCurrentWrite :: Maybe BytesPerSecond + , metricTotalRead :: Maybe BytesPerSecond + , metricTotalWrite :: Maybe BytesPerSecond + } deriving (Eq, Show) + +getIotopMetrics :: MonadIO m => S9ErrT m IotopMetrics +getIotopMetrics = fmap parseIotop runIotop + +runIotop :: MonadIO m => S9ErrT m Text +runIotop = do + (_, output, err') <- liftIO $ readProcessWithExitCode "iotop" ["-bn1"] "" + unless (null err') $ throwE . MetricE $ "iotop command failed with " <> toS err' + pure $ toS output + +parseIotop :: Text -> IotopMetrics +parseIotop t = IotopMetrics { metricCurrentRead = BytesPerSecond . fst <$> current + , metricCurrentWrite = BytesPerSecond . snd <$> current + , metricTotalRead = BytesPerSecond . fst <$> total + , metricTotalWrite = BytesPerSecond . snd <$> total + } + where + iotopLines = lines t + current = getHeaderAggregates currentHeader iotopLines + total = getHeaderAggregates totalHeader iotopLines + +currentHeader :: Text +currentHeader = "Current" + +totalHeader :: Text +totalHeader = "Total" + +getHeaderAggregates :: Text -> [Text] -> Maybe (Double, Double) +getHeaderAggregates header iotopLines = do + actualLine <- getLineByHeader header iotopLines + let stats = HM.fromList . getStats $ actualLine + r <- HM.lookup "READ" stats + w <- HM.lookup "WRITE" stats + pure (r, w) +getStats :: Text -> [(Text, Double)] +getStats = mapMaybe (parseToPair readMaybe . words . gsub ":" "") . getMatches statRegex + where statRegex = "([\x21-\x7E]+)[ ]{0,}:[ ]{1,}([\x21-\x7E]+)" + diff --git a/agent/src/Lib/External/Metrics/ProcDev.hs b/agent/src/Lib/External/Metrics/ProcDev.hs new file mode 100644 index 000000000..aba8910c8 --- /dev/null +++ b/agent/src/Lib/External/Metrics/ProcDev.hs @@ -0,0 +1,118 @@ +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TupleSections #-} + +module Lib.External.Metrics.ProcDev where + +import Startlude + +import Lib.External.Util +import Lib.External.Metrics.Types +import Lib.Error +import Util.Text + +data ProcDevMetrics = ProcDevMetrics + { metricRBytesPerSecond :: Maybe BytesPerSecond + , metricRPacketsPerSecond :: Maybe BytesPerSecond + , metricRErrorsPerSecond :: Maybe BytesPerSecond + , metricTBytesPerSecond :: Maybe BytesPerSecond + , metricTPacketsPerSecond :: Maybe BytesPerSecond + , metricTErrorsPerSecond :: Maybe BytesPerSecond + , metricFrom :: UTCTime -- time range across which the above rates were calculated + , metricTo :: UTCTime + } deriving Show + +getProcDevMetrics :: MonadIO m + => (UTCTime, ProcDevMomentStats) + -> S9ErrT m (UTCTime, ProcDevMomentStats, ProcDevMetrics) +getProcDevMetrics oldMomentStats = do + newMomentStats@(newTime, newStats) <- newProcDevMomentStats + let metrics = computeProcDevMetrics oldMomentStats newMomentStats + pure (newTime, newStats, metrics) + +newProcDevMomentStats :: MonadIO m => S9ErrT m (UTCTime, ProcDevMomentStats) +newProcDevMomentStats = do + res <- runProcDev + now <- liftIO getCurrentTime + pure $ parseProcDev now res + +runProcDev :: MonadIO m => S9ErrT m Text +runProcDev = do + eOutput <- liftIO . try @SomeException $ readFile "/proc/net/dev" + case eOutput of + Left e -> throwE . MetricE $ "ProcDev proc file could not be read with " <> show e + Right output -> pure . toS $ output + +parseProcDev :: UTCTime -> Text -> (UTCTime, ProcDevMomentStats) +parseProcDev now t = do + (now, ) . fold . foreach filteredLines $ \l -> + let ws = words l + procDevRBytes = ws `atMay` 1 >>= readMaybe + procDevRPackets = ws `atMay` 2 >>= readMaybe + procDevRErrors = ws `atMay` 3 >>= readMaybe + + procDevTBytes = ws `atMay` 9 >>= readMaybe + procDevTPackets = ws `atMay` 10 >>= readMaybe + procDevTErrors = ws `atMay` 11 >>= readMaybe + in ProcDevMomentStats { .. } + where + wlanRegex = "^[ ]{0,}wlan0" + ethRegex = "^[ ]{0,}eth0" + + isWlan = containsMatch wlanRegex + isEth = containsMatch ethRegex + + filteredLines = filter (liftA2 (||) isWlan isEth) $ lines t + +computeProcDevMetrics :: (UTCTime, ProcDevMomentStats) -> (UTCTime, ProcDevMomentStats) -> ProcDevMetrics +computeProcDevMetrics (fromTime, fromStats) (toTime, toStats) = + let metricRBytesPerSecond = getMetric (procDevRBytes fromStats, fromTime) (procDevRBytes toStats, toTime) + metricRPacketsPerSecond = getMetric (procDevRPackets fromStats, fromTime) (procDevRPackets toStats, toTime) + metricRErrorsPerSecond = getMetric (procDevRErrors fromStats, fromTime) (procDevRErrors toStats, toTime) + metricTBytesPerSecond = getMetric (procDevTBytes fromStats, fromTime) (procDevTBytes toStats, toTime) + metricTPacketsPerSecond = getMetric (procDevTPackets fromStats, fromTime) (procDevTPackets toStats, toTime) + metricTErrorsPerSecond = getMetric (procDevTErrors fromStats, fromTime) (procDevTErrors toStats, toTime) + metricFrom = fromTime + metricTo = toTime + in ProcDevMetrics { .. } + +getMetric :: (Maybe Integer, UTCTime) -> (Maybe Integer, UTCTime) -> Maybe BytesPerSecond +getMetric (Just fromMetric, fromTime) (Just toMetric, toTime) = Just . BytesPerSecond $ if timeDiff == 0 + then 0 + else truncateTo @Double 10 . fromRational $ (fromIntegral $ toMetric - fromMetric) / (toRational timeDiff) + where timeDiff = diffUTCTime toTime fromTime +getMetric _ _ = Nothing + +data ProcDevMomentStats = ProcDevMomentStats + { procDevRBytes :: Maybe Integer + , procDevRPackets :: Maybe Integer + , procDevRErrors :: Maybe Integer + , procDevTBytes :: Maybe Integer + , procDevTPackets :: Maybe Integer + , procDevTErrors :: Maybe Integer + } deriving (Eq, Show) + +(?+?) :: Num a => Maybe a -> Maybe a -> Maybe a +(?+?) Nothing Nothing = Nothing +(?+?) m1 m2 = Just $ fromMaybe 0 m1 + fromMaybe 0 m2 + +(?-?) :: Num a => Maybe a -> Maybe a -> Maybe a +(?-?) Nothing Nothing = Nothing +(?-?) m1 m2 = Just $ fromMaybe 0 m1 - fromMaybe 0 m2 + +instance Semigroup ProcDevMomentStats where + m1 <> m2 = ProcDevMomentStats rBytes rPackets rErrors tBytes tPackets tErrors + where + rBytes = procDevRBytes m1 ?+? procDevRBytes m2 + rPackets = procDevRPackets m1 ?+? procDevRPackets m2 + rErrors = procDevRErrors m1 ?+? procDevRErrors m2 + tBytes = procDevTBytes m1 ?+? procDevTBytes m2 + tPackets = procDevTPackets m1 ?+? procDevTPackets m2 + tErrors = procDevTErrors m1 ?+? procDevTErrors m2 +instance Monoid ProcDevMomentStats where + mempty = ProcDevMomentStats (Just 0) (Just 0) (Just 0) (Just 0) (Just 0) (Just 0) + +getDefaultProcDevMetrics :: MonadIO m => m ProcDevMetrics +getDefaultProcDevMetrics = do + now <- liftIO getCurrentTime + pure $ ProcDevMetrics Nothing Nothing Nothing Nothing Nothing Nothing now now diff --git a/agent/src/Lib/External/Metrics/Temperature.hs b/agent/src/Lib/External/Metrics/Temperature.hs new file mode 100644 index 000000000..7a5664da6 --- /dev/null +++ b/agent/src/Lib/External/Metrics/Temperature.hs @@ -0,0 +1,22 @@ +module Lib.External.Metrics.Temperature where + +import Startlude + +import qualified Data.Attoparsec.Text as A +import qualified Data.Text as T +import Lib.External.Metrics.Types +import System.Process.Text + +-- Pi4 Specific +getTemperature :: MonadIO m => m (Maybe Celsius) +getTemperature = liftIO $ do + (ec, tempString, errlog) <- readProcessWithExitCode "/opt/vc/bin/vcgencmd" ["measure_temp"] "" + unless (T.null errlog) $ putStrLn errlog + case ec of + ExitFailure _ -> pure Nothing + ExitSuccess -> case A.parse tempParser tempString of + A.Done _ c -> pure $ Just c + _ -> pure Nothing + +tempParser :: A.Parser Celsius +tempParser = A.asciiCI "temp=" *> fmap Celsius A.double <* "'C" <* A.endOfLine diff --git a/agent/src/Lib/External/Metrics/Top.hs b/agent/src/Lib/External/Metrics/Top.hs new file mode 100644 index 000000000..115421fd2 --- /dev/null +++ b/agent/src/Lib/External/Metrics/Top.hs @@ -0,0 +1,114 @@ +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} + +module Lib.External.Metrics.Top where + +import Startlude + +import qualified Data.HashMap.Strict as HM +import System.Process + +import Lib.Error +import Lib.External.Metrics.Types +import Lib.External.Util +import Util.Text + +data TopMetrics = TopMetrics + { metricMemPercentageUsed :: Maybe Percentage + , metricMemFree :: Maybe MebiBytes + , metricMemUsed :: Maybe MebiBytes + + , metricSwapTotal :: Maybe MebiBytes + , metricSwapUsed :: Maybe MebiBytes + + , metricCpuIdle :: Maybe Percentage + , metricCpuUserSpace :: Maybe Percentage + , metricWait :: Maybe Percentage + , metricCpuPercentageUsed :: Maybe Percentage + } deriving (Eq, Show) + +getTopMetrics :: MonadIO m => S9ErrT m TopMetrics +getTopMetrics = fmap parseTop runTop + +runTop :: MonadIO m => S9ErrT m Text +runTop = do + (_, output, err') <- liftIO $ readProcessWithExitCode "top" ["-bn1"] "" + unless (null err') $ throwE . MetricE $ "top command failed with " <> toS err' + pure $ toS output + +parseTop :: Text -> TopMetrics +parseTop t = TopMetrics { metricMemPercentageUsed = getMemPercentageUsed <$> mem + , metricMemFree = MebiBytes . memFree <$> mem + , metricMemUsed = MebiBytes . memUsed <$> mem + , metricSwapTotal = MebiBytes . memTotal <$> swapS + , metricSwapUsed = MebiBytes . memUsed <$> swapS + , metricCpuIdle = cpuId <$> cpu + , metricCpuUserSpace = cpuUs <$> cpu + , metricWait = cpuWa <$> cpu + , metricCpuPercentageUsed = getCpuPercentageUsed <$> cpu + } + where + topLines = lines t + cpu = getCpuAggregates topLines + mem = getMemAggregates memHeader topLines + swapS = getMemAggregates swapHeader topLines + +memHeader :: Text +memHeader = "MiB Mem" + +swapHeader :: Text +swapHeader = "MiB Swap" + +data TopMemAggregates = TopMemAggregates + { memTotal :: Double + , memFree :: Double + , memUsed :: Double + } deriving (Eq, Show) + +cpuHeader :: Text +cpuHeader = "%Cpu(s)" + +data TopCpuAggregates = TopCpuAggregates + { cpuUs :: Percentage + , cpuSy :: Percentage + , cpuNi :: Percentage + , cpuId :: Percentage + , cpuWa :: Percentage + , cpuHi :: Percentage + , cpuSi :: Percentage + , cpuSt :: Percentage + } deriving (Eq, Show) + +getMemAggregates :: Text -> [Text] -> Maybe TopMemAggregates +getMemAggregates header topRes = do + memLine <- getLineByHeader header topRes + let stats = HM.fromList $ getStats readMaybe memLine + memTotal <- HM.lookup "total" stats + memFree <- HM.lookup "free" stats + memUsed <- HM.lookup "used" stats + pure TopMemAggregates { .. } + +getCpuAggregates :: [Text] -> Maybe TopCpuAggregates +getCpuAggregates topRes = do + memLine <- getLineByHeader cpuHeader topRes + let stats = HM.fromList $ getStats (mkPercentage <=< readMaybe) memLine + cpuUs <- HM.lookup "us" stats + cpuSy <- HM.lookup "sy" stats + cpuNi <- HM.lookup "ni" stats + cpuId <- HM.lookup "id" stats + cpuWa <- HM.lookup "wa" stats + cpuHi <- HM.lookup "hi" stats + cpuSi <- HM.lookup "si" stats + cpuSt <- HM.lookup "st" stats + pure TopCpuAggregates { .. } + +getCpuPercentageUsed :: TopCpuAggregates -> Percentage +getCpuPercentageUsed TopCpuAggregates {..} = Percentage (100 - unPercent cpuId) + +getMemPercentageUsed :: TopMemAggregates -> Percentage +getMemPercentageUsed TopMemAggregates {..} = Percentage . truncateTo @Double 10 . (* 100) $ memUsed / memTotal + +getStats :: (Text -> Maybe a) -> Text -> [(Text, a)] +getStats parseData = mapMaybe (parseToPair parseData) . fmap (words . toS) . getMatches statRegex . toS + where statRegex = "[0-9]+(.[0-9][0-9]?)? ([\x21-\x7E][^(,|.)]+)" diff --git a/agent/src/Lib/External/Metrics/Types.hs b/agent/src/Lib/External/Metrics/Types.hs new file mode 100644 index 000000000..acb2840d7 --- /dev/null +++ b/agent/src/Lib/External/Metrics/Types.hs @@ -0,0 +1,89 @@ +module Lib.External.Metrics.Types where + +import Startlude + +import Data.Aeson +import qualified GHC.Read ( Read(..) + , readsPrec + ) +import qualified GHC.Show ( Show(..) ) + +import Lib.External.Util + +class Metric a where + mUnit :: a -> Text + mValue :: a -> Double + +toMetricJson :: Metric a => a -> Value +toMetricJson x = object ["value" .= truncateToS 2 (mValue x), "unit" .= mUnit x] +toMetricShow :: Metric a => a -> String +toMetricShow a = show (mValue a) <> " " <> toS (mUnit a) + +newtype Percentage = Percentage { unPercent :: Double } deriving (Eq) +instance Metric Percentage where + mValue (Percentage p) = p + mUnit _ = "%" +instance ToJSON Percentage where + toJSON = toMetricJson +instance Show Percentage where + show = toMetricShow +instance Read Percentage where + readsPrec _ s = case reverse s of + '%' : rest -> case GHC.Read.readsPrec 0 (reverse rest) of + [(result, "")] -> case mkPercentage result of + Just p -> [(p, "")] + _ -> [] + _ -> [] + _ -> [] + +mkPercentage :: Double -> Maybe Percentage +mkPercentage s | 0 <= s && s <= 100 = Just $ Percentage s + | otherwise = Nothing + +newtype MebiBytes = MebiBytes Double + deriving stock Eq + deriving newtype Num + +instance Metric MebiBytes where + mValue (MebiBytes p) = p + mUnit _ = "MiB" +instance ToJSON MebiBytes where + toJSON = toMetricJson +instance Show MebiBytes where + show = toMetricShow + +newtype BytesPerSecond = BytesPerSecond Double + deriving stock Eq + deriving newtype Num + +instance Metric BytesPerSecond where + mValue (BytesPerSecond p) = p + mUnit _ = "B/s" +instance ToJSON BytesPerSecond where + toJSON = toMetricJson +instance Show BytesPerSecond where + show = toMetricShow + +newtype Gigabytes = Gigabytes Double + deriving stock Eq + deriving newtype Num + +instance Metric Gigabytes where + mValue (Gigabytes p) = p + mUnit _ = "Gb" +instance ToJSON Gigabytes where + toJSON = toMetricJson +instance Show Gigabytes where + show = toMetricShow + +newtype Celsius = Celsius { unCelsius :: Double } + deriving stock Eq + deriving newtype Num + +instance Metric Celsius where + mValue (Celsius c) = c + mUnit _ = "°C" +instance ToJSON Celsius where + toJSON = toMetricJson +instance Show Celsius where + show = toMetricShow diff --git a/agent/src/Lib/External/Registry.hs b/agent/src/Lib/External/Registry.hs new file mode 100644 index 000000000..c1225d04d --- /dev/null +++ b/agent/src/Lib/External/Registry.hs @@ -0,0 +1,196 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE UndecidableInstances #-} +module Lib.External.Registry where + +import Startlude hiding ( (<.>) + , Reader + , ask + , runReader + ) +import Startlude.ByteStream hiding ( count ) + +import Conduit +import Control.Algebra +import Control.Effect.Lift +import Control.Effect.Error +import Control.Effect.Reader.Labelled +import Control.Monad.Fail ( fail ) +import Control.Monad.Trans.Resource +import qualified Data.ByteString.Streaming.HTTP + as S +import qualified Data.HashMap.Strict as HM +import Data.Maybe ( fromJust ) +import Data.String.Interpolate.IsString +import Data.Yaml +import Network.HTTP.Client.Conduit ( Manager ) +import Network.HTTP.Simple +import System.Directory +import System.Process + +import Constants +import Lib.Algebra.State.RegistryUrl +import Lib.Error +import Lib.SystemPaths +import Lib.Types.Core +import Lib.Types.Emver +import Lib.Types.ServerApp + +newtype AppManifestRes = AppManifestRes + { storeApps :: [StoreApp] } deriving (Eq, Show) + +newtype RegistryVersionForSpecRes = RegistryVersionForSpecRes + { registryVersionForSpec :: Maybe Version } deriving (Eq, Show) + +instance FromJSON RegistryVersionForSpecRes where + parseJSON Null = pure (RegistryVersionForSpecRes Nothing) + parseJSON (Object o) = do + registryVersionForSpec <- o .:? "version" + pure . RegistryVersionForSpecRes $ registryVersionForSpec + parseJSON _ = fail "expected null or object" + +tmpAgentFileName :: Text +tmpAgentFileName = "agent-tmp" + +agentFileName :: Text +agentFileName = "agent" + +userAgentHeader :: ByteString +userAgentHeader = [i|EmbassyOS/#{agentVersion}|] + +setUserAgent :: Request -> Request +setUserAgent = setRequestHeader "User-Agent" [userAgentHeader] + +getYoungAgentBinary :: (Has RegistryUrl sig m, HasLabelled "filesystemBase" (Reader Text) sig m, Has (Lift IO) sig m) + => VersionRange + -> m () +getYoungAgentBinary avs = do + base <- ask @"filesystemBase" + let tmpAgentPath = toS $ executablePath `relativeTo` base tmpAgentFileName + tmpExists <- sendIO $ doesPathExist tmpAgentPath + when tmpExists $ sendIO $ removeFile tmpAgentPath + url <- registryAppAgentUrl avs + request <- sendIO . fmap setUserAgent . parseRequestThrow $ toS url + sendIO $ runConduitRes $ httpSource request getResponseBody .| sinkFile tmpAgentPath + sendIO $ void $ readProcessWithExitCode "chmod" ["700", tmpAgentPath] "" + +getLifelineBinary :: (Has RegistryUrl sig m, HasFilesystemBase sig m, MonadIO m) => VersionRange -> m () +getLifelineBinary avs = do + base <- ask @"filesystemBase" + let lifelineTarget = lifelineBinaryPath `relativeTo` base + url <- registryUrl + request <- liftIO . fmap setUserAgent . parseRequestThrow $ toS (url "sys/lifeline?spec=" <> show avs) + liftIO $ runConduitRes $ httpSource request getResponseBody .| sinkFile (toS lifelineTarget) + liftIO $ void $ readProcessWithExitCode "chmod" ["700", toS lifelineTarget] "" + +getAppManifest :: (MonadIO m, Has (Error S9Error) sig m, Has RegistryUrl sig m) => m AppManifestRes +getAppManifest = do + manifestPath <- registryManifestUrl + req <- liftIO $ fmap setUserAgent . parseRequestThrow $ toS manifestPath + val <- (liftIO . try @SomeException) (httpBS req) >>= \case + Left _ -> throwError RegistryUnreachableE + Right a -> pure $ getResponseBody a + parseBsManifest val >>= \case + Left e -> throwError $ RegistryParseE manifestPath . toS $ e + Right a -> pure a + + +getStoreAppInfo :: (MonadIO m, Has RegistryUrl sig m, Has (Error S9Error) sig m) => AppId -> m (Maybe StoreApp) +getStoreAppInfo name = find ((== name) . storeAppId) . storeApps <$> getAppManifest + +parseBsManifest :: Has RegistryUrl sig m => ByteString -> m (Either String AppManifestRes) +parseBsManifest bs = do + parseRegistryRes' <- parseRegistryRes + pure $ parseEither parseRegistryRes' . fromJust . decodeThrow $ bs + +parseRegistryRes :: Has RegistryUrl sig m => m (Value -> Parser AppManifestRes) +parseRegistryRes = do + parseAppData' <- parseAppData + pure $ withObject "app registry response" $ \obj -> do + let keyVals = HM.toList obj + let mManifestApps = fmap (\(k, v) -> parseMaybe (parseAppData' (AppId k)) v) keyVals + pure . AppManifestRes . catMaybes $ mManifestApps + +registryUrl :: (Has RegistryUrl sig m) => m Text +registryUrl = maybe "https://registry.start9labs.com:443" show <$> getRegistryUrl + +registryManifestUrl :: Has RegistryUrl sig m => m Text +registryManifestUrl = registryUrl <&> ( "apps") + +registryAppAgentUrl :: Has RegistryUrl sig m => VersionRange -> m Text +registryAppAgentUrl avs = registryUrl <&> ( ("sys/agent?spec=" <> show avs)) + +registryCheckVersionForSpecUrl :: Has RegistryUrl sig m => VersionRange -> m Text +registryCheckVersionForSpecUrl avs = registryUrl <&> ( ("sys/version/agent?spec=" <> show avs)) + +parseAppData :: Has RegistryUrl sig m => m (AppId -> Value -> Parser StoreApp) +parseAppData = do + url <- registryUrl + pure $ \storeAppId -> withObject "appmgr app data" $ \ad -> do + storeAppTitle <- ad .: "title" + storeAppDescriptionShort <- ad .: "description" >>= (.: "short") + storeAppDescriptionLong <- ad .: "description" >>= (.: "long") + storeAppIconUrl <- fmap (\typ -> toS $ url "icons" show storeAppId <.> typ) $ ad .: "icon-type" + storeAppVersions <- ad .: "version-info" >>= \case + [] -> fail "No Valid Version Info" + (x : xs) -> pure $ x :| xs + pure StoreApp { .. } + +getAppVersionForSpec :: (Has RegistryUrl sig m, Has (Error S9Error) sig m, MonadIO m) + => AppId + -> VersionRange + -> m Version +getAppVersionForSpec appId spec = do + let path = "apps/version" show appId <> "?spec=" <> show spec + val <- registryRequest path + parseOrThrow path val $ withObject "version response" $ \o -> do + v <- o .: "version" + pure v + +getLatestAgentVersion :: (Has RegistryUrl sig m, Has (Error S9Error) sig m, MonadIO m) => m Version +getLatestAgentVersion = do + val <- registryRequest agentVersionPath + parseOrThrow agentVersionPath val $ withObject "version response" $ \o -> do + v <- o .: "version" + pure v + where agentVersionPath = "sys/version/agent" + +getLatestAgentVersionForSpec :: (Has RegistryUrl sig m, Has (Lift IO) sig m, Has (Error S9Error) sig m) + => VersionRange + -> m (Maybe Version) +getLatestAgentVersionForSpec avs = do + url <- registryUrl + req <- sendIO $ fmap setUserAgent . parseRequestThrow . toS $ url agentVersionPath + res <- fmap (first jsonToS9Exception) . sendIO $ try @JSONException $ parseRes req + case res of + Left e -> throwError e + Right a -> pure a + where + parseRes r = registryVersionForSpec . getResponseBody <$> httpJSON r + agentVersionPath = "sys/version/agent?spec=" <> show avs + jsonToS9Exception = RegistryParseE (toS agentVersionPath) . show + +getAmbassadorUiForSpec :: (Has RegistryUrl sig m, HasLabelled "httpManager" (Reader Manager) sig m, MonadResource m) + => VersionRange + -> ByteStream m () +getAmbassadorUiForSpec avs = do + url <- lift registryUrl + manager <- lift $ ask @"httpManager" + let target = url "sys/ambassador-ui.tar.gz?spec=" <> show avs + req <- liftResourceT $ lift $ fmap setUserAgent . parseRequestThrow . toS $ target + resp <- lift $ S.http req manager + getResponseBody resp + +registryRequest :: (Has RegistryUrl sig m, Has (Error S9Error) sig m, MonadIO m) => Text -> m Value +registryRequest path = do + url <- registryUrl + req <- liftIO . fmap setUserAgent . parseRequestThrow . toS $ url path + (liftIO . try @SomeException) (httpJSON req) >>= \case + Left _ -> throwError RegistryUnreachableE + Right a -> pure $ getResponseBody a + +parseOrThrow :: (Has (Error S9Error) sig m) => Text -> a -> (a -> Parser b) -> m b +parseOrThrow path val parser = case parseEither parser val of + Left e -> throwError (RegistryParseE path $ toS e) + Right a -> pure a diff --git a/agent/src/Lib/External/Specs/CPU.hs b/agent/src/Lib/External/Specs/CPU.hs new file mode 100644 index 000000000..afd2d1930 --- /dev/null +++ b/agent/src/Lib/External/Specs/CPU.hs @@ -0,0 +1,32 @@ +{-# LANGUAGE QuasiQuotes #-} +module Lib.External.Specs.CPU + ( getCpuInfo + ) +where + +import Startlude +import Protolude.Unsafe ( unsafeFromJust ) + +import Data.String.Interpolate.IsString +import System.Process + +import Lib.External.Specs.Common + +lscpu :: IO Text +lscpu = toS <$> readProcess "lscpu" [] "" + +getModelName :: Text -> Text +getModelName = unsafeFromJust . getSpec "Model name" + +getCores :: Text -> Text +getCores = unsafeFromJust . getSpec "CPU(s)" + +getClockSpeed :: Text -> Text +getClockSpeed = (<> "MHz") . unsafeFromJust . getSpec "CPU max" + +getCpuInfo :: IO Text +getCpuInfo = lscpu <&> do + model <- getModelName + cores <- getCores + clock <- getClockSpeed + pure $ [i|#{model}: #{cores} cores @ #{clock}|] diff --git a/agent/src/Lib/External/Specs/Common.hs b/agent/src/Lib/External/Specs/Common.hs new file mode 100644 index 000000000..df68ab37d --- /dev/null +++ b/agent/src/Lib/External/Specs/Common.hs @@ -0,0 +1,13 @@ +module Lib.External.Specs.Common where + +import Startlude + +import qualified Data.Text as T + +getSpec :: Text -> Text -> Maybe Text +getSpec spec output = do + mi <- modelItem + fmap T.strip $ T.splitOn ":" mi `atMay` 1 + where + items = lines output + modelItem = find (spec `T.isPrefixOf`) items diff --git a/agent/src/Lib/External/Specs/Memory.hs b/agent/src/Lib/External/Specs/Memory.hs new file mode 100644 index 000000000..0bfc20a17 --- /dev/null +++ b/agent/src/Lib/External/Specs/Memory.hs @@ -0,0 +1,12 @@ +module Lib.External.Specs.Memory where + +import Startlude +import Protolude.Unsafe ( unsafeFromJust ) + +import Lib.External.Specs.Common + +catMem :: IO Text +catMem = readFile "/proc/meminfo" + +getMem :: IO Text +getMem = unsafeFromJust . getSpec "MemTotal" <$> catMem diff --git a/agent/src/Lib/External/Util.hs b/agent/src/Lib/External/Util.hs new file mode 100644 index 000000000..17a8ce12b --- /dev/null +++ b/agent/src/Lib/External/Util.hs @@ -0,0 +1,17 @@ +{-# LANGUAGE TupleSections #-} +module Lib.External.Util where + +import Startlude + +getLineByHeader :: Text -> [Text] -> Maybe Text +getLineByHeader t = find (isPrefixOf (toS t :: String) . toS) + +truncateTo :: RealFloat a => Int -> a -> Double +truncateTo n x = realToFrac $ fromIntegral (floor (x * t) :: Integer) / t where t = 10 ^ n + +truncateToS :: Int -> Double -> Double +truncateToS n x = fromIntegral (floor (x * t) :: Integer) / t where t = 10 ^ n + +parseToPair :: (Text -> Maybe a) -> [Text] -> Maybe (Text, a) +parseToPair parse [k, v] = ((k, ) <$> parse v) <|> ((v, ) <$> parse k) +parseToPair _ _ = Nothing diff --git a/agent/src/Lib/External/WpaSupplicant.hs b/agent/src/Lib/External/WpaSupplicant.hs new file mode 100644 index 000000000..1e961eab2 --- /dev/null +++ b/agent/src/Lib/External/WpaSupplicant.hs @@ -0,0 +1,102 @@ +{-# LANGUAGE QuasiQuotes #-} +module Lib.External.WpaSupplicant where + +import Startlude + +import Data.Bitraversable +import qualified Data.HashMap.Strict as HM +import Data.String.Interpolate.IsString +import qualified Data.Text as T +import System.Process +import Control.Concurrent.Async.Lifted + as LAsync +import Control.Monad.Trans.Control ( MonadBaseControl ) + +runWlan0 :: ReaderT Text m a -> m a +runWlan0 = flip runReaderT "wlan0" + +isConnectedToEthernet :: MonadIO m => m Bool +isConnectedToEthernet = do + liftIO $ not . null . filter (T.isInfixOf "inet ") . lines . toS <$> readProcess "ifconfig" ["eth0"] "" + +-- There be bug here: if you're in the US, and add a network in Sweden, you'll set your wpa supplicant to be looking for networks in Sweden. +-- so you won't be autoconnecting to anything in the US till you add another US guy. +addNetwork :: MonadIO m => Text -> Text -> Text -> ReaderT Interface m () +addNetwork ssid psk country = do + interface <- ask + networkId <- checkNetwork ssid >>= \case + -- If the network already exists, we will update its password. + Just nId -> do + void . liftIO $ readProcess "wpa_cli" ["-i", toS interface, "new_password", toS nId, [i|"#{psk}"|]] "" + pure nId + + -- Otherwise we create the network in the wpa_supplicant + Nothing -> do + nId <- liftIO $ T.strip . toS <$> readProcess "wpa_cli" ["-i", toS interface, "add_network"] "" + void . liftIO $ readProcess "wpa_cli" + ["-i", toS interface, "set_network", toS nId, "ssid", [i|"#{ssid}"|]] + "" + void . liftIO $ readProcess "wpa_cli" ["-i", toS interface, "set_network", toS nId, "psk", [i|"#{psk}"|]] "" + void . liftIO $ readProcess "wpa_cli" ["-i", toS interface, "set_network", toS nId, "scan_ssid", "1"] "" + pure nId + + void . liftIO $ readProcess "wpa_cli" ["-i", toS interface, "set", "country", toS country] "" + void . liftIO $ readProcess "wpa_cli" ["-i", toS interface, "enable_network", toS networkId] "" + void . liftIO $ readProcess "wpa_cli" ["-i", toS interface, "save_config"] "" + +removeNetwork :: MonadIO m => Text -> ReaderT Interface m () +removeNetwork ssid = do + interface <- ask + checkNetwork ssid >>= \case + Nothing -> pure () + Just x -> liftIO $ do + void $ readProcess "wpa_cli" ["-i", toS interface, "remove_network", [i|#{x}|]] "" + void $ readProcess "wpa_cli" ["-i", toS interface, "save_config"] "" + void $ readProcess "wpa_cli" ["-i", toS interface, "reconfigure"] "" + +listNetworks :: MonadIO m => ReaderT Interface m [Text] +listNetworks = do + interface <- ask + liftIO $ mapMaybe (`atMay` 1) . drop 1 . fmap (T.splitOn "\t") . lines . toS <$> readProcess + "wpa_cli" + ["-i", toS interface, "list_networks"] + "" + +type Interface = Text +getCurrentNetwork :: (MonadBaseControl IO m, MonadIO m) => ReaderT Interface m (Maybe Text) +getCurrentNetwork = do + interface <- ask @Text + liftIO $ guarded (/= "") . T.init . toS <$> readProcess "iwgetid" [toS interface, "--raw"] "" + +selectNetwork :: (MonadBaseControl IO m, MonadIO m) => Text -> Text -> ReaderT Interface m Bool +selectNetwork ssid country = checkNetwork ssid >>= \case + Nothing -> putStrLn @Text "SSID Not Found" *> pure False + Just nId -> do + interface <- ask + void . liftIO $ readProcess "wpa_cli" ["-i", toS interface, "select_network", toS nId] "" + void . liftIO $ readProcess "wpa_cli" ["-i", toS interface, "set", "country", toS country] "" + void . liftIO $ readProcess "wpa_cli" ["-i", toS interface, "save_config"] "" + mNew <- join . hush <$> LAsync.race (liftIO $ threadDelay 20_000_000) + (runMaybeT . asum $ repeat (MaybeT getCurrentNetwork)) + listNetworks >>= \nets -> + for_ nets $ \net -> liftIO $ readProcess "wpa_cli" ["-i", toS interface, "enable_network", toS net] "" + pure $ case mNew of + Nothing -> False + Just newCurrent -> newCurrent == ssid + +type NetworkId = Text +checkNetwork :: MonadIO m => Text -> ReaderT Interface m (Maybe NetworkId) +checkNetwork ssid = do + interface <- ask + HM.lookup ssid + . HM.fromList + . mapMaybe (bisequenceA . ((`atMay` 1) &&& (`atMay` 0))) + . drop 1 + . fmap (T.splitOn "\t") + . lines + . toS + <$> liftIO (readProcess "wpa_cli" ["-i", toS interface, "list_networks"] "") + +-- TODO: Live Testing in GHCI +runWpa :: ReaderT Interface m a -> m a +runWpa = flip runReaderT "wlp5s0" diff --git a/agent/src/Lib/IconCache.hs b/agent/src/Lib/IconCache.hs new file mode 100644 index 000000000..a0685aafb --- /dev/null +++ b/agent/src/Lib/IconCache.hs @@ -0,0 +1,94 @@ +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TemplateHaskell #-} +module Lib.IconCache where + +import Startlude hiding ( ask + , catch + , throwIO + , Reader + ) + +import Conduit +import Control.Concurrent.STM.TVar +import Control.Effect.Reader.Labelled +import Crypto.Hash +import qualified Data.Conduit.Binary as CB +import qualified Data.HashMap.Strict as HM +import Data.String.Interpolate.IsString +import Network.HTTP.Simple +import System.Directory +import System.FilePath +import System.IO.Error +import UnliftIO.Exception + +import Lib.Error +import Lib.SystemPaths hiding ( () ) +import Lib.Types.Core +import Database.Persist.Sql ( runSqlPool + , repsert + , ConnectionPool + , delete + ) +import Model +import Control.Effect.Error +import Crypto.Hash.Conduit ( hashFile ) +import Util.File ( removeFileIfExists ) + +type HasIconTags sig m = HasLabelled "iconTagCache" (Reader (TVar (HM.HashMap AppId (Digest MD5)))) sig m + +findIcon :: (HasFilesystemBase sig m, MonadIO m) => AppId -> m (Maybe FilePath) +findIcon appId = do + bp <- toS <$> getAbsoluteLocationFor iconBasePath + icons <- liftIO $ (listDirectory bp) `catch` \(e :: IOException) -> + if isDoesNotExistError e then createDirectoryIfMissing True bp *> pure [] else throwIO e + pure $ (bp ) <$> find ((show appId ==) . takeBaseName) icons + +saveIcon :: ( HasFilesystemBase sig m + , HasIconTags sig m + , HasLabelled "databaseConnection" (Reader ConnectionPool) sig m + , Has (Error S9Error) sig m + , MonadIO m + ) + => String + -> m () +saveIcon url = do + bp <- toS <$> getAbsoluteLocationFor iconBasePath + req <- case parseRequest url of + Nothing -> throwError $ RegistryParseE (toS url) "invalid url" + Just x -> pure x + let saveAction = runConduit $ httpSource req getResponseBody .| CB.sinkFileCautious (bp takeFileName url) + liftIO $ runResourceT $ saveAction `catch` \(e :: IOException) -> if isDoesNotExistError e + then do + liftIO $ createDirectoryIfMissing True bp + saveAction + else throwIO e + tag <- hashFile (bp takeFileName url) + saveTag (AppId . toS $ takeFileName url) tag + +saveTag :: (HasIconTags sig m, HasLabelled "databaseConnection" (Reader ConnectionPool) sig m, MonadIO m) + => AppId + -> Digest MD5 + -> m () +saveTag appId tag = do + cache <- ask @"iconTagCache" + pool <- ask @"databaseConnection" + liftIO $ runSqlPool (repsert (IconDigestKey appId) (IconDigest tag)) pool `catch` \(e :: SomeException) -> + putStrLn @Text [i|Icon Cache Insertion Failed!: #{appId}, #{tag}, #{e}|] + liftIO $ atomically $ modifyTVar cache $ HM.insert appId tag + +clearIcon :: ( MonadIO m + , HasLabelled "iconTagCache" (Reader (TVar (HM.HashMap AppId v0))) sig m + , HasLabelled "databaseConnection" (Reader ConnectionPool) sig m + , HasLabelled "filesystemBase" (Reader Text) sig m + ) + => AppId + -> m () +clearIcon appId = do + db <- ask @"databaseConnection" + iconTags <- ask @"iconTagCache" + liftIO . atomically $ modifyTVar iconTags (HM.delete appId) + liftIO $ runSqlPool (delete (IconDigestKey appId)) db + findIcon appId >>= \case + Nothing -> pure () + Just x -> removeFileIfExists x diff --git a/agent/src/Lib/Metrics.hs b/agent/src/Lib/Metrics.hs new file mode 100644 index 000000000..21eac32db --- /dev/null +++ b/agent/src/Lib/Metrics.hs @@ -0,0 +1,158 @@ +{-# LANGUAGE RecordWildCards #-} + +module Lib.Metrics where + +import Startlude + +import Data.Aeson +import Data.IORef + +import Foundation +import Lib.Error +import Lib.External.Metrics.Df +import Lib.External.Metrics.Iotop +import Lib.External.Metrics.ProcDev +import Lib.External.Metrics.Temperature +import Lib.External.Metrics.Top +import Lib.External.Metrics.Types + +-- will throw only if one of '$ top', '$ iotop, '$ procDev' commands fails on the command line. +getServerMetrics :: MonadIO m => AgentCtx -> S9ErrT m ServerMetrics +getServerMetrics agentCtx = do + temp <- getTemperature + df <- getDfMetrics + top <- getTopMetrics + iotop <- getIotopMetrics + (_, _, procDev) <- liftIO . readIORef . appProcDevMomentCache $ agentCtx + + pure $ fromCommandLineMetrics (temp, df, top, iotop, procDev) + +data ServerMetrics = ServerMetrics + { serverMetricsTemperature :: Maybe Celsius + + , serverMetricMemPercentageUsed :: Maybe Percentage + , serverMetricMemFree :: Maybe MebiBytes + , serverMetricMemUsed :: Maybe MebiBytes + , serverMetricSwapTotal :: Maybe MebiBytes + , serverMetricSwapUsed :: Maybe MebiBytes + + , serverMetricCpuIdle :: Maybe Percentage + , serverMetricCpuUserSpace :: Maybe Percentage + , serverMetricWait :: Maybe Percentage + , serverMetricCpuPercentageUsed :: Maybe Percentage + + , serverMetricCurrentRead :: Maybe BytesPerSecond + , serverMetricCurrentWrite :: Maybe BytesPerSecond + , serverMetricTotalRead :: Maybe BytesPerSecond + , serverMetricTotalWrite :: Maybe BytesPerSecond + + , serverMetricRBytesPerSecond :: Maybe BytesPerSecond + , serverMetricRPacketsPerSecond :: Maybe BytesPerSecond + , serverMetricRErrorsPerSecond :: Maybe BytesPerSecond + , serverMetricTBytesPerSecond :: Maybe BytesPerSecond + , serverMetricTPacketsPerSecond :: Maybe BytesPerSecond + , serverMetricTErrorsPerSecond :: Maybe BytesPerSecond + + , serverMetricDiskSize :: Maybe Gigabytes + , serverMetricDiskUsed :: Maybe Gigabytes + , serverMetricDiskAvailable :: Maybe Gigabytes + , serverMetricDiskUsedPercentage :: Maybe Percentage + } deriving (Eq, Show) + +instance ToJSON ServerMetrics where + toJSON ServerMetrics {..} = object + [ "GENERAL" .= object ["Temperature" .= serverMetricsTemperature] + , "MEMORY" .= object + [ "Percent Used" .= serverMetricMemPercentageUsed + , "Free" .= serverMetricMemFree + , "Used" .= serverMetricMemUsed + , "Swap Used" .= serverMetricSwapUsed + , "Swap Free" .= serverMetricSwapTotal ?-? serverMetricSwapUsed + ] + , "CPU" .= object + [ "Percent Used" .= serverMetricCpuPercentageUsed + , "Percent Free" .= serverMetricCpuIdle + , "Percent User Space" .= serverMetricCpuUserSpace + , "Percent IO Wait" .= serverMetricWait + ] + , "DISK" .= object + [ "Percent Used" .= serverMetricDiskUsedPercentage + , "Size" .= serverMetricDiskSize + , "Used" .= serverMetricDiskUsed + , "Free" .= serverMetricDiskAvailable + , "Total Read" .= serverMetricTotalRead + , "Total Write" .= serverMetricTotalWrite + , "Current Read" .= serverMetricCurrentRead + , "Current Write" .= serverMetricCurrentWrite + ] + , "NETWORK" .= object + [ "Bytes Received" .= serverMetricRBytesPerSecond + , "Packets Received" .= serverMetricRPacketsPerSecond + , "Errors Received" .= serverMetricRErrorsPerSecond + , "Bytes Transmitted" .= serverMetricTBytesPerSecond + , "Packets Transmitted" .= serverMetricTPacketsPerSecond + , "Errors Transmitted" .= serverMetricTErrorsPerSecond + ] + ] + toEncoding ServerMetrics {..} = (pairs . fold) + [ "GENERAL" .= object ["Temperature" .= serverMetricsTemperature] + , "MEMORY" .= object + [ "Percent Used" .= serverMetricMemPercentageUsed + , "Free" .= serverMetricMemFree + , "Used" .= serverMetricMemUsed + , "Swap Used" .= serverMetricSwapUsed + , "Swap Free" .= serverMetricSwapTotal ?-? serverMetricSwapUsed + ] + , "CPU" .= object + [ "Percent Used" .= serverMetricCpuPercentageUsed + , "Percent Free" .= serverMetricCpuIdle + , "Percent User Space" .= serverMetricCpuUserSpace + , "Percent IO Wait" .= serverMetricWait + ] + , "DISK" .= object + [ "Percent Used" .= serverMetricDiskUsedPercentage + , "Size" .= serverMetricDiskSize + , "Used" .= serverMetricDiskUsed + , "Free" .= serverMetricDiskAvailable + , "Total Read" .= serverMetricTotalRead + , "Total Write" .= serverMetricTotalWrite + , "Current Read" .= serverMetricCurrentRead + , "Current Write" .= serverMetricCurrentWrite + ] + , "NETWORK" .= object + [ "Bytes Received" .= serverMetricRBytesPerSecond + , "Packets Received" .= serverMetricRPacketsPerSecond + , "Errors Received" .= serverMetricRErrorsPerSecond + , "Bytes Transmitted" .= serverMetricTBytesPerSecond + , "Packets Transmitted" .= serverMetricTPacketsPerSecond + , "Errors Transmitted" .= serverMetricTErrorsPerSecond + ] + ] + +fromCommandLineMetrics :: (Maybe Celsius, DfMetrics, TopMetrics, IotopMetrics, ProcDevMetrics) -> ServerMetrics +fromCommandLineMetrics (temp, DfMetrics {..}, TopMetrics {..}, IotopMetrics {..}, ProcDevMetrics {..}) = ServerMetrics + { serverMetricsTemperature = temp + , serverMetricMemPercentageUsed = metricMemPercentageUsed + , serverMetricMemFree = metricMemFree + , serverMetricMemUsed = metricMemUsed + , serverMetricSwapTotal = metricSwapTotal + , serverMetricSwapUsed = metricSwapUsed + , serverMetricCpuIdle = metricCpuIdle + , serverMetricCpuUserSpace = metricCpuUserSpace + , serverMetricWait = metricWait + , serverMetricCpuPercentageUsed = metricCpuPercentageUsed + , serverMetricCurrentRead = metricCurrentRead + , serverMetricCurrentWrite = metricCurrentWrite + , serverMetricTotalRead = metricTotalRead + , serverMetricTotalWrite = metricTotalWrite + , serverMetricRBytesPerSecond = metricRBytesPerSecond + , serverMetricRPacketsPerSecond = metricRPacketsPerSecond + , serverMetricRErrorsPerSecond = metricRErrorsPerSecond + , serverMetricTBytesPerSecond = metricTBytesPerSecond + , serverMetricTPacketsPerSecond = metricTPacketsPerSecond + , serverMetricTErrorsPerSecond = metricTErrorsPerSecond + , serverMetricDiskSize = metricDiskSize + , serverMetricDiskUsed = metricDiskUsed + , serverMetricDiskAvailable = metricDiskAvailable + , serverMetricDiskUsedPercentage = metricDiskUsedPercentage + } diff --git a/agent/src/Lib/Migration.hs b/agent/src/Lib/Migration.hs new file mode 100644 index 000000000..f6585c3a8 --- /dev/null +++ b/agent/src/Lib/Migration.hs @@ -0,0 +1,96 @@ +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeApplications #-} + +module Lib.Migration where + +import Data.Aeson +import Data.Aeson.Types +import Data.FileEmbed +import Data.Text ( split + , splitOn + , strip + ) +import Database.Persist.Sql +import Lib.Error +import Lib.Types.Emver +import Model +import Startlude + +ioMigrationDbVersion :: ConnectionPool -> Version -> Version -> IO () +ioMigrationDbVersion dbConn sourceVersion targetVersion = do + putStrLn @Text $ "Executing migrations from " <> show sourceVersion <> " to " <> show targetVersion + runSqlPool (migrateDbVersions sourceVersion targetVersion & handleS9ErrNuclear) dbConn + +getCurrentDbVersion :: MonadIO m => ReaderT SqlBackend m (Maybe Version) +getCurrentDbVersion = + fmap (executedMigrationTgtVersion . entityVal) <$> selectFirst [] [Desc ExecutedMigrationCreatedAt] + +getMigrations :: [MigrationFile] +getMigrations = mapMaybe toMigrationFile $(embedDir "./migrations") + +migrateDbVersions :: MonadIO m => Version -> Version -> S9ErrT (ReaderT SqlBackend m) () +migrateDbVersions sourceVersion targetVersion = case mkMigrationCollection sourceVersion targetVersion getMigrations of + Just (MigrationCollection migrations) -> lift $ traverse executeMigration migrations $> () + Nothing -> + throwE . PersistentE $ "No path of migrations from " <> show sourceVersion <> " to " <> show targetVersion + +executeMigration :: MonadIO m => MigrationFile -> ReaderT SqlBackend m () +executeMigration mf = migrateSql mf >> insertMigration mf $> () + +insertMigration :: MonadIO m => MigrationFile -> ReaderT SqlBackend m (Key ExecutedMigration) +insertMigration (MigrationFile source target _) = do + now <- liftIO getCurrentTime + fmap entityKey . insertEntity $ ExecutedMigration now now source target + +migrateSql :: MonadIO m => MigrationFile -> ReaderT SqlBackend m () +migrateSql MigrationFile { sqlContent } = do + print sqlContent' + traverse_ runIt sqlContent' + where + runIt = liftA2 (*>) (liftIO . putStrLn) $ flip (rawSql @(Single Int)) [] . (<> ";") . strip + sqlContent' = filter (/= "") . fmap strip . split (== ';') $ decodeUtf8 sqlContent + +toMigrationFile :: (FilePath, ByteString) -> Maybe MigrationFile +toMigrationFile (fp, bs) = case splitOn "::" (toS fp) of + [source, target] -> do + sourceVersion <- parseMaybe parseJSON $ String source + targetVersion <- parseMaybe parseJSON $ String target + let sqlContent = bs + pure MigrationFile { .. } + _ -> Nothing + +newtype MigrationCollection = MigrationCollection { unMigrations :: [MigrationFile] } deriving (Eq, Show) +mkMigrationCollection :: Version -> Version -> [MigrationFile] -> Maybe MigrationCollection +mkMigrationCollection source target migrations + | null migrations + = Nothing + | source == target + = Just $ MigrationCollection [] + | otherwise + = let mNext = maximumByMay targetVersion $ filter + (\m -> sourceVersion m == source && targetVersion m > source && targetVersion m <= target) + migrations + in case mNext of + Nothing -> Nothing + Just nextMig -> + MigrationCollection + . (nextMig :) + . unMigrations + <$> mkMigrationCollection (targetVersion nextMig) target migrations + where + maximumByMay :: (Foldable t, Ord b) => (a -> b) -> t a -> Maybe a + maximumByMay f as = + let reducer x acc = case acc of + Nothing -> Just x + Just y -> if f x > f y then Just x else Just y + in foldr reducer Nothing as + +data MigrationFile = MigrationFile + { sourceVersion :: Version + , targetVersion :: Version + , sqlContent :: ByteString + } + deriving (Eq, Show) diff --git a/agent/src/Lib/Notifications.hs b/agent/src/Lib/Notifications.hs new file mode 100644 index 000000000..7e826e1cd --- /dev/null +++ b/agent/src/Lib/Notifications.hs @@ -0,0 +1,109 @@ +{-# LANGUAGE GADTs #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +module Lib.Notifications where + +import Startlude hiding ( get ) + +import Data.String.Interpolate.IsString +import Data.UUID.V4 +import Database.Persist +import Database.Persist.Sql + +import Lib.Error +import Lib.Types.Core +import Lib.Types.Emver +import Model + +emit :: MonadIO m => AppId -> Version -> AgentNotification -> SqlPersistT m (Entity Notification) +emit appId version ty = do + uuid <- liftIO nextRandom + now <- liftIO getCurrentTime + let k = (NotificationKey uuid) + let v = (Notification now Nothing appId version (toCode ty) (toTitle ty) (toMessage appId version ty)) + insertKey k v + putStrLn $ toMessage appId version ty + pure $ Entity k v + +archive :: MonadIO m => [Key Notification] -> SqlPersistT m [Entity Notification] +archive eventIds = do + now <- liftIO getCurrentTime + events <- for eventIds $ flip updateGet [NotificationArchivedAt =. Just now] + pure $ zipWith Entity eventIds events + +data AgentNotification = + InstallSuccess + | InstallFailedGetApp + | InstallFailedAppMgrExitCode Int + | InstallFailedS9Error S9Error + | BackupSucceeded + | BackupFailed S9Error + | RestoreSucceeded + | RestoreFailed S9Error + | RestartFailed S9Error + | DockerFuckening + +-- CODES +-- RULES: +-- The first digit indicates the call to action and the tone of the error code as follows +-- 0: General Information, No Action Required, Neutral Tone +-- 1: Success Message, No Action Required, Positive Tone +-- 2: Warning, Action Possible but NOT Required, Negative Tone +-- 3: Error, Action Required, Negative Tone +-- +-- The second digit indicates where the error was originated from as follows +-- 0: Originates from Agent +-- 1: Originates from App (Not presently used) +-- +-- The remaining section of the code may be as long as you want but must be at least one digit +-- EXAMPLES: +-- 100 +-- |||> Code "0" +-- ||> Originates from Agent +-- |> Success Message +-- +-- 213 +-- |||> Code "3" +-- ||> Originates from App +-- |> Warning Message +-- +toCode :: AgentNotification -> Text +toCode InstallSuccess = "100" +toCode BackupSucceeded = "101" +toCode RestoreSucceeded = "102" +toCode InstallFailedGetApp = "300" +toCode (InstallFailedAppMgrExitCode _) = "301" +toCode DockerFuckening = "302" +toCode (InstallFailedS9Error _) = "303" +toCode (BackupFailed _) = "304" +toCode (RestoreFailed _) = "305" +toCode (RestartFailed _) = "306" + +toTitle :: AgentNotification -> Text +toTitle InstallSuccess = "Install succeeded" +toTitle BackupSucceeded = "Backup succeeded" +toTitle RestoreSucceeded = "Restore succeeded" +toTitle InstallFailedGetApp = "Install failed" +toTitle (InstallFailedAppMgrExitCode _) = "Install failed" +toTitle (InstallFailedS9Error _) = "Install failed" +toTitle (BackupFailed _) = "Backup failed" +toTitle (RestoreFailed _) = "Restore failed" +toTitle (RestartFailed _) = "Restart failed" +toTitle DockerFuckening = "App unstoppable" + +toMessage :: AppId -> Version -> AgentNotification -> Text +toMessage appId version InstallSuccess = [i|Successfully installed #{appId} at version #{version}|] +toMessage appId version n@InstallFailedGetApp = + [i|Failed to install #{appId} at version #{version}, this should be impossible, contact support and give them the code #{toCode n}|] +toMessage appId version n@(InstallFailedAppMgrExitCode ec) + = [i|Failed to install #{appId} at version #{version}, many things could cause this, contact support and give them the code #{toCode n}.#{ec}|] +toMessage appId version n@(InstallFailedS9Error e) + = [i|Failed to install #{appId} at version #{version}, the dependency reverse index could not be updated, contact support and give them the code #{toCode n}.#{errorCode $ toError e}|] +toMessage appId _version DockerFuckening + = [i|Despite attempting to stop #{appId}, it is still running. This is a known issue that can only be solved by restarting the server|] +toMessage appId _version BackupSucceeded = [i|Successfully backed up #{appId}|] +toMessage appId _version RestoreSucceeded = [i|Successfully restored #{appId}|] +toMessage appId _version (BackupFailed reason) = [i|Failed to back up #{appId}: #{errorMessage $ toError reason}|] +toMessage appId _version (RestoreFailed reason) = [i|Failed to restore #{appId}: #{errorMessage $ toError reason}|] +toMessage appId _version (RestartFailed reason) = + [i|Failed to restart #{appId}: #{errorMessage $ toError reason}. Please manually restart|] diff --git a/agent/src/Lib/Password.hs b/agent/src/Lib/Password.hs new file mode 100644 index 000000000..9d3cc6454 --- /dev/null +++ b/agent/src/Lib/Password.hs @@ -0,0 +1,77 @@ +module Lib.Password where + +import Startlude +import Yesod.Auth.Util.PasswordStore ( makePassword + , verifyPassword + , passwordStrength + ) +import qualified Data.ByteString.Char8 as BS + ( pack + , unpack + ) +import Data.Text ( pack + , unpack + ) + +import Model + +-- Root account identifier +rootAccountName :: Text +rootAccountName = "embassy-root" + + +-- | Default strength used for passwords (see "Yesod.Auth.Util.PasswordStore" +-- for details). +defaultStrength :: Int +defaultStrength = 17 + +-- | The type representing account information stored in the database should +-- be an instance of this class. It just provides the getter and setter +-- used by the functions in this module. +class HasPasswordHash account where + getPasswordHash :: account -> Text + setPasswordHash :: Text -> account -> account + + {-# MINIMAL getPasswordHash, setPasswordHash #-} + + +-- | Calculate a new-style password hash using "Yesod.Auth.Util.PasswordStore". +passwordHash :: MonadIO m => Int -> Text -> m Text +passwordHash strength pwd = do + h <- liftIO $ makePassword (BS.pack $ unpack pwd) strength + return $ pack $ BS.unpack h + +-- | Set password for account, using the given strength setting. Use this +-- function, or 'setPassword', to produce a account record containing the +-- hashed password. Unlike previous versions of this module, no separate +-- salt field is required for new passwords (but it may still be required +-- for compatibility while old password hashes remain in the database). +-- +-- This function does not change the database; the calling application +-- is responsible for saving the data which is returned. +setPasswordStrength :: (MonadIO m, HasPasswordHash account) => Int -> Text -> account -> m account +setPasswordStrength strength pwd u = do + hashed <- passwordHash strength pwd + return $ setPasswordHash hashed u + +-- | As 'setPasswordStrength', but using the 'defaultStrength' +setPassword :: (MonadIO m, HasPasswordHash account) => Text -> account -> m account +setPassword = setPasswordStrength defaultStrength + +validatePass :: HasPasswordHash u => u -> Text -> Bool +validatePass account password = do + let h = getPasswordHash account + -- NB plaintext password characters are truncated to 8 bits here, + -- and also in passwordHash above (the hash is already 8 bit). + -- This is for historical compatibility, but in practice it is + -- unlikely to reduce the entropy of most users' alphabets by much. + let hash' = BS.pack $ unpack h + password' = BS.pack $ unpack password + if passwordStrength hash' > 0 + -- Will give >0 for valid hash format, else treat as if wrong password + then verifyPassword password' hash' + else False + +instance HasPasswordHash Account where + getPasswordHash = accountPassword + setPasswordHash h u = u { accountPassword = h } diff --git a/agent/src/Lib/ProductKey.hs b/agent/src/Lib/ProductKey.hs new file mode 100644 index 000000000..729197e9f --- /dev/null +++ b/agent/src/Lib/ProductKey.hs @@ -0,0 +1,12 @@ +module Lib.ProductKey where + +import Startlude +import Protolude.Unsafe ( unsafeHead ) + +import System.FilePath + +productKeyPath :: FilePath -> FilePath +productKeyPath rt = rt "root/agent/product_key" + +getProductKey :: Text -> IO Text +getProductKey rt = unsafeHead . lines <$> readFile (productKeyPath $ toS rt) diff --git a/agent/src/Lib/SelfUpdate.hs b/agent/src/Lib/SelfUpdate.hs new file mode 100644 index 000000000..36ee8d904 --- /dev/null +++ b/agent/src/Lib/SelfUpdate.hs @@ -0,0 +1,226 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TupleSections #-} +module Lib.SelfUpdate where + +import Startlude hiding ( runReader ) + +import Control.Carrier.Error.Either +import Control.Lens +import Data.Aeson +import qualified Data.ByteString.Char8 as B8 +import Data.IORef +import Data.List +import Data.String.Interpolate.IsString +import System.Posix.Files +import System.Process + +import Constants +import Foundation +import Handler.Types.V0.Base +import Lib.Algebra.State.RegistryUrl +import Lib.Error +import Lib.External.Registry +import Lib.Sound as Sound +import Lib.Synchronizers +import Lib.SystemPaths +import Lib.Types.Emver +import Lib.WebServer +import Settings + +youngAgentPort :: Word16 +youngAgentPort = 5960 + +waitForUpdateSignal :: AgentCtx -> IO () +waitForUpdateSignal foundation = do + eNewVersion <- runS9ErrT $ do + spec <- lift . takeMVar . appSelfUpdateSpecification $ foundation + let settings = appSettings foundation + v <- interp settings (getLatestAgentVersionForSpec spec) >>= \case + Nothing -> throwE $ UpdateSelfE GetLatestCompliantVersion "Not Found" + Just v -> pure v + liftIO $ writeIORef (appIsUpdating foundation) (Just v) + updateAgent foundation spec + case eNewVersion of + Right (newVersion, youngAgentProcess) -> do + putStrLn @Text $ "New agent up and running: " <> show newVersion + runReaderT replaceExecutableWithYoungAgent (appSettings foundation) + killYoungAgent youngAgentProcess + shutdownAll [] + Left e@(UpdateSelfE GetYoungAgentBinary _) -> do + logerror e + writeIORef (appIsUpdating foundation) Nothing + waitForNextUpdateSignal + Left e@(UpdateSelfE ShutdownWeb _) -> do + logerror e + writeIORef (appIsUpdating foundation) Nothing + waitForNextUpdateSignal + Left e@(UpdateSelfE StartupYoungAgent _) -> do + logerror e + writeIORef (appIsUpdating foundation) Nothing + waitForNextUpdateSignal + Left e@(UpdateSelfE (PingYoungAgent youngAgentProcess) _) -> do + logerror e + killYoungAgent youngAgentProcess + writeIORef (appIsUpdating foundation) Nothing + waitForNextUpdateSignal + Left e -> do -- unreachable + logerror e + waitForNextUpdateSignal + where + waitForNextUpdateSignal = waitForUpdateSignal foundation + logerror = putStrLn @Text . show + interp s = ExceptT . liftIO . runError . injectFilesystemBaseFromContext s . runRegistryUrlIOC + + +updateAgent :: AgentCtx -> VersionRange -> S9ErrT IO (Version, ProcessHandle) +updateAgent foundation avs = do + -- get and save the binary of the new agent app + putStrLn @Text $ "Acquiring young agent binary for specification: " <> show avs + (tryTo . interp settings . getYoungAgentBinary $ avs) >>= \case + Left e -> throwE $ UpdateSelfE GetYoungAgentBinary (show e) + Right _ -> putStrLn @Text "Succeeded" + + -- start the new agent app. This is non blocking as a success would block indefinitely + startupYoungAgentProcessHandle <- startup 5 + + putStrLn @Text $ "Beginning young agent ping attempts..." + let attemptPing = do + lift (threadDelay delayBetweenAttempts) + tryTo pingYoungAgent >>= \case + Left e -> do + putStrLn @Text (show e) + pure (Left e) + x -> pure x + retryAction attempts attemptPing >>= \case + Left e -> throwE $ UpdateSelfE (PingYoungAgent startupYoungAgentProcessHandle) (show e) + Right av -> putStrLn @Text "Succeeded" >> pure (av, startupYoungAgentProcessHandle) + where + tryTo = lift . try @SomeException + settings = appSettings foundation + attempts = 8 + delayBetweenAttempts = 5 * 1000000 :: Int -- 5 seconds + startup :: Int -> S9ErrT IO ProcessHandle + startup startupAttempts = do + putStrLn @Text $ "Starting up young agent..." + tryTo (runReaderT startupYoungAgent $ appSettings foundation) >>= \case + Left e -> if "busy" `isInfixOf` show e && startupAttempts > 0-- sometimes the file handle hasn't closed yet + then do + putStrLn @Text "agent-tmp busy, reattempting in 500ms" + liftIO (threadDelay 500_000) + startup (startupAttempts - 1) + else do + putStrLn @Text (show e) + throwE $ UpdateSelfE StartupYoungAgent (show e) + Right ph -> putStrLn @Text "Succeeded" >> pure ph + interp s = liftIO . injectFilesystemBaseFromContext s . injectFilesystemBaseFromContext s . runRegistryUrlIOC + + + +retryAction :: Monad m => Integer -> m (Either e a) -> m (Either e a) +retryAction 1 action = action +retryAction maxTries action = do + success <- action + case success of + Right a -> pure $ Right a + Left _ -> retryAction (maxTries - 1) action + +replaceExecutableWithYoungAgent :: (MonadReader AppSettings m, MonadIO m) => m () +replaceExecutableWithYoungAgent = do + rt <- asks appFilesystemBase + let tmpAgent = (executablePath `relativeTo` rt) tmpAgentFileName + let agent = (executablePath `relativeTo` rt) agentFileName + + liftIO $ removeLink (toS agent) + liftIO $ rename (toS tmpAgent) (toS agent) + + +-- We assume that all app versions must listen on the same port. +youngAgentUrl :: Text +youngAgentUrl = "http://localhost:" <> show youngAgentPort + +pingYoungAgent :: IO Version +pingYoungAgent = do + (code, st_out, st_err) <- readProcessWithExitCode "curl" [toS $ toS youngAgentUrl "version"] "" + putStrLn st_out + putStrLn st_err + case code of + ExitSuccess -> case decodeStrict $ B8.pack st_out of + Nothing -> throwIO . InternalS9Error $ "unparseable version: " <> toS st_out + Just (AppVersionRes av) -> pure av + ExitFailure e -> throwIO . InternalS9Error $ "curl failure with exit code: " <> show e + +startupYoungAgent :: (MonadReader AppSettings m, MonadIO m) => m ProcessHandle +startupYoungAgent = do + rt <- asks appFilesystemBase + let cmd = (proc (toS $ (executablePath `relativeTo` rt) tmpAgentFileName) ["--port", show youngAgentPort]) + { create_group = True + } + ph <- liftIO $ view _4 <$> createProcess cmd + liftIO $ threadDelay 1_000_000 -- 1 second + liftIO $ getProcessExitCode ph >>= \case + Nothing -> pure ph + Just e -> throwIO . InternalS9Error $ "young agent exited prematurely with exit code: " <> show e + +killYoungAgent :: ProcessHandle -> IO () +killYoungAgent p = do + mEC <- getProcessExitCode p + case mEC of + Nothing -> interruptProcessGroupOf p + Just _ -> pure () + threadDelay appEndEstimate + where appEndEstimate = 10 * 1000000 :: Int --10 seconds + +runSyncOps :: [SyncOp] -> ReaderT AgentCtx IO [(Bool, Bool)] +runSyncOps syncOps = do + ctx <- ask + let setUpdate b = if b + then liftIO $ writeIORef (appIsUpdating ctx) (Just agentVersion) + else liftIO $ writeIORef (appIsUpdating ctx) Nothing + res <- for syncOps $ \syncOp -> do + shouldRun <- syncOpShouldRun syncOp + putStrLn @Text [i|Sync Op "#{syncOpName syncOp}" should run: #{shouldRun}|] + when shouldRun $ do + putStrLn @Text [i|Running Sync Op: #{syncOpName syncOp}|] + setUpdate True + syncOpRun syncOp + pure $ (syncOpRequiresReboot syncOp, shouldRun) + setUpdate False + pure res + +synchronizeSystemState :: AgentCtx -> Version -> IO () +synchronizeSystemState ctx _version = handle @SomeException cleanup $ flip runReaderT ctx $ do + (restartsAndRuns, mTid) <- case synchronizer of + Synchronizer { synchronizerOperations } -> flip runStateT Nothing $ for synchronizerOperations $ \syncOp -> do + shouldRun <- lift $ syncOpShouldRun syncOp + putStrLn @Text [i|Sync Op "#{syncOpName syncOp}" should run: #{shouldRun}|] + when shouldRun $ do + whenM (isNothing <$> get) $ do + tid <- liftIO . forkIO . forever $ playSong 300 updateInProgress *> threadDelay 20_000_000 + put (Just tid) + putStrLn @Text [i|Running Sync Op: #{syncOpName syncOp}|] + setUpdate True + lift $ syncOpRun syncOp + pure $ (syncOpRequiresReboot syncOp, shouldRun) + case mTid of + Nothing -> pure () + Just tid -> liftIO $ killThread tid + setUpdate False + when (any snd restartsAndRuns) $ liftIO $ playSong 400 marioPowerUp + when (any (uncurry (&&)) restartsAndRuns) $ liftIO do + callCommand "/bin/sync" + callCommand "/sbin/reboot" + where + setUpdate :: MonadIO m => Bool -> m () + setUpdate b = if b + then liftIO $ writeIORef (appIsUpdating ctx) (Just agentVersion) + else liftIO $ writeIORef (appIsUpdating ctx) Nothing + cleanup :: SomeException -> IO () + cleanup e = do + void $ try @SomeException Sound.stop + void $ try @SomeException Sound.unexport + let e' = InternalE $ show e + flip runReaderT ctx $ cantFail $ failUpdate e' + diff --git a/agent/src/Lib/Sound.hs b/agent/src/Lib/Sound.hs new file mode 100644 index 000000000..358836b6f --- /dev/null +++ b/agent/src/Lib/Sound.hs @@ -0,0 +1,248 @@ +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TupleSections #-} +module Lib.Sound where + +import Startlude hiding ( rotate ) + +import Control.Monad.Trans.Cont +import Control.Carrier.Writer.Strict +import System.FileLock + +import Util.Function + +-- General + +rotate :: forall a . (Enum a, Bounded a) => a -> Int -> a +rotate base step = toEnum $ (fromEnum base + step) `mod` size + (fromEnum $ minBound @a) + where size = fromEnum (maxBound @a) - fromEnum (minBound @a) + 1 +{-# INLINE rotate #-} + + +-- Interface + +export :: IO () +export = writeFile "/sys/class/pwm/pwmchip0/export" "0" + +unexport :: IO () +unexport = writeFile "/sys/class/pwm/pwmchip0/unexport" "0" + + +-- Constants + +semitoneK :: Double +semitoneK = 2 ** (1 / 12) +{-# INLINE semitoneK #-} + + +-- Data Types + +data Note = Note Semitone Word8 + deriving (Eq, Show) + +data Semitone = + C + | Db + | D + | Eb + | E + | F + | Gb + | G + | Ab + | A + | Bb + | B + deriving (Eq, Ord, Show, Enum, Bounded) + +newtype Interval = Interval Int deriving newtype (Num) + +data TimeSlice = + Sixteenth + | Eighth + | Quarter + | Half + | Whole + | Triplet TimeSlice + | Dot TimeSlice + | Tie TimeSlice TimeSlice + deriving (Eq, Show) + + +-- Theory Manipulation + +interval :: Interval -> Note -> Note +interval (Interval n) (Note step octave) = + let (o', s') = n `quotRem` 12 + newStep = step `rotate` s' + offset = if + | newStep > step && s' < 0 -> subtract 1 + | newStep < step && s' > 0 -> (+ 1) + | otherwise -> id + in Note newStep (offset $ octave + fromIntegral o') +{-# INLINE interval #-} + +minorThird :: Interval +minorThird = Interval 3 + +majorThird :: Interval +majorThird = Interval 3 + +fourth :: Interval +fourth = Interval 5 + +fifth :: Interval +fifth = Interval 7 + +circleOfFourths :: Note -> [Note] +circleOfFourths = iterate (interval fourth) + +circleOfFifths :: Note -> [Note] +circleOfFifths = iterate (interval fifth) + +-- Theory To Interface Target + +noteFreq :: Note -> Double +noteFreq (Note semi oct) = semitoneK ** (fromIntegral $ fromEnum semi) * c0 * (2 ** fromIntegral oct) + where + a4 = 440 + c0 = a4 / (semitoneK ** 9) / (2 ** 4) + +-- tempo is in quarters per minute +timeSliceToMicro :: Word16 -> TimeSlice -> Int +timeSliceToMicro tempo timeSlice = case timeSlice of + Sixteenth -> uspq `div` 4 + Eighth -> uspq `div` 2 + Quarter -> uspq + Half -> uspq * 2 + Whole -> uspq * 4 + Triplet timeSlice' -> timeSliceToMicro tempo timeSlice' * 2 `div` 3 + Dot timeSlice' -> timeSliceToMicro tempo timeSlice' * 3 `div` 2 + Tie ts1 ts2 -> timeSliceToMicro tempo ts1 + timeSliceToMicro tempo ts2 + where uspq = floor @Double $ 60 / fromIntegral tempo * 1_000_000 + + +-- Player + +periodFile :: FilePath +periodFile = "/sys/class/pwm/pwmchip0/pwm0/period" + +dutyFile :: FilePath +dutyFile = "/sys/class/pwm/pwmchip0/pwm0/duty_cycle" + +switchFile :: FilePath +switchFile = "/sys/class/pwm/pwmchip0/pwm0/enable" + +play :: Note -> IO () +play note' = do + prd' <- readFile periodFile + case prd' of + "0\n" -> writeFile periodFile "1000" + _ -> pure () + let prd = round @_ @Int $ 1 / noteFreq note' * 1_000_000_000 -- pwm needs it in nanos + writeFile dutyFile "0" + writeFile periodFile (show prd) + writeFile dutyFile (show $ prd `div` 2) + writeFile switchFile "1" + +stop :: IO () +stop = writeFile switchFile "0" + +playForDuration :: Note -> Int -> IO () +playForDuration note' duration = handle @SomeException (\e -> stop *> throwIO e) $ do + play note' + threadDelay (floor @Double $ fromIntegral duration * 0.95) + stop + threadDelay (ceiling @Double $ fromIntegral duration * 0.05) + +time :: IO () -> IO (UTCTime, UTCTime) +time action = do + t0 <- getCurrentTime + action + t1 <- getCurrentTime + pure (t0, t1) + +playSong :: Word16 -> Song -> IO () +playSong = flip runCont id .* playSong' +{-# INLINE playSong #-} + +playSongTimed :: Word16 -> Song -> IO (UTCTime, UTCTime) +playSongTimed tempo song = runCont (playSong' tempo song) time +{-# INLINE playSongTimed #-} + +playSong' :: Word16 -> Song -> Cont (IO b) (IO ()) +playSong' tempo song = cont $ \f -> bracket acquire release $ \_ -> f $ do + for_ song $ \(n, ts) -> do + let duration = timeSliceToMicro tempo ts + case n of + Nothing -> threadDelay duration + Just x -> playForDuration x duration + where + soundLock = "/root/agent/sound.lock" + acquire = do + l <- lockFile soundLock Exclusive + export + pure l + release l = do + void $ try @SomeException stop + void $ try @SomeException unexport + unlockFile l + + +-- Songs + +type Song = [(Maybe Note, TimeSlice)] + +marioDeath :: Song +marioDeath = + [ (Just $ Note B 4, Quarter) + , (Just $ Note F 5, Quarter) + , (Nothing , Quarter) + , (Just $ Note F 5, Quarter) + , (Just $ Note F 5, Triplet Half) + , (Just $ Note E 5, Triplet Half) + , (Just $ Note D 5, Triplet Half) + , (Just $ Note C 5, Quarter) + , (Just $ Note E 4, Quarter) + , (Nothing , Quarter) + , (Just $ Note E 4, Quarter) + , (Just $ Note C 4, Half) + ] + +marioPowerUp :: Song +marioPowerUp = + [ (Just $ Note G 4 , Triplet Eighth) + , (Just $ Note B 4 , Triplet Eighth) + , (Just $ Note D 5 , Triplet Eighth) + , (Just $ Note G 5 , Triplet Eighth) + , (Just $ Note B 5 , Triplet Eighth) + , (Just $ Note Ab 4, Triplet Eighth) + , (Just $ Note C 5 , Triplet Eighth) + , (Just $ Note Eb 5, Triplet Eighth) + , (Just $ Note Ab 5, Triplet Eighth) + , (Just $ Note C 5 , Triplet Eighth) + , (Just $ Note Bb 4, Triplet Eighth) + , (Just $ Note D 5 , Triplet Eighth) + , (Just $ Note F 5 , Triplet Eighth) + , (Just $ Note Bb 5, Triplet Eighth) + , (Just $ Note D 6 , Triplet Eighth) + ] + +marioCoin :: Song +marioCoin = [(Just $ Note B 5, Eighth), (Just $ Note E 6, Tie (Dot Quarter) Half)] + +updateInProgress :: Song +updateInProgress = take 6 $ (, Triplet Eighth) . Just <$> circleOfFifths (Note A 3) + +beethoven :: Song +beethoven = run . execWriter $ do + tell $ replicate 3 (Just $ Note E 5, Eighth) + tell $ [(Just $ Note C 5, Half)] + tell $ [(Nothing @Note, Eighth)] + tell $ replicate 3 (Just $ Note D 5, Eighth) + tell $ [(Just $ Note B 5, Half)] + +restoreActionInProgress :: Song +restoreActionInProgress = take 5 $ (, Triplet Eighth) . Just <$> circleOfFourths (Note C 4) + +backupActionInProgress :: [(Maybe Note, TimeSlice)] +backupActionInProgress = reverse restoreActionInProgress diff --git a/agent/src/Lib/Ssh.hs b/agent/src/Lib/Ssh.hs new file mode 100644 index 000000000..9ebbe573b --- /dev/null +++ b/agent/src/Lib/Ssh.hs @@ -0,0 +1,81 @@ +{-# LANGUAGE TupleSections #-} +module Lib.Ssh where + +import Startlude + +import Control.Lens +import Crypto.Hash +import Data.Aeson +import Data.ByteArray hiding ( null + , view + ) +import Data.ByteArray.Encoding +import Data.ByteString.Builder +import Data.ByteString.Lazy ( toStrict ) +import Data.List ( partition ) +import qualified Data.Text as T +import System.Directory + +import Lib.SystemPaths +import Settings + +data SshAlg = RSA | ECDSA | Ed25519 | DSA deriving (Eq, Show) +instance ToJSON SshAlg where + toJSON = String . \case + RSA -> "ssh-rsa" + ECDSA -> "ecdsa-sha2-nistp256" + Ed25519 -> "ssh-ed25519" + DSA -> "ssh-dss" + +getSshKeys :: (MonadReader AppSettings m, MonadIO m) => m [Text] +getSshKeys = do + base <- asks appFilesystemBase + liftIO $ doesFileExist (toS $ sshKeysFilePath `relativeTo` base) >>= \case + False -> pure [] + True -> lines . T.strip <$> readFile (toS $ sshKeysFilePath `relativeTo` base) + +fingerprint :: Text -> Either String (SshAlg, Text, Text) +fingerprint sshKey = do + (alg, b64, host) <- case T.split isSpace sshKey of + [alg, bin, host] -> (, encodeUtf8 bin, host) <$> parseAlg alg + [alg, bin] -> (, encodeUtf8 bin, "") <$> parseAlg alg + _ -> Left $ "Invalid SSH Key: " <> toS sshKey + bin <- convertFromBase @_ @ByteString Base64 b64 + let dig = unpack . convert @_ @ByteString $ hashWith MD5 bin + let hex = fmap (byteString . convertToBase @ByteString Base16 . singleton) dig + let colons = intersperse (charUtf8 ':') hex + pure . (alg, , host) . decodeUtf8 . toStrict . toLazyByteString $ fold colons + where + + parseAlg :: Text -> Either String SshAlg + parseAlg alg = case alg of + "ssh-rsa" -> Right RSA + "ecdsa-sha2-nistp256" -> Right ECDSA + "ssh-ed25519" -> Right Ed25519 + "ssh-dss" -> Right DSA + _ -> Left $ "Invalid SSH Alg: " <> toS alg + +createSshKey :: (MonadReader AppSettings m, MonadIO m) => Text -> m () +createSshKey key = do + base <- asks appFilesystemBase + let writeFirstKeyToFile k = writeFile (toS $ sshKeysFilePath `relativeTo` base) (k <> "\n") + liftIO $ doesFileExist (toS $ sshKeysFilePath `relativeTo` base) >>= \case + False -> writeFirstKeyToFile sanitizedKey + True -> addKeyToFile (toS $ sshKeysFilePath `relativeTo` base) sanitizedKey + where sanitizedKey = T.strip key + +addKeyToFile :: FilePath -> Text -> IO () +addKeyToFile path k = do + oldKeys <- filter (not . T.null) . lines <$> readFile path + writeFile path $ unlines (k : oldKeys) + +-- true if key deleted, false if key did not exist +deleteSshKey :: (MonadReader AppSettings m, MonadIO m) => Text -> m Bool +deleteSshKey fp = do + base <- asks appFilesystemBase + let rewriteFile others = liftIO $ writeFile (toS $ sshKeysFilePath `relativeTo` base) $ unlines others + getSshKeys >>= \case + [] -> pure False + keys -> do + let (existed, others) = partition ((Right fp ==) . fmap (view _2) . fingerprint) keys + if null existed then pure False else rewriteFile others >> pure True diff --git a/agent/src/Lib/Ssl.hs b/agent/src/Lib/Ssl.hs new file mode 100644 index 000000000..37dea7a5d --- /dev/null +++ b/agent/src/Lib/Ssl.hs @@ -0,0 +1,355 @@ +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE QuasiQuotes #-} +module Lib.Ssl where + +import Startlude + +import Control.Lens +import Data.String.Interpolate.IsString +import System.Process + +root_CA_CERT_NAME :: Text +root_CA_CERT_NAME = "Embassy Local Root CA" + +root_CA_OPENSSL_CONF :: FilePath -> ByteString +root_CA_OPENSSL_CONF path = [i| +# OpenSSL root CA configuration file. +# Copy to `/root/ca/openssl.cnf`. + +[ ca ] +# `man ca` +default_ca = CA_default + +[ CA_default ] +# Directory and file locations. +dir = #{path} +certs = $dir/certs +crl_dir = $dir/crl +new_certs_dir = $dir/newcerts +database = $dir/index.txt +serial = $dir/serial +RANDFILE = $dir/private/.rand + +# The root key and root certificate. +private_key = $dir/private/ca.key.pem +certificate = $dir/certs/ca.cert.pem + +# For certificate revocation lists. +crlnumber = $dir/crlnumber +crl = $dir/crl/ca.crl.pem +crl_extensions = crl_ext +default_crl_days = 30 + +# SHA-1 is deprecated, so use SHA-2 instead. +default_md = sha256 + +name_opt = ca_default +cert_opt = ca_default +default_days = 375 +preserve = no +policy = policy_loose + +[ policy_loose ] +# Allow the intermediate CA to sign a more diverse range of certificates. +# See the POLICY FORMAT section of the `ca` man page. +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +[ req ] +# Options for the `req` tool (`man req`). +default_bits = 4096 +distinguished_name = req_distinguished_name +string_mask = utf8only +prompt = no + +# SHA-1 is deprecated, so use SHA-2 instead. +default_md = sha256 + +# Extension to add when the -x509 option is used. +x509_extensions = v3_ca + +[ req_distinguished_name ] +# See . +CN = #{root_CA_CERT_NAME} +O = Start9 Labs +OU = Embassy + +[ v3_ca ] +# Extensions for a typical CA (`man x509v3_config`). +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:true +keyUsage = critical, digitalSignature, cRLSign, keyCertSign + +[ v3_intermediate_ca ] +# Extensions for a typical intermediate CA (`man x509v3_config`). +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:true, pathlen:0 +keyUsage = critical, digitalSignature, cRLSign, keyCertSign + +[ usr_cert ] +# Extensions for client certificates (`man x509v3_config`). +basicConstraints = CA:FALSE +nsCertType = client, email +nsComment = "OpenSSL Generated Client Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer +keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment +extendedKeyUsage = clientAuth, emailProtection + +[ server_cert ] +# Extensions for server certificates (`man x509v3_config`). +basicConstraints = CA:FALSE +nsCertType = server +nsComment = "OpenSSL Generated Server Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer:always +keyUsage = critical, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth + +[ crl_ext ] +# Extension for CRLs (`man x509v3_config`). +authorityKeyIdentifier=keyid:always + +[ ocsp ] +# Extension for OCSP signing certificates (`man ocsp`). +basicConstraints = CA:FALSE +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer +keyUsage = critical, digitalSignature +extendedKeyUsage = critical, OCSPSigning +|] + +intermediate_CA_OPENSSL_CONF :: Text -> ByteString +intermediate_CA_OPENSSL_CONF path = [i| +# OpenSSL intermediate CA configuration file. +# Copy to `/root/ca/intermediate/openssl.cnf`. + +[ ca ] +# `man ca` +default_ca = CA_default + +[ CA_default ] +# Directory and file locations. +dir = #{path} +certs = $dir/certs +crl_dir = $dir/crl +new_certs_dir = $dir/newcerts +database = $dir/index.txt +serial = $dir/serial +RANDFILE = $dir/private/.rand + +# The root key and root certificate. +private_key = $dir/private/intermediate.key.pem +certificate = $dir/certs/intermediate.cert.pem + +# For certificate revocation lists. +crlnumber = $dir/crlnumber +crl = $dir/crl/intermediate.crl.pem +crl_extensions = crl_ext +default_crl_days = 30 + +# SHA-1 is deprecated, so use SHA-2 instead. +default_md = sha256 + +name_opt = ca_default +cert_opt = ca_default +default_days = 375 +preserve = no +copy_extensions = copy +policy = policy_loose + + +[ policy_loose ] +# Allow the intermediate CA to sign a more diverse range of certificates. +# See the POLICY FORMAT section of the `ca` man page. +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +[ req ] +# Options for the `req` tool (`man req`). +default_bits = 4096 +distinguished_name = req_distinguished_name +string_mask = utf8only +prompt = no + +# SHA-1 is deprecated, so use SHA-2 instead. +default_md = sha256 + +# Extension to add when the -x509 option is used. +x509_extensions = v3_ca + +[ req_distinguished_name ] +CN = Embassy Local Intermediate CA +O = Start9 Labs +OU = Embassy + +[ v3_ca ] +# Extensions for a typical CA (`man x509v3_config`). +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:true +keyUsage = critical, digitalSignature, cRLSign, keyCertSign + +[ v3_intermediate_ca ] +# Extensions for a typical intermediate CA (`man x509v3_config`). +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:true, pathlen:0 +keyUsage = critical, digitalSignature, cRLSign, keyCertSign + +[ usr_cert ] +# Extensions for client certificates (`man x509v3_config`). +basicConstraints = CA:FALSE +nsCertType = client, email +nsComment = "OpenSSL Generated Client Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer +keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment +extendedKeyUsage = clientAuth, emailProtection + +[ server_cert ] +# Extensions for server certificates (`man x509v3_config`). +basicConstraints = CA:FALSE +nsCertType = server +nsComment = "OpenSSL Generated Server Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer:always +keyUsage = critical, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth + +[ crl_ext ] +# Extension for CRLs (`man x509v3_config`). +authorityKeyIdentifier=keyid:always + +[ ocsp ] +# Extension for OCSP signing certificates (`man ocsp`). +basicConstraints = CA:FALSE +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer +keyUsage = critical, digitalSignature +extendedKeyUsage = critical, OCSPSigning +|] + +domain_CSR_CONF :: Text -> ByteString +domain_CSR_CONF name = [i| +[req] +default_bits = 4096 +default_md = sha256 +distinguished_name = req_distinguished_name +prompt = no + +[req_distinguished_name] +CN = #{name} +O = Start9 Labs +OU = Embassy +|] + +writeRootCaCert :: MonadIO m => FilePath -> FilePath -> FilePath -> m (ExitCode, String, String) +writeRootCaCert confPath keyFilePath certFileDestinationPath = liftIO $ readProcessWithExitCode + "openssl" + [ "req" + , -- use x509 + "-new" + , -- new request + "-x509" + , -- self signed x509 + "-nodes" + , -- no passphrase + "-days" + , -- expires in... + "3650" + , -- valid for 10 years. Max is 20 years + "-key" + , -- source private key + toS keyFilePath + , "-out" + -- target cert path + , toS certFileDestinationPath + , "-config" + -- configured by... + , toS confPath + ] + "" + +data DeriveCertificate = DeriveCertificate + { applicantConfPath :: FilePath + , applicantKeyPath :: FilePath + , applicantCertPath :: FilePath + , signingConfPath :: FilePath + , signingKeyPath :: FilePath + , signingCertPath :: FilePath + , duration :: Integer + } +writeIntermediateCert :: MonadIO m => DeriveCertificate -> m (ExitCode, String, String) +writeIntermediateCert DeriveCertificate {..} = liftIO $ interpret $ do + -- openssl genrsa -out dump/int.key 4096 + segment $ openssl [i|genrsa -out #{applicantKeyPath} 4096|] + -- openssl req -new -config dump/int-csr.conf -key dump/int.key -nodes -out dump/int.csr + segment $ openssl [i|req -new + -config #{applicantConfPath} + -key #{applicantKeyPath} + -nodes + -out #{applicantCertPath <> ".csr"}|] + -- openssl x509 -CA dump/ca.crt -CAkey dump/ca.key -CAcreateserial -days 3650 -req -in dump/int.csr -out dump/int.crt + segment $ openssl [i|ca -batch + -config #{signingConfPath} + -rand_serial + -keyfile #{signingKeyPath} + -cert #{signingCertPath} + -extensions v3_intermediate_ca + -days #{duration} + -notext + -in #{applicantCertPath <> ".csr"} + -out #{applicantCertPath}|] + liftIO $ readFile signingCertPath >>= appendFile applicantCertPath + +writeLeafCert :: MonadIO m => DeriveCertificate -> Text -> Text -> m (ExitCode, String, String) +writeLeafCert DeriveCertificate {..} hostname torAddress = liftIO $ interpret $ do + segment $ openssl [i|genrsa -out #{applicantKeyPath} 4096|] + segment $ openssl [i|req -config #{applicantConfPath} + -key #{applicantKeyPath} + -new + -addext subjectAltName=DNS:#{hostname},DNS:*.#{hostname},DNS:#{torAddress},DNS:*.#{torAddress} + -out #{applicantCertPath <> ".csr"}|] + segment $ openssl [i|ca -batch + -config #{signingConfPath} + -rand_serial + -keyfile #{signingKeyPath} + -cert #{signingCertPath} + -extensions server_cert + -days #{duration} + -notext + -in #{applicantCertPath <> ".csr"} + -out #{applicantCertPath} + |] + liftIO $ readFile signingCertPath >>= appendFile applicantCertPath + +openssl :: Text -> IO (ExitCode, String, String) +openssl = ($ "") . readProcessWithExitCode "openssl" . fmap toS . words +{-# INLINE openssl #-} + +interpret :: ExceptT ExitCode (StateT (String, String) IO) () -> IO (ExitCode, String, String) +interpret = fmap (over _1 (either id (const ExitSuccess)) . regroup) . flip runStateT ("", "") . runExceptT +{-# INLINE interpret #-} + +regroup :: (a, (b, c)) -> (a, b, c) +regroup (a, (b, c)) = (a, b, c) +{-# INLINE regroup #-} + +segment :: IO (ExitCode, String, String) -> ExceptT ExitCode (StateT (String, String) IO) () +segment action = liftIO action >>= \case + (ExitSuccess, o, e) -> modify (bimap (<> o) (<> e)) + (ec , o, e) -> modify (bimap (<> o) (<> e)) *> throwE ec +{-# INLINE segment #-} diff --git a/agent/src/Lib/Synchronizers.hs b/agent/src/Lib/Synchronizers.hs new file mode 100644 index 000000000..ae60630a2 --- /dev/null +++ b/agent/src/Lib/Synchronizers.hs @@ -0,0 +1,437 @@ +{-# OPTIONS_GHC -fno-warn-type-defaults #-} +{-# LANGUAGE ExtendedDefaultRules #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TemplateHaskell #-} +module Lib.Synchronizers where + +import Startlude hiding ( check ) +import qualified Startlude.ByteStream as ByteStream +import qualified Startlude.ByteStream.Char8 as ByteStream + +import qualified Control.Effect.Reader.Labelled + as Fused +import Control.Carrier.Lift ( runM ) +import Control.Monad.Trans.Reader ( mapReaderT ) +import Control.Monad.Trans.Resource +import Data.Attoparsec.Text +import qualified Data.ByteString as BS +import qualified Data.ByteString.Char8 as B8 +import qualified Data.Conduit as Conduit +import qualified Data.Conduit.Combinators as Conduit +import qualified Data.Conduit.Tar as Conduit +import Data.Conduit.Shell hiding ( arch + , patch + , stream + , hostname + ) +import Data.FileEmbed +import qualified Data.HashMap.Strict as HM +import Data.IORef +import Data.String.Interpolate.IsString +import qualified Data.Yaml as Yaml +import Exinst +import System.FilePath ( splitPath + , joinPath + , () + ) +import System.FilePath.Posix ( takeDirectory ) +import System.Directory +import System.IO.Error +import System.Posix.Files +import qualified Streaming.Prelude as Stream +import qualified Streaming.Conduit as Conduit +import qualified Streaming.Zip as Stream + +import Constants +import Foundation +import Lib.ClientManifest +import Lib.Error +import qualified Lib.External.AppMgr as AppMgr +import Lib.External.Registry +import Lib.Sound +import Lib.Ssl +import Lib.Tor +import Lib.Types.Core +import Lib.Types.NetAddress +import Lib.Types.Emver +import Lib.SystemCtl +import Lib.SystemPaths hiding ( () ) +import Settings +import Util.File +import qualified Lib.Algebra.Domain.AppMgr as AppMgr2 +import Daemon.ZeroConf ( getStart9AgentHostname ) + + +data Synchronizer = Synchronizer + { synchronizerVersion :: Version + , synchronizerOperations :: [SyncOp] + } + +data SyncOp = SyncOp + { syncOpName :: Text + , syncOpShouldRun :: ReaderT AgentCtx IO Bool -- emit true if op is to be run + , syncOpRun :: ReaderT AgentCtx IO () + , syncOpRequiresReboot :: Bool + } + +data Arch = ArmV7 | ArmV8 deriving (Show) +data KernelVersion = KernelVersion + { kernelVersionNumber :: Version + , kernelVersionArch :: Arch + } + deriving Show + +parseKernelVersion :: Parser KernelVersion +parseKernelVersion = do + major' <- decimal + minor' <- char '.' *> decimal + patch' <- char '.' *> decimal + arch <- string "-v7l+" *> pure ArmV7 <|> string "-v8+" *> pure ArmV8 + pure $ KernelVersion (Version (major', minor', patch', 0)) arch + +synchronizer :: Synchronizer +synchronizer = sync_0_2_5 +{-# INLINE synchronizer #-} + +sync_0_2_5 :: Synchronizer +sync_0_2_5 = Synchronizer + "0.2.5" + [ syncCreateAgentTmp + , syncCreateSshDir + , syncRemoveAvahiSystemdDependency + , syncInstallAppMgr + , syncFullUpgrade + , sync32BitKernel + , syncInstallNginx + , syncWriteNginxConf + , syncInstallDuplicity + , syncInstallExfatFuse + , syncInstallExfatUtils + , syncInstallAmbassadorUI + , syncOpenHttpPorts + , syncUpgradeLifeline + , syncPrepSslRootCaDir + , syncPrepSslIntermediateCaDir + , syncPersistLogs + ] + +syncCreateAgentTmp :: SyncOp +syncCreateAgentTmp = SyncOp "Create Agent Tmp Dir" check migrate False + where + check = do + s <- asks appSettings + tmp <- injectFilesystemBaseFromContext s $ getAbsoluteLocationFor agentTmpDirectory + liftIO $ not <$> doesPathExist (toS tmp) + migrate = do + s <- asks appSettings + tmp <- injectFilesystemBaseFromContext s $ getAbsoluteLocationFor agentTmpDirectory + liftIO $ createDirectoryIfMissing True (toS tmp) + +syncCreateSshDir :: SyncOp +syncCreateSshDir = SyncOp "Create SSH directory" check migrate False + where + check = do + base <- asks $ appFilesystemBase . appSettings + liftIO $ not <$> doesPathExist (toS $ sshKeysDirectory `relativeTo` base) + migrate = do + base <- asks $ appFilesystemBase . appSettings + liftIO $ createDirectoryIfMissing False (toS $ sshKeysDirectory `relativeTo` base) + +syncRemoveAvahiSystemdDependency :: SyncOp +syncRemoveAvahiSystemdDependency = SyncOp "Remove Avahi Systemd Dependency" check migrate False + where + wanted = decodeUtf8 $ $(embedFile "config/agent.service") + check = do + base <- asks $ appFilesystemBase . appSettings + content <- liftIO $ readFile (toS $ agentServicePath `relativeTo` base) + pure (content /= wanted) + migrate = do + base <- asks $ appFilesystemBase . appSettings + liftIO $ writeFile (toS $ agentServicePath `relativeTo` base) wanted + void $ liftIO systemCtlDaemonReload + +-- the main purpose of this is the kernel upgrade but it does upgrade all packages on the system, maybe we should +-- reconsider the heavy handed approach here +syncFullUpgrade :: SyncOp +syncFullUpgrade = SyncOp "Full Upgrade" check migrate True + where + check = liftIO . run $ do + v <- decodeUtf8 <<$>> (uname ("-r" :: Text) $| conduit await) + case parse parseKernelVersion <$> v of + Just (Done _ (KernelVersion (Version av) _)) -> if av < (4, 19, 118, 0) then pure True else pure False + _ -> pure False + migrate = liftIO . run $ do + shell "apt update" + shell "apt full-upgrade -y" + +sync32BitKernel :: SyncOp +sync32BitKernel = SyncOp "32 Bit Kernel Switch" check migrate True + where + getBootCfgPath = getAbsoluteLocationFor bootConfigPath + check = do + settings <- asks appSettings + cfg <- injectFilesystemBaseFromContext settings getBootCfgPath + liftIO . run $ fmap isNothing $ (shell [i|grep "arm_64bit=0" #{cfg} || true|] $| conduit await) + migrate = do + base <- asks $ appFilesystemBase . appSettings + let tmpFile = bootConfigTempPath `relativeTo` base + let bootCfg = bootConfigPath `relativeTo` base + contents <- liftIO $ readFile (toS bootCfg) + let contents' = unlines . (<> ["arm_64bit=0"]) . filter (/= "arm_64bit=1") . lines $ contents + liftIO $ writeFile (toS tmpFile) contents' + liftIO $ renameFile (toS tmpFile) (toS bootCfg) + +syncInstallNginx :: SyncOp +syncInstallNginx = SyncOp "Install Nginx" check migrate False + where + check = liftIO . run $ fmap isNothing (shell [i|which nginx || true|] $| conduit await) + migrate = liftIO . run $ do + apt "update" + apt "install" "nginx" "-y" + +syncInstallDuplicity :: SyncOp +syncInstallDuplicity = SyncOp "Install duplicity" check migrate False + where + check = liftIO . run $ fmap isNothing (shell [i|which duplicity || true|] $| conduit await) + migrate = liftIO . run $ do + apt "update" + apt "install" "-y" "duplicity" + +syncInstallExfatFuse :: SyncOp +syncInstallExfatFuse = SyncOp "Install exfat-fuse" check migrate False + where + check = + liftIO + $ (run (shell [i|dpkg -l|] $| shell [i|grep exfat-fuse|] $| conduit await) $> False) + `catch` \(e :: ProcessException) -> case e of + ProcessException _ (ExitFailure 1) -> pure True + _ -> throwIO e + migrate = liftIO . run $ do + apt "update" + apt "install" "-y" "exfat-fuse" + +syncInstallExfatUtils :: SyncOp +syncInstallExfatUtils = SyncOp "Install exfat-utils" check migrate False + where + check = + liftIO + $ (run (shell [i|dpkg -l|] $| shell [i|grep exfat-utils|] $| conduit await) $> False) + `catch` \(e :: ProcessException) -> case e of + ProcessException _ (ExitFailure 1) -> pure True + _ -> throwIO e + migrate = liftIO . run $ do + apt "update" + apt "install" "-y" "exfat-utils" + +syncWriteConf :: Text -> ByteString -> SystemPath -> SyncOp +syncWriteConf name contents' confLocation = SyncOp [i|Write #{name} Conf|] check migrate False + where + contents = decodeUtf8 contents' + check = do + base <- asks $ appFilesystemBase . appSettings + conf <- + liftIO + $ (Just <$> readFile (toS $ confLocation `relativeTo` base)) + `catch` (\(e :: IOException) -> if isDoesNotExistError e then pure Nothing else throwIO e) + case conf of + Nothing -> pure True + Just co -> pure $ if co == contents then False else True + migrate = do + base <- asks $ appFilesystemBase . appSettings + void . liftIO $ createDirectoryIfMissing True (takeDirectory (toS $ confLocation `relativeTo` base)) + liftIO $ writeFile (toS $ confLocation `relativeTo` base) contents + +syncPrepSslRootCaDir :: SyncOp +syncPrepSslRootCaDir = SyncOp "Create Embassy Root CA Environment" check migrate False + where + check = do + base <- asks $ appFilesystemBase . appSettings + liftIO . fmap not . doesPathExist . toS $ rootCaDirectory `relativeTo` base + migrate = do + base <- asks $ appFilesystemBase . appSettings + liftIO $ do + createDirectoryIfMissing True . toS $ rootCaDirectory `relativeTo` base + for_ ["/certs", "/crl", "/newcerts", "/private"] $ \p -> do + createDirectoryIfMissing True . toS $ p `relativeTo` (rootCaDirectory `relativeTo` base) + setFileMode (toS $ (rootCaDirectory <> "/private") `relativeTo` base) (7 `shiftL` 6) + writeFile (toS $ (rootCaDirectory <> "/index.txt") `relativeTo` base) "" + writeFile (toS $ (rootCaDirectory <> "/serial") `relativeTo` base) "1000" + BS.writeFile (toS $ rootCaOpenSslConfPath `relativeTo` base) + (root_CA_OPENSSL_CONF . toS $ rootCaDirectory `relativeTo` base) + +syncPrepSslIntermediateCaDir :: SyncOp +syncPrepSslIntermediateCaDir = SyncOp "Create Embassy Intermediate CA Environment" check migrate False + where + check = do + base <- asks $ appFilesystemBase . appSettings + liftIO . fmap not . doesPathExist . toS $ intermediateCaDirectory `relativeTo` base + migrate = do + base <- asks $ appFilesystemBase . appSettings + liftIO $ do + createDirectoryIfMissing True . toS $ intermediateCaDirectory `relativeTo` base + for_ ["/certs", "/crl", "/newcerts", "/private"] $ \p -> do + createDirectoryIfMissing True . toS $ (intermediateCaDirectory <> p) `relativeTo` base + setFileMode (toS $ (intermediateCaDirectory <> "/private") `relativeTo` base) (7 `shiftL` 6) + writeFile (toS $ (intermediateCaDirectory <> "/index.txt") `relativeTo` base) "" + writeFile (toS $ (intermediateCaDirectory <> "/serial") `relativeTo` base) "1000" + BS.writeFile (toS $ intermediateCaOpenSslConfPath `relativeTo` base) + (intermediate_CA_OPENSSL_CONF . toS $ intermediateCaDirectory `relativeTo` base) + +syncWriteNginxConf :: SyncOp +syncWriteNginxConf = syncWriteConf "Nginx" $(embedFile "config/nginx.conf") nginxConfig + +syncInstallAmbassadorUI :: SyncOp +syncInstallAmbassadorUI = SyncOp "Install Ambassador UI" check migrate False + where + check = do + base <- asks (appFilesystemBase . appSettings) + liftIO (doesPathExist (toS $ ambassadorUiPath `relativeTo` base)) >>= \case + True -> do + manifest <- liftIO $ readFile (toS $ ambassadorUiManifestPath `relativeTo` base) + case Yaml.decodeEither' (encodeUtf8 manifest) of + Left _ -> pure False + Right (Some1 _ cm) -> case cm of + (V0 cmv0) -> pure $ clientManifestV0AppVersion cmv0 /= agentVersion + False -> pure True + migrate = mapReaderT runResourceT $ do + base <- asks (appFilesystemBase . appSettings) + liftIO $ removePathForcibly (toS $ ambassadorUiPath `relativeTo` base) + + void + . runInContext + -- untar and save to path + $ streamUntar (ambassadorUiPath `relativeTo` base) + -- unzip + . Stream.gunzip + -- download + $ getAmbassadorUiForSpec (exactly agentVersion) + + runM $ injectFilesystemBase base $ do + -- if the ssl config has already been setup, we want to override the config with new UI details + -- otherwise we leave it alone + whenM (liftIO $ doesFileExist (toS $ nginxSitesAvailable nginxSslConf `relativeTo` base)) $ do + sid <- getStart9AgentHostname + let hostname = sid <> ".local" + installAmbassadorUiNginxHTTPS + (NginxSiteConfOverride + hostname + 443 + (Just $ NginxSsl { nginxSslKeyPath = entityKeyPath sid + , nginxSslCertPath = entityCertPath sid + , nginxSslOnlyServerNames = [hostname] + } + ) + ) + nginxSslConf + installAmbassadorUiNginxHTTP nginxTorConf + + streamUntar :: (MonadResource m, MonadThrow m) => Text -> ByteStream.ByteStream m () -> m () + streamUntar root stream = Conduit.runConduit $ Conduit.fromBStream stream .| Conduit.untar \f -> do + let path = toS . (toS root ) . joinPath . drop 1 . splitPath . B8.unpack . Conduit.filePath $ f + print path + if (Conduit.fileType f == Conduit.FTDirectory) + then liftIO $ createDirectoryIfMissing True path + else Conduit.sinkFile path + +installAmbassadorUiNginxHTTP :: (MonadIO m, HasFilesystemBase sig m) => SystemPath -> m () +installAmbassadorUiNginxHTTP = installAmbassadorUiNginx Nothing + +installAmbassadorUiNginxHTTPS :: (MonadIO m, HasFilesystemBase sig m) => NginxSiteConfOverride -> SystemPath -> m () +installAmbassadorUiNginxHTTPS o = installAmbassadorUiNginx $ Just o + +-- Private. Installs an nginx conf from client-manifest to 'fileName' and restarts nginx. +installAmbassadorUiNginx :: (MonadIO m, HasFilesystemBase sig m) + => Maybe NginxSiteConfOverride + -> SystemPath -- nginx conf file name + -> m () +installAmbassadorUiNginx mSslOverrides fileName = do + base <- Fused.ask @"filesystemBase" + + -- parse app manifest + -- generate nginx conf from app manifest + -- write conf to ambassador target location + appEnv <- flip runReaderT base . handleS9ErrNuclear $ liftA2 + (HM.intersectionWith (,)) + (AppMgr2.runAppMgrCliC $ HM.mapMaybe AppMgr2.infoResTorAddress <$> AppMgr2.list [AppMgr2.flags| |]) + AppMgr.readLanIps -- TODO: get appmgr to expose this or guarantee its structure + agentTor <- getAgentHiddenServiceUrl + let fullEnv = HM.insert (AppId "start9-ambassador") (TorAddress agentTor, LanIp "127.0.0.1") appEnv + + removeFileIfExists $ nginxAvailableConf base + removeFileIfExists $ nginxEnabledConf base + + flip runReaderT fullEnv + $ transpile mSslOverrides (ambassadorUiClientManifiest base) (nginxAvailableConf base) + >>= \case + True -> pure () + False -> throwIO . InternalS9Error $ "Failed to write ambassador ui nginx config " <> show fileName + liftIO $ createSymbolicLink (nginxAvailableConf base) (nginxEnabledConf base) + + -- restart nginx + void . liftIO $ systemCtl RestartService "nginx" + where + ambassadorUiClientManifiest b = toS $ (ambassadorUiPath <> "/client-manifest.yaml") `relativeTo` b + nginxAvailableConf b = toS $ (nginxSitesAvailable fileName) `relativeTo` b + nginxEnabledConf b = toS $ (nginxSitesEnabled fileName) `relativeTo` b + +syncOpenHttpPorts :: SyncOp +syncOpenHttpPorts = SyncOp "Open Hidden Service Port 80" check migrate False + where + check = runResourceT $ do + base <- asks $ appFilesystemBase . appSettings + res <- + ByteStream.readFile (toS $ AppMgr.torrcBase `relativeTo` base) + & ByteStream.lines + & Stream.mapped ByteStream.toStrict + & Stream.map decodeUtf8 + & Stream.filter + ( ( (== ["HiddenServicePort", "443", "127.0.0.1:443"]) + <||> (== ["HiddenServicePort", "80", "127.0.0.1:80"]) + ) + . words + ) + & Stream.toList_ + if length res < 2 then pure True else pure False + migrate = cantFail . flip catchE failUpdate $ do + lift $ syncOpRun $ syncWriteConf "Torrc" $(embedFile "config/torrc") AppMgr.torrcBase + AppMgr.torReload + +syncInstallAppMgr :: SyncOp +syncInstallAppMgr = SyncOp "Install AppMgr" check migrate False + where + check = runExceptT AppMgr.getAppMgrVersion >>= \case + Left _ -> pure True + Right v -> not . (v <||) <$> asks (appMgrVersionSpec . appSettings) + migrate = fmap (either absurd id) . runExceptT . flip catchE failUpdate $ do + avs <- asks $ appMgrVersionSpec . appSettings + av <- AppMgr.installNewAppMgr avs + unless (av <|| avs) $ throwE $ AppMgrVersionE av avs + +syncUpgradeLifeline :: SyncOp +syncUpgradeLifeline = SyncOp "Upgrade Lifeline" check migrate False + where + clearResets :: SystemPath + clearResets = "/usr/local/bin/clear-resets.sh" + check = do + base <- asks $ appFilesystemBase . appSettings + liftIO $ doesFileExist . toS $ clearResets `relativeTo` base + migrate = do + base <- asks $ appFilesystemBase . appSettings + removeFileIfExists . toS $ lifelineBinaryPath `relativeTo` base + mapReaderT runResourceT $ runInContext $ getLifelineBinary (exactly "0.2.0") + removeFileIfExists . toS $ clearResets `relativeTo` base + +syncPersistLogs :: SyncOp +syncPersistLogs = + (syncWriteConf "Journald" $(embedFile "config/journald.conf") journaldConfig) { syncOpRequiresReboot = True } + +failUpdate :: S9Error -> ExceptT Void (ReaderT AgentCtx IO) () +failUpdate e = do + ref <- asks appIsUpdateFailed + putStrLn $ "UPDATE FAILED: " <> errorMessage (toError e) + liftIO $ playSong 216 beethoven + liftIO $ writeIORef ref (Just e) + +cantFail :: Monad m => ExceptT Void m a -> m a +cantFail = fmap (either absurd id) . runExceptT diff --git a/agent/src/Lib/SystemCtl.hs b/agent/src/Lib/SystemCtl.hs new file mode 100644 index 000000000..8b19c1e2d --- /dev/null +++ b/agent/src/Lib/SystemCtl.hs @@ -0,0 +1,23 @@ +module Lib.SystemCtl where + +import Startlude hiding ( words ) +import Protolude.Unsafe ( unsafeHead ) + +import Data.String +import System.Process +import Text.Casing + +data ServiceAction = + StartService + | StopService + | RestartService + deriving (Eq, Show) + +toAction :: ServiceAction -> String +toAction = fmap toLower . unsafeHead . words . wordify . show + +systemCtl :: ServiceAction -> Text -> IO ExitCode +systemCtl action service = rawSystem "systemctl" [toAction action, toS service] + +systemCtlDaemonReload :: IO ExitCode +systemCtlDaemonReload = rawSystem "systemctl" ["daemon-reload"] diff --git a/agent/src/Lib/SystemPaths.hs b/agent/src/Lib/SystemPaths.hs new file mode 100644 index 000000000..d63da47ee --- /dev/null +++ b/agent/src/Lib/SystemPaths.hs @@ -0,0 +1,254 @@ +{-# LANGUAGE ScopedTypeVariables #-} +module Lib.SystemPaths where + +import Startlude hiding ( (<.>) + , Reader + , ask + , runReader + ) + +import Control.Effect.Labelled ( Labelled + , runLabelled + ) +import Control.Effect.Reader.Labelled +import Data.List +import qualified Data.Text as T +import qualified Protolude.Base as P + ( show ) +import System.IO.Error ( isDoesNotExistError ) +import System.Directory + +import Lib.Types.Core +import Settings + +strJoin :: Char -> Text -> Text -> Text +strJoin c a b = case (T.unsnoc a, T.uncons b) of + (Nothing , Nothing ) -> "" + (Nothing , Just _ ) -> b + (Just _ , Nothing ) -> a + (Just (_, c0), Just (c1, s)) -> case (c0 == c, c1 == c) of + (True , True ) -> a <> s + (False, False) -> a <> T.singleton c <> b + _ -> a <> b + +() :: Text -> Text -> Text +() = strJoin '/' + +(<.>) :: Text -> Text -> Text +(<.>) = strJoin '.' + +-- system paths behave the same as FilePaths mostly except that they can be rebased onto alternative roots so that things +-- can be tested in an isolated way. This uses a church encoding. +newtype SystemPath = SystemPath { relativeTo :: Text -> Text } +instance Eq SystemPath where + (==) a b = a `relativeTo` "/" == b `relativeTo` "/" +instance Show SystemPath where + show sp = P.show $ sp `relativeTo` "/" +instance Semigroup SystemPath where + (SystemPath f) <> (SystemPath g) = SystemPath $ g . f +instance Monoid SystemPath where + mempty = SystemPath id +instance IsString SystemPath where + fromString (c : cs) = case c of + '/' -> relBase . toS $ cs + _ -> relBase . toS $ c : cs + fromString [] = mempty + +leaf :: SystemPath -> Text +leaf = last . T.splitOn "/" . show + +relBase :: Text -> SystemPath +relBase = SystemPath . flip () + +type HasFilesystemBase sig m = HasLabelled "filesystemBase" (Reader Text) sig m + +injectFilesystemBase :: Monad m => Text -> Labelled "filesystemBase" (ReaderT Text) m a -> m a +injectFilesystemBase fsbase = flip runReaderT fsbase . runLabelled @"filesystemBase" + +injectFilesystemBaseFromContext :: Monad m => AppSettings -> Labelled "filesystemBase" (ReaderT Text) m a -> m a +injectFilesystemBaseFromContext = injectFilesystemBase . appFilesystemBase + +getAbsoluteLocationFor :: HasFilesystemBase sig m => SystemPath -> m Text +getAbsoluteLocationFor path = do + base <- ask @"filesystemBase" + pure $ path `relativeTo` base + +readSystemPath :: (HasFilesystemBase sig m, MonadIO m) => SystemPath -> m (Maybe Text) +readSystemPath path = do + loadPath <- getAbsoluteLocationFor path + contents <- + liftIO + $ (Just <$> readFile (toS loadPath)) + `catch` (\(e :: IOException) -> if isDoesNotExistError e then pure Nothing else throwIO e) + pure contents + +-- like the above, but throws IO error if file not found +readSystemPath' :: (HasFilesystemBase sig m, MonadIO m) => SystemPath -> m Text +readSystemPath' path = do + loadPath <- getAbsoluteLocationFor path + contents <- liftIO . readFile . toS $ loadPath + pure contents + +writeSystemPath :: (HasFilesystemBase sig m, MonadIO m) => SystemPath -> Text -> m () +writeSystemPath path contents = do + loadPath <- getAbsoluteLocationFor path + liftIO $ writeFile (toS loadPath) contents + +deleteSystemPath :: (HasFilesystemBase sig m, MonadIO m) => SystemPath -> m () +deleteSystemPath path = do + loadPath <- getAbsoluteLocationFor path + liftIO $ removePathForcibly (toS loadPath) + +dbPath :: (HasFilesystemBase sig m, HasLabelled "sqlDatabase" (Reader Text) sig m) => m Text +dbPath = do + rt <- ask @"filesystemBase" + dbName <- ask @"sqlDatabase" + pure $ rt "root/agent" toS dbName + +uiPath :: SystemPath +uiPath = "/var/www/html" + +agentDataDirectory :: SystemPath +agentDataDirectory = "/root/agent" + +agentTmpDirectory :: SystemPath +agentTmpDirectory = "/root/agent/tmp" + +bootConfigPath :: SystemPath +bootConfigPath = "/boot/config.txt" + +bootConfigTempPath :: SystemPath +bootConfigTempPath = "/boot/config_tmp.txt" + +executablePath :: SystemPath +executablePath = "/usr/local/bin" + +-- Caches -- + +iconBasePath :: SystemPath +iconBasePath = "/root/agent/icons" + +-- Nginx -- + +nginxConfig :: SystemPath +nginxConfig = "/etc/nginx/nginx.conf" + +journaldConfig :: SystemPath +journaldConfig = "/etc/systemd/journald.conf" + +nginxSitesAvailable :: SystemPath -> SystemPath +nginxSitesAvailable = ("/etc/nginx/sites-available" <>) + +nginxSitesEnabled :: SystemPath -> SystemPath +nginxSitesEnabled = ("/etc/nginx/sites-enabled" <>) + +nginxTorConf :: SystemPath +nginxTorConf = "/start9-ambassador.conf" + +nginxSslConf :: SystemPath +nginxSslConf = "/start9-ambassador-ssl.conf" + +-- SSH -- + +sshKeysDirectory :: SystemPath +sshKeysDirectory = "/home/pi/.ssh" + +sshKeysFilePath :: SystemPath +sshKeysFilePath = sshKeysDirectory <> "authorized_keys" + +-- Zero Conf -- + +avahiPath :: SystemPath +avahiPath = "/etc/avahi" + +avahiServiceFolder :: SystemPath +avahiServiceFolder = avahiPath <> "services" + +avahiServicePath :: Text -> SystemPath +avahiServicePath svc = avahiServiceFolder <> relBase (svc <.> "service") + +-- Ambassador UI -- + +ambassadorUiPath :: SystemPath +ambassadorUiPath = uiPath <> "/start9-ambassador" + +ambassadorUiManifestPath :: SystemPath +ambassadorUiManifestPath = ambassadorUiPath <> "/client-manifest.yaml" + +-- Tor -- + +agentTorHiddenServiceDirectory :: SystemPath +agentTorHiddenServiceDirectory = "/var/lib/tor/agent" + +agentTorHiddenServiceHostnamePath :: SystemPath +agentTorHiddenServiceHostnamePath = agentTorHiddenServiceDirectory <> "/hostname" + +agentTorHiddenServicePrivateKeyPath :: SystemPath +agentTorHiddenServicePrivateKeyPath = agentTorHiddenServiceDirectory <> "/hs_ed25519_secret_key" + +-- Server Config -- + +serverNamePath :: SystemPath +serverNamePath = "/root/agent/name.txt" + +altRegistryUrlPath :: SystemPath +altRegistryUrlPath = "/root/agent/alt_registry_url.txt" + +-- Session Auth Key -- + +sessionSigningKeyPath :: SystemPath +sessionSigningKeyPath = "/root/agent/start9.aes" + +-- AppMgr -- + +appMgrRootPath :: SystemPath +appMgrRootPath = "/root/appmgr" + +appMgrAppPath :: AppId -> SystemPath +appMgrAppPath = ((appMgrRootPath <> "apps") <>) . relBase . unAppId + +lifelineBinaryPath :: SystemPath +lifelineBinaryPath = "/usr/local/bin/lifeline" + +-- Open SSL -- + +rootCaDirectory :: SystemPath +rootCaDirectory = agentDataDirectory <> "/ca" + +rootCaKeyPath :: SystemPath +rootCaKeyPath = rootCaDirectory <> "/private/embassy-root-ca.key.pem" + +rootCaCertPath :: SystemPath +rootCaCertPath = rootCaDirectory <> "/certs/embassy-root-ca.cert.pem" + +rootCaOpenSslConfPath :: SystemPath +rootCaOpenSslConfPath = rootCaDirectory <> "/openssl.conf" + +intermediateCaDirectory :: SystemPath +intermediateCaDirectory = rootCaDirectory <> "/intermediate" + +intermediateCaKeyPath :: SystemPath +intermediateCaKeyPath = intermediateCaDirectory <> "/private/embassy-int-ca.key.pem" + +intermediateCaCertPath :: SystemPath +intermediateCaCertPath = intermediateCaDirectory <> "/certs/embassy-int-ca.crt.pem" + +intermediateCaOpenSslConfPath :: SystemPath +intermediateCaOpenSslConfPath = intermediateCaDirectory <> "/openssl.conf" + +sslDirectory :: SystemPath +sslDirectory = "/etc/nginx/ssl" + +entityKeyPath :: Text -> SystemPath +entityKeyPath hostname = sslDirectory <> relBase ("/" <> hostname <> "-local.key.pem") + +entityCertPath :: Text -> SystemPath +entityCertPath hostname = sslDirectory <> relBase ("/" <> hostname <> "-local.crt.pem") + +entityConfPath :: Text -> SystemPath +entityConfPath hostname = sslDirectory <> relBase ("/" <> hostname <> "-local.conf") + +-- Systemd + +agentServicePath :: SystemPath +agentServicePath = "/etc/systemd/system/agent.service" diff --git a/agent/src/Lib/Tor.hs b/agent/src/Lib/Tor.hs new file mode 100644 index 000000000..d4e54f584 --- /dev/null +++ b/agent/src/Lib/Tor.hs @@ -0,0 +1,13 @@ +module Lib.Tor where + +import Startlude + +import qualified Data.Text as T + +import Lib.SystemPaths + +getAgentHiddenServiceUrl :: (HasFilesystemBase sig m, MonadIO m) => m Text +getAgentHiddenServiceUrl = T.strip <$> readSystemPath' agentTorHiddenServiceHostnamePath + +getAgentHiddenServiceUrlMaybe :: (HasFilesystemBase sig m, MonadIO m) => m (Maybe Text) +getAgentHiddenServiceUrlMaybe = fmap T.strip <$> readSystemPath agentTorHiddenServiceHostnamePath diff --git a/agent/src/Lib/TyFam/ConditionalData.hs b/agent/src/Lib/TyFam/ConditionalData.hs new file mode 100644 index 000000000..6d2f62dd5 --- /dev/null +++ b/agent/src/Lib/TyFam/ConditionalData.hs @@ -0,0 +1,20 @@ +{-# LANGUAGE TemplateHaskell #-} +module Lib.TyFam.ConditionalData where + +import Startlude + +import Data.Singletons.TH + +type Include :: Bool -> Type -> Type +type family Include p a where + Include 'True a = a + Include 'False _ = () +genDefunSymbols [''Include] +type Keep :: Type ~> Type +type Keep = IncludeSym1 'True +type Full :: ((Type ~> Type) -> Type) -> Type +type Full t = t Keep +type Strip :: Type ~> Type +type Strip = IncludeSym1 'False +type Stripped :: ((Type ~> Type) -> Type) -> Type +type Stripped t = t Strip diff --git a/agent/src/Lib/Types/Core.hs b/agent/src/Lib/Types/Core.hs new file mode 100644 index 000000000..4c5ba0063 --- /dev/null +++ b/agent/src/Lib/Types/Core.hs @@ -0,0 +1,114 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE UndecidableInstances #-} +module Lib.Types.Core where + +import Startlude +import qualified GHC.Read ( Read(..) ) +import qualified GHC.Show ( Show(..) ) + +import Data.Aeson ( withText + , FromJSON(parseJSON) + , FromJSONKey(fromJSONKey) + , Value(String) + , ToJSON(toJSON) + , ToJSONKey(toJSONKey) + ) +import Data.Functor.Contravariant ( Contravariant(contramap) ) +import Data.Singletons.TH +import Database.Persist ( PersistField(..) + , PersistValue(PersistText) + , SqlType(SqlString) + ) +import Database.Persist.Sql ( PersistFieldSql(..) ) +import Yesod.Core ( PathPiece(..) ) +import Control.Monad.Fail ( MonadFail(fail) ) +import Data.Text ( toUpper ) +import Web.HttpApiData + +newtype AppId = AppId { unAppId :: Text } deriving (Eq, Ord) +deriving newtype instance ToHttpApiData AppId +deriving newtype instance FromHttpApiData AppId + +instance IsString AppId where + fromString = AppId . fromString +instance Show AppId where + show = toS . unAppId +instance Read AppId where + readsPrec _ s = [(AppId $ toS s, "")] +instance Hashable AppId where + hashWithSalt n = hashWithSalt n . unAppId +instance ToJSON AppId where + toJSON = toJSON . unAppId +instance FromJSON AppId where + parseJSON = fmap AppId . parseJSON +instance PathPiece AppId where + toPathPiece = unAppId + fromPathPiece = fmap AppId . fromPathPiece +instance PersistField AppId where + toPersistValue = PersistText . show + fromPersistValue (PersistText t) = Right . AppId $ toS t + fromPersistValue other = Left $ "Invalid AppId: " <> show other +instance PersistFieldSql AppId where + sqlType _ = SqlString +instance FromJSONKey AppId where + fromJSONKey = fmap AppId fromJSONKey +instance ToJSONKey AppId where + toJSONKey = contramap unAppId toJSONKey + + +data AppContainerStatus = + Running + | Stopped + | Paused + | Restarting + | Removing + | Dead deriving (Eq, Show) +instance ToJSON AppContainerStatus where + toJSON Paused = String "STOPPED" -- we never want to show paused to the Front End + toJSON other = String . toUpper . show $ other +instance FromJSON AppContainerStatus where + parseJSON = withText "health status" $ \case + "RUNNING" -> pure Running + "STOPPED" -> pure Stopped + "PAUSED" -> pure Paused + "RESTARTING" -> pure Restarting + "REMOVING" -> pure Removing + "DEAD" -> pure Dead + _ -> fail "unknown status" + +data AppAction = Start | Stop deriving (Eq, Show) + +data BackupJobType = CreateBackup | RestoreBackup deriving (Eq, Show) + +$(singletons [d| + data AppTmpStatus + = Installing + | CreatingBackup + | RestoringBackup + | NeedsConfig + | BrokenDependencies + | Crashed + | StoppingT + | RestartingT + deriving (Eq, Show) |]) + +instance ToJSON AppTmpStatus where + toJSON = String . \case + Installing -> "INSTALLING" + CreatingBackup -> "CREATING_BACKUP" + RestoringBackup -> "RESTORING_BACKUP" + NeedsConfig -> "NEEDS_CONFIG" + BrokenDependencies -> "BROKEN_DEPENDENCIES" + Crashed -> "CRASHED" + RestartingT -> "RESTARTING" + StoppingT -> "STOPPING" + +data AppStatus + = AppStatusTmp AppTmpStatus + | AppStatusAppMgr AppContainerStatus + deriving (Eq, Show) +instance ToJSON AppStatus where + toJSON (AppStatusTmp s) = toJSON s + toJSON (AppStatusAppMgr s) = toJSON s diff --git a/agent/src/Lib/Types/Emver.hs b/agent/src/Lib/Types/Emver.hs new file mode 100644 index 000000000..0cceeed9e --- /dev/null +++ b/agent/src/Lib/Types/Emver.hs @@ -0,0 +1,258 @@ +{- | +Module : Lib.Types.Emver +Description : Semver with 4th digit extension for Embassy +License : Start9 Non-Commercial +Maintainer : keagan@start9labs.com +Stability : experimental +Portability : portable + +This module was designed to address the problem of releasing updates to Embassy Packages where the upstream project was +either unaware of or apathetic towards supporting their application on the Embassy platform. In most cases, the original +package will support . This leaves us with the problem where we would like +to preserve the original package's version, since one of the goals of the Embassy platform is transparency. However, on +occasion, we have screwed up and published a version of a package that needed to have its metadata updated. In this +scenario we were left with the conundrum of either unilaterally claiming a version number of a package we did not author +or let the issue persist until the next update. Neither of these promote good user experiences, for different reasons. +This module extends the semver standard linked above with a 4th digit, which is given PATCH semantics. +-} + +module Lib.Types.Emver + ( major + , minor + , patch + , revision + , satisfies + , (<||) + , (||>) + -- we do not export 'None' because it is useful for its internal algebraic properties only + , VersionRange(Anchor, Any, None) + , Version(..) + , AnyRange(..) + , AllRange(..) + , conj + , disj + , exactly + , parseVersion + , parseRange + ) +where + +import Prelude +import qualified Data.Attoparsec.Text as Atto +import Data.Function +import Data.Functor ( (<&>) + , ($>) + ) +import Control.Applicative ( liftA2 + , Alternative((<|>)) + ) +import Data.String ( IsString(..) ) +import qualified Data.Text as T + +-- | AppVersion is the core representation of the SemverQuad type. +newtype Version = Version { unVersion :: (Word, Word, Word, Word) } deriving (Eq, Ord) +instance Show Version where + show (Version (x, y, z, q)) = + let postfix = if q == 0 then "" else '.' : show q in show x <> "." <> show y <> "." <> show z <> postfix +instance IsString Version where + fromString s = either error id $ Atto.parseOnly parseVersion (T.pack s) + +-- | A change in the value found at 'major' implies a breaking change in the API that this version number describes +major :: Version -> Word +major (Version (x, _, _, _)) = x + +-- | A change in the value found at 'minor' implies a backwards compatible addition to the API that this version number +-- describes +minor :: Version -> Word +minor (Version (_, y, _, _)) = y + +-- | A change in the value found at 'patch' implies that the implementation of the API has changed without changing the +-- invariants promised by the API. In many cases this will be incremented when repairing broken functionality +patch :: Version -> Word +patch (Version (_, _, z, _)) = z + +-- | This is the fundamentally new value in comparison to the original semver 2.0 specification. It is given the same +-- semantics as 'patch' above, which begs the question, when should you update this value instead of that one. Generally +-- speaking, if you are both the package author and maintainer, you should not ever increment this number, as it is +-- redundant with 'patch'. However, if you maintain a package on some distribution channel, and you are /not/ the +-- original author, then it is encouraged for you to increment 'quad' instead of 'patch'. +revision :: Version -> Word +revision (Version (_, _, _, q)) = q + + +-- | 'Operator' is the type that specifies how to compare against the target version. Right represents the ordering, +-- Left negates it +type Operator = Either Ordering Ordering + +-- | 'VersionRange' is the algebra of sets of versions. They can be constructed by having an 'Anchor' term which +-- compares against the target version, or can be described with 'Conj' which is a conjunction, or 'Disj', which is a +-- disjunction. The 'Any' and 'All' terms are primarily there to round out the algebra, but 'Any' is also exposed due to +-- its usage in semantic versioning in general. The 'None' term is not useful to the end user as there would be no +-- reasonable usage of it to describe version sets. It is included for its utility as a unit on 'Disj' and possibly as +-- a zero on 'Conj' +-- +-- Laws (reflected in implementations of smart constructors): +-- Commutativity of conjunction: Conj a b === Conj b a +-- Commutativity of disjunction: Disj a b === Disj b a +-- Associativity of conjunction: Conj (Conj a b) c === Conj a (Conj b c) +-- Associativity of disjunction: Disj (Disj a b) c === Disj a (Disj b c) +-- Identity of conjunction: Any `Conj` a === a +-- Identity of disjunction: None `Disj` a === a +-- Zero of conjunction: None `Conj` a === None +-- Zero of disjunction: Any `Disj` a === Any +-- Distributivity of conjunction over disjunction: Conj a (Disj b c) === Disj (Conj a b) (Conj a c) +-- Distributivity of disjunction over conjunction: Disj a (Conj b c) === Conj (Disj a b) (Disj a c) +data VersionRange + = Anchor Operator Version + | Conj VersionRange VersionRange + | Disj VersionRange VersionRange + | Any + | None + deriving (Eq) + +-- | Smart constructor for conjunctions. Eagerly evaluates zeros and identities +conj :: VersionRange -> VersionRange -> VersionRange +conj Any b = b +conj a Any = a +conj None _ = None +conj _ None = None +conj a b = Conj a b + +-- | Smart constructor for disjunctions. Eagerly evaluates zeros and identities +disj :: VersionRange -> VersionRange -> VersionRange +disj Any _ = Any +disj _ Any = Any +disj None b = b +disj a None = a +disj a b = Disj a b + +exactly :: Version -> VersionRange +exactly = Anchor (Right EQ) + +instance Show VersionRange where + show (Anchor ( Left EQ) v ) = '!' : '=' : show v + show (Anchor ( Right EQ) v ) = '=' : show v + show (Anchor ( Left LT) v ) = '>' : '=' : show v + show (Anchor ( Right LT) v ) = '<' : show v + show (Anchor ( Left GT) v ) = '<' : '=' : show v + show (Anchor ( Right GT) v ) = '>' : show v + show (Conj a@(Disj _ _) b@(Disj _ _)) = paren (show a) <> (' ' : paren (show b)) + show (Conj a@(Disj _ _) b ) = paren (show a) <> (' ' : show b) + show (Conj a b@(Disj _ _)) = show a <> (' ' : paren (show b)) + show (Conj a b ) = show a <> (' ' : show b) + show (Disj a b ) = show a <> " || " <> show b + show Any = "*" + show None = "!" +instance Read VersionRange where + readsPrec _ s = case Atto.parseOnly parseRange (T.pack s) of + Left _ -> [] + Right a -> [(a, "")] + +paren :: String -> String +paren = mappend "(" . flip mappend ")" + +newtype AnyRange = AnyRange { unAnyRange :: VersionRange } +instance Semigroup AnyRange where + (<>) = AnyRange <<$>> disj `on` unAnyRange +instance Monoid AnyRange where + mempty = AnyRange None + +newtype AllRange = AllRange { unAllRange :: VersionRange } +instance Semigroup AllRange where + (<>) = AllRange <<$>> conj `on` unAllRange +instance Monoid AllRange where + mempty = AllRange Any + +-- | Predicate for deciding whether the 'Version' is in the 'VersionRange' +satisfies :: Version -> VersionRange -> Bool +satisfies v (Anchor op v') = either (\c x y -> compare x y /= c) (\c x y -> compare x y == c) op v v' +satisfies v (Conj a b ) = v `satisfies` a && v `satisfies` b +satisfies v (Disj a b ) = v `satisfies` a || v `satisfies` b +satisfies _ Any = True +satisfies _ None = False + +(<||) :: Version -> VersionRange -> Bool +(<||) = satisfies +{-# INLINE (<||) #-} + +(||>) :: VersionRange -> Version -> Bool +(||>) = flip satisfies +{-# INLINE (||>) #-} + +(<<$>>) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) +(<<$>>) = fmap . fmap +{-# INLINE (<<$>>) #-} + +parseOperator :: Atto.Parser Operator +parseOperator = + (Atto.char '=' $> Right EQ) + <|> (Atto.string "!=" $> Left EQ) + <|> (Atto.string ">=" $> Left LT) + <|> (Atto.string "<=" $> Left GT) + <|> (Atto.char '>' $> Right GT) + <|> (Atto.char '<' $> Right LT) + +parseVersion :: Atto.Parser Version +parseVersion = do + major' <- Atto.decimal <* Atto.char '.' + minor' <- Atto.decimal <* Atto.char '.' + patch' <- Atto.decimal + quad' <- Atto.option 0 $ Atto.char '.' *> Atto.decimal + pure $ Version (major', minor', patch', quad') + +-- >>> Atto.parseOnly parseRange "=2.3.4 1.2.3.4 - 2.3.4.5 (>3.0.0 || <3.4.5)" +-- Right =2.3.4 >=1.2.3.4 <=2.3.4.5 ((>3.0.0 || <3.4.5)) +-- >>> Atto.parseOnly parseRange "0.2.6" +-- Right =0.2.6 +parseRange :: Atto.Parser VersionRange +parseRange = s <|> (Atto.char '*' *> pure Any) <|> (Anchor (Right EQ) <$> parseVersion) + where + sub = Atto.char '(' *> Atto.skipSpace *> parseRange <* Atto.skipSpace <* Atto.char ')' + s = + unAnyRange + . foldMap AnyRange + <$> ((p <|> sub) `Atto.sepBy1` (Atto.skipSpace *> Atto.string "||" <* Atto.skipSpace)) + p = unAllRange . foldMap AllRange <$> ((a <|> sub) `Atto.sepBy1` Atto.space) + a = liftA2 Anchor parseOperator parseVersion <|> caret <|> tilde <|> wildcard <|> hyphen + +-- >>> liftA2 satisfies (Atto.parseOnly parseVersion "0.20.1.1") (Atto.parseOnly parseRange "^0.20.1") +-- Right True +caret :: Atto.Parser VersionRange +caret = (Atto.char '^' *> parseVersion) <&> \case + v@(Version (0, 0, 0, _)) -> Anchor (Right EQ) v + v@(Version (0, 0, z, _)) -> rangeIE v (Version (0, 0, z + 1, 0)) + v@(Version (0, y, _, _)) -> rangeIE v (Version (0, y + 1, 0, 0)) + v@(Version (x, _, _, _)) -> rangeIE v (Version (x + 1, 0, 0, 0)) + +-- >>> Atto.parseOnly tilde "~1.2.3.4" +-- Right >=1.2.3.4 <1.2.4 +tilde :: Atto.Parser VersionRange +tilde = (Atto.char '~' *> (Atto.decimal `Atto.sepBy1` Atto.char '.')) >>= \case + [x, y, z, q] -> pure $ rangeIE (Version (x, y, z, q)) (Version (x, y, z + 1, 0)) + [x, y, z] -> pure $ rangeIE (Version (x, y, z, 0)) (Version (x, y + 1, 0, 0)) + [x, y] -> pure $ rangeIE (Version (x, y, 0, 0)) (Version (x, y + 1, 0, 0)) + [x] -> pure $ rangeIE (Version (x, 0, 0, 0)) (Version (x + 1, 0, 0, 0)) + o -> fail $ "Invalid number of version numbers: " <> show (length o) + +range :: Bool -> Bool -> Version -> Version -> VersionRange +range inc0 inc1 v0 v1 = + let lo = if inc0 then Left LT else Right GT + hi = if inc1 then Left GT else Right LT + in Conj (Anchor lo v0) (Anchor hi v1) + +rangeIE :: Version -> Version -> VersionRange +rangeIE = range True False + +-- >>> Atto.parseOnly wildcard "1.2.3.x" +-- Right >=1.2.3 <1.2.4 +wildcard :: Atto.Parser VersionRange +wildcard = (Atto.many1 (Atto.decimal <* Atto.char '.') <* Atto.char 'x') >>= \case + [x, y, z] -> pure $ rangeIE (Version (x, y, z, 0)) (Version (x, y, z + 1, 0)) + [x, y] -> pure $ rangeIE (Version (x, y, 0, 0)) (Version (x, y + 1, 0, 0)) + [x] -> pure $ rangeIE (Version (x, 0, 0, 0)) (Version (x + 1, 0, 0, 0)) + o -> fail $ "Invalid number of version numbers: " <> show (length o) + +-- >>> Atto.parseOnly hyphen "0.1.2.3 - 1.2.3.4" +-- Right >=0.1.2.3 <=1.2.3.4 +hyphen :: Atto.Parser VersionRange +hyphen = liftA2 (range True True) parseVersion (Atto.skipSpace *> Atto.char '-' *> Atto.skipSpace *> parseVersion) diff --git a/agent/src/Lib/Types/Emver/Orphans.hs b/agent/src/Lib/Types/Emver/Orphans.hs new file mode 100644 index 000000000..1af62533d --- /dev/null +++ b/agent/src/Lib/Types/Emver/Orphans.hs @@ -0,0 +1,40 @@ +{-# OPTIONS_GHC -fno-warn-orphans #-} +module Lib.Types.Emver.Orphans where + +import Startlude + +import Data.Aeson + +import Lib.Types.Emver +import Database.Persist +import Database.Persist.Sql +import qualified Data.Attoparsec.Text as Atto +import Control.Monad.Fail +import qualified Data.Text as T +import Yesod.Core.Dispatch + +instance ToJSON Version where + toJSON = String . show +instance FromJSON Version where + parseJSON = withText + "Quad Semver" + \t -> case Atto.parseOnly parseVersion t of + Left e -> fail e + Right a -> pure a +instance ToJSON VersionRange where + toJSON = String . show +instance FromJSON VersionRange where + parseJSON = withText "Quad Semver Range" $ \t -> case Atto.parseOnly parseRange t of + Left e -> fail e + Right a -> pure a + +instance PersistField Version where + toPersistValue = toPersistValue @Text . show + fromPersistValue = first T.pack . Atto.parseOnly parseVersion <=< fromPersistValue + +instance PersistFieldSql Version where + sqlType _ = SqlString + +instance PathPiece VersionRange where + toPathPiece = show + fromPathPiece = hush . Atto.parseOnly parseRange diff --git a/agent/src/Lib/Types/NetAddress.hs b/agent/src/Lib/Types/NetAddress.hs new file mode 100644 index 000000000..82d4c5138 --- /dev/null +++ b/agent/src/Lib/Types/NetAddress.hs @@ -0,0 +1,13 @@ +module Lib.Types.NetAddress where + +import Startlude +import Protolude.Base ( show ) + +newtype TorAddress = TorAddress { unTorAddress :: Text } deriving (Eq) +instance Show TorAddress where + show = toS . unTorAddress + +newtype LanIp = LanIp { unLanIp :: Text } deriving (Eq) +instance Show LanIp where + show = toS . unLanIp + diff --git a/agent/src/Lib/Types/ServerApp.hs b/agent/src/Lib/Types/ServerApp.hs new file mode 100644 index 000000000..61dccc34c --- /dev/null +++ b/agent/src/Lib/Types/ServerApp.hs @@ -0,0 +1,40 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE UndecidableInstances #-} +module Lib.Types.ServerApp where + +import Startlude hiding ( break ) + +import Data.Aeson + +import Lib.Types.Core +import Lib.Types.Emver +import Lib.Types.Emver.Orphans ( ) + +data StoreApp = StoreApp + { storeAppId :: AppId + , storeAppTitle :: Text + , storeAppDescriptionShort :: Text + , storeAppDescriptionLong :: Text + , storeAppIconUrl :: Text + , storeAppVersions :: NonEmpty StoreAppVersionInfo + } + deriving (Eq, Show) + +data StoreAppVersionInfo = StoreAppVersionInfo + { storeAppVersionInfoVersion :: Version + , storeAppVersionInfoReleaseNotes :: Text + } + deriving (Eq, Show) +instance Ord StoreAppVersionInfo where + compare = compare `on` storeAppVersionInfoVersion +instance FromJSON StoreAppVersionInfo where + parseJSON = withObject "Store App Version Info" $ \o -> do + storeAppVersionInfoVersion <- o .: "version" + storeAppVersionInfoReleaseNotes <- o .: "release-notes" + pure StoreAppVersionInfo { .. } +instance ToJSON StoreAppVersionInfo where + toJSON StoreAppVersionInfo {..} = + object ["version" .= storeAppVersionInfoVersion, "releaseNotes" .= storeAppVersionInfoReleaseNotes] diff --git a/agent/src/Lib/Types/Url.hs b/agent/src/Lib/Types/Url.hs new file mode 100644 index 000000000..df164f67b --- /dev/null +++ b/agent/src/Lib/Types/Url.hs @@ -0,0 +1,50 @@ +module Lib.Types.Url where + +import Startlude + +import Control.Monad.Fail +import qualified Data.Attoparsec.Text as A +import qualified GHC.Show ( Show(..) ) + +-- this is a very weak definition of url, it needs to be fleshed out in accordance with https://www.ietf.org/rfc/rfc1738.txt +data Url = Url + { urlScheme :: Text + , urlHost :: Text + , urlPort :: Word16 + } + deriving Eq +instance Show Url where + show (Url scheme host port) = toS $ scheme <> "://" <> host <> ":" <> show port + +parseUrl :: Text -> Either String Url +parseUrl t = A.parseOnly urlParser (toS t) + +urlParser :: A.Parser Url +urlParser = do + (scheme, defPort) <- A.option ("https", 443) $ schemeParser >>= \case + "http" -> pure ("http", 80) + "https" -> pure ("https", 443) + other -> fail $ "Invalid Scheme: " <> toS other + eHost <- fmap Left (untilParser ":") <|> fmap Right (atLeastParser 2) + case eHost of + Left host -> Url scheme host <$> portParser + Right host -> pure $ Url scheme host defPort + +untilParser :: Text -> A.Parser Text +untilParser t = toS <$> A.manyTill A.anyChar (A.string t) + +atLeastParser :: Int -> A.Parser Text +atLeastParser n = do + minLength <- toS <$> A.count n A.anyChar + rest <- A.takeText + pure $ minLength <> rest + +portParser :: A.Parser Word16 +portParser = do + port <- A.decimal + A.atEnd >>= \case + True -> pure port + False -> fail "invalid port" + +schemeParser :: A.Parser Text +schemeParser = toS <$> A.manyTill A.anyChar (A.string "://") diff --git a/agent/src/Lib/WebServer.hs b/agent/src/Lib/WebServer.hs new file mode 100644 index 000000000..56e1314d9 --- /dev/null +++ b/agent/src/Lib/WebServer.hs @@ -0,0 +1,185 @@ +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TupleSections #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE ViewPatterns #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} +module Lib.WebServer where + +import Startlude hiding ( exp ) + +import Control.Monad.Logger +import Data.Default +import Data.IORef +import Language.Haskell.TH.Syntax ( qLocation ) +import Network.Wai +import Network.Wai.Handler.Warp ( Settings + , defaultSettings + , defaultShouldDisplayException + , runSettings + , setHost + , setOnException + , setPort + ) +import Network.Wai.Middleware.Cors ( CorsResourcePolicy(..) + , cors + , simpleCorsResourcePolicy + ) +import Network.Wai.Middleware.RequestLogger + ( Destination(Logger) + , IPAddrSource(..) + , OutputFormat(..) + , destination + , mkRequestLogger + , outputFormat + ) +import Yesod.Core +import Yesod.Core.Types hiding ( Logger ) + +import Auth +import Foundation +import Handler.Apps +import Handler.Authenticate +import Handler.Backups +import Handler.Hosts +import Handler.Icons +import Handler.Login +import Handler.Notifications +import Handler.PasswordUpdate +import Handler.PowerOff +import Handler.Register +import Handler.SelfUpdate +import Handler.SshKeys +import Handler.Status +import Handler.Wifi +import Handler.V0 +import Settings + +-- This line actually creates our YesodDispatch instance. It is the second half +-- of the call to mkYesodData which occurs in Foundation.hs. Please see the +-- comments there for more details. +mkYesodDispatch "AgentCtx" resourcesAgentCtx + +instance YesodSubDispatch Auth AgentCtx where + yesodSubDispatch = $(mkYesodSubDispatch resourcesAuth) + +-- | Convert our foundation to a WAI Application by calling @toWaiAppPlain@ and +-- applying some additional middlewares. +makeApplication :: AgentCtx -> IO Application +makeApplication foundation = do + logWare <- makeLogWare foundation + -- Create the WAI application and apply middlewares + appPlain <- toWaiAppPlain foundation + let origin = case appCorsOverrideStar $ appSettings foundation of + Nothing -> Nothing + Just override -> Just ([encodeUtf8 override], True) + pure . logWare . cors (const . Just $ policy origin) . defaultMiddlewaresNoLogging $ appPlain + where + policy o = simpleCorsResourcePolicy + { corsOrigins = o + , corsMethods = ["GET", "POST", "HEAD", "PUT", "DELETE", "TRACE", "CONNECT", "OPTIONS", "PATCH"] + , corsRequestHeaders = [ "app-version" + , "Accept" + , "Accept-Charset" + , "Accept-Encoding" + , "Accept-Language" + , "Accept-Ranges" + , "Age" + , "Allow" + , "Authorization" + , "Cache-Control" + , "Connection" + , "Content-Encoding" + , "Content-Language" + , "Content-Length" + , "Content-Location" + , "Content-MD5" + , "Content-Range" + , "Content-Type" + , "Date" + , "ETag" + , "Expect" + , "Expires" + , "From" + , "Host" + , "If-Match" + , "If-Modified-Since" + , "If-None-Match" + , "If-Range" + , "If-Unmodified-Since" + , "Last-Modified" + , "Location" + , "Max-Forwards" + , "Pragma" + , "Proxy-Authenticate" + , "Proxy-Authorization" + , "Range" + , "Referer" + , "Retry-After" + , "Server" + , "TE" + , "Trailer" + , "Transfer-Encoding" + , "Upgrade" + , "User-Agent" + , "Vary" + , "Via" + , "WWW-Authenticate" + , "Warning" + , "Content-Disposition" + , "MIME-Version" + , "Cookie" + , "Set-Cookie" + , "Origin" + , "Prefer" + , "Preference-Applied" + ] + , corsIgnoreFailures = True + } + +startWeb :: AgentCtx -> IO () +startWeb foundation = do + app <- makeApplication foundation + + putStrLn @Text $ "Launching Web Server on port " <> show (appPort $ appSettings foundation) + action <- async $ runSettings (warpSettings foundation) app + + setWebProcessThreadId (asyncThreadId action) foundation + wait action + +shutdownAll :: [ThreadId] -> IO () +shutdownAll threadIds = do + for_ threadIds killThread + exitSuccess + +shutdownWeb :: AgentCtx -> IO () +shutdownWeb AgentCtx {..} = do + mThreadId <- readIORef appWebServerThreadId + for_ mThreadId $ \tid -> do + killThread tid + writeIORef appWebServerThreadId Nothing + +makeLogWare :: AgentCtx -> IO Middleware +makeLogWare foundation = mkRequestLogger def + { outputFormat = if appDetailedRequestLogging $ appSettings foundation + then Detailed True + else Apache (if appIpFromHeader $ appSettings foundation then FromFallback else FromSocket) + , destination = Logger $ loggerSet $ appLogger foundation + } + +-- | Warp settings for the given foundation value. +warpSettings :: AgentCtx -> Settings +warpSettings foundation = + setPort (fromIntegral . appPort $ appSettings foundation) + $ setHost (appHost $ appSettings foundation) + $ setOnException + (\_req e -> when (defaultShouldDisplayException e) $ messageLoggerSource + foundation + (appLogger foundation) + $(qLocation >>= liftLoc) + "yesod" + LevelError + (toLogStr $ "Exception from Warp: " ++ show e) + ) + defaultSettings diff --git a/agent/src/Model.hs b/agent/src/Model.hs new file mode 100644 index 000000000..308c813d1 --- /dev/null +++ b/agent/src/Model.hs @@ -0,0 +1,62 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE EmptyDataDecls #-} +{-# LANGUAGE GADTs #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE NoDeriveAnyClass #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE UndecidableInstances #-} +module Model where + +import Startlude + +import Crypto.Hash +import Data.UUID +import Database.Persist.TH + +import Lib.Types.Core +import Lib.Types.Emver +import Lib.Types.Emver.Orphans ( ) +import Orphans.Digest ( ) +import Orphans.UUID ( ) + +share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase| +Account + createdAt UTCTime + updatedAt UTCTime + name Text + password Text + UniqueAccount name + +ExecutedMigration + createdAt UTCTime + updatedAt UTCTime + srcVersion Version + tgtVersion Version + deriving Eq + deriving Show + +Notification json + Id UUID + createdAt UTCTime + archivedAt UTCTime Maybe + appId AppId + appVersion Version + code Text + title Text + message Text + deriving Eq + deriving Show + +BackupRecord sql=backup + Id UUID + createdAt UTCTime + appId AppId + appVersion Version + succeeded Bool + +IconDigest + Id AppId + tag (Digest MD5) +|] diff --git a/agent/src/Orphans/Digest.hs b/agent/src/Orphans/Digest.hs new file mode 100644 index 000000000..819a55948 --- /dev/null +++ b/agent/src/Orphans/Digest.hs @@ -0,0 +1,25 @@ +{-# OPTIONS_GHC -fno-warn-orphans #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TemplateHaskell #-} +module Orphans.Digest where + +import Startlude + +import Crypto.Hash +import Data.ByteArray +import Data.ByteArray.Encoding +import Data.String.Interpolate.IsString +import Database.Persist.Sql +import Web.HttpApiData + +instance HashAlgorithm a => PersistField (Digest a) where + toPersistValue = PersistByteString . convert + fromPersistValue (PersistByteString bs) = + note [i|Invalid Digest: #{decodeUtf8 $ convertToBase Base16 bs}|] . digestFromByteString $ bs + fromPersistValue other = Left $ "Invalid Digest: " <> show other + +instance HashAlgorithm a => PersistFieldSql (Digest a) where + sqlType _ = SqlBlob + +instance HashAlgorithm a => ToHttpApiData (Digest a) where + toUrlPiece = decodeUtf8 . convertToBase Base16 diff --git a/agent/src/Orphans/UUID.hs b/agent/src/Orphans/UUID.hs new file mode 100644 index 000000000..f28a0b452 --- /dev/null +++ b/agent/src/Orphans/UUID.hs @@ -0,0 +1,18 @@ +{-# OPTIONS_GHC -fno-warn-orphans #-} +module Orphans.UUID where + +import Startlude + +import Data.UUID +import Database.Persist.Sql +import Yesod.Core + +instance PathPiece UUID where + toPathPiece = show + fromPathPiece = readMaybe +instance PersistField UUID where + toPersistValue = PersistText . show + fromPersistValue (PersistText t) = note "Invalid UUID" $ readMaybe t + fromPersistValue other = Left $ "Invalid UUID: " <> show other +instance PersistFieldSql UUID where + sqlType _ = SqlString diff --git a/agent/src/Settings.hs b/agent/src/Settings.hs new file mode 100644 index 000000000..27635482f --- /dev/null +++ b/agent/src/Settings.hs @@ -0,0 +1,85 @@ +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TemplateHaskell #-} +-- | Settings are centralized, as much as possible, into this file. This +-- includes database connection settings, static file locations, etc. +-- In addition, you can configure a number of different aspects of Yesod +-- by overriding methods in the Yesod typeclass. That instance is +-- declared in the Foundation.hs file. +module Settings where + +import Startlude + +import qualified Control.Effect.Labelled as Fused +import qualified Control.Exception as Exception +import Data.Aeson +import Data.FileEmbed ( embedFile ) +import Data.Yaml ( decodeEither' ) +import Database.Persist.Sqlite ( SqliteConf(..) ) +import Network.Wai.Handler.Warp ( HostPreference ) +import Yesod.Default.Config2 ( applyEnvValue + , configSettingsYml + ) +import Lib.Types.Emver +import Lib.Types.Emver.Orphans ( ) + +-- | Runtime settings to configure this application. These settings can be +-- loaded from various sources: defaults, environment variables, config files, +-- theoretically even a database. +data AppSettings = AppSettings + { appDatabaseConf :: SqliteConf + -- ^ Configuration settings for accessing the database. + , appHost :: HostPreference + -- ^ Host/interface the server should bind to. + , appPort :: Word16 + -- ^ Port to listen on + , appIpFromHeader :: Bool + -- ^ Get the IP address from the header when logging. Useful when sitting + -- behind a reverse proxy. + , appDetailedRequestLogging :: Bool + -- ^ Use detailed request logging system + , appShouldLogAll :: Bool + -- ^ Should all log messages be displayed? + , appMgrVersionSpec :: VersionRange + , appFilesystemBase :: Text + , appCorsOverrideStar :: Maybe Text + } + deriving Show + +instance FromJSON AppSettings where + parseJSON = withObject "AppSettings" $ \o -> do + appDatabaseConf <- o .: "database" >>= withObject + "database conf" + (\db -> do + dbName <- db .: "database" + poolSize <- db .: "poolsize" + pure $ SqliteConf dbName poolSize + ) + + appHost <- fromString <$> o .: "host" + appPort <- o .: "port" + appIpFromHeader <- o .: "ip-from-header" + + appDetailedRequestLogging <- o .:? "detailed-logging" .!= False + appShouldLogAll <- o .:? "should-log-all" .!= False + + appMgrVersionSpec <- o .: "app-mgr-version-spec" + appFilesystemBase <- o .: "filesystem-base" + appCorsOverrideStar <- o .:? "cors-override-star" + return AppSettings { .. } + +-- | Raw bytes at compile time of @config/settings.yml@ +configSettingsYmlBS :: ByteString +configSettingsYmlBS = $(embedFile configSettingsYml) + +-- | @config/settings.yml@, parsed to a @Value@. +configSettingsYmlValue :: Value +configSettingsYmlValue = either Exception.throw id $ decodeEither' configSettingsYmlBS + +-- | A version of @AppSettings@ parsed at compile time from @config/settings.yml@. +compileTimeAppSettings :: AppSettings +compileTimeAppSettings = case fromJSON $ applyEnvValue False mempty configSettingsYmlValue of + Error e -> panic $ toS e + Success settings -> settings + +injectSettings :: Monad m => AppSettings -> Fused.Labelled "appSettings" (ReaderT AppSettings) m a -> m a +injectSettings s = flip runReaderT s . Fused.runLabelled @"appSettings" diff --git a/agent/src/Startlude.hs b/agent/src/Startlude.hs new file mode 100644 index 000000000..7277be2ff --- /dev/null +++ b/agent/src/Startlude.hs @@ -0,0 +1,128 @@ +{-# OPTIONS_GHC -fno-warn-orphans #-} +{-# LANGUAGE UndecidableInstances #-} +module Startlude + ( module X + , module Startlude + ) +where + +import Control.Arrow as X + ( (&&&) ) +import Control.Comonad as X +import Control.Monad.Trans.Maybe as X +import Control.Error.Util as X + hiding ( (??) ) +import Data.Coerce as X +import Data.String as X + ( String + , fromString + ) +import Data.Time.Clock as X +import Protolude as X + hiding ( bool + , hush + , isLeft + , isRight + , note + , tryIO + , readMaybe + , (:+:) + , throwError + , toTitle + , toStrict + , toUpper + , Handler(..) + , yield + , type (==) + ) +import qualified Protolude as P + ( readMaybe ) + +-- not reexported +import Control.Monad.Logger +import Control.Monad.Trans.Resource +import qualified Control.Carrier.Lift as FE +import qualified Control.Carrier.Reader as FE +import qualified Control.Carrier.Error.Church as FE +import qualified Control.Effect.Labelled as FE +import Data.Singletons.Prelude.Eq ( PEq ) +import Yesod.Core ( MonadHandler(..) ) +import Control.Monad.Trans.Control +import Control.Monad.Base + +id :: a -> a +id = identity + +ioLogFailure :: Exception e => String -> e -> IO () +ioLogFailure t e = putStrLn @Text (toS t <> show e) >> pure () + +readMaybe :: Read a => Text -> Maybe a +readMaybe = P.readMaybe . toS + +-- orphans for stitching fused effects into the larger ecosystem +instance MonadResource (sub m) => MonadResource (FE.Labelled label sub m) where + liftResourceT = FE.Labelled . liftResourceT +instance MonadResource m => MonadResource (FE.LiftC m) where + liftResourceT = FE.LiftC . liftResourceT +instance MonadResource m => MonadResource (FE.ReaderC r m) where + liftResourceT = lift . liftResourceT +instance MonadResource m => MonadResource (FE.ErrorC e m) where + liftResourceT = lift . liftResourceT + + +instance MonadThrow (sub m) => MonadThrow (FE.Labelled label sub m) where + throwM = FE.Labelled . throwM +instance MonadThrow m => MonadThrow (FE.LiftC m) where + throwM = FE.LiftC . throwM + +instance MonadLogger m => MonadLogger (FE.LiftC m) where +instance MonadLogger (sub m) => MonadLogger (FE.Labelled label sub m) where + monadLoggerLog a b c d = FE.Labelled $ monadLoggerLog a b c d + +instance MonadHandler m => MonadHandler (FE.LiftC m) where + type HandlerSite (FE.LiftC m) = HandlerSite m + type SubHandlerSite (FE.LiftC m) = SubHandlerSite m + liftHandler = FE.LiftC . liftHandler + liftSubHandler = FE.LiftC . liftSubHandler + +instance MonadHandler (sub m) => MonadHandler (FE.Labelled label sub m) where + type HandlerSite (FE.Labelled label sub m) = HandlerSite (sub m) + type SubHandlerSite (FE.Labelled label sub m) = SubHandlerSite (sub m) + liftHandler = FE.Labelled . liftHandler + liftSubHandler = FE.Labelled . liftSubHandler + +instance MonadTransControl t => MonadTransControl (FE.Labelled k t) where + type StT (FE.Labelled k t) a = StT t a + liftWith f = FE.Labelled $ liftWith $ \run -> f (run . FE.runLabelled) + restoreT = FE.Labelled . restoreT +instance MonadBase IO (t m) => MonadBase IO (FE.Labelled k t m) where + liftBase = FE.Labelled . liftBase +instance MonadBaseControl IO (t m) => MonadBaseControl IO (FE.Labelled k t m) where + type StM (FE.Labelled k t m) a = StM (t m) a + liftBaseWith f = FE.Labelled $ liftBaseWith $ \run -> f (run . FE.runLabelled) + restoreM = FE.Labelled . restoreM +instance MonadBase IO m => MonadBase IO (FE.LiftC m) where + liftBase = FE.LiftC . liftBase +instance MonadTransControl FE.LiftC where + type StT (FE.LiftC) a = a + liftWith f = FE.LiftC $ f $ FE.runM + restoreT = FE.LiftC +instance MonadBaseControl IO m => MonadBaseControl IO (FE.LiftC m) where + type StM (FE.LiftC m) a = StM m a + liftBaseWith = defaultLiftBaseWith + restoreM = defaultRestoreM +instance MonadBase IO m => MonadBase IO (FE.ErrorC e m) where + liftBase = liftBaseDefault +instance MonadTransControl (FE.ErrorC e) where + type StT (FE.ErrorC e) a = Either e a + liftWith f = FE.ErrorC $ \_ leaf -> f (FE.runError (pure . Left) (pure . Right)) >>= leaf + restoreT m = FE.ErrorC $ \fail leaf -> m >>= \case + Left e -> fail e + Right a -> leaf a +instance MonadBaseControl IO m => MonadBaseControl IO (FE.ErrorC e m) where + type StM (FE.ErrorC e m) a = StM m (Either e a) + liftBaseWith = defaultLiftBaseWith + restoreM = defaultRestoreM + + +instance PEq Type -- DRAGONS? I may rue the day I decided to do this diff --git a/agent/src/Startlude/ByteStream.hs b/agent/src/Startlude/ByteStream.hs new file mode 100644 index 000000000..323893af4 --- /dev/null +++ b/agent/src/Startlude/ByteStream.hs @@ -0,0 +1,13 @@ +-- {-# OPTIONS_GHC -fno-warn-unused-imports #-} +module Startlude.ByteStream + ( module Startlude.ByteStream + , module BS + ) +where + +import Data.ByteString.Streaming as BS + hiding ( ByteString ) +import Data.ByteString.Streaming as X + ( ByteString ) + +type ByteStream m = X.ByteString m diff --git a/agent/src/Startlude/ByteStream/Char8.hs b/agent/src/Startlude/ByteStream/Char8.hs new file mode 100644 index 000000000..70a81cb6a --- /dev/null +++ b/agent/src/Startlude/ByteStream/Char8.hs @@ -0,0 +1,7 @@ +module Startlude.ByteStream.Char8 + ( module X + ) +where + +import Data.ByteString.Streaming.Char8 + as X diff --git a/agent/src/Util/Conduit.hs b/agent/src/Util/Conduit.hs new file mode 100644 index 000000000..d3150abc7 --- /dev/null +++ b/agent/src/Util/Conduit.hs @@ -0,0 +1,23 @@ +module Util.Conduit where + +import Startlude + +import Conduit +import Data.Text as T +import Data.Attoparsec.Text + +parseC :: MonadIO m => Parser b -> ConduitT Text b m () +parseC parser = fix $ \cont -> parseWith g parser "" >>= \case + Done rest result -> do + yield result + unless (T.null rest) $ leftover rest >> cont + Fail _ _ msg -> panic $ toS msg + Partial _ -> panic "INCOMPLETE PARSE" + where + g :: MonadIO m => ConduitT Text o m Text + g = await >>= \case + Nothing -> pure mempty + Just x -> print x >> pure x + +lineParser :: Parser Text +lineParser = takeTill isEndOfLine <* endOfLine diff --git a/agent/src/Util/File.hs b/agent/src/Util/File.hs new file mode 100644 index 000000000..751c9dc01 --- /dev/null +++ b/agent/src/Util/File.hs @@ -0,0 +1,12 @@ +module Util.File where + +import Startlude + +import System.Directory +import System.IO.Error + +removeFileIfExists :: MonadIO m => FilePath -> m () +removeFileIfExists fileName = liftIO $ removeFile fileName `catch` handleExists + where + handleExists e | isDoesNotExistError e = return () + | otherwise = throwIO e diff --git a/agent/src/Util/Function.hs b/agent/src/Util/Function.hs new file mode 100644 index 000000000..a04628b10 --- /dev/null +++ b/agent/src/Util/Function.hs @@ -0,0 +1,16 @@ +module Util.Function where + +import Startlude + +infixr 9 .* +(.*) :: (b -> c) -> (a0 -> a1 -> b) -> a0 -> a1 -> c +(.*) = (.) . (.) +{-# INLINE (.*) #-} + +infixr 9 .** +(.**) :: (b -> c) -> (a0 -> a1 -> a2 -> b) -> a0 -> a1 -> a2 -> c +(.**) = (.) . (.*) +{-# INLINE (.**) #-} + +uncurry3 :: (a -> b -> c -> d) -> (a, b, c) -> d +uncurry3 f (a, b, c) = f a b c diff --git a/agent/src/Util/Text.hs b/agent/src/Util/Text.hs new file mode 100644 index 000000000..7e5c23001 --- /dev/null +++ b/agent/src/Util/Text.hs @@ -0,0 +1,24 @@ +module Util.Text where + +import Data.Text ( strip ) +import Startlude +import Text.Regex ( matchRegexAll + , mkRegex + , subRegex + ) + + +-- | Behaves like Ruby gsub implementation +gsub :: Text -> Text -> Text -> Text +gsub regex replaceWith str = toS $ subRegex (mkRegex $ toS regex) (toS str) (toS replaceWith) + +containsMatch :: Text -> Text -> Bool +containsMatch regex str = not . null $ getMatches regex str + +getMatches :: Text -> Text -> [Text] +getMatches regex str + | str == "" = [] + | otherwise = case matchRegexAll (mkRegex $ toS regex) (toS str) of + Nothing -> [] + Just (_, "" , after, _) -> getMatches regex (toS . strip . toS $ after) + Just (_, match, after, _) -> toS match : getMatches regex (toS after) diff --git a/agent/stack.yaml b/agent/stack.yaml new file mode 100644 index 000000000..a175fbdfc --- /dev/null +++ b/agent/stack.yaml @@ -0,0 +1,25 @@ +resolver: nightly-2020-09-29 + +packages: +- . + +extra-deps: + - aeson-1.4.7.1 + - aeson-flatten-0.1.0.2 + - exinst-0.8 + - fused-effects-1.1.0.0 + - fused-effects-th-0.1.0.2 + - git-embed-0.1.0 + - json-stream-0.4.2.4 + - protolude-0.3.0 + - streaming-conduit-0.1.2.2 + - streaming-utils-0.2.0.0 + # to avoid the ridiculous bug where stat64 is not found (only affects development) + - git: https://github.com/ProofOfKeags/persistent.git + commit: 3b52b13d9ce79cdef14bb1c37cc527657a529462 + subdirs: + - persistent-sqlite + +ghc-options: + "$locals": -fwrite-ide-info + "$everything": -haddock diff --git a/agent/test/ChecklistSpec.hs b/agent/test/ChecklistSpec.hs new file mode 100644 index 000000000..e47956e13 --- /dev/null +++ b/agent/test/ChecklistSpec.hs @@ -0,0 +1,20 @@ +module ChecklistSpec where + +import Startlude + +import Data.List ( (!!) ) +import Data.Text +import System.Directory +import Test.Hspec + +import Constants +import Lib.Synchronizers + +spec :: Spec +spec = describe "Current Version" $ do + it "Requires System Synchronizer" $ do + agentVersion `shouldSatisfy` (synchronizerVersion synchronizer ==) + it "Requires Migration Target" $ do + names <- liftIO $ listDirectory "migrations" + let targets = names <&> (fromString . toS . (!! 1) . (splitOn "::") . toS) + agentVersion `shouldSatisfy` flip elem targets diff --git a/agent/test/Lib/External/AppManifestSpec.hs b/agent/test/Lib/External/AppManifestSpec.hs new file mode 100644 index 000000000..ae6109a45 --- /dev/null +++ b/agent/test/Lib/External/AppManifestSpec.hs @@ -0,0 +1,77 @@ +{-# LANGUAGE QuasiQuotes #-} +module Lib.External.AppManifestSpec where + +import Startlude + +import Test.Hspec + +import Data.String.Interpolate.IsString +import Data.Yaml + +import Lib.External.AppManifest + +cups023Manifest :: ByteString +cups023Manifest = [i| +--- +compat: v0 +id: cups +version: 0.2.3 +title: Cups +description: + short: Peer-to-Peer Encrypted Messaging + long: A peer-to-peer encrypted messaging platform that operates over tor. +release-notes: fix autofill for password field +ports: + - internal: 59001 + tor: 59001 + - internal: 80 + tor: 80 +image: + type: tar +mount: /root +assets: + - src: httpd.conf + dst: "." + overwrite: true + - src: www + dst: "." + overwrite: true +hidden-service-version: v3 +|] + +cups023ManifestModNoUI :: ByteString +cups023ManifestModNoUI = [i| +--- +compat: v0 +id: cups +version: 0.2.3 +title: Cups +description: + short: Peer-to-Peer Encrypted Messaging + long: A peer-to-peer encrypted messaging platform that operates over tor. +release-notes: fix autofill for password field +ports: + - internal: 59001 + tor: 59001 +image: + type: tar +mount: /root +assets: + - src: httpd.conf + dst: "." + overwrite: true + - src: www + dst: "." + overwrite: true +hidden-service-version: v3 +|] + +spec :: Spec +spec = do + describe "parsing app manifest ports" $ do + it "should yield true for cups 0.2.3" $ do + res <- decodeThrow @IO @(AppManifest 0) cups023Manifest + uiAvailable res `shouldBe` True + it "should yield false for cups 0.2.3 Mod" $ do + res <- decodeThrow @IO @(AppManifest 0) cups023ManifestModNoUI + uiAvailable res `shouldBe` False diff --git a/agent/test/Lib/SoundSpec.hs b/agent/test/Lib/SoundSpec.hs new file mode 100644 index 000000000..129005a4a --- /dev/null +++ b/agent/test/Lib/SoundSpec.hs @@ -0,0 +1,16 @@ +module Lib.SoundSpec where + +import Startlude + +import Test.Hspec + +import Lib.Sound + +spec :: Spec +spec = describe "Sound Interface" $ do + it "Async sound actions should be FIFO" $ do + action <- async $ playSongTimed 400 marioDeath + action' <- async $ playSongTimed 400 marioDeath + marks0 <- wait action + marks1 <- wait action' + (marks0, marks1) `shouldSatisfy` \((s0, f0), (s1, f1)) -> s1 > s0 && s1 > f0 || s0 > s1 && s0 > f1 diff --git a/agent/test/Lib/Types/EmverProp.hs b/agent/test/Lib/Types/EmverProp.hs new file mode 100644 index 000000000..f02c9312b --- /dev/null +++ b/agent/test/Lib/Types/EmverProp.hs @@ -0,0 +1,149 @@ +{-# LANGUAGE TemplateHaskell #-} +module Lib.Types.EmverProp where + +import Startlude hiding ( Any ) + +import Hedgehog as Test +import Lib.Types.Emver +import Hedgehog.Range +import Hedgehog.Gen as Gen +import qualified Data.Attoparsec.Text as Atto + +versionGen :: MonadGen m => m Version +versionGen = do + a <- word (linear 0 30) + b <- word (linear 0 30) + c <- word (linear 0 30) + d <- word (linear 0 30) + pure $ Version (a, b, c, d) + +rangeGen :: MonadGen m => m VersionRange +rangeGen = choice [pure None, pure Any, anchorGen, disjGen, conjGen] + +anchorGen :: MonadGen m => m VersionRange +anchorGen = do + c <- element [LT, EQ, GT] + f <- element [Left, Right] + Anchor (f c) <$> versionGen + +conjGen :: MonadGen m => m VersionRange +conjGen = liftA2 conj rangeGen rangeGen + +disjGen :: MonadGen m => m VersionRange +disjGen = liftA2 disj rangeGen rangeGen + +prop_conjAssoc :: Property +prop_conjAssoc = property $ do + a <- forAll rangeGen + b <- forAll rangeGen + c <- forAll rangeGen + obs <- forAll versionGen + (obs <|| conj a (conj b c)) === (obs <|| conj (conj a b) c) + +prop_conjCommut :: Property +prop_conjCommut = property $ do + a <- forAll rangeGen + b <- forAll rangeGen + obs <- forAll versionGen + (obs <|| conj a b) === (obs <|| conj b a) + +prop_disjAssoc :: Property +prop_disjAssoc = property $ do + a <- forAll rangeGen + b <- forAll rangeGen + c <- forAll rangeGen + obs <- forAll versionGen + (obs <|| disj a (disj b c)) === (obs <|| disj (disj a b) c) + +prop_disjCommut :: Property +prop_disjCommut = property $ do + a <- forAll rangeGen + b <- forAll rangeGen + obs <- forAll versionGen + (obs <|| disj a b) === (obs <|| disj b a) + +prop_anyIdentConj :: Property +prop_anyIdentConj = property $ do + a <- forAll rangeGen + obs <- forAll versionGen + obs <|| conj Any a === obs <|| a + +prop_noneIdentDisj :: Property +prop_noneIdentDisj = property $ do + a <- forAll rangeGen + obs <- forAll versionGen + obs <|| disj None a === obs <|| a + +prop_noneAnnihilatesConj :: Property +prop_noneAnnihilatesConj = property $ do + a <- forAll rangeGen + obs <- forAll versionGen + obs <|| conj None a === obs <|| None + +prop_anyAnnihilatesDisj :: Property +prop_anyAnnihilatesDisj = property $ do + a <- forAll rangeGen + obs <- forAll versionGen + obs <|| disj Any a === obs <|| Any + +prop_conjDistributesOverDisj :: Property +prop_conjDistributesOverDisj = property $ do + a <- forAll rangeGen + b <- forAll rangeGen + c <- forAll rangeGen + obs <- forAll versionGen + obs <|| conj a (disj b c) === obs <|| disj (conj a b) (conj a c) + +prop_disjDistributesOverConj :: Property +prop_disjDistributesOverConj = property $ do + a <- forAll rangeGen + b <- forAll rangeGen + c <- forAll rangeGen + obs <- forAll versionGen + obs <|| disj a (conj b c) === obs <|| conj (disj a b) (disj a c) + +prop_anyAcceptsAny :: Property +prop_anyAcceptsAny = property $ do + obs <- forAll versionGen + assert $ obs <|| Any + +prop_noneAcceptsNone :: Property +prop_noneAcceptsNone = property $ do + obs <- forAll versionGen + assert . not $ obs <|| None + +prop_conjBoth :: Property +prop_conjBoth = property $ do + a <- forAll rangeGen + b <- forAll rangeGen + obs <- forAll versionGen + (obs <|| conj a b) === (obs <|| a && obs <|| b) + +prop_disjEither :: Property +prop_disjEither = property $ do + a <- forAll rangeGen + b <- forAll rangeGen + obs <- forAll versionGen + (obs <|| disj a b) === (obs <|| a || obs <|| b) + +prop_rangeParseRoundTrip :: Property +prop_rangeParseRoundTrip = withShrinks 0 . property $ do + a <- forAll rangeGen + obs <- forAll versionGen + when (a == None) Test.discard + -- we do not use 'tripping' here since 'tripping' requires equality of representation + -- we only want to check equality up to OBSERVATION + (satisfies obs <$> Atto.parseOnly parseRange (show a)) === Right (satisfies obs a) + +prop_anchorLeftIsNegatedRight :: Property +prop_anchorLeftIsNegatedRight = property $ do + a <- forAll anchorGen + neg <- case a of + Anchor (Right o) v -> pure $ Anchor (Left o) v + Anchor (Left o) v -> pure $ Anchor (Right o) v + _ -> Test.discard + obs <- forAll versionGen + obs <|| a /== obs <|| neg + +tests :: IO Bool +tests = checkParallel $ $$discover diff --git a/agent/test/Live/Metrics.hs b/agent/test/Live/Metrics.hs new file mode 100644 index 000000000..14e22d552 --- /dev/null +++ b/agent/test/Live/Metrics.hs @@ -0,0 +1,22 @@ +module Live.Metrics where + +import Lib.External.Metrics.Df +import Lib.External.Metrics.Iotop +import Lib.External.Metrics.ProcDev +import Lib.External.Metrics.Top +import Startlude + +parseIotopOutput :: IO IotopMetrics +parseIotopOutput = parseIotop <$> readFile "./test/Live/iotop.sample" + +parseTopOutput :: IO TopMetrics +parseTopOutput = parseTop <$> readFile "./test/Live/top.sample" + +parseDfOutput :: IO DfMetrics +parseDfOutput = parseDf <$> readFile "./test/Live/df.sample" + +parseProcDevOutput :: IO (UTCTime, ProcDevMomentStats) +parseProcDevOutput = do + res <- readFile "./test/Live/procDev.sample" + now <- getCurrentTime + pure $ parseProcDev now res diff --git a/agent/test/Live/Serialize.hs b/agent/test/Live/Serialize.hs new file mode 100644 index 000000000..bf74279c9 --- /dev/null +++ b/agent/test/Live/Serialize.hs @@ -0,0 +1,30 @@ +{-# LANGUAGE QuasiQuotes #-} +module Live.Serialize where + +import Startlude hiding ( runReader ) + +import Control.Carrier.Lift +import Data.String.Interpolate.IsString + +import Application +import Lib.Algebra.State.RegistryUrl +import Lib.External.Registry +import Lib.SystemPaths + +someYaml :: ByteString +someYaml = [i| +bitcoind: + title: "Bitcoin Core" + description: + short: "A Bitcoin Full Node" + long: "The bitcoin full node implementation by Bitcoin Core." + version-info: + - version: 0.18.1 + release-notes: "Some stuff" + icon-type: png +|] + +appRegistryTest :: IO (Either String AppManifestRes) +appRegistryTest = do + settings <- getAppSettings + runM . injectFilesystemBaseFromContext settings . runRegistryUrlIOC $ parseBsManifest someYaml diff --git a/agent/test/Live/df.sample b/agent/test/Live/df.sample new file mode 100644 index 000000000..09e838c6a --- /dev/null +++ b/agent/test/Live/df.sample @@ -0,0 +1,2 @@ +Filesystem 1K-blocks Used Available Use% Mounted on +/dev/root 30391116 16800060 12320856 58% / \ No newline at end of file diff --git a/agent/test/Live/iotop.sample b/agent/test/Live/iotop.sample new file mode 100644 index 000000000..1186d0214 --- /dev/null +++ b/agent/test/Live/iotop.sample @@ -0,0 +1,119 @@ +Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s +Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s + TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND + 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init + 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] + 4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H] + 6 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [mm_percpu_wq] + 7 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] + 8 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_sched] + 9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_bh] + 10 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] + 11 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0] + 12 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [cpuhp/0] + 13 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kdevtmpfs] + 14 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [netns] + 15 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_tasks_kthre] + 16 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kauditd] + 17 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khungtaskd] + 18 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [oom_reaper] + 19 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [writeback] + 20 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kcompactd0] + 21 be/5 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksmd] + 22 be/7 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khugepaged] + 23 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [crypto] + 24 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kintegrityd] + 25 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kblockd] + 26 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ata_sff] + 27 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [md] + 28 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [edac-poller] + 29 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [devfreq_wq] + 30 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdogd] + 34 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kswapd0] + 35 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u3:0] + 36 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ecryptfs-kthrea] + 78 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthrotld] + 79 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [acpi_thermal_pm] + 80 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [scsi_eh_0] + 81 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [scsi_tmf_0] + 82 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [scsi_eh_1] + 83 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [scsi_tmf_1] + 89 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ipv6_addrconf] + 98 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kstrp] + 115 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [charger_manager] + 155 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [scsi_eh_2] + 156 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [scsi_tmf_2] + 157 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:1H] + 268 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [raid5wq] + 321 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [jbd2/vda1-8] + 322 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ext4-rsv-conver] + 391 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [iscsi_eh] + 392 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd-journald + 406 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lvmetad -f + 408 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ib-comp-wq] + 410 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ib-comp-unb-wq] + 411 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ib_mcast] + 415 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ib_nl_sa_wq] + 418 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rdma_cm] + 530 be/4 systemd- 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd-timesyncd + 577 be/4 systemd- 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd-timesyncd [sd-resolve] + 613 be/4 systemd- 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd-networkd + 633 be/4 systemd- 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd-resolved + 711 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd-udevd + 797 be/4 syslog 0.00 B/s 0.00 B/s 0.00 % 0.00 % rsyslogd -n + 811 be/4 syslog 0.00 B/s 0.00 B/s 0.00 % 0.00 % rsyslogd -n [in:imuxsock] + 812 be/4 syslog 0.00 B/s 0.00 B/s 0.00 % 0.00 % rsyslogd -n [in:imklog] + 813 be/4 syslog 0.00 B/s 0.00 B/s 0.00 % 0.00 % rsyslogd -n [rs:main Q:Reg] + 799 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % cron -f + 802 be/4 daemon 0.00 B/s 0.00 B/s 0.00 % 0.00 % atd -f + 803 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % python3 /usr/bin/networkd-dispatcher --run-startup-triggers + 889 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % python3 /usr/bin/networkd-dispatcher --run-startup-triggers [gmain] + 805 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd-logind + 807 be/4 messageb 0.00 B/s 0.00 B/s 0.00 % 0.00 % dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only + 817 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ + 9445 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ + 9446 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ +19695 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ +19699 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ +23977 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ +23982 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ +23983 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ +23984 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ +23986 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ +23987 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lxcfs /var/lib/lxcfs/ + 819 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % accounts-daemon + 833 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % accounts-daemon [gmain] + 835 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % accounts-daemon [gdbus] + 825 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyS0 vt220 + 828 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % agetty -o -p -- \u --noclear tty1 linux + 829 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal + 891 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal [gmain] + 838 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % polkitd --no-debug + 840 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % polkitd --no-debug [gmain] + 844 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % polkitd --no-debug [gdbus] + 839 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % sshd -D +22492 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --user +22493 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % (sd-pam) +22585 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % tmux +22586 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % -bash +22597 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % ./start9-registry +22598 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % ./start9-registry [ghc_ticker] +22599 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % ./start9-registry [start9-regist:w] +22600 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % ./start9-registry [start9-regist:w] +22601 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % ./start9-registry [start9-regist:w] +22602 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % ./start9-registry [start9-regist:w] +22686 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % ./start9-registry [start9-regist:w] +22953 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % ./start9-registry [start9-regist:w] +23052 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:2] +23761 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u2:1] +23861 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u2:2] +23946 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0] +24091 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % sshd: root@pts/0 +24198 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % -bash +24264 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u2:0] +24265 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u2:3] +24266 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u2:4] +24336 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:1] +24407 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % python3 /usr/sbin/iotop -bn1 +29224 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [xfsalloc] +29227 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [xfs_mru_cache] diff --git a/agent/test/Live/lscpu.sample b/agent/test/Live/lscpu.sample new file mode 100644 index 000000000..dd9ae19f6 --- /dev/null +++ b/agent/test/Live/lscpu.sample @@ -0,0 +1,15 @@ +Architecture: armv7l +Byte Order: Little Endian +CPU(s): 4 +On-line CPU(s) list: 0-3 +Thread(s) per core: 1 +Core(s) per socket: 4 +Socket(s): 1 +Vendor ID: ARM +Model: 3 +Model name: Cortex-A72 +Stepping: r0p3 +CPU max MHz: 1500.0000 +CPU min MHz: 600.0000 +BogoMIPS: 270.00 +Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 \ No newline at end of file diff --git a/agent/test/Live/procDev.sample b/agent/test/Live/procDev.sample new file mode 100755 index 000000000..eff9158c8 --- /dev/null +++ b/agent/test/Live/procDev.sample @@ -0,0 +1,6 @@ +Inter-| Receive | Transmit + face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed + eth0: 1490932684 1431621 0 0 0 0 0 0 1725610837 1054325 0 0 0 0 0 0 + eth1: 1000000000 1000000 0 0 0 0 0 0 1000000000 1000000 0 0 0 0 0 0 + eth2: fuck askksf oijefoijsf everythign is dicked maodsfijoijther shit bals. + lo: 51480 488 0 0 0 0 0 0 51480 488 0 0 0 0 0 0 diff --git a/agent/test/Live/test-configure-bitcoind b/agent/test/Live/test-configure-bitcoind new file mode 100644 index 000000000..558dd8e9c --- /dev/null +++ b/agent/test/Live/test-configure-bitcoind @@ -0,0 +1,2 @@ +#!/bin/bash +curl -k --header "Content-Type: application/json" --request PATCH --data '{"rpcuser":"bitcoin","rpcpassword":"shitcoin"}' https://localhost:5959/v0/apps/installed/bitcoind/config \ No newline at end of file diff --git a/agent/test/Live/test-install-bitcoind b/agent/test/Live/test-install-bitcoind new file mode 100644 index 000000000..97b3b2cc8 --- /dev/null +++ b/agent/test/Live/test-install-bitcoind @@ -0,0 +1,2 @@ +#!/bin/bash +curl -k --header "Content-Type: application/json" --request POST --data '{"id":"bitcoind","version":"0.18.1"}' https://localhost:5959/v0/apps/install \ No newline at end of file diff --git a/agent/test/Live/test-register b/agent/test/Live/test-register new file mode 100755 index 000000000..1c5251668 --- /dev/null +++ b/agent/test/Live/test-register @@ -0,0 +1,3 @@ +#!/bin/bash + +curl -k --header "Content-Type: application/json" --request POST --data '{"productKey":"abcdefgh","pubKey":"03df51984d6b8b8b1cc693e239491f77a36c9e9dfe4a486e9972a18e03610a0d22"}' https://localhost:5959/v0/register \ No newline at end of file diff --git a/agent/test/Live/test-self-update b/agent/test/Live/test-self-update new file mode 100755 index 000000000..715424aec --- /dev/null +++ b/agent/test/Live/test-self-update @@ -0,0 +1,3 @@ +#!/bin/bash +curl -k --header "Content-Type: application/json" --request POST --data '{"versionSpecification":">=0.0.0"}' https://localhost:5959/v0/update + diff --git a/agent/test/Live/top.sample b/agent/test/Live/top.sample new file mode 100644 index 000000000..150f1dcba --- /dev/null +++ b/agent/test/Live/top.sample @@ -0,0 +1,130 @@ +top - 20:41:46 up 15:49, 1 user, load average: 3.28, 3.29, 3.01 +Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie +%Cpu(s): 3.0 us, 4.5 sy, 0.0 ni, 50.7 id, 41.8 wa, 0.0 hi, 0.0 si, 0.0 st +MiB Mem : 3906.0 total, 568.4 free, 799.6 used, 2538.1 buff/cache +MiB Swap: 100.0 total, 31.5 free, 68.5 used. 2960.4 avail Mem + + PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND + 983 root 20 0 777140 586900 2264 S 6.2 14.7 363:41.88 bitcoind + 1 root 20 0 33700 5376 4344 S 0.0 0.1 0:03.90 systemd + 2 root 20 0 0 0 0 S 0.0 0.0 0:00.07 kthreadd + 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp + 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp + 8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq + 9 root 20 0 0 0 0 S 0.0 0.0 0:14.62 ksoftirqd/0 + 10 root 20 0 0 0 0 I 0.0 0.0 0:40.13 rcu_sched + 11 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh + 12 root rt 0 0 0 0 S 0.0 0.0 0:00.02 migration/0 + 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 + 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1 + 15 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/1 + 16 root 20 0 0 0 0 S 0.0 0.0 0:01.66 ksoftirqd/1 + 19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/2 + 20 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/2 + 21 root 20 0 0 0 0 S 0.0 0.0 0:03.19 ksoftirqd/2 + 24 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/3 + 25 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/3 + 26 root 20 0 0 0 0 S 0.0 0.0 0:01.87 ksoftirqd/3 + 29 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs + 30 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns + 34 root 20 0 0 0 0 S 0.0 0.0 0:00.03 khungtaskd + 35 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper + 36 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback + 37 root 20 0 0 0 0 S 0.0 0.0 0:01.78 kcompactd0 + 38 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 crypto + 39 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kblockd + 41 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdogd + 42 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rpciod + 43 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/u9:0-hci0 + 44 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xprtiod + 47 root 20 0 0 0 0 S 0.0 0.0 0:50.55 kswapd0 + 48 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 nfsiod + 59 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kthrotld + 60 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 iscsi_eh + 62 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 dwc_otg + 64 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 DWC Notificatio + 65 root 1 -19 0 0 0 S 0.0 0.0 0:00.00 vchiq-slot/0 + 66 root 1 -19 0 0 0 S 0.0 0.0 0:00.00 vchiq-recy/0 + 67 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 vchiq-sync/0 + 68 root 20 0 0 0 0 S 0.0 0.0 0:00.00 vchiq-keep/0 + 69 root 10 -10 0 0 0 S 0.0 0.0 0:00.00 SMIO + 71 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/38-brcmstb_ + 72 root -51 0 0 0 0 S 0.0 0.0 0:00.65 irq/39-mmc1 + 74 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/39-mmc0 + 75 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mmc_complete + 79 root 20 0 0 0 0 D 0.0 0.0 0:22.44 jbd2/mmcblk0p2- + 80 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 ext4-rsv-conver + 84 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 ipv6_addrconf + 123 root 20 0 21216 6296 5424 S 0.0 0.2 0:02.12 systemd-journal + 148 root 20 0 18016 2648 1872 S 0.0 0.1 0:00.66 systemd-udevd + 182 root 10 -10 0 0 0 S 0.0 0.0 0:00.00 SMIO + 199 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mmal-vchiq + 203 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mmal-vchiq + 208 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mmal-vchiq + 217 root -2 0 0 0 0 S 0.0 0.0 0:00.00 v3d_bin + 218 root -2 0 0 0 0 S 0.0 0.0 0:00.00 v3d_render + 220 root -2 0 0 0 0 S 0.0 0.0 0:00.00 v3d_tfu + 221 root -2 0 0 0 0 S 0.0 0.0 0:00.00 v3d_csd + 222 root -2 0 0 0 0 S 0.0 0.0 0:00.00 v3d_cache_clean + 238 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 cfg80211 + 241 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 brcmf_wq/mmc1:0 + 242 root 20 0 0 0 0 S 0.0 0.0 0:00.38 brcmf_wdog/mmc1 + 285 systemd+ 20 0 22380 3164 2676 S 0.0 0.1 0:00.46 systemd-timesyn + 328 nobody 20 0 4320 1516 1344 S 0.0 0.0 0:00.36 thd + 333 root 20 0 7944 1840 1656 S 0.0 0.0 0:00.13 cron + 335 root 39 19 3692 1768 1568 S 0.0 0.0 0:00.04 alsactl + 342 message+ 20 0 6556 2792 2324 S 0.0 0.1 0:00.25 dbus-daemon + 346 root 20 0 13092 4768 4152 S 0.0 0.1 0:00.30 systemd-logind + 349 root 20 0 27656 1068 928 S 0.0 0.0 0:06.77 rngd + 361 root 20 0 10708 2596 2188 S 0.0 0.1 0:00.28 wpa_supplicant + 362 root 20 0 25512 2764 2156 S 0.0 0.1 0:00.37 rsyslogd + 464 root 20 0 11088 3176 2716 S 0.0 0.1 0:00.50 wpa_supplicant + 487 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/u9:1-hci0 + 488 root 20 0 2140 128 0 S 0.0 0.0 0:00.00 hciattach + 493 root 20 0 9536 1728 1448 S 0.0 0.0 0:00.03 bluetoothd + 548 root 20 0 3028 1600 1252 S 0.0 0.0 0:00.39 dhcpcd + 550 root 20 0 1007336 35764 11120 S 0.0 0.9 3:24.38 dockerd + 555 root 20 0 211952 27340 15432 S 0.0 0.7 40:34.92 agent + 592 root 20 0 4308 948 860 S 0.0 0.0 0:00.01 agetty + 618 root 20 0 10692 3804 3364 S 0.0 0.1 0:00.01 sshd + 619 debian-+ 20 0 34724 22244 5604 S 0.0 0.6 44:17.87 tor + 635 avahi 20 0 5904 2488 2144 S 0.0 0.1 0:03.10 avahi-daemon + 636 avahi 20 0 5772 244 0 S 0.0 0.0 0:00.00 avahi-daemon + 638 root 20 0 968328 9212 4604 S 0.0 0.2 2:38.54 docker-containe + 920 root 20 0 861496 976 556 S 0.0 0.0 0:00.06 docker-proxy + 934 root 20 0 861496 1032 620 S 0.0 0.0 0:00.05 docker-proxy + 948 root 20 0 852276 1032 620 S 0.0 0.0 0:00.04 docker-proxy + 961 root 20 0 852276 860 420 S 0.0 0.0 0:00.04 docker-proxy + 968 root 20 0 889864 2112 1148 S 0.0 0.1 0:07.54 docker-containe + 1332 Debian-+ 20 0 14096 2336 1888 S 0.0 0.1 0:00.04 exim4 + 2987 root 0 -20 0 0 0 I 0.0 0.0 0:51.45 kworker/2:1H-kblockd + 3261 root 0 -20 0 0 0 I 0.0 0.0 0:40.57 kworker/1:0H-kblockd + 3580 root 0 -20 0 0 0 D 0.0 0.0 0:21.37 kworker/3:0H+kblockd + 4084 root 20 0 0 0 0 I 0.0 0.0 0:03.75 kworker/u8:0-events_unbound + 4155 root 0 -20 0 0 0 I 0.0 0.0 0:08.39 kworker/0:2H-mmc_complete + 4176 root 20 0 0 0 0 I 0.0 0.0 0:00.04 kworker/1:0-mm_percpu_wq + 4185 root 20 0 0 0 0 I 0.0 0.0 0:00.14 kworker/3:0-mm_percpu_wq + 4187 root 20 0 0 0 0 D 0.0 0.0 0:00.48 kworker/2:3+events_freezable + 4191 root 20 0 0 0 0 I 0.0 0.0 0:00.13 kworker/1:2-mm_percpu_wq + 4218 root 20 0 12204 6288 5364 S 0.0 0.2 0:00.04 sshd + 4224 pi 20 0 14564 6632 5788 S 0.0 0.2 0:00.14 systemd + 4227 pi 20 0 35240 2964 1636 S 0.0 0.1 0:00.00 (sd-pam) + 4241 pi 20 0 12204 4084 3140 S 0.0 0.1 0:00.44 sshd + 4244 pi 20 0 8492 3624 2704 S 0.0 0.1 0:00.24 bash + 4255 root 20 0 0 0 0 I 0.0 0.0 0:00.31 kworker/u8:1-events_unbound + 4256 root 20 0 0 0 0 I 0.0 0.0 0:00.06 kworker/2:2-events_power_efficient + 4270 root 20 0 0 0 0 I 0.0 0.0 0:00.11 kworker/0:1-events_power_efficient + 4307 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/3:2 + 4326 root 0 -20 0 0 0 I 0.0 0.0 0:00.01 kworker/3:1H-kblockd + 4327 root 0 -20 0 0 0 I 0.0 0.0 0:00.01 kworker/2:2H-kblockd + 4337 root 0 -20 0 0 0 I 0.0 0.0 0:00.01 kworker/1:1H-kblockd + 4338 root 20 0 0 0 0 I 0.0 0.0 0:00.03 kworker/0:2-events + 4343 root 0 -20 0 0 0 I 0.0 0.0 0:00.01 kworker/0:0H-kblockd + 4382 root 20 0 0 0 0 I 0.0 0.0 0:00.02 kworker/2:0-mm_percpu_wq + 4389 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/2:0H-kblockd + 4390 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/3:2H + 4396 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:2H-kblockd + 4397 root 20 0 0 0 0 I 0.0 0.0 0:00.02 kworker/0:0-mm_percpu_wq + 4398 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/2:1-mm_percpu_wq + 4399 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:1H-kblockd + 4400 pi 20 0 10184 2828 2448 R 0.0 0.1 0:00.01 top diff --git a/agent/test/Main.hs b/agent/test/Main.hs new file mode 100644 index 000000000..cd7dadb3d --- /dev/null +++ b/agent/test/Main.hs @@ -0,0 +1,13 @@ +module Main where + +import Startlude + +import Test.Hspec.Runner +import Test.Hspec.Formatters +import qualified Spec +import qualified Lib.Types.EmverProp as EmverProp + +main :: IO () +main = do + EmverProp.tests + hspecWith defaultConfig { configFormatter = Just progress } Spec.spec diff --git a/agent/test/Spec.hs b/agent/test/Spec.hs new file mode 100644 index 000000000..5416ef6a8 --- /dev/null +++ b/agent/test/Spec.hs @@ -0,0 +1 @@ +{-# OPTIONS_GHC -F -pgmF hspec-discover -optF --module-name=Spec #-} diff --git a/agent/weeder.dhall b/agent/weeder.dhall new file mode 100644 index 000000000..c93f586eb --- /dev/null +++ b/agent/weeder.dhall @@ -0,0 +1 @@ +{ roots = [ "^main.main$", "^Paths_.*" ], type-class-roots = True } diff --git a/appmgr/.github/workflows/rust.yml b/appmgr/.github/workflows/rust.yml new file mode 100644 index 000000000..9ebd328dd --- /dev/null +++ b/appmgr/.github/workflows/rust.yml @@ -0,0 +1,30 @@ +name: Rust + +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: Cache .cargo + uses: actions/cache@v1 + with: + path: ~/.cargo + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + ${{ runner.os }}-cargo- + - name: Cache target release directory + uses: actions/cache@v1 + with: + path: target/release + key: ${{ runner.os }}-target-release-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-target-release-${{ hashFiles('**/Cargo.lock') }} + ${{ runner.os }}-target-release- + - name: Check + run: cargo check + - name: Test + run: cargo test --release diff --git a/appmgr/.gitignore b/appmgr/.gitignore new file mode 100644 index 000000000..53eaa2196 --- /dev/null +++ b/appmgr/.gitignore @@ -0,0 +1,2 @@ +/target +**/*.rs.bk diff --git a/appmgr/Cargo.lock b/appmgr/Cargo.lock new file mode 100644 index 000000000..b4e4a074c --- /dev/null +++ b/appmgr/Cargo.lock @@ -0,0 +1,2599 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "addr2line" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" + +[[package]] +name = "aho-corasick" +version = "0.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b476ce7103678b0c6d3d395dbbae31d48ff910bd28be979ba5d48c6351131d0d" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "appmgr" +version = "0.2.5" +dependencies = [ + "argonautica", + "async-trait", + "base32", + "clap", + "ed25519-dalek", + "emver", + "failure", + "file-lock", + "futures 0.3.7", + "git-version", + "itertools 0.9.0", + "lazy_static", + "linear-map", + "log", + "openssl", + "pest", + "pest_derive", + "prettytable-rs", + "rand 0.7.3", + "regex", + "reqwest", + "rpassword", + "serde", + "serde_cbor", + "serde_json", + "serde_yaml", + "simple-logging", + "tokio", + "tokio-tar", +] + +[[package]] +name = "argonautica" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b765e206f4ab068271148430e0799aa84d81b8a13680c680f29f6c1d67da5f37" +dependencies = [ + "base64 0.10.1", + "bindgen", + "bitflags", + "cc", + "cfg-if 0.1.10", + "failure", + "futures 0.1.30", + "futures-cpupool", + "libc", + "log", + "nom 4.2.3", + "num_cpus", + "rand 0.6.5", + "scopeguard 1.1.0", + "tempdir", +] + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "async-trait" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b246867b8b3b6ae56035f1eb1ed557c1d8eae97f0d53696138a50fa0e3a3b8c0" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "autocfg" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "backtrace" +version = "0.3.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2baad346b2d4e94a24347adeee9c7a93f412ee94b9cc26e5b59dea23848e9f28" +dependencies = [ + "addr2line", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base32" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa" + +[[package]] +name = "base64" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" +dependencies = [ + "byteorder", +] + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "bindgen" +version = "0.48.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d3d411fd93fd296e613bdac1d16755a6a922a4738e1c8f6a5e13542c905f3ca" +dependencies = [ + "bitflags", + "cexpr", + "cfg-if 0.1.10", + "clang-sys", + "clap", + "env_logger", + "hashbrown 0.1.8", + "lazy_static", + "log", + "peeking_take_while", + "proc-macro2 0.4.30", + "quote 0.6.13", + "regex", + "which", +] + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "bitvec" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ba35e9565969edb811639dbebfe34edc0368e472c5018474c8eb2543397f81" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2b_simd" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.3", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.4", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "bstr" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "473fc6b38233f9af7baa94fb5852dca389e3d95b8e21c8e3719301462c5d9faf" +dependencies = [ + "lazy_static", + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byteorder" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" + +[[package]] +name = "bytes" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" + +[[package]] +name = "cc" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed67cbde08356238e75fc4656be4749481eeffb09e19f320a25237d5221c985d" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cexpr" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d" +dependencies = [ + "nom 4.2.3", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clang-sys" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ef0c1bcf2e99c649104bd7a7012d8f8802684400e03db0ec0af48583c6fa0e4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + +[[package]] +name = "cpuid-bool" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg 1.0.1", + "cfg-if 0.1.10", + "lazy_static", +] + +[[package]] +name = "csv" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00affe7f6ab566df61b4be3ce8cf16bc2576bca0963ceb0955e45d514bf9a279" +dependencies = [ + "bstr", + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + +[[package]] +name = "curve25519-dalek" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8492de420e9e60bc9a1d66e2dbb91825390b738a388606600663fc529b4b307" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.3", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.4", +] + +[[package]] +name = "dirs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "dtoa" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134951f4028bdadb9b84baf4232681efbf277da25144b9b0ad65df75946c422b" + +[[package]] +name = "ed25519" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand 0.7.3", + "serde", + "sha2", + "zeroize", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "emver" +version = "0.1.0" +source = "git+https://github.com/Start9Labs/emver-rs.git#9007920a8e361669fb83b29dd8506b32eeb20180" +dependencies = [ + "either", + "fp-core", + "nom 6.0.0", + "serde", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f62bc5e388624f1a13da83b479275dbec9663a876e414df80decf7d2cdab6670" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "env_logger" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "failure" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" +dependencies = [ + "backtrace", + "failure_derive", +] + +[[package]] +name = "failure_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", + "synstructure", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "file-lock" +version = "1.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16486239b3741480cef090b6f9924faf5dd5481022c6f266a51fab1a92971a2" +dependencies = [ + "gcc", + "libc", + "mktemp", + "nix", +] + +[[package]] +name = "filetime" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed85775dcc68644b5c950ac06a2b23768d3bc9390464151aaf27136998dcf9e" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "redox_syscall", + "winapi 0.3.9", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "fp-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "338a5feb6c7248603dfa3da758da4e99abb65e792a157fe1d657e7c2f5fbcd0b" +dependencies = [ + "itertools 0.8.2", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +dependencies = [ + "bitflags", + "fuchsia-zircon-sys", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" + +[[package]] +name = "funty" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ba62103ce691c2fd80fbae2213dfdda9ce60804973ac6b6e97de818ea7f52c8" + +[[package]] +name = "futures" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed" + +[[package]] +name = "futures" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95314d38584ffbfda215621d723e0a3906f032e03ae5551e650058dac83d4797" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0448174b01148032eed37ac4aed28963aaaa8cfa93569a08e5b479bbc6c2c151" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18eaa56102984bed2c88ea39026cff3ce3b4c7f508ca970cedf2450ea10d4e46" + +[[package]] +name = "futures-cpupool" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" +dependencies = [ + "futures 0.1.30", + "num_cpus", +] + +[[package]] +name = "futures-executor" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5f8e0c9258abaea85e78ebdda17ef9666d390e987f006be6080dfe354b708cb" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1798854a4727ff944a7b12aa999f58ce7aa81db80d2dfaaf2ba06f065ddd2b" + +[[package]] +name = "futures-macro" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36fccf3fc58563b4a14d265027c627c3b665d7fed489427e88e7cc929559efe" +dependencies = [ + "proc-macro-hack", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e3ca3f17d6e8804ae5d3df7a7d35b2b3a6fe89dac84b31872720fc3060a0b11" + +[[package]] +name = "futures-task" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d502af37186c4fef99453df03e374683f8a1eec9dcc1e66b3b82dc8278ce3c" +dependencies = [ + "once_cell", +] + +[[package]] +name = "futures-util" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abcb44342f62e6f3e8ac427b8aa815f724fd705dfad060b18ac7866c15bb8e34" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project 1.0.1", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", +] + +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "generic-array" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check 0.9.2", +] + +[[package]] +name = "getrandom" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" + +[[package]] +name = "git-version" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94918e83f1e01dedc2e361d00ce9487b14c58c7f40bab148026fa39d42cb41e2" +dependencies = [ + "git-version-macro", + "proc-macro-hack", +] + +[[package]] +name = "git-version-macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34a97a52fdee1870a34fa6e4b77570cba531b27d1838874fef4429a791a3d657" +dependencies = [ + "proc-macro-hack", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", +] + +[[package]] +name = "glob" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" + +[[package]] +name = "h2" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", + "tracing-futures", +] + +[[package]] +name = "half" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d36fab90f82edc3c747f9d438e06cf0a491055896f2a279638bb5beed6c40177" + +[[package]] +name = "hashbrown" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da" +dependencies = [ + "byteorder", + "scopeguard 0.3.3", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + +[[package]] +name = "hermit-abi" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +dependencies = [ + "libc", +] + +[[package]] +name = "http" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "httparse" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" + +[[package]] +name = "httpdate" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" + +[[package]] +name = "humantime" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" +dependencies = [ + "quick-error", +] + +[[package]] +name = "hyper" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3afcfae8af5ad0576a31e768415edb627824129e8e5a29b8bfccb2f234e835" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project 0.4.27", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d979acc56dcb5b8dddba3917601745e877576475aa046df3226eabdecef78eed" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-tls", +] + +[[package]] +name = "idna" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" +dependencies = [ + "autocfg 1.0.1", + "hashbrown 0.9.1", +] + +[[package]] +name = "iovec" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +dependencies = [ + "libc", +] + +[[package]] +name = "ipnet" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47be2f14c678be2fdcab04ab1171db51b2762ce6f0a8ee87c8dd4a04ed216135" + +[[package]] +name = "itertools" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" + +[[package]] +name = "jobserver" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca059e81d9486668f12d455a4ea6daa600bd408134cd17e3d3fb5a32d1f016f8" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lexical-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db65c6da02e61f55dae90a0ae427b2a5f6b3e8db09f58d10efab23af92592616" +dependencies = [ + "arrayvec", + "bitflags", + "cfg-if 0.1.10", + "ryu", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" + +[[package]] +name = "libloading" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" +dependencies = [ + "cc", + "winapi 0.3.9", +] + +[[package]] +name = "linear-map" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfae20f6b19ad527b550c223fddc3077a547fc70cda94b9b566575423fd303ee" +dependencies = [ + "serde", + "serde_test", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" + +[[package]] +name = "log" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +dependencies = [ + "cfg-if 0.1.10", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" + +[[package]] +name = "memchr" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mime_guess" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" +dependencies = [ + "adler", + "autocfg 1.0.1", +] + +[[package]] +name = "mio" +version = "0.6.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" +dependencies = [ + "cfg-if 0.1.10", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log", + "miow 0.2.1", + "net2", + "slab", + "winapi 0.2.8", +] + +[[package]] +name = "mio-named-pipes" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656" +dependencies = [ + "log", + "mio", + "miow 0.3.5", + "winapi 0.3.9", +] + +[[package]] +name = "mio-uds" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" +dependencies = [ + "iovec", + "libc", + "mio", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +dependencies = [ + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", +] + +[[package]] +name = "miow" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07b88fb9795d4d36d62a012dfbf49a8f5cf12751f36d31a9dbe66d528e58979e" +dependencies = [ + "socket2", + "winapi 0.3.9", +] + +[[package]] +name = "mktemp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77001ceb9eed65439f3dc2a2543f9ba1417d912686bf224a7738d0966e6dcd69" +dependencies = [ + "uuid", +] + +[[package]] +name = "native-tls" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "net2" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ebc3ec692ed7c9a255596c67808dee269f64655d8baf7b4f0638e51ba1d6853" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "nix" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "becb657d662f1cd2ef38c7ad480ec6b8cf9e96b27adb543e594f9cf0f2e6065c" +dependencies = [ + "bitflags", + "cc", + "cfg-if 0.1.10", + "libc", + "void", +] + +[[package]] +name = "nom" +version = "4.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" +dependencies = [ + "memchr", + "version_check 0.1.5", +] + +[[package]] +name = "nom" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4489ccc7d668957ddf64af7cd027c081728903afa6479d35da7e99bf5728f75f" +dependencies = [ + "bitvec", + "lexical-core", + "memchr", + "version_check 0.9.2", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" + +[[package]] +name = "once_cell" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645ad" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl" +version = "0.10.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d575eff3665419f9b83678ff2815858ad9d11567e082f5ac1814baba4e2bcb4" +dependencies = [ + "bitflags", + "cfg-if 0.1.10", + "foreign-types", + "lazy_static", + "libc", + "openssl-sys", +] + +[[package]] +name = "openssl-probe" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" + +[[package]] +name = "openssl-sys" +version = "0.9.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a842db4709b604f0fe5d1170ae3565899be2ad3d9cbc72dedc789ac0511f78de" +dependencies = [ + "autocfg 1.0.1", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" +dependencies = [ + "maplit", + "pest", + "sha-1", +] + +[[package]] +name = "pin-project" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15" +dependencies = [ + "pin-project-internal 0.4.27", +] + +[[package]] +name = "pin-project" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee41d838744f60d959d7074e3afb6b35c7456d0f61cad38a24e35e6553f73841" +dependencies = [ + "pin-project-internal 1.0.1", +] + +[[package]] +name = "pin-project-internal" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81a4ffa594b66bff340084d4081df649a7dc049ac8d7fc458d8e628bfbbb2f86" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + +[[package]] +name = "ppv-lite86" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20" + +[[package]] +name = "prettytable-rs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fd04b170004fa2daccf418a7f8253aaf033c27760b5f225889024cf66d7ac2e" +dependencies = [ + "atty", + "csv", + "encode_unicode", + "lazy_static", + "term", + "unicode-width", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro-nested" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +dependencies = [ + "unicode-xid 0.1.0", +] + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid 0.2.1", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +dependencies = [ + "proc-macro2 0.4.30", +] + +[[package]] +name = "quote" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +dependencies = [ + "proc-macro2 1.0.24", +] + +[[package]] +name = "radium" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8" + +[[package]] +name = "rand" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +dependencies = [ + "libc", + "rand 0.4.6", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi 0.3.9", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.7", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg", + "rand_xorshift", + "winapi 0.3.9", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.3.1", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +dependencies = [ + "libc", + "rand_core 0.4.2", + "winapi 0.3.9", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi 0.3.9", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.4.2", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "redox_users" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +dependencies = [ + "getrandom", + "redox_syscall", + "rust-argon2", +] + +[[package]] +name = "regex" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-automata" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" +dependencies = [ + "byteorder", +] + +[[package]] +name = "regex-syntax" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "reqwest" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9eaa17ac5d7b838b7503d118fa16ad88f440498bf9ffe5424e621f93190d61e" +dependencies = [ + "base64 0.12.3", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "lazy_static", + "log", + "mime", + "mime_guess", + "native-tls", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-tls", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "rpassword" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d755237fc0f99d98641540e66abac8bc46a0652f19148ac9e21de2da06b326c9" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "rust-argon2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dab61250775933275e84053ac235621dfb739556d5c54a2f2e9313b7cf43a19" +dependencies = [ + "base64 0.12.3", + "blake2b_simd", + "constant_time_eq", + "crossbeam-utils", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" + +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "schannel" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +dependencies = [ + "lazy_static", + "winapi 0.3.9", +] + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "security-framework" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_cbor" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622" +dependencies = [ + "half", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_test" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9a49e2f787c0fddfd5e758cbbd3cbf81c3a8d12ef091283c52d9e9b4d417d3c" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" +dependencies = [ + "dtoa", + "itoa", + "serde", + "url", +] + +[[package]] +name = "serde_yaml" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7baae0a99f1a324984bcdc5f0718384c1f69775f1c7eec8b859b71b443e3fd7" +dependencies = [ + "dtoa", + "linked-hash-map", + "serde", + "yaml-rust", +] + +[[package]] +name = "sha-1" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[package]] +name = "sha2" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2933378ddfeda7ea26f48c555bdad8bb446bf8a3d17832dc83e380d444cfb8c1" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 0.1.10", + "cpuid-bool", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "signal-hook-registry" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce32ea0c6c56d5eacaeb814fbed9960547021d3edd010ded1425f180536b20ab" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29f060a7d147e33490ec10da418795238fd7545bba241504d6b31a409f2e6210" + +[[package]] +name = "simple-logging" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00d48e85675326bb182a2286ea7c1a0b264333ae10f27a937a72be08628b542" +dependencies = [ + "lazy_static", + "log", + "thread-id", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" + +[[package]] +name = "socket2" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1fa70dc5c8104ec096f4fe7ede7a221d35ae13dcd19ba1ad9a81d2cab9a1c44" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "redox_syscall", + "winapi 0.3.9", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "subtle" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd" + +[[package]] +name = "syn" +version = "1.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "unicode-xid 0.2.1", +] + +[[package]] +name = "synstructure" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", + "unicode-xid 0.2.1", +] + +[[package]] +name = "tap" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36474e732d1affd3a6ed582781b3683df3d0563714c59c39591e8ff707cf078e" + +[[package]] +name = "tempdir" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" +dependencies = [ + "rand 0.4.6", + "remove_dir_all", +] + +[[package]] +name = "tempfile" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "rand 0.7.3", + "redox_syscall", + "remove_dir_all", + "winapi 0.3.9", +] + +[[package]] +name = "term" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" +dependencies = [ + "byteorder", + "dirs", + "winapi 0.3.9", +] + +[[package]] +name = "termcolor" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thread-id" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fbf4c9d56b320106cd64fd024dadfa0be7cb4706725fc44a7d7ce952d820c1" +dependencies = [ + "libc", + "redox_syscall", + "winapi 0.3.9", +] + +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "tinyvec" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "238ce071d267c5710f9d31451efec16c5ee22de34df17cc05e56cbc92e967117" + +[[package]] +name = "tokio" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d34ca54d84bf2b5b4d7d31e901a8464f7b60ac145a284fba25ceb801f2ddccd" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "iovec", + "lazy_static", + "libc", + "memchr", + "mio", + "mio-named-pipes", + "mio-uds", + "num_cpus", + "pin-project-lite", + "signal-hook-registry", + "slab", + "tokio-macros", + "winapi 0.3.9", +] + +[[package]] +name = "tokio-macros" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", +] + +[[package]] +name = "tokio-tar" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a9e415c93375be93253134543229563114a2be8d46440d6d8f25b2ec62a7fb" +dependencies = [ + "filetime", + "futures-core", + "libc", + "redox_syscall", + "tokio", + "xattr", +] + +[[package]] +name = "tokio-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower-service" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" + +[[package]] +name = "tracing" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27" +dependencies = [ + "cfg-if 0.1.10", + "log", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "tracing-futures" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" +dependencies = [ + "pin-project 0.4.27", + "tracing", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "typenum" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" + +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check 0.9.2", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +dependencies = [ + "matches", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb19cf769fa8c6a80a162df694621ebeb4dafb606470b2b2fce0be40a98a977" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "url" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" +dependencies = [ + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c590b5bd79ed10aad8fb75f078a59d8db445af6c743e55c4a53227fc01c13f" +dependencies = [ + "rand 0.3.23", + "rustc-serialize", +] + +[[package]] +name = "vcpkg" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" + +[[package]] +name = "version_check" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasm-bindgen" +version = "0.2.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac64ead5ea5f05873d7c12b545865ca2b8d28adfc50a49b84770a3a97265d42" +dependencies = [ + "cfg-if 0.1.10", + "serde", + "serde_json", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7866cab0aa01de1edf8b5d7936938a7e397ee50ce24119aef3e1eaa3b6171da" +dependencies = [ + "cfg-if 0.1.10", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b13312a745c08c469f0b292dd2fcd6411dba5f7160f593da6ef69b64e407038" +dependencies = [ + "quote 1.0.7", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307" + +[[package]] +name = "web-sys" +version = "0.3.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bf6ef87ad7ae8008e15a355ce696bed26012b7caa21605188cfd8214ab51e2d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "which" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164" +dependencies = [ + "failure", + "libc", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winreg" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "wyz" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" + +[[package]] +name = "xattr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" +dependencies = [ + "libc", +] + +[[package]] +name = "yaml-rust" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39f0c922f1a334134dc2f7a8b67dc5d25f0735263feec974345ff706bcf20b0d" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "zeroize" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f33972566adbd2d3588b0491eb94b98b43695c4ef897903470ede4f3f5a28a" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn", + "synstructure", +] diff --git a/appmgr/Cargo.toml b/appmgr/Cargo.toml new file mode 100644 index 000000000..61444f663 --- /dev/null +++ b/appmgr/Cargo.toml @@ -0,0 +1,49 @@ +[package] +name = "appmgr" +version = "0.2.5" +authors = ["Aiden McClelland "] +edition = "2018" + +[lib] +name = "appmgrlib" +path = "src/lib.rs" + +[[bin]] +name = "appmgr" +path = "src/main.rs" + +[features] +default = [] +portable = [] +production = [] + +[dependencies] +emver = { git = "https://github.com/Start9Labs/emver-rs.git", version = "0.1.0", features = ["serde"] } +argonautica = "0.2.0" +async-trait = "0.1.41" +base32 = "0.4.0" +clap = "2.33" +ed25519-dalek = "1.0.1" +failure = "0.1.8" +file-lock = "1.1" +futures = "0.3.7" +git-version = "0.3.4" +itertools = "0.9.0" +lazy_static = "1.4" +linear-map = { version = "1.2", features = ["serde_impl"] } +log = "0.4.11" +openssl = "0.10.30" +pest = "2.1" +pest_derive = "2.1" +prettytable-rs = "0.8.0" +rand = "0.7.3" +regex = "1.4.2" +reqwest = { version = "0.10.8", features = ["stream", "json"] } +rpassword = "5.0.0" +serde = { version = "1.0.117", features = ["derive", "rc"] } +serde_yaml = "0.8.14" +serde_cbor = "0.11.1" +serde_json = "1.0.59" +simple-logging = "2.0" +tokio = { version = "0.2.22", features = ["full"] } +tokio-tar = "0.2.0" diff --git a/appmgr/README.md b/appmgr/README.md new file mode 100644 index 000000000..b61d2845c --- /dev/null +++ b/appmgr/README.md @@ -0,0 +1,10 @@ +# appmgr + +## Exit Codes +1. General Error +2. File System IO Error +3. Docker Error +4. Config Spec violation +5. Config Rules violation +6. Requested value does not exist +7. Invalid Backup Password \ No newline at end of file diff --git a/appmgr/build-dev.sh b/appmgr/build-dev.sh new file mode 100755 index 000000000..e3ed2a7dc --- /dev/null +++ b/appmgr/build-dev.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +set -e +shopt -s expand_aliases + +alias 'rust-arm-builder'='docker run --rm -it -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$(pwd)":/home/rust/src start9/rust-arm-cross:latest' + +rust-arm-builder cargo build --release \ No newline at end of file diff --git a/appmgr/build-prod.sh b/appmgr/build-prod.sh new file mode 100755 index 000000000..673968324 --- /dev/null +++ b/appmgr/build-prod.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e +shopt -s expand_aliases + +alias 'rust-arm-builder'='docker run --rm -it -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$(pwd)":/home/rust/src start9/rust-arm-cross:latest' + +rust-arm-builder cargo build --release --features=production +rust-arm-builder arm-linux-gnueabi-strip target/armv7-unknown-linux-gnueabihf/release/appmgr \ No newline at end of file diff --git a/appmgr/src/apps.rs b/appmgr/src/apps.rs new file mode 100644 index 000000000..96a445084 --- /dev/null +++ b/appmgr/src/apps.rs @@ -0,0 +1,440 @@ +use failure::ResultExt as _; +use futures::future::{BoxFuture, FutureExt, OptionFuture}; +use linear_map::{set::LinearSet, LinearMap}; +use rand::SeedableRng; + +use crate::dependencies::AppDependencies; +use crate::manifest::{Manifest, ManifestLatest}; +use crate::util::Apply; +use crate::util::{from_yaml_async_reader, PersistencePath, YamlUpdateHandle}; +use crate::Error; +use crate::ResultExt as _; + +#[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +pub enum DockerStatus { + Running, + Stopped, // created || exited + Paused, + Restarting, + Removing, + Dead, +} + +fn not(b: &bool) -> bool { + !b +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "kebab-case")] +pub struct AppInfo { + pub title: String, + pub version: emver::Version, + pub tor_address: Option, + pub configured: bool, + #[serde(default)] + #[serde(skip_serializing_if = "not")] + pub recoverable: bool, + #[serde(default)] + #[serde(skip_serializing_if = "not")] + pub needs_restart: bool, +} + +#[derive(Clone, Debug, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct AppStatus { + pub status: DockerStatus, +} + +#[derive(Debug, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct AppConfig { + pub spec: crate::config::ConfigSpec, + pub rules: Vec, + pub config: Option, +} + +#[derive(Debug, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct AppInfoFull { + #[serde(flatten)] + pub info: AppInfo, + #[serde(flatten)] + #[serde(skip_serializing_if = "Option::is_none")] + pub status: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub manifest: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub config: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub dependencies: Option, +} + +pub async fn list_info() -> Result, Error> { + let apps_path = PersistencePath::from_ref("apps.yaml"); + let mut f = match apps_path.maybe_read(false).await.transpose()? { + Some(a) => a, + None => return Ok(LinearMap::new()), + }; + from_yaml_async_reader(&mut *f).await +} + +pub async fn list_info_mut() -> Result>, Error> { + let apps_path = PersistencePath::from_ref("apps.yaml"); + YamlUpdateHandle::new_or_default(apps_path).await +} + +pub async fn add(id: &str, info: AppInfo) -> Result<(), failure::Error> { + let mut apps = list_info_mut().await?; + apps.insert(id.to_string(), info); + apps.commit().await?; + Ok(()) +} + +pub async fn set_configured(id: &str, configured: bool) -> Result<(), Error> { + let mut apps = list_info_mut().await?; + let mut app = apps + .get_mut(id) + .ok_or_else(|| failure::format_err!("App Not Installed: {}", id)) + .with_code(crate::error::NOT_FOUND)?; + app.configured = configured; + apps.commit().await?; + Ok(()) +} + +pub async fn set_needs_restart(id: &str, needs_restart: bool) -> Result<(), Error> { + let mut apps = list_info_mut().await?; + let mut app = apps + .get_mut(id) + .ok_or_else(|| failure::format_err!("App Not Installed: {}", id)) + .with_code(crate::error::NOT_FOUND)?; + app.needs_restart = needs_restart; + apps.commit().await?; + Ok(()) +} + +pub async fn set_recoverable(id: &str, recoverable: bool) -> Result<(), Error> { + let mut apps = list_info_mut().await?; + let mut app = apps + .get_mut(id) + .ok_or_else(|| failure::format_err!("App Not Installed: {}", id)) + .with_code(crate::error::NOT_FOUND)?; + app.recoverable = recoverable; + apps.commit().await?; + Ok(()) +} + +pub async fn remove(id: &str) -> Result<(), failure::Error> { + let mut apps = list_info_mut().await?; + apps.remove(id); + apps.commit().await?; + Ok(()) +} + +pub async fn status(id: &str) -> Result { + let output = std::process::Command::new("docker") + .args(&["inspect", id, "--format", "{{.State.Status}}"]) + .stdout(std::process::Stdio::piped()) + .stderr(match log::max_level() { + log::LevelFilter::Error => std::process::Stdio::null(), + _ => std::process::Stdio::inherit(), + }) + .spawn()? + .wait_with_output()?; + crate::ensure_code!( + output.status.success(), + crate::error::DOCKER_ERROR, + "{}: Docker Error: {}", + id, + std::str::from_utf8(&output.stderr).no_code()? + ); + let status = std::str::from_utf8(&output.stdout).no_code()?; + Ok(AppStatus { + status: match status.trim() { + "running" => DockerStatus::Running, + "restarting" => DockerStatus::Restarting, + "removing" => DockerStatus::Removing, + "dead" => DockerStatus::Dead, + "created" | "exited" => DockerStatus::Stopped, + "paused" => DockerStatus::Paused, + _ => Err(format_err!("unknown status: {}", status))?, + }, + }) +} + +pub async fn manifest(id: &str) -> Result { + let manifest: Manifest = from_yaml_async_reader( + &mut *PersistencePath::from_ref("apps") + .join(id) + .join("manifest.yaml") + .read(false) + .await?, + ) + .await?; + Ok(manifest.into_latest()) +} + +pub async fn config(id: &str) -> Result { + let spec = PersistencePath::from_ref("apps") + .join(id) + .join("config_spec.yaml"); + let spec: crate::config::ConfigSpec = + crate::util::from_yaml_async_reader(&mut *spec.read(false).await?) + .await + .no_code()?; + let rules = PersistencePath::from_ref("apps") + .join(id) + .join("config_rules.yaml"); + let rules: Vec = + crate::util::from_yaml_async_reader(&mut *rules.read(false).await?) + .await + .no_code()?; + let config = PersistencePath::from_ref("apps") + .join(id) + .join("config.yaml"); + let config: Option = match config + .maybe_read(false) + .await + .transpose()? + .map(|mut f| async move { from_yaml_async_reader(&mut *f).await }) + .apply(OptionFuture::from) + .await + { + Some(Ok(cfg)) => Some(cfg), + #[cfg(not(feature = "production"))] + Some(Err(e)) => return Err(e), + _ => { + let volume_config = std::path::Path::new(crate::VOLUMES) + .join(id) + .join("start9") + .join("config.yaml"); + if volume_config.exists() { + let cfg_path = config.path(); + tokio::fs::copy(&volume_config, &cfg_path) + .await + .with_context(|e| { + format!( + "{}: {} -> {}", + e, + volume_config.display(), + cfg_path.display() + ) + }) + .with_code(crate::error::FILESYSTEM_ERROR)?; + let mut f = tokio::fs::File::open(&volume_config) + .await + .with_context(|e| format!("{}: {}", e, volume_config.display())) + .with_code(crate::error::FILESYSTEM_ERROR)?; + match from_yaml_async_reader(&mut f).await { + Ok(a) => Some(a), + #[cfg(not(feature = "production"))] + Err(e) => return Err(e), + #[cfg(feature = "production")] + _ => None, + } + } else { + None + } + } + }; + Ok(AppConfig { + spec, + rules, + config, + }) +} + +pub async fn config_or_default(id: &str) -> Result { + let config = config(id).await?; + Ok(if let Some(config) = config.config { + config + } else { + config + .spec + .gen(&mut rand::rngs::StdRng::from_entropy(), &None) + .with_code(crate::error::CFG_SPEC_VIOLATION)? + }) +} + +pub async fn info(id: &str) -> Result { + list_info() + .await + .map_err(Error::from)? + .get(id) + .ok_or_else(|| Error::new(failure::format_err!("{} is not installed", id), Some(6))) + .map(Clone::clone) +} + +pub async fn info_full( + id: &str, + with_status: bool, + with_manifest: bool, + with_config: bool, + with_dependencies: bool, +) -> Result { + Ok(AppInfoFull { + info: info(id).await?, + status: if with_status { + Some(status(id).await?) + } else { + None + }, + manifest: if with_manifest { + Some(manifest(id).await?) + } else { + None + }, + config: if with_config { + Some(config(id).await?) + } else { + None + }, + dependencies: if with_dependencies { + Some(dependencies(id, true).await?) + } else { + None + }, + }) +} + +pub async fn dependencies(id_version: &str, local_only: bool) -> Result { + let mut id_version_iter = id_version.split("@"); + let id = id_version_iter.next().unwrap(); + let version_range = id_version_iter + .next() + .map(|a| a.parse::()) + .transpose() + .with_context(|e| format!("Failed to Parse Version Requirement: {}", e)) + .no_code()? + .unwrap_or_else(emver::VersionRange::any); + let (manifest, config_info) = match list_info().await?.get(id) { + Some(info) if info.version.satisfies(&version_range) => { + futures::try_join!(manifest(id), config(id))? + } + _ if !local_only => futures::try_join!( + crate::registry::manifest(id, &version_range), + crate::registry::config(id, &version_range) + )?, + _ => { + return Err(failure::format_err!("App Not Installed: {}", id)) + .with_code(crate::error::NOT_FOUND) + } + }; + let config = if let Some(cfg) = config_info.config { + cfg + } else { + config_info + .spec + .gen(&mut rand::rngs::StdRng::from_entropy(), &None) + .unwrap_or_default() + }; + crate::dependencies::check_dependencies(manifest, &config, &config_info.spec).await +} + +pub async fn dependents(id: &str, transitive: bool) -> Result, Error> { + pub fn dependents_rec<'a>( + id: &'a str, + transitive: bool, + res: &'a mut LinearSet, + ) -> BoxFuture<'a, Result<(), Error>> { + async move { + for (app_id, _) in list_info().await? { + let manifest = manifest(&app_id).await?; + match manifest.dependencies.0.get(id) { + Some(info) if !res.contains(&app_id) => { + let config_info = config(&app_id).await?; + let config = if let Some(cfg) = config_info.config { + cfg + } else { + config_info + .spec + .gen(&mut rand::rngs::StdRng::from_entropy(), &None) + .unwrap_or_default() + }; + if info.optional.is_none() || config_info.spec.requires(&id, &config) { + res.insert(app_id.clone()); + if transitive { + dependents_rec(&app_id, true, res).await?; + } + } + } + _ => (), + } + } + Ok(()) + } + .boxed() + } + let mut res = LinearSet::new(); + dependents_rec(id, transitive, &mut res).await?; + Ok(res) +} + +pub async fn list( + with_status: bool, + with_manifest: bool, + with_config: bool, + with_dependencies: bool, +) -> Result, Error> { + let info = list_info().await?; + futures::future::join_all(info.into_iter().map(move |(id, info)| async move { + let (status, manifest, config, dependencies) = futures::try_join!( + OptionFuture::from(if with_status { Some(status(&id)) } else { None }) + .map(Option::transpose), + OptionFuture::from(if with_manifest { + Some(manifest(&id)) + } else { + None + }) + .map(Option::transpose), + OptionFuture::from(if with_config { Some(config(&id)) } else { None }) + .map(Option::transpose), + OptionFuture::from(if with_dependencies { + Some(dependencies(&id, true)) + } else { + None + }) + .map(Option::transpose) + )?; + Ok(( + id, + AppInfoFull { + info, + status, + manifest, + config, + dependencies, + }, + )) + })) + .await + .into_iter() + .collect() +} + +pub async fn print_instructions(id: &str) -> Result<(), Error> { + if let Some(file) = PersistencePath::from_ref("apps") + .join(id) + .join("instructions.md") + .maybe_read(false) + .await + { + use tokio::io::AsyncWriteExt; + + let mut stdout = tokio::io::stdout(); + tokio::io::copy(&mut *file?, &mut stdout) + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + stdout + .flush() + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + stdout + .shutdown() + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + Ok(()) + } else { + Err(failure::format_err!("No Instructions: {}", id)).with_code(crate::error::NOT_FOUND) + } +} diff --git a/appmgr/src/backup.rs b/appmgr/src/backup.rs new file mode 100644 index 000000000..52a30c6a9 --- /dev/null +++ b/appmgr/src/backup.rs @@ -0,0 +1,238 @@ +use std::path::Path; + +use argonautica::{Hasher, Verifier}; +use futures::try_join; +use futures::TryStreamExt; + +use crate::apps; +use crate::util::from_yaml_async_reader; +use crate::util::Invoke; +use crate::Error; +use crate::ResultExt; + +pub async fn create_backup>( + path: P, + app_id: &str, + password: &str, +) -> Result<(), Error> { + let path = tokio::fs::canonicalize(path).await?; + crate::ensure_code!( + path.is_dir(), + crate::error::FILESYSTEM_ERROR, + "Backup Path Must Be Directory" + ); + let pw_path = path.join("password"); + let data_path = path.join("data"); + let tor_path = path.join("tor"); + let volume_path = Path::new(crate::VOLUMES).join(app_id); + let hidden_service_path = + Path::new(crate::tor::HIDDEN_SERVICE_DIR_ROOT).join(format!("app-{}", app_id)); + + if pw_path.exists() { + use tokio::io::AsyncReadExt; + + let mut f = tokio::fs::File::open(&pw_path).await?; + let mut hash = String::new(); + f.read_to_string(&mut hash).await?; + crate::ensure_code!( + Verifier::new() + .with_password(password) + .with_hash(hash) + .verify() + .with_code(crate::error::INVALID_BACKUP_PASSWORD)?, + crate::error::INVALID_BACKUP_PASSWORD, + "Invalid Backup Decryption Password" + ); + } + { + // save password + use tokio::io::AsyncWriteExt; + + let mut hasher = Hasher::default(); + hasher.opt_out_of_secret_key(true); + let hash = hasher.with_password(password).hash().no_code()?; + let mut f = tokio::fs::File::create(pw_path).await?; + f.write_all(hash.as_bytes()).await?; + f.flush().await?; + } + + let status = crate::apps::status(app_id).await?; + let exclude = if volume_path.is_dir() { + let ignore_path = volume_path.join(".backupignore"); + if ignore_path.is_file() { + use tokio::io::AsyncBufReadExt; + tokio::io::BufReader::new(tokio::fs::File::open(ignore_path).await?) + .lines() + .try_filter(|l| futures::future::ready(!l.is_empty())) + .try_collect() + .await? + } else { + Vec::new() + } + } else { + return Err(format_err!("Volume For {} Does Not Exist", app_id)) + .with_code(crate::error::NOT_FOUND); + }; + let running = status.status == crate::apps::DockerStatus::Running; + if running { + crate::control::pause_app(&app_id).await?; + } + let mut data_cmd = tokio::process::Command::new("duplicity"); + for exclude in exclude { + if exclude.starts_with('!') { + data_cmd.arg(format!( + "--include={}", + volume_path.join(exclude.trim_start_matches('!')).display() + )); + } else { + data_cmd.arg(format!("--exclude={}", volume_path.join(exclude).display())); + } + } + let data_res = data_cmd + .env("PASSPHRASE", password) + .arg(volume_path) + .arg(format!("file://{}", data_path.display())) + .invoke("Duplicity") + .await; + let tor_res = tokio::process::Command::new("duplicity") + .env("PASSPHRASE", password) + .arg(hidden_service_path) + .arg(format!("file://{}", tor_path.display())) + .invoke("Duplicity") + .await; + if running { + if crate::apps::info(&app_id).await?.needs_restart { + crate::control::restart_app(&app_id).await?; + } else { + crate::control::resume_app(&app_id).await?; + } + } + data_res?; + tor_res?; + + Ok(()) +} + +pub async fn restore_backup>( + path: P, + app_id: &str, + password: &str, +) -> Result<(), Error> { + let path = tokio::fs::canonicalize(path).await?; + crate::ensure_code!( + path.is_dir(), + crate::error::FILESYSTEM_ERROR, + "Backup Path Must Be Directory" + ); + let pw_path = path.join("password"); + let data_path = path.join("data"); + let tor_path = path.join("tor"); + let volume_path = Path::new(crate::VOLUMES).join(app_id); + let hidden_service_path = + Path::new(crate::tor::HIDDEN_SERVICE_DIR_ROOT).join(format!("app-{}", app_id)); + + if pw_path.exists() { + use tokio::io::AsyncReadExt; + + let mut f = tokio::fs::File::open(&pw_path).await?; + let mut hash = String::new(); + f.read_to_string(&mut hash).await?; + crate::ensure_code!( + Verifier::new() + .with_password(password) + .with_hash(hash) + .verify() + .with_code(crate::error::INVALID_BACKUP_PASSWORD)?, + crate::error::INVALID_BACKUP_PASSWORD, + "Invalid Backup Decryption Password" + ); + } + + let status = crate::apps::status(app_id).await?; + let running = status.status == crate::apps::DockerStatus::Running; + if running { + crate::control::stop_app(app_id, true, false).await?; + } + + let mut data_cmd = tokio::process::Command::new("duplicity"); + data_cmd + .env("PASSPHRASE", password) + .arg("--force") + .arg(format!("file://{}", data_path.display())) + .arg(&volume_path); + + let mut tor_cmd = tokio::process::Command::new("duplicity"); + tor_cmd + .env("PASSPHRASE", password) + .arg("--force") + .arg(format!("file://{}", tor_path.display())) + .arg(&hidden_service_path); + + let (data_output, tor_output) = try_join!(data_cmd.status(), tor_cmd.status())?; + crate::ensure_code!( + data_output.success(), + crate::error::GENERAL_ERROR, + "Duplicity Error" + ); + crate::ensure_code!( + tor_output.success(), + crate::error::GENERAL_ERROR, + "Duplicity Error" + ); + + // Fix the tor address in apps.yaml + let mut yhdl = apps::list_info_mut().await?; + if let Some(app_info) = yhdl.get_mut(app_id) { + app_info.tor_address = Some(crate::tor::read_tor_address(app_id, None).await?); + } + yhdl.commit().await?; + + // Attempt to configure the service with the config coming from restoration + let cfg_path = Path::new(crate::VOLUMES) + .join(app_id) + .join("start9") + .join("config.yaml"); + if cfg_path.exists() { + let cfg = from_yaml_async_reader(tokio::fs::File::open(cfg_path).await?).await?; + if let Err(e) = crate::config::configure(app_id, cfg, None, false).await { + log::warn!("Could not restore backup configuration: {}", e); + } + } + + crate::tor::restart().await?; + + Ok(()) +} + +pub async fn backup_to_partition( + logicalname: &str, + app_id: &str, + password: &str, +) -> Result<(), Error> { + let backup_mount_path = Path::new(crate::BACKUP_MOUNT_POINT); + let guard = crate::disks::MountGuard::new(logicalname, &backup_mount_path).await?; + let backup_dir_path = backup_mount_path.join(crate::BACKUP_DIR).join(app_id); + tokio::fs::create_dir_all(&backup_dir_path).await?; + + let res = create_backup(backup_dir_path, app_id, password).await; + + guard.unmount().await?; + + res +} + +pub async fn restore_from_partition( + logicalname: &str, + app_id: &str, + password: &str, +) -> Result<(), Error> { + let backup_mount_path = Path::new(crate::BACKUP_MOUNT_POINT); + let guard = crate::disks::MountGuard::new(logicalname, &backup_mount_path).await?; + let backup_dir_path = backup_mount_path.join(crate::BACKUP_DIR).join(app_id); + + let res = restore_backup(backup_dir_path, app_id, password).await; + + guard.unmount().await?; + + res +} diff --git a/appmgr/src/config/mod.rs b/appmgr/src/config/mod.rs new file mode 100644 index 000000000..67df94f9e --- /dev/null +++ b/appmgr/src/config/mod.rs @@ -0,0 +1,324 @@ +use std::borrow::Cow; +use std::path::Path; +use std::time::Duration; + +use failure::ResultExt as _; +use futures::future::{BoxFuture, FutureExt}; +use itertools::Itertools; +use linear_map::{set::LinearSet, LinearMap}; +use rand::SeedableRng; +use regex::Regex; + +use crate::dependencies::{DependencyError, TaggedDependencyError}; +use crate::util::PersistencePath; +use crate::util::{from_yaml_async_reader, to_yaml_async_writer}; +use crate::ResultExt as _; + +pub mod rules; +pub mod spec; +pub mod util; +pub mod value; + +pub use rules::{ConfigRuleEntry, ConfigRuleEntryWithSuggestions}; +pub use spec::{ConfigSpec, Defaultable}; +use util::NumRange; +pub use value::Config; + +#[derive(Debug, Fail)] +pub enum ConfigurationError { + #[fail(display = "Timeout Error")] + TimeoutError, + #[fail(display = "No Match: {}", _0)] + NoMatch(NoMatchWithPath), + #[fail(display = "Invalid Variant: {}", _0)] + InvalidVariant(String), + #[fail(display = "System Error: {}", _0)] + SystemError(crate::Error), +} +impl From for ConfigurationError { + fn from(_: TimeoutError) -> Self { + ConfigurationError::TimeoutError + } +} +impl From for ConfigurationError { + fn from(e: NoMatchWithPath) -> Self { + ConfigurationError::NoMatch(e) + } +} + +#[derive(Clone, Copy, Debug, Fail)] +#[fail(display = "Timeout Error")] +pub struct TimeoutError; + +#[derive(Clone, Debug, Fail)] +pub struct NoMatchWithPath { + pub path: Vec, + pub error: MatchError, +} +impl NoMatchWithPath { + pub fn new(error: MatchError) -> Self { + NoMatchWithPath { + path: Vec::new(), + error, + } + } + pub fn prepend(mut self, seg: String) -> Self { + self.path.push(seg); + self + } +} +impl std::fmt::Display for NoMatchWithPath { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}: {}", self.path.iter().rev().join("."), self.error) + } +} + +#[derive(Clone, Debug, Fail)] +pub enum MatchError { + #[fail(display = "String {:?} Does Not Match Pattern {}", _0, _1)] + Pattern(String, Regex), + #[fail(display = "String {:?} Is Not In Enum {:?}", _0, _1)] + Enum(String, LinearSet), + #[fail(display = "Field Is Not Nullable")] + NotNullable, + #[fail(display = "Length Mismatch: expected {}, actual: {}", _0, _1)] + LengthMismatch(NumRange, usize), + #[fail(display = "Invalid Type: expected {}, actual: {}", _0, _1)] + InvalidType(&'static str, &'static str), + #[fail(display = "Number Out Of Range: expected {}, actual: {}", _0, _1)] + OutOfRange(NumRange, f64), + #[fail(display = "Number Is Not Integral: {}", _0)] + NonIntegral(f64), + #[fail(display = "Variant {:?} Is Not In Union {:?}", _0, _1)] + Union(String, LinearSet), + #[fail(display = "Variant Is Missing Tag {:?}", _0)] + MissingTag(String), + #[fail( + display = "Property {:?} Of Variant {:?} Conflicts With Union Tag", + _0, _1 + )] + PropertyMatchesUnionTag(String, String), + #[fail(display = "Name of Property {:?} Conflicts With Map Tag Name", _0)] + PropertyNameMatchesMapTag(String), + #[fail(display = "Pointer Is Invalid: {}", _0)] + InvalidPointer(spec::ValueSpecPointer), + #[fail(display = "Object Key Is Invalid: {}", _0)] + InvalidKey(String), + #[fail(display = "Value In List Is Not Unique")] + ListUniquenessViolation, +} + +#[derive(Clone, Debug, Default, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct ConfigurationRes { + pub changed: LinearMap, + pub needs_restart: LinearSet, + pub stopped: LinearMap, +} + +// returns apps with changed configurations +pub async fn configure( + name: &str, + config: Option, + timeout: Option, + dry_run: bool, +) -> Result { + async fn handle_broken_dependent( + name: &str, + dependent: String, + dry_run: bool, + res: &mut ConfigurationRes, + error: DependencyError, + ) -> Result<(), crate::Error> { + crate::control::stop_dependents( + &dependent, + dry_run, + DependencyError::NotRunning, + &mut res.stopped, + ) + .await?; + if crate::apps::status(&dependent).await?.status != crate::apps::DockerStatus::Stopped { + crate::control::stop_app(&dependent, false, dry_run).await?; + res.stopped.insert( + // TODO: maybe don't do this if its not running + dependent, + TaggedDependencyError { + dependency: name.to_owned(), + error, + }, + ); + } + Ok(()) + } + fn configure_rec<'a>( + name: &'a str, + config: Option, + timeout: Option, + dry_run: bool, + res: &'a mut ConfigurationRes, + ) -> BoxFuture<'a, Result> { + async move { + let info = crate::apps::list_info() + .await? + .remove(name) + .ok_or_else(|| failure::format_err!("{} is not installed", name)) + .with_code(crate::error::NOT_FOUND)?; + let mut rng = rand::rngs::StdRng::from_entropy(); + let spec_path = PersistencePath::from_ref("apps") + .join(name) + .join("config_spec.yaml"); + let rules_path = PersistencePath::from_ref("apps") + .join(name) + .join("config_rules.yaml"); + let config_path = PersistencePath::from_ref("apps") + .join(name) + .join("config.yaml"); + let spec: ConfigSpec = + from_yaml_async_reader(&mut *spec_path.read(false).await?).await?; + let rules: Vec = + from_yaml_async_reader(&mut *rules_path.read(false).await?).await?; + let old_config: Option = + if let Some(mut f) = config_path.maybe_read(false).await.transpose()? { + Some(from_yaml_async_reader(&mut *f).await?) + } else { + None + }; + let mut config = if let Some(cfg) = config { + cfg + } else { + if let Some(old) = &old_config { + old.clone() + } else { + spec.gen(&mut rng, &timeout) + .with_code(crate::error::CFG_SPEC_VIOLATION)? + } + }; + spec.matches(&config) + .with_code(crate::error::CFG_SPEC_VIOLATION)?; + spec.update(&mut config) + .await + .with_code(crate::error::CFG_SPEC_VIOLATION)?; + let mut cfgs = LinearMap::new(); + cfgs.insert(name, Cow::Borrowed(&config)); + for rule in rules { + rule.check(&config, &cfgs) + .with_code(crate::error::CFG_RULES_VIOLATION)?; + } + match old_config { + Some(old) if &old == &config && info.configured && !info.recoverable => { + return Ok(config) + } + _ => (), + }; + res.changed.insert(name.to_owned(), config.clone()); + for dependent in crate::apps::dependents(name, false).await? { + match configure_rec(&dependent, None, timeout, dry_run, res).await { + Ok(dependent_config) => { + let man = crate::apps::manifest(&dependent).await?; + if let Some(dep_info) = man.dependencies.0.get(name) { + match dep_info + .satisfied( + name, + Some(config.clone()), + &dependent, + &dependent_config, + ) + .await? + { + Ok(_) => (), + Err(e) => { + handle_broken_dependent(name, dependent, dry_run, res, e) + .await?; + } + } + } + } + Err(e) => { + if e.code == Some(crate::error::CFG_RULES_VIOLATION) + || e.code == Some(crate::error::CFG_SPEC_VIOLATION) + { + if !dry_run { + crate::apps::set_configured(&dependent, false).await?; + } + handle_broken_dependent( + name, + dependent, + dry_run, + res, + DependencyError::PointerUpdateError(format!("{}", e)), + ) + .await?; + } else { + handle_broken_dependent( + name, + dependent, + dry_run, + res, + DependencyError::Other(format!("{}", e)), + ) + .await?; + } + } + } + } + if !dry_run { + let mut file = config_path.write(None).await?; + to_yaml_async_writer(file.as_mut(), &config).await?; + file.commit().await?; + let volume_config = Path::new(crate::VOLUMES) + .join(name) + .join("start9") + .join("config.yaml"); + tokio::fs::copy(config_path.path(), &volume_config) + .await + .with_context(|e| { + format!( + "{}: {} -> {}", + e, + config_path.path().display(), + volume_config.display() + ) + }) + .with_code(crate::error::FILESYSTEM_ERROR)?; + crate::apps::set_configured(name, true).await?; + crate::apps::set_recoverable(name, false).await?; + } + if crate::apps::status(name).await?.status != crate::apps::DockerStatus::Stopped { + if !dry_run { + crate::apps::set_needs_restart(name, true).await?; + } + res.needs_restart.insert(name.to_string()); + } + Ok(config) + } + .boxed() + } + let mut res = ConfigurationRes::default(); + configure_rec(name, config, timeout, dry_run, &mut res).await?; + Ok(res) +} + +pub async fn remove(name: &str) -> Result<(), crate::Error> { + let config_path = PersistencePath::from_ref("apps") + .join(name) + .join("config.yaml") + .path(); + if config_path.exists() { + tokio::fs::remove_file(&config_path) + .await + .with_context(|e| format!("{}: {}", e, config_path.display())) + .with_code(crate::error::FILESYSTEM_ERROR)?; + } + let volume_config = Path::new(crate::VOLUMES) + .join(name) + .join("start9") + .join("config.yaml"); + if volume_config.exists() { + tokio::fs::remove_file(&volume_config) + .await + .with_context(|e| format!("{}: {}", e, volume_config.display())) + .with_code(crate::error::FILESYSTEM_ERROR)?; + } + crate::apps::set_configured(name, false).await?; + Ok(()) +} diff --git a/appmgr/src/config/rule_parser.pest b/appmgr/src/config/rule_parser.pest new file mode 100644 index 000000000..53be53252 --- /dev/null +++ b/appmgr/src/config/rule_parser.pest @@ -0,0 +1,76 @@ +num = @{ int ~ ("." ~ ASCII_DIGIT*)? ~ (^"e" ~ int)? } + int = @{ ("+" | "-")? ~ ASCII_DIGIT+ } + +raw_string = @{ (!("\\" | "\"") ~ ANY)+ } +predefined = @{ "n" | "r" | "t" | "\\" | "0" | "\"" | "'" } +escape = @{ "\\" ~ predefined } +str = @{ "\"" ~ (raw_string | escape)* ~ "\"" } + +ident_char = @{ ASCII_ALPHANUMERIC | "-" } +sub_ident = _{ sub_ident_regular | sub_ident_index | sub_ident_any | sub_ident_all | sub_ident_fn } + sub_ident_regular = { sub_ident_regular_base | sub_ident_regular_expr } + sub_ident_regular_base = @{ ASCII_ALPHA ~ ident_char* } + sub_ident_regular_expr = ${ "[" ~ str_expr ~ "]" } + sub_ident_index = { sub_ident_index_base | sub_ident_index_expr } + sub_ident_index_base = @{ ASCII_DIGIT+ } + sub_ident_index_expr = ${ "[" ~ num_expr ~ "]" } + sub_ident_any = @{ "*" } + sub_ident_all = @{ "&" } + sub_ident_fn = ${ "[" ~ list_access_function ~ "]"} + list_access_function = _{ list_access_function_first | list_access_function_last | list_access_function_any | list_access_function_all } + list_access_function_first = !{ "first" ~ "(" ~ sub_ident_regular ~ "=>" ~ bool_expr ~ ")" } + list_access_function_last = !{ "last" ~ "(" ~ sub_ident_regular ~ "=>" ~ bool_expr ~ ")" } + list_access_function_any = !{ "any" ~ "(" ~ sub_ident_regular ~ "=>" ~ bool_expr ~ ")" } + list_access_function_all = !{ "all" ~ "(" ~ sub_ident_regular ~ "=>" ~ bool_expr ~ ")" } + +app_id = ${ "[" ~ sub_ident_regular ~ "]" } +ident = _{ (app_id ~ ".")? ~ sub_ident_regular ~ ("." ~ sub_ident)* } +bool_var = ${ ident ~ "?" } +num_var = ${ "#" ~ ident } +str_var = ${ "'" ~ ident } +any_var = ${ ident } + +bool_op = _{ and | or | xor } + and = { "AND" } + or = { "OR" } + xor = { "XOR" } + +num_cmp_op = _{ lt | lte | eq | neq | gt | gte } +str_cmp_op = _{ lt | lte | eq | neq | gt | gte } + lt = { "<" } + lte = { "<=" } + eq = { "=" } + neq = { "!=" } + gt = { ">" } + gte = { ">=" } + +num_op = _{ add | sub | mul | div | pow } +str_op = _{ add } + add = { "+" } + sub = { "-" } + mul = { "*" } + div = { "/" } + pow = { "^" } + +num_expr = !{ num_term ~ (num_op ~ num_term)* } +num_term = _{ num | num_var | "(" ~ num_expr ~ ")" } + +str_expr = !{ str_term ~ (str_op ~ str_term)* } +str_term = _{ str | str_var | "(" ~ str_expr ~ ")" } + +num_cmp_expr = { num_expr ~ num_cmp_op ~ num_expr } +str_cmp_expr = { str_expr ~ str_cmp_op ~ str_expr } + +bool_expr = !{ bool_term ~ (bool_op ~ bool_term)* } +inv_bool_expr = { "!(" ~ bool_expr ~ ")" } +bool_term = _{ bool_var | "(" ~ bool_expr ~ ")" | inv_bool_expr | num_cmp_expr | str_cmp_expr } + +val_expr = _{ any_var | str_expr | num_expr | bool_expr } + +rule = _{ SOI ~ bool_expr ~ EOI } +reference = _{ SOI ~ any_var ~ EOI } +value = _{ SOI ~ val_expr ~ EOI } +del_action = _{ SOI ~ "FROM" ~ any_var ~ "AS" ~ sub_ident_regular ~ "WHERE" ~ bool_expr ~ EOI } +obj_key = _{ SOI ~ sub_ident_regular ~ EOI } + +WHITESPACE = _{ " " | "\t" } \ No newline at end of file diff --git a/appmgr/src/config/rules.rs b/appmgr/src/config/rules.rs new file mode 100644 index 000000000..f64cff1ef --- /dev/null +++ b/appmgr/src/config/rules.rs @@ -0,0 +1,1252 @@ +use std::borrow::Cow; +use std::sync::Arc; + +use linear_map::LinearMap; +use pest::iterators::Pairs; +use pest::Parser; +use rand::SeedableRng; + +use super::util::STATIC_NULL; +use super::value::{Config, Value}; + +#[derive(Parser)] +#[grammar = "config/rule_parser.pest"] +struct RuleParser; + +lazy_static::lazy_static! { + static ref NUM_PREC_CLIMBER: pest::prec_climber::PrecClimber = { + use pest::prec_climber::*; + use Rule::*; + use Assoc::*; + + PrecClimber::new(vec![ + Operator::new(add, Left) | Operator::new(sub, Left), + Operator::new(mul, Left) | Operator::new(div, Left), + Operator::new(pow, Right) + ]) + }; + + static ref STR_PREC_CLIMBER: pest::prec_climber::PrecClimber = { + use pest::prec_climber::*; + use Rule::*; + use Assoc::*; + + PrecClimber::new(vec![ + Operator::new(add, Left) + ]) + }; + + static ref BOOL_PREC_CLIMBER: pest::prec_climber::PrecClimber = { + use pest::prec_climber::*; + use Rule::*; + use Assoc::*; + + PrecClimber::new(vec![ + Operator::new(or, Left), + Operator::new(xor, Left), + Operator::new(and, Left) + ]) + }; +} + +pub type Accessor = Box< + dyn for<'a> Fn(&'a Value, &LinearMap<&str, Cow>) -> VarRes<&'a Value> + Send + Sync, +>; +pub type AccessorMut = Box< + dyn for<'a> Fn(&'a mut Value, &LinearMap<&str, Cow>) -> Option<&'a mut Value> + + Send + + Sync, +>; +pub type CompiledExpr = Box>) -> T + Send + Sync>; +pub type CompiledReference = Box< + dyn for<'a> Fn(&'a mut Config, &LinearMap<&str, Cow>) -> Option<&'a mut Value> + + Send + + Sync, +>; +pub type Mutator = Box>) + Send + Sync>; +pub type CompiledRule = Box>) -> bool + Send + Sync>; +pub type CompiledRuleRes = Result; + +#[derive(Clone)] +pub struct ConfigRule { + pub src: String, + pub compiled: Arc, +} +impl std::fmt::Debug for ConfigRule { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ConfigRule") + .field("src", &self.src) + .field("compiled", &"Fn(&Config, &Config) -> bool") + .finish() + } +} +impl<'de> serde::de::Deserialize<'de> for ConfigRule { + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + let src = String::deserialize(deserializer)?; + let compiled = compile(&src).map_err(serde::de::Error::custom)?; + Ok(ConfigRule { + src, + compiled: Arc::new(compiled), + }) + } +} +impl serde::ser::Serialize for ConfigRule { + fn serialize(&self, serializer: S) -> Result + where + S: serde::ser::Serializer, + { + serializer.serialize_str(&self.src) + } +} +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +pub struct ConfigRuleEntry { + pub rule: ConfigRule, + pub description: String, +} +impl ConfigRuleEntry { + pub fn check( + &self, + cfg: &Config, + cfgs: &LinearMap<&str, Cow>, + ) -> Result<(), failure::Error> { + if !(self.rule.compiled)(cfg, cfgs) { + failure::bail!("{}", self.description); + } + Ok(()) + } +} + +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum SetVariant { + To(String), + ToValue(Value), + ToEntropy(super::spec::Entropy), +} + +#[derive(Clone)] +pub enum SuggestionVariant { + Set { + var: String, + to: SetVariant, + compiled: Arc, + }, + Delete { + src: String, + compiled: Arc, + }, + Push { + to: String, + value: Value, + compiled: Arc, + }, +} +impl SuggestionVariant { + pub fn apply<'a>( + &self, + id: &'a str, + cfg: &mut Config, + cfgs: &mut LinearMap<&'a str, Cow>, + ) { + match self { + SuggestionVariant::Set { ref compiled, .. } => compiled(cfg, cfgs), + SuggestionVariant::Delete { ref compiled, .. } => compiled(cfg, cfgs), + SuggestionVariant::Push { ref compiled, .. } => compiled(cfg, cfgs), + } + cfgs.insert(id, Cow::Owned(cfg.clone())); + } +} +impl std::fmt::Debug for SuggestionVariant { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + SuggestionVariant::Set { + ref var, ref to, .. + } => f + .debug_struct("SuggestionVariant::Set") + .field("var", var) + .field("to", to) + .field("compiled", &"Fn(&mut Config, Config)") + .finish(), + SuggestionVariant::Delete { ref src, .. } => f + .debug_struct("SuggestionVariant::Delete") + .field("src", src) + .field("compiled", &"Fn(&mut Config, Config)") + .finish(), + SuggestionVariant::Push { + ref to, ref value, .. + } => f + .debug_struct("SuggestionVariant::Delete") + .field("to", to) + .field("value", value) + .field("compiled", &"Fn(&mut Config, Config)") + .finish(), + } + } +} +impl<'de> serde::de::Deserialize<'de> for SuggestionVariant { + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + #[derive(serde::Deserialize)] + enum _SuggestionVariant { + SET { + var: String, + #[serde(flatten)] + to: SetVariant, + }, + DELETE(String), + PUSH { + to: String, + value: Value, + }, + } + let raw = _SuggestionVariant::deserialize(deserializer)?; + Ok(match raw { + _SuggestionVariant::SET { var, to } => SuggestionVariant::Set { + compiled: Arc::new( + compile_set_action(&var, &to).map_err(serde::de::Error::custom)?, + ), + to: to, + var: var, + }, + _SuggestionVariant::DELETE(src) => SuggestionVariant::Delete { + compiled: Arc::new( + compile_del_action( + RuleParser::parse(Rule::del_action, &src) + .map_err(serde::de::Error::custom)?, + ) + .map_err(serde::de::Error::custom)?, + ), + src, + }, + _SuggestionVariant::PUSH { to, value } => SuggestionVariant::Push { + compiled: Arc::new( + compile_push_action( + RuleParser::parse(Rule::reference, &to) + .map_err(serde::de::Error::custom)?, + value.clone(), + ) + .map_err(serde::de::Error::custom)?, + ), + to, + value, + }, + }) + } +} +impl serde::ser::Serialize for SuggestionVariant { + fn serialize(&self, serializer: S) -> Result + where + S: serde::ser::Serializer, + { + #[derive(serde::Serialize)] + enum _SuggestionVariant<'a> { + SET { + var: &'a str, + #[serde(flatten)] + to: &'a SetVariant, + }, + DELETE(&'a str), + PUSH { + to: &'a str, + value: &'a Value, + }, + } + match self { + SuggestionVariant::Set { + ref var, ref to, .. + } => serde::ser::Serialize::serialize(&_SuggestionVariant::SET { var, to }, serializer), + SuggestionVariant::Delete { ref src, .. } => { + serde::ser::Serialize::serialize(&_SuggestionVariant::DELETE(src), serializer) + } + SuggestionVariant::Push { + ref to, ref value, .. + } => serde::ser::Serialize::serialize( + &_SuggestionVariant::PUSH { to, value }, + serializer, + ), + } + } +} +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct Suggestion { + #[serde(rename = "if")] + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] + pub condition: Option, + #[serde(flatten)] + pub variant: SuggestionVariant, +} +impl Suggestion { + pub fn apply<'a>( + &self, + id: &'a str, + cfg: &mut Config, + cfgs: &mut LinearMap<&'a str, Cow>, + ) { + match &self.condition { + Some(condition) if !(condition.compiled)(cfg, cfgs) => (), + _ => self.variant.apply(id, cfg, cfgs), + } + } +} +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct ConfigRuleEntryWithSuggestions { + #[serde(flatten)] + pub entry: ConfigRuleEntry, + pub suggestions: Vec, +} +impl ConfigRuleEntryWithSuggestions { + pub fn apply<'a>( + &self, + id: &'a str, + cfg: &mut Config, + cfgs: &mut LinearMap<&'a str, Cow>, + ) -> Result<(), failure::Error> { + if self.entry.check(cfg, cfgs).is_err() { + for suggestion in &self.suggestions { + suggestion.apply(id, cfg, cfgs); + } + self.entry.check(cfg, cfgs) + } else { + Ok(()) + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum VarRes { + Exactly(T), + Any(Vec>), + All(Vec>), +} +impl VarRes { + fn map U>(self, mut f: F) -> VarRes { + fn map_rec U>(s: VarRes, f: &mut F) -> VarRes { + match s { + VarRes::Exactly(a) => VarRes::Exactly(f(a)), + VarRes::Any(a) => VarRes::Any(a.into_iter().map(|a| map_rec(a, f)).collect()), + VarRes::All(a) => VarRes::All(a.into_iter().map(|a| map_rec(a, f)).collect()), + } + } + map_rec(self, &mut f) + } + fn and_then VarRes>(self, mut f: F) -> VarRes { + fn and_then_rec VarRes>(s: VarRes, f: &mut F) -> VarRes { + match s { + VarRes::Exactly(a) => f(a), + VarRes::Any(a) => VarRes::Any(a.into_iter().map(|a| and_then_rec(a, f)).collect()), + VarRes::All(a) => VarRes::All(a.into_iter().map(|a| and_then_rec(a, f)).collect()), + } + } + and_then_rec(self, &mut f) + } +} +impl VarRes { + fn resolve(self) -> bool { + match self { + VarRes::Exactly(a) => a, + VarRes::Any(a) => a.into_iter().any(|a| a.resolve()), + VarRes::All(a) => a.into_iter().all(|a| a.resolve()), + } + } +} + +fn compile_var_rec(mut ident: Pairs) -> Option { + let idx = ident.next(); + if let Some(idx) = idx { + let deref: Accessor = match idx.as_rule() { + Rule::sub_ident_any => Box::new(|v, _| match v { + Value::List(l) => VarRes::Any(l.iter().map(VarRes::Exactly).collect()), + Value::Object(o) => { + VarRes::Any(o.0.iter().map(|(_, a)| VarRes::Exactly(a)).collect()) + } + _ => VarRes::Exactly(&STATIC_NULL), + }), + Rule::sub_ident_all => Box::new(|v, _| match v { + Value::List(l) => VarRes::All(l.iter().map(VarRes::Exactly).collect()), + Value::Object(o) => { + VarRes::All(o.0.iter().map(|(_, a)| VarRes::Exactly(a)).collect()) + } + _ => VarRes::Exactly(&STATIC_NULL), + }), + Rule::sub_ident_fn => { + let idx = idx.into_inner().next().unwrap(); + match idx.as_rule() { + Rule::list_access_function_first => { + let mut pred_iter = idx.into_inner(); + let item_var = pred_iter.next().unwrap().as_str().to_owned(); + let predicate = compile_bool_expr(pred_iter.next().unwrap().into_inner()); + Box::new(move |v, cfgs| match v { + Value::List(l) => VarRes::Exactly( + l.iter() + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .next() + .unwrap_or(&STATIC_NULL), + ), + Value::Object(o) => VarRes::Exactly( + o.0.iter() + .map(|(_, item)| item) + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .next() + .unwrap_or(&STATIC_NULL), + ), + _ => VarRes::Exactly(&STATIC_NULL), + }) + } + Rule::list_access_function_last => { + let mut pred_iter = idx.into_inner(); + let item_var = pred_iter.next().unwrap().as_str().to_owned(); + let predicate = compile_bool_expr(pred_iter.next().unwrap().into_inner()); + Box::new(move |v, cfgs| match v { + Value::List(l) => VarRes::Exactly( + l.iter() + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .next_back() + .unwrap_or(&STATIC_NULL), + ), + Value::Object(o) => VarRes::Exactly( + o.0.iter() + .map(|(_, item)| item) + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .next_back() + .unwrap_or(&STATIC_NULL), + ), + _ => VarRes::Exactly(&STATIC_NULL), + }) + } + Rule::list_access_function_any => { + let mut pred_iter = idx.into_inner(); + let item_var = pred_iter.next().unwrap().as_str().to_owned(); + let predicate = compile_bool_expr(pred_iter.next().unwrap().into_inner()); + Box::new(move |v, cfgs| match v { + Value::List(l) => VarRes::Any( + l.iter() + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .map(VarRes::Exactly) + .collect(), + ), + Value::Object(o) => VarRes::Any( + o.0.iter() + .map(|(_, item)| item) + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .map(VarRes::Exactly) + .collect(), + ), + _ => VarRes::Exactly(&STATIC_NULL), + }) + } + Rule::list_access_function_all => { + let mut pred_iter = idx.into_inner(); + let item_var = pred_iter.next().unwrap().as_str().to_owned(); + let predicate = compile_bool_expr(pred_iter.next().unwrap().into_inner()); + Box::new(move |v, cfgs| match v { + Value::List(l) => VarRes::All( + l.iter() + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .map(VarRes::Exactly) + .collect(), + ), + Value::Object(o) => VarRes::All( + o.0.iter() + .map(|(_, item)| item) + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .map(VarRes::Exactly) + .collect(), + ), + _ => VarRes::Exactly(&STATIC_NULL), + }) + } + _ => unreachable!(), + } + } + Rule::sub_ident_regular => { + let idx = idx.into_inner().next().unwrap(); + match idx.as_rule() { + Rule::sub_ident_regular_base => { + let idx = idx.as_str().to_owned(); + Box::new(move |v, _| match v { + Value::Object(o) => { + VarRes::Exactly(o.0.get(&idx).unwrap_or(&STATIC_NULL)) + } + _ => VarRes::Exactly(&STATIC_NULL), + }) + } + Rule::sub_ident_regular_expr => { + let idx = compile_str_expr(idx.into_inner().next().unwrap().into_inner()); + Box::new(move |v, dep_cfg| match v { + Value::Object(o) => idx(&Config::default(), dep_cfg).map(|idx| { + idx.and_then(|idx| o.0.get(&idx)).unwrap_or(&STATIC_NULL) + }), + _ => VarRes::Exactly(&STATIC_NULL), + }) + } + _ => unreachable!(), + } + } + Rule::sub_ident_index => { + let idx = idx.into_inner().next().unwrap(); + match idx.as_rule() { + Rule::sub_ident_index_base => { + let idx: usize = idx.as_str().parse().unwrap(); + Box::new(move |v, _| match v { + Value::List(l) => VarRes::Exactly(l.get(idx).unwrap_or(&STATIC_NULL)), + _ => VarRes::Exactly(&STATIC_NULL), + }) + } + Rule::sub_ident_index_expr => { + let idx = compile_num_expr(idx.into_inner().next().unwrap().into_inner()); + Box::new(move |v, dep_cfg| match v { + Value::List(l) => idx(&Config::default(), dep_cfg) + .map(|idx| l.get(idx as usize).unwrap_or(&STATIC_NULL)), + _ => VarRes::Exactly(&STATIC_NULL), + }) + } + _ => unreachable!(), + } + } + _ => unreachable!(), + }; + Some(if let Some(rest) = compile_var_rec(ident) { + Box::new(move |v, cfgs| deref(v, cfgs).and_then(|v| rest(v, cfgs))) + } else { + deref + }) + } else { + None + } +} + +fn compile_var(mut var: Pairs) -> CompiledExpr> { + let mut first_seg = var.next().unwrap(); + let app_id = if first_seg.as_rule() == Rule::app_id { + let app_id = first_seg.into_inner().next().unwrap().as_str().to_owned(); + first_seg = var.next().unwrap(); + Some(app_id) + } else { + None + }; + let first_seg_string = first_seg.as_str().to_owned(); + let accessor = compile_var_rec(var); + Box::new(move |cfg, cfgs| { + let mut cfg: &Config = cfg; + if let Some(ref app_id) = app_id { + cfg = if let Some(cfg) = cfgs.get(&app_id.as_str()) { + cfg + } else { + return VarRes::Exactly(Value::Null); + }; + } + let val = cfg.0.get(&first_seg_string).unwrap_or(&STATIC_NULL); + if let Some(accessor) = &accessor { + accessor(val, cfgs).map(|v| v.clone()) + } else { + VarRes::Exactly(val.clone()) + } + }) +} + +fn compile_var_mut_rec(mut ident: Pairs) -> Result, failure::Error> { + let idx = ident.next(); + Ok(if let Some(idx) = idx { + let deref: AccessorMut = match idx.as_rule() { + Rule::sub_ident_fn => { + let idx = idx.into_inner().next().unwrap(); + match idx.as_rule() { + Rule::list_access_function_first => { + let mut pred_iter = idx.into_inner(); + let item_var = pred_iter.next().unwrap().as_str().to_owned(); + let predicate = compile_bool_expr(pred_iter.next().unwrap().into_inner()); + Box::new(move |v, cfgs| match v { + Value::List(l) => l + .iter_mut() + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .next(), + Value::Object(o) => { + o.0.iter_mut() + .map(|(_, item)| item) + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .next() + } + _ => None, + }) + } + Rule::list_access_function_last => { + let mut pred_iter = idx.into_inner(); + let item_var = pred_iter.next().unwrap().as_str().to_owned(); + let predicate = compile_bool_expr(pred_iter.next().unwrap().into_inner()); + Box::new(move |v, cfgs| match v { + Value::List(l) => l + .iter_mut() + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .next_back(), + Value::Object(o) => { + o.0.iter_mut() + .map(|(_, item)| item) + .filter(|item| { + let mut cfg = Config::default(); + cfg.0.insert(item_var.clone(), (*item).clone()); + predicate(&cfg, cfgs) + }) + .next_back() + } + _ => None, + }) + } + Rule::list_access_function_any | Rule::list_access_function_all => { + failure::bail!("Any and All are immutable") + } + _ => unreachable!(), + } + } + Rule::sub_ident_regular => { + let idx = idx.into_inner().next().unwrap(); + match idx.as_rule() { + Rule::sub_ident_regular_base => { + let idx = idx.as_str().to_owned(); + Box::new(move |v, _| match v { + Value::Object(ref mut o) => { + if o.0.contains_key(&idx) { + o.0.get_mut(&idx) + } else { + o.0.insert(idx.clone(), Value::Null); + o.0.get_mut(&idx) + } + } + _ => None, + }) + } + Rule::sub_ident_regular_expr => { + let idx = compile_str_expr(idx.into_inner().next().unwrap().into_inner()); + Box::new( + move |v, dep_cfg| match (v, idx(&Config::default(), dep_cfg)) { + (Value::Object(ref mut o), VarRes::Exactly(Some(ref idx))) => { + if o.0.contains_key(idx) { + o.0.get_mut(idx) + } else { + o.0.insert(idx.clone(), Value::Null); + o.0.get_mut(idx) + } + } + _ => None, + }, + ) + } + _ => unreachable!(), + } + } + Rule::sub_ident_index => { + let idx = idx.into_inner().next().unwrap(); + match idx.as_rule() { + Rule::sub_ident_index_base => { + let idx: usize = idx.as_str().parse().unwrap(); + Box::new(move |v, _| match v { + Value::List(l) => { + if l.len() > idx { + l.get_mut(idx) + } else if idx == l.len() { + l.push(Value::Null); + l.get_mut(idx) + } else { + None + } + } + _ => None, + }) + } + Rule::sub_ident_index_expr => { + let idx = compile_num_expr(idx.into_inner().next().unwrap().into_inner()); + Box::new( + move |v, dep_cfg| match (v, idx(&Config::default(), dep_cfg)) { + (Value::List(l), VarRes::Exactly(idx)) => { + let idx = idx as usize; + if l.len() > idx { + l.get_mut(idx) + } else if idx == l.len() { + l.push(Value::Null); + l.get_mut(idx) + } else { + None + } + } + _ => None, + }, + ) + } + _ => unreachable!(), + } + } + _ => failure::bail!("invalid token: {:?}", idx.as_rule()), + }; + Some(if let Some(rest) = compile_var_mut_rec(ident)? { + Box::new(move |v, cfgs| deref(v, cfgs).and_then(|v| rest(v, cfgs))) + } else { + deref + }) + } else { + None + }) +} + +fn compile_var_mut(mut var: Pairs) -> Result { + let first_seg = var.next().unwrap(); + if first_seg.as_rule() == Rule::app_id { + failure::bail!("Can only assign to relative path"); + } + let first_seg_string = first_seg.as_str().to_owned(); + let accessor_mut = compile_var_mut_rec(var)?; + Ok(Box::new(move |cfg, cfgs| { + let var = if cfg.0.contains_key(&first_seg_string) { + cfg.0.get_mut(&first_seg_string).unwrap() + } else { + cfg.0.insert(first_seg_string.clone(), Value::Null); + cfg.0.get_mut(&first_seg_string).unwrap() + }; + if let Some(accessor_mut) = &accessor_mut { + accessor_mut(var, cfgs) + } else { + Some(var) + } + })) +} + +fn compile_bool_var(var: Pairs) -> CompiledRule { + let var = compile_var(var); + Box::new(move |cfg, cfgs| { + var(cfg, cfgs) + .map(|a| match a { + Value::Bool(false) | Value::Null => false, + _ => true, + }) + .resolve() + }) +} + +fn compile_num_var(var: Pairs) -> CompiledExpr> { + let var = compile_var(var); + Box::new(move |cfg, cfgs| { + var(cfg, cfgs).map(|a| match a { + Value::Number(n) => n, + Value::String(s) => match s.parse() { + Ok(n) => n, + Err(_) => std::f64::NAN, + }, + Value::Bool(b) => { + if b { + 1.0 + } else { + 0.0 + } + } + _ => std::f64::NAN, + }) + }) +} + +fn compile_num(num_str: &str) -> CompiledExpr> { + let num = VarRes::Exactly(num_str.parse().unwrap()); + Box::new(move |_, _| num.clone()) +} + +fn compile_num_expr(pairs: Pairs) -> CompiledExpr> { + NUM_PREC_CLIMBER.climb( + pairs, + |pair| match pair.as_rule() { + Rule::num_var => compile_num_var(pair.into_inner()), + Rule::num => compile_num(pair.as_str()), + Rule::num_expr => compile_num_expr(pair.into_inner()), + _ => unreachable!(), + }, + |lhs, op, rhs| match op.as_rule() { + Rule::add => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs).and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs + rhs)) + }), + Rule::sub => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs).and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs - rhs)) + }), + Rule::mul => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs).and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs * rhs)) + }), + Rule::div => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs).and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs / rhs)) + }), + Rule::pow => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs).and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs.powf(rhs))) + }), + _ => unreachable!(), + }, + ) +} + +fn compile_num_cmp_expr(mut pairs: Pairs) -> CompiledRule { + let lhs = compile_num_expr(pairs.next().unwrap().into_inner()); + let op = pairs.next().unwrap(); + let rhs = compile_num_expr(pairs.next().unwrap().into_inner()); + match op.as_rule() { + Rule::lt => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs < rhs)) + .resolve() + }), + Rule::lte => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs <= rhs)) + .resolve() + }), + Rule::eq => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs == rhs)) + .resolve() + }), + Rule::neq => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs != rhs)) + .resolve() + }), + Rule::gt => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs > rhs)) + .resolve() + }), + Rule::gte => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| rhs(cfg, cfgs).map(|rhs| lhs >= rhs)) + .resolve() + }), + _ => unreachable!(), + } +} + +fn compile_str_var(var: Pairs) -> CompiledExpr>> { + let var = compile_var(var); + Box::new(move |cfg, cfgs| { + var(cfg, cfgs).map(|a| match a { + Value::String(s) => Some(s), + Value::Number(n) => Some(format!("{}", n)), + Value::Bool(b) => Some(format!("{}", b)), + _ => None, + }) + }) +} + +fn compile_str(str_str: &str) -> CompiledExpr>> { + let str_str = &str_str[1..str_str.len() - 1]; + let mut out = String::with_capacity(str_str.len()); + let mut escape = false; + for c in str_str.chars() { + match c { + '\\' => { + if escape { + out.push('\\'); + } else { + escape = true; + } + } + 'n' if escape => out.push('\n'), + 'r' if escape => out.push('\r'), + 't' if escape => out.push('\t'), + '0' if escape => out.push('\0'), + '"' if escape => out.push('"'), + '\'' if escape => out.push('\''), + _ => { + if escape { + out.push('\\') + } + out.push(c) + } + } + } + let res = VarRes::Exactly(Some(out)); + Box::new(move |_, _| res.clone()) +} + +fn compile_str_expr(pairs: Pairs) -> CompiledExpr>> { + STR_PREC_CLIMBER.climb( + pairs, + |pair| match pair.as_rule() { + Rule::str_var => compile_str_var(pair.into_inner()), + Rule::str => compile_str(pair.as_str()), + Rule::str_expr => compile_str_expr(pair.into_inner()), + _ => unreachable!(), + }, + |lhs, op, rhs| match op.as_rule() { + Rule::add => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs).and_then(|lhs| { + rhs(cfg, cfgs).map(|rhs| { + let lhs = lhs.clone()?; + let rhs = rhs?; + Some(lhs + &rhs) + }) + }) + }), + _ => unreachable!(), + }, + ) +} + +fn compile_str_cmp_expr(mut pairs: Pairs) -> CompiledRule { + let lhs = compile_str_expr(pairs.next().unwrap().into_inner()); + let op = pairs.next().unwrap(); + let rhs = compile_str_expr(pairs.next().unwrap().into_inner()); + match op.as_rule() { + Rule::lt => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| { + rhs(cfg, cfgs).map(|rhs| match (&lhs, &rhs) { + (Some(lhs), Some(rhs)) => rhs.contains(lhs) && lhs.len() < rhs.len(), + _ => false, + }) + }) + .resolve() + }), + Rule::lte => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| { + rhs(cfg, cfgs).map(|rhs| match (&lhs, &rhs) { + (Some(lhs), Some(rhs)) => rhs.contains(lhs), + _ => false, + }) + }) + .resolve() + }), + Rule::eq => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| { + rhs(cfg, cfgs).map(|rhs| match (&lhs, &rhs) { + (Some(lhs), Some(rhs)) => lhs == rhs, + (None, None) => true, + _ => false, + }) + }) + .resolve() + }), + Rule::neq => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| { + rhs(cfg, cfgs).map(|rhs| match (&lhs, &rhs) { + (Some(lhs), Some(rhs)) => lhs != rhs, + (None, None) => false, + _ => true, + }) + }) + .resolve() + }), + Rule::gt => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| { + rhs(cfg, cfgs).map(|rhs| match (&lhs, &rhs) { + (Some(lhs), Some(rhs)) => lhs.contains(rhs) && lhs.len() > rhs.len(), + _ => true, + }) + }) + .resolve() + }), + Rule::gte => Box::new(move |cfg, cfgs| { + lhs(cfg, cfgs) + .and_then(|lhs| { + rhs(cfg, cfgs).map(|rhs| match (&lhs, &rhs) { + (Some(lhs), Some(rhs)) => lhs.contains(rhs), + _ => true, + }) + }) + .resolve() + }), + _ => unreachable!(), + } +} + +fn compile_inv_bool_expr(mut pairs: Pairs) -> CompiledRule { + let expr = compile_bool_expr(pairs.next().unwrap().into_inner()); + Box::new(move |cfg, cfgs| !expr(cfg, cfgs)) +} + +fn compile_bool_expr(pairs: Pairs) -> CompiledRule { + BOOL_PREC_CLIMBER.climb( + pairs, + |pair| match pair.as_rule() { + Rule::bool_var => compile_bool_var(pair.into_inner()), + Rule::bool_expr => compile_bool_expr(pair.into_inner()), + Rule::inv_bool_expr => compile_inv_bool_expr(pair.into_inner()), + Rule::num_cmp_expr => compile_num_cmp_expr(pair.into_inner()), + Rule::str_cmp_expr => compile_str_cmp_expr(pair.into_inner()), + _ => unreachable!(), + }, + |lhs, op, rhs| -> CompiledRule { + match op.as_rule() { + Rule::and => Box::new(move |cfg, cfgs| lhs(cfg, cfgs) && rhs(cfg, cfgs)), + Rule::or => Box::new(move |cfg, cfgs| lhs(cfg, cfgs) || rhs(cfg, cfgs)), + Rule::xor => Box::new(move |cfg, cfgs| lhs(cfg, cfgs) ^ rhs(cfg, cfgs)), + _ => unreachable!(), + } + }, + ) +} + +fn compile_value_expr(mut pairs: Pairs) -> CompiledExpr> { + let expr = pairs.next().unwrap(); + match expr.as_rule() { + Rule::any_var => compile_var(expr.into_inner()), + Rule::str_expr => { + let expr = compile_str_expr(expr.into_inner()); + Box::new(move |cfg, cfgs| { + expr(cfg, cfgs).map(|s| s.map(Value::String).unwrap_or(Value::Null)) + }) + } + Rule::num_expr => { + let expr = compile_num_expr(expr.into_inner()); + Box::new(move |cfg, cfgs| expr(cfg, cfgs).map(Value::Number)) + } + Rule::bool_expr => { + let expr = compile_bool_expr(expr.into_inner()); + Box::new(move |cfg, cfgs| VarRes::Exactly(expr(cfg, cfgs)).map(Value::Bool)) + } + _ => unreachable!(), + } +} + +fn compile_del_action(mut pairs: Pairs) -> Result { + let list_mut = compile_var_mut(pairs.next().unwrap().into_inner())?; + let var = pairs.next().unwrap().as_str().to_owned(); + let predicate = compile_bool_expr(pairs.next().unwrap().into_inner()); + Ok(Box::new(move |cfg, cfgs| match (&list_mut)(cfg, cfgs) { + Some(Value::List(ref mut l)) => { + *l = std::mem::take(l) + .into_iter() + .filter(|item| { + let mut obj = Config::default(); + obj.0.insert(var.clone(), item.clone()); + !predicate(&obj, cfgs) + }) + .collect(); + } + Some(Value::Object(Config(ref mut o))) => { + *o = std::mem::take(o) + .into_iter() + .filter(|(_, item)| { + let mut obj = Config::default(); + obj.0.insert(var.clone(), item.clone()); + !predicate(&obj, cfgs) + }) + .collect(); + } + _ => return, + })) +} + +fn compile_push_action(mut pairs: Pairs, value: Value) -> Result { + let list_mut = compile_var_mut(pairs.next().unwrap().into_inner())?; + Ok(Box::new(move |cfg, cfgs| { + let vec = match (&list_mut)(cfg, cfgs) { + Some(Value::List(ref mut a)) => a, + _ => return, + }; + vec.push(value.clone()) + })) +} + +fn compile_set_action(var: &str, to: &SetVariant) -> Result { + let mut var = RuleParser::parse(Rule::reference, var)?; + let get_mut = compile_var_mut(var.next().unwrap().into_inner())?; + Ok(match to { + SetVariant::To(expr) => { + let expr = compile_expr(&expr)?; + Box::new(move |cfg, cfgs| { + let val = expr(cfg, cfgs); + if let Some(var) = get_mut(cfg, cfgs) { + *var = val; + } + }) + } + SetVariant::ToValue(val) => { + let val = val.clone(); + Box::new(move |cfg, cfgs| { + if let Some(var) = get_mut(cfg, cfgs) { + *var = val.clone() + } + }) + } + SetVariant::ToEntropy(entropy) => { + let entropy = entropy.clone(); + Box::new(move |cfg, cfgs| { + if let Some(var) = get_mut(cfg, cfgs) { + *var = Value::String(entropy.gen(&mut rand::rngs::StdRng::from_entropy())); + } + }) + } + }) +} + +pub fn validate_key(key: &str) -> Result<(), pest::error::Error> { + RuleParser::parse(Rule::obj_key, key)?; + Ok(()) +} + +pub fn parse_and) -> T>( + rule: &str, + f: F, +) -> Result> { + let mut parsed = RuleParser::parse(Rule::rule, rule)?; + let pairs = parsed.next().unwrap().into_inner(); + Ok(f(pairs)) +} + +pub fn compile(rule: &str) -> Result { + parse_and(rule, compile_bool_expr).map_err(From::from) +} + +pub fn compile_expr(expr: &str) -> Result, failure::Error> { + let compiled = compile_value_expr(RuleParser::parse(Rule::value, expr)?); + Ok(Box::new(move |cfg, cfgs| match compiled(cfg, cfgs) { + VarRes::Exactly(v) => v, + _ => Value::Null, + })) +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_compile_str() { + assert_eq!( + compile_str("\"foo\"")(&Default::default(), &Default::default()), + VarRes::Exactly(Some("foo".to_owned())) + ); + } + + #[test] + fn test_access_expr() { + let mut cfg = Config::default(); + let mut cfgs = LinearMap::new(); + let mut foo = Config::default(); + foo.0.insert("bar!\"".to_owned(), Value::Number(3.0)); + cfg.0.insert( + "foo".to_owned(), + Value::List(vec![Value::Null, Value::Object(foo), Value::Number(3.0)]), + ); + cfgs.insert("my-app", Cow::Borrowed(&cfg)); + assert!((compile("#[my-app].foo.1.[\"ba\" + \"r!\\\"\"] = 3") + .map_err(|e| eprintln!("{}", e)) + .expect("compile failed"))(&cfg, &cfgs)); + assert!((compile("#[my-app].foo.[0 + 1].[\"bar!\\\"\"] = 3") + .map_err(|e| eprintln!("{}", e)) + .expect("compile failed"))(&cfg, &cfgs)); + } + + #[test] + fn test_any_all() { + let mut cfg = Config::default(); + let mut cfgs = LinearMap::new(); + let mut foo = Config::default(); + foo.0.insert("bar".to_owned(), Value::Number(3.0)); + cfg.0.insert( + "foo".to_owned(), + Value::List(vec![Value::Null, Value::Object(foo), Value::Number(3.0)]), + ); + cfgs.insert("my-app", Cow::Borrowed(&cfg)); + assert!((compile("#[my-app].foo.*.bar = 3") + .map_err(|e| eprintln!("{}", e)) + .expect("compile failed"))(&cfg, &cfgs)); + assert!(!(compile("#[my-app].foo.&.bar = 3") + .map_err(|e| eprintln!("{}", e)) + .expect("compile failed"))(&cfg, &cfgs)); + } + + #[test] + fn test_first_last() { + let mut cfg = Config::default(); + let mut cfgs = LinearMap::new(); + let mut foo = Config::default(); + foo.0.insert("bar".to_owned(), Value::Number(3.0)); + foo.0.insert("baz".to_owned(), Value::Number(4.0)); + let mut qux = Config::default(); + qux.0.insert("bar".to_owned(), Value::Number(7.0)); + qux.0.insert("baz".to_owned(), Value::Number(4.0)); + cfg.0.insert( + "foo".to_owned(), + Value::List(vec![ + Value::Null, + Value::Object(foo), + Value::Object(qux), + Value::Number(3.0), + ]), + ); + cfgs.insert("my-app", Cow::Borrowed(&cfg)); + assert!((compile("#foo.[first(item => #item.baz = 4)].bar = 3") + .map_err(|e| eprintln!("{}", e)) + .expect("compile failed"))(&cfg, &cfgs)); + assert!((compile("#foo.[last(item => #item.baz = 4)].bar = 7") + .map_err(|e| eprintln!("{}", e)) + .expect("compile failed"))(&cfg, &cfgs)); + } + + #[test] + fn test_app_id() { + let mut dependent_cfg = Config::default(); + let mut dependency_cfg = Config::default(); + let mut cfgs = LinearMap::new(); + dependent_cfg + .0 + .insert("foo".to_owned(), Value::String("bar".to_owned())); + dependency_cfg + .0 + .insert("foo".to_owned(), Value::String("bar!".to_owned())); + cfgs.insert("my-dependent", Cow::Borrowed(&dependent_cfg)); + cfgs.insert("my-dependency", Cow::Borrowed(&dependency_cfg)); + assert!((compile("'foo = '[my-dependent].foo + \"!\"") + .map_err(|e| eprintln!("{}", e)) + .expect("compile failed"))( + &dependency_cfg, &cfgs + )) + } +} diff --git a/appmgr/src/config/spec.rs b/appmgr/src/config/spec.rs new file mode 100644 index 000000000..b5ea6da5b --- /dev/null +++ b/appmgr/src/config/spec.rs @@ -0,0 +1,1874 @@ +use std::borrow::{Borrow, Cow}; +use std::fmt; +use std::fmt::Debug; +use std::ops::RangeBounds; +use std::sync::Arc; +use std::time::Duration; + +use async_trait::async_trait; +use itertools::Itertools; +use linear_map::{set::LinearSet, LinearMap}; +use rand::{CryptoRng, Rng}; +use regex::Regex; + +use super::util::{self, CharSet, NumRange, UniqueBy, STATIC_NULL}; +use super::value::{Config, Value}; +use super::{MatchError, NoMatchWithPath, TimeoutError}; + +use crate::config::ConfigurationError; +use crate::manifest::ManifestLatest; +use crate::util::PersistencePath; + +// Config Value Specifications +#[async_trait] +pub trait ValueSpec { + // This function defines whether the value supplied in the argument is + // consistent with the spec in &self + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath>; + // This function checks whether the value spec is consistent with itself, + // since not all invariants can be checked by the type + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath>; + // update is to fill in values for environment pointers recursively + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError>; + // requires returns whether the app id is the target of a pointer within it + fn requires(&self, id: &str, value: &Value) -> bool; + // defines if 2 values of this type are equal for the purpose of uniqueness + fn eq(&self, lhs: &Value, rhs: &Value) -> bool; +} + +// Config Value Default Generation +// +// This behavior is defined by two independent traits as well as a third that +// represents a conjunction of those two traits: +// +// DefaultableWith - defines an associated type describing the information it +// needs to be able to generate a default value, as well as a function for +// extracting relevant pieces of that information and using it to actually +// generate the default value +// +// HasDefaultSpec - only purpose is to summon the default spec for the type +// +// Defaultable - this is a redundant trait that may replace 'DefaultableWith' +// and 'HasDefaultSpec'. +pub trait DefaultableWith { + type DefaultSpec: Sync; + type Error: failure::Fail; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + rng: &mut R, + timeout: &Option, + ) -> Result; +} +pub trait HasDefaultSpec: DefaultableWith { + fn default_spec(&self) -> &Self::DefaultSpec; +} + +pub trait Defaultable { + type Error; + + fn gen( + &self, + rng: &mut R, + timeout: &Option, + ) -> Result; +} +impl Defaultable for T +where + T: HasDefaultSpec + DefaultableWith + Sync, + E: failure::Fail, +{ + type Error = E; + + fn gen( + &self, + rng: &mut R, + timeout: &Option, + ) -> Result { + self.gen_with(self.default_spec().borrow(), rng, timeout) + } +} + +// WithDefault - trivial wrapper that pairs a 'DefaultableWith' type with a +// default spec +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct WithDefault { + #[serde(flatten)] + pub inner: T, + pub default: T::DefaultSpec, +} +impl DefaultableWith for WithDefault +where + T: DefaultableWith + Sync + Send, + T::DefaultSpec: Send, +{ + type DefaultSpec = T::DefaultSpec; + type Error = T::Error; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + rng: &mut R, + timeout: &Option, + ) -> Result { + self.inner.gen_with(spec, rng, timeout) + } +} +impl HasDefaultSpec for WithDefault +where + T: DefaultableWith + Sync + Send, + T::DefaultSpec: Send, +{ + fn default_spec(&self) -> &Self::DefaultSpec { + &self.default + } +} +#[async_trait] +impl ValueSpec for WithDefault +where + T: ValueSpec + DefaultableWith + Send + Sync, + Self: Send + Sync, +{ + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + self.inner.matches(value) + } + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + self.inner.validate(manifest) + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + self.inner.update(value).await + } + fn requires(&self, id: &str, value: &Value) -> bool { + self.inner.requires(id, value) + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + self.inner.eq(lhs, rhs) + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct WithNullable { + #[serde(flatten)] + pub inner: T, + pub nullable: bool, +} +#[async_trait] +impl ValueSpec for WithNullable +where + T: ValueSpec + Send + Sync, + Self: Send + Sync, +{ + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + match (self.nullable, value) { + (true, &Value::Null) => Ok(()), + _ => self.inner.matches(value), + } + } + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + self.inner.validate(manifest) + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + self.inner.update(value).await + } + fn requires(&self, id: &str, value: &Value) -> bool { + self.inner.requires(id, value) + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + self.inner.eq(lhs, rhs) + } +} + +impl DefaultableWith for WithNullable +where + T: DefaultableWith + Sync + Send, +{ + type DefaultSpec = T::DefaultSpec; + type Error = T::Error; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + rng: &mut R, + timeout: &Option, + ) -> Result { + self.inner.gen_with(spec, rng, timeout) + } +} + +impl Defaultable for WithNullable +where + T: Defaultable + Sync + Send, +{ + type Error = T::Error; + + fn gen( + &self, + rng: &mut R, + timeout: &Option, + ) -> Result { + self.inner.gen(rng, timeout) + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct WithDescription { + #[serde(flatten)] + pub inner: T, + pub description: Option, + pub name: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub change_warning: Option, +} +#[async_trait] +impl ValueSpec for WithDescription +where + T: ValueSpec + Sync + Send, + Self: Sync + Send, +{ + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + self.inner.matches(value) + } + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + self.inner.validate(manifest) + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + self.inner.update(value).await + } + fn requires(&self, id: &str, value: &Value) -> bool { + self.inner.requires(id, value) + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + self.inner.eq(lhs, rhs) + } +} + +impl DefaultableWith for WithDescription +where + T: DefaultableWith + Sync + Send, +{ + type DefaultSpec = T::DefaultSpec; + type Error = T::Error; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + rng: &mut R, + timeout: &Option, + ) -> Result { + self.inner.gen_with(spec, rng, timeout) + } +} + +impl Defaultable for WithDescription +where + T: Defaultable + Sync + Send, +{ + type Error = T::Error; + + fn gen( + &self, + rng: &mut R, + timeout: &Option, + ) -> Result { + self.inner.gen(rng, timeout) + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "kebab-case")] +#[serde(tag = "type")] +pub enum ValueSpecAny { + Boolean(WithDescription>), + Enum(WithDescription>), + List(ValueSpecList), + Number(WithDescription>>), + Object(WithDescription>), + String(WithDescription>>), + Union(WithDescription>), + Pointer(WithDescription), +} +impl ValueSpecAny { + pub fn name<'a>(&'a self) -> &'a str { + match self { + ValueSpecAny::Boolean(b) => b.name.as_str(), + ValueSpecAny::Enum(e) => e.name.as_str(), + ValueSpecAny::List(l) => match l { + ValueSpecList::Enum(e) => e.name.as_str(), + ValueSpecList::Number(n) => n.name.as_str(), + ValueSpecList::Object(o) => o.name.as_str(), + ValueSpecList::String(s) => s.name.as_str(), + ValueSpecList::Union(u) => u.name.as_str(), + }, + ValueSpecAny::Number(n) => n.name.as_str(), + ValueSpecAny::Object(o) => o.name.as_str(), + ValueSpecAny::Pointer(p) => p.name.as_str(), + ValueSpecAny::String(s) => s.name.as_str(), + ValueSpecAny::Union(u) => u.name.as_str(), + } + } +} +#[async_trait] +impl ValueSpec for ValueSpecAny { + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + match self { + ValueSpecAny::Boolean(a) => a.matches(value), + ValueSpecAny::Enum(a) => a.matches(value), + ValueSpecAny::List(a) => a.matches(value), + ValueSpecAny::Number(a) => a.matches(value), + ValueSpecAny::Object(a) => a.matches(value), + ValueSpecAny::String(a) => a.matches(value), + ValueSpecAny::Union(a) => a.matches(value), + ValueSpecAny::Pointer(a) => a.matches(value), + } + } + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + match self { + ValueSpecAny::Boolean(a) => a.validate(manifest), + ValueSpecAny::Enum(a) => a.validate(manifest), + ValueSpecAny::List(a) => a.validate(manifest), + ValueSpecAny::Number(a) => a.validate(manifest), + ValueSpecAny::Object(a) => a.validate(manifest), + ValueSpecAny::String(a) => a.validate(manifest), + ValueSpecAny::Union(a) => a.validate(manifest), + ValueSpecAny::Pointer(a) => a.validate(manifest), + } + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + match self { + ValueSpecAny::Boolean(a) => a.update(value).await, + ValueSpecAny::Enum(a) => a.update(value).await, + ValueSpecAny::List(a) => a.update(value).await, + ValueSpecAny::Number(a) => a.update(value).await, + ValueSpecAny::Object(a) => a.update(value).await, + ValueSpecAny::String(a) => a.update(value).await, + ValueSpecAny::Union(a) => a.update(value).await, + ValueSpecAny::Pointer(a) => a.update(value).await, + } + } + fn requires(&self, id: &str, value: &Value) -> bool { + match self { + ValueSpecAny::Boolean(a) => a.requires(id, value), + ValueSpecAny::Enum(a) => a.requires(id, value), + ValueSpecAny::List(a) => a.requires(id, value), + ValueSpecAny::Number(a) => a.requires(id, value), + ValueSpecAny::Object(a) => a.requires(id, value), + ValueSpecAny::String(a) => a.requires(id, value), + ValueSpecAny::Union(a) => a.requires(id, value), + ValueSpecAny::Pointer(a) => a.requires(id, value), + } + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + match self { + ValueSpecAny::Boolean(a) => a.eq(lhs, rhs), + ValueSpecAny::Enum(a) => a.eq(lhs, rhs), + ValueSpecAny::List(a) => a.eq(lhs, rhs), + ValueSpecAny::Number(a) => a.eq(lhs, rhs), + ValueSpecAny::Object(a) => a.eq(lhs, rhs), + ValueSpecAny::String(a) => a.eq(lhs, rhs), + ValueSpecAny::Union(a) => a.eq(lhs, rhs), + ValueSpecAny::Pointer(a) => a.eq(lhs, rhs), + } + } +} +impl Defaultable for ValueSpecAny { + type Error = ConfigurationError; + + fn gen( + &self, + rng: &mut R, + timeout: &Option, + ) -> Result { + match self { + ValueSpecAny::Boolean(a) => a.gen(rng, timeout).map_err(crate::util::absurd), + ValueSpecAny::Enum(a) => a.gen(rng, timeout).map_err(crate::util::absurd), + ValueSpecAny::List(a) => a.gen(rng, timeout), + ValueSpecAny::Number(a) => a.gen(rng, timeout).map_err(crate::util::absurd), + ValueSpecAny::Object(a) => a.gen(rng, timeout), + ValueSpecAny::String(a) => a.gen(rng, timeout).map_err(ConfigurationError::from), + ValueSpecAny::Union(a) => a.gen(rng, timeout), + ValueSpecAny::Pointer(a) => a.gen(rng, timeout), + } + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct ValueSpecBoolean {} +#[async_trait] +impl ValueSpec for ValueSpecBoolean { + fn matches(&self, val: &Value) -> Result<(), NoMatchWithPath> { + match val { + Value::Bool(_) => Ok(()), + Value::Null => Err(NoMatchWithPath::new(MatchError::NotNullable)), + a => Err(NoMatchWithPath::new(MatchError::InvalidType( + "boolean", + a.type_of(), + ))), + } + } + fn validate(&self, _manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + Ok(()) + } + async fn update(&self, _value: &mut Value) -> Result<(), ConfigurationError> { + Ok(()) + } + fn requires(&self, _id: &str, _value: &Value) -> bool { + false + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + match (lhs, rhs) { + (Value::Bool(lhs), Value::Bool(rhs)) => lhs == rhs, + _ => false, + } + } +} +impl DefaultableWith for ValueSpecBoolean { + type DefaultSpec = bool; + type Error = crate::util::Never; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + _rng: &mut R, + _timeout: &Option, + ) -> Result { + Ok(Value::Bool(*spec)) + } +} + +#[derive(Clone, Debug, serde::Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ValueSpecEnum { + pub values: LinearSet, + pub value_names: LinearMap, +} +impl<'de> serde::de::Deserialize<'de> for ValueSpecEnum { + fn deserialize>(deserializer: D) -> Result { + #[derive(serde::Deserialize)] + #[serde(rename_all = "camelCase")] + pub struct _ValueSpecEnum { + pub values: LinearSet, + #[serde(default)] + pub value_names: LinearMap, + } + + let mut r#enum = _ValueSpecEnum::deserialize(deserializer)?; + for name in &r#enum.values { + if !r#enum.value_names.contains_key(name) { + r#enum.value_names.insert(name.clone(), name.clone()); + } + } + Ok(ValueSpecEnum { + values: r#enum.values, + value_names: r#enum.value_names, + }) + } +} +#[async_trait] +impl ValueSpec for ValueSpecEnum { + fn matches(&self, val: &Value) -> Result<(), NoMatchWithPath> { + match val { + Value::String(b) => { + if self.values.contains(b) { + Ok(()) + } else { + Err(NoMatchWithPath::new(MatchError::Enum( + b.clone(), + self.values.clone(), + ))) + } + } + Value::Null => Err(NoMatchWithPath::new(MatchError::NotNullable)), + a => Err(NoMatchWithPath::new(MatchError::InvalidType( + "string", + a.type_of(), + ))), + } + } + fn validate(&self, _manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + Ok(()) + } + async fn update(&self, _value: &mut Value) -> Result<(), ConfigurationError> { + Ok(()) + } + fn requires(&self, _id: &str, _value: &Value) -> bool { + false + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + match (lhs, rhs) { + (Value::String(lhs), Value::String(rhs)) => lhs == rhs, + _ => false, + } + } +} +impl DefaultableWith for ValueSpecEnum { + type DefaultSpec = String; + type Error = crate::util::Never; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + _rng: &mut R, + _timeout: &Option, + ) -> Result { + Ok(Value::String(spec.clone())) + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct ListSpec { + pub spec: T, + pub range: NumRange, +} +#[async_trait] +impl ValueSpec for ListSpec +where + T: ValueSpec + Sync + Send, + Self: Sync + Send, +{ + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + match value { + Value::List(l) => { + if !self.range.contains(&l.len()) { + Err(NoMatchWithPath { + path: Vec::new(), + error: MatchError::LengthMismatch(self.range.clone(), l.len()), + }) + } else { + l.iter() + .enumerate() + .map(|(i, v)| { + self.spec + .matches(v) + .map_err(|e| e.prepend(format!("{}", i)))?; + if l.iter() + .enumerate() + .any(|(i2, v2)| i != i2 && self.spec.eq(v, v2)) + { + Err(NoMatchWithPath::new(MatchError::ListUniquenessViolation) + .prepend(format!("{}", i))) + } else { + Ok(()) + } + }) + .collect() + } + } + Value::Null => Err(NoMatchWithPath::new(MatchError::NotNullable)), + a => Err(NoMatchWithPath::new(MatchError::InvalidType( + "list", + a.type_of(), + ))), + } + } + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + self.spec.validate(manifest) + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + if let Value::List(ref mut ls) = value { + for (i, val) in ls.into_iter().enumerate() { + match self.spec.update(val).await { + Err(ConfigurationError::NoMatch(e)) => { + Err(ConfigurationError::NoMatch(e.prepend(format!("{}", i)))) + } + a => a, + }?; + } + Ok(()) + } else { + Err(ConfigurationError::NoMatch(NoMatchWithPath::new( + MatchError::InvalidType("list", value.type_of()), + ))) + } + } + fn requires(&self, id: &str, value: &Value) -> bool { + if let Value::List(ref ls) = value { + ls.into_iter().any(|v| self.spec.requires(id, v)) + } else { + false + } + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + match (lhs, rhs) { + (Value::List(lhs), Value::List(rhs)) => { + lhs.iter().zip_longest(rhs.iter()).all(|zip| match zip { + itertools::EitherOrBoth::Both(lhs, rhs) => lhs == rhs, + _ => false, + }) + } + _ => false, + } + } +} + +impl DefaultableWith for ListSpec +where + T: DefaultableWith + Sync + Send, +{ + type DefaultSpec = Vec; + type Error = T::Error; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + rng: &mut R, + timeout: &Option, + ) -> Result { + let mut res = Vec::new(); + for spec_member in spec.iter() { + res.push(self.spec.gen_with(spec_member, rng, timeout)?); + } + Ok(Value::List(res)) + } +} + +unsafe impl Sync for ValueSpecObject {} // TODO: remove +unsafe impl Send for ValueSpecObject {} // TODO: remove +unsafe impl Sync for ValueSpecUnion {} // TODO: remove +unsafe impl Send for ValueSpecUnion {} // TODO: remove + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "kebab-case")] +#[serde(tag = "subtype")] +pub enum ValueSpecList { + Enum(WithDescription>>), + Number(WithDescription>>), + Object(WithDescription>>), + String(WithDescription>>), + Union(WithDescription>>>), +} +#[async_trait] +impl ValueSpec for ValueSpecList { + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + match self { + ValueSpecList::Enum(a) => a.matches(value), + ValueSpecList::Number(a) => a.matches(value), + ValueSpecList::Object(a) => a.matches(value), + ValueSpecList::String(a) => a.matches(value), + ValueSpecList::Union(a) => a.matches(value), + } + } + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + match self { + ValueSpecList::Enum(a) => a.validate(manifest), + ValueSpecList::Number(a) => a.validate(manifest), + ValueSpecList::Object(a) => a.validate(manifest), + ValueSpecList::String(a) => a.validate(manifest), + ValueSpecList::Union(a) => a.validate(manifest), + } + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + match self { + ValueSpecList::Enum(a) => a.update(value).await, + ValueSpecList::Number(a) => a.update(value).await, + ValueSpecList::Object(a) => a.update(value).await, + ValueSpecList::String(a) => a.update(value).await, + ValueSpecList::Union(a) => a.update(value).await, + } + } + fn requires(&self, id: &str, value: &Value) -> bool { + match self { + ValueSpecList::Enum(a) => a.requires(id, value), + ValueSpecList::Number(a) => a.requires(id, value), + ValueSpecList::Object(a) => a.requires(id, value), + ValueSpecList::String(a) => a.requires(id, value), + ValueSpecList::Union(a) => a.requires(id, value), + } + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + match self { + ValueSpecList::Enum(a) => a.eq(lhs, rhs), + ValueSpecList::Number(a) => a.eq(lhs, rhs), + ValueSpecList::Object(a) => a.eq(lhs, rhs), + ValueSpecList::String(a) => a.eq(lhs, rhs), + ValueSpecList::Union(a) => a.eq(lhs, rhs), + } + } +} + +impl Defaultable for ValueSpecList { + type Error = ConfigurationError; + + fn gen( + &self, + rng: &mut R, + timeout: &Option, + ) -> Result { + match self { + ValueSpecList::Enum(a) => a.gen(rng, timeout).map_err(crate::util::absurd), + ValueSpecList::Number(a) => a.gen(rng, timeout).map_err(crate::util::absurd), + ValueSpecList::Object(a) => { + let mut ret = match a.gen(rng, timeout).unwrap() { + Value::List(l) => l, + a => { + return Err(ConfigurationError::NoMatch(NoMatchWithPath::new( + MatchError::InvalidType("list", a.type_of()), + ))) + } + }; + while !( + a.inner.inner.range.start_bound(), + std::ops::Bound::Unbounded, + ) + .contains(&ret.len()) + { + ret.push( + a.inner + .inner + .spec + .gen(rng, timeout) + .map_err(ConfigurationError::from)?, + ); + } + Ok(Value::List(ret)) + } + ValueSpecList::String(a) => a.gen(rng, timeout).map_err(ConfigurationError::from), + ValueSpecList::Union(a) => a.gen(rng, timeout).map_err(ConfigurationError::from), + } + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct ValueSpecNumber { + range: Option>, + #[serde(default)] + integral: bool, + #[serde(skip_serializing_if = "Option::is_none")] + units: Option, +} +#[async_trait] +impl ValueSpec for ValueSpecNumber { + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + match value { + Value::Number(n) => { + if self.integral && n.floor() != *n { + return Err(NoMatchWithPath::new(MatchError::NonIntegral(*n))); + } + if let Some(range) = &self.range { + if !range.contains(n) { + return Err(NoMatchWithPath::new(MatchError::OutOfRange( + range.clone(), + *n, + ))); + } + } + Ok(()) + } + Value::Null => Err(NoMatchWithPath::new(MatchError::NotNullable)), + a => Err(NoMatchWithPath::new(MatchError::InvalidType( + "object", + a.type_of(), + ))), + } + } + fn validate(&self, _manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + Ok(()) + } + async fn update(&self, _value: &mut Value) -> Result<(), ConfigurationError> { + Ok(()) + } + fn requires(&self, _id: &str, _value: &Value) -> bool { + false + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + match (lhs, rhs) { + (Value::Number(lhs), Value::Number(rhs)) => lhs == rhs, + _ => false, + } + } +} +#[derive(Clone, Copy, Debug, serde::Serialize)] +pub struct Number(pub f64); +impl<'de> serde::de::Deserialize<'de> for Number { + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + use serde::de::*; + struct NumberVisitor; + impl<'de> Visitor<'de> for NumberVisitor { + type Value = Number; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("a number") + } + fn visit_i8(self, value: i8) -> Result { + Ok(Number(value.into())) + } + fn visit_i16(self, value: i16) -> Result { + Ok(Number(value.into())) + } + fn visit_i32(self, value: i32) -> Result { + Ok(Number(value.into())) + } + fn visit_i64(self, value: i64) -> Result { + Ok(Number(value as f64)) + } + fn visit_u8(self, value: u8) -> Result { + Ok(Number(value.into())) + } + fn visit_u16(self, value: u16) -> Result { + Ok(Number(value.into())) + } + fn visit_u32(self, value: u32) -> Result { + Ok(Number(value.into())) + } + fn visit_u64(self, value: u64) -> Result { + Ok(Number(value as f64)) + } + fn visit_f32(self, value: f32) -> Result { + Ok(Number(value.into())) + } + fn visit_f64(self, value: f64) -> Result { + Ok(Number(value)) + } + } + deserializer.deserialize_any(NumberVisitor) + } +} +impl DefaultableWith for ValueSpecNumber { + type DefaultSpec = Option; + type Error = crate::util::Never; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + _rng: &mut R, + _timeout: &Option, + ) -> Result { + Ok(spec.map(|s| Value::Number(s.0)).unwrap_or(Value::Null)) + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ValueSpecObject { + pub spec: ConfigSpec, + #[serde(default)] + pub null_by_default: bool, + pub display_as: Option, + #[serde(default)] + pub unique_by: UniqueBy, +} +#[async_trait] +impl ValueSpec for ValueSpecObject { + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + match value { + Value::Object(o) => self.spec.matches(o), + Value::Null => Err(NoMatchWithPath::new(MatchError::NotNullable)), + a => Err(NoMatchWithPath::new(MatchError::InvalidType( + "object", + a.type_of(), + ))), + } + } + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + self.spec.validate(manifest) + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + if let Value::Object(o) = value { + self.spec.update(o).await + } else { + Err(ConfigurationError::NoMatch(NoMatchWithPath::new( + MatchError::InvalidType("object", value.type_of()), + ))) + } + } + fn requires(&self, id: &str, value: &Value) -> bool { + if let Value::Object(o) = value { + self.spec.requires(id, o) + } else { + false + } + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + match (lhs, rhs) { + (Value::Object(lhs), Value::Object(rhs)) => self.unique_by.eq(lhs, rhs), + _ => false, + } + } +} +impl DefaultableWith for ValueSpecObject { + type DefaultSpec = Config; + type Error = crate::util::Never; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + _rng: &mut R, + _timeout: &Option, + ) -> Result { + if self.null_by_default { + Ok(Value::Null) + } else { + Ok(Value::Object(spec.clone())) + } + } +} +impl Defaultable for ValueSpecObject { + type Error = ConfigurationError; + + fn gen( + &self, + rng: &mut R, + timeout: &Option, + ) -> Result { + if self.null_by_default { + Ok(Value::Null) + } else { + self.spec.gen(rng, timeout).map(Value::Object) + } + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct ConfigSpec(pub LinearMap); +impl ConfigSpec { + pub fn matches(&self, value: &Config) -> Result<(), NoMatchWithPath> { + for (key, val) in self.0.iter() { + if let Some(v) = value.0.get(key) { + val.matches(v).map_err(|e| e.prepend(key.clone()))?; + } else { + val.matches(&Value::Null) + .map_err(|e| e.prepend(key.clone()))?; + } + } + Ok(()) + } + + pub fn gen( + &self, + rng: &mut R, + timeout: &Option, + ) -> Result { + let mut res = LinearMap::new(); + for (key, val) in self.0.iter() { + res.insert(key.clone(), val.gen(rng, timeout)?); + } + Ok(Config(res)) + } + + pub fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + for (name, val) in &self.0 { + if let Err(_) = super::rules::validate_key(&name) { + return Err(NoMatchWithPath::new(MatchError::InvalidKey( + name.to_owned(), + ))); + } + val.validate(manifest) + .map_err(|e| e.prepend(name.clone()))?; + } + Ok(()) + } + + pub async fn update(&self, cfg: &mut Config) -> Result<(), ConfigurationError> { + for (k, v) in cfg.0.iter_mut() { + match self.0.get(k) { + None => (), + Some(vs) => match vs.update(v).await { + Err(ConfigurationError::NoMatch(e)) => { + Err(ConfigurationError::NoMatch(e.prepend(k.clone()))) + } + a => a, + }?, + }; + } + Ok(()) + } + pub fn requires(&self, id: &str, cfg: &Config) -> bool { + self.0 + .iter() + .any(|(k, v)| v.requires(id, cfg.0.get(k).unwrap_or(&STATIC_NULL))) + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Pattern { + #[serde(with = "util::serde_regex")] + pub pattern: Regex, + pub pattern_description: String, +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct ValueSpecString { + #[serde(flatten)] + pub pattern: Option, + #[serde(default)] + pub copyable: bool, + #[serde(default)] + pub masked: bool, +} +#[async_trait] +impl ValueSpec for ValueSpecString { + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + match value { + Value::String(s) => { + if let Some(pattern) = &self.pattern { + if pattern.pattern.is_match(s) { + Ok(()) + } else { + Err(NoMatchWithPath::new(MatchError::Pattern( + s.to_owned(), + pattern.pattern.clone(), + ))) + } + } else { + Ok(()) + } + } + Value::Null => Err(NoMatchWithPath::new(MatchError::NotNullable)), + a => Err(NoMatchWithPath::new(MatchError::InvalidType( + "string", + a.type_of(), + ))), + } + } + fn validate(&self, _manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + Ok(()) + } + async fn update(&self, _value: &mut Value) -> Result<(), ConfigurationError> { + Ok(()) + } + fn requires(&self, _id: &str, _value: &Value) -> bool { + false + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + match (lhs, rhs) { + (Value::String(lhs), Value::String(rhs)) => lhs == rhs, + _ => false, + } + } +} +impl DefaultableWith for ValueSpecString { + type DefaultSpec = Option; + type Error = TimeoutError; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + rng: &mut R, + timeout: &Option, + ) -> Result { + if let Some(spec) = spec { + let now = timeout.as_ref().map(|_| std::time::Instant::now()); + loop { + let candidate = spec.gen(rng); + match (spec, &self.pattern) { + (DefaultString::Entropy(_), Some(pattern)) + if !pattern.pattern.is_match(&candidate) => + { + () + } + _ => { + return Ok(Value::String(candidate)); + } + } + if let (Some(now), Some(timeout)) = (now, timeout) { + if &now.elapsed() > timeout { + return Err(TimeoutError); + } + } + } + } else { + Ok(Value::Null) + } + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(untagged)] +pub enum DefaultString { + Literal(String), + Entropy(Entropy), +} +impl DefaultString { + pub fn gen(&self, rng: &mut R) -> String { + match self { + DefaultString::Literal(s) => s.clone(), + DefaultString::Entropy(e) => e.gen(rng), + } + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct Entropy { + pub charset: Option, + pub len: usize, +} +impl Entropy { + pub fn gen(&self, rng: &mut R) -> String { + let len = self.len; + let set = self + .charset + .as_ref() + .map(|cs| Cow::Borrowed(cs)) + .unwrap_or_else(|| Cow::Owned(Default::default())); + std::iter::repeat_with(|| set.gen(rng)).take(len).collect() + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct UnionTag { + pub id: String, + pub name: String, + pub description: Option, + pub variant_names: LinearMap, +} + +#[derive(Clone, Debug, serde::Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ValueSpecUnion { + pub tag: UnionTag, + pub variants: LinearMap, + pub display_as: Option, + pub unique_by: UniqueBy, +} + +impl<'de> serde::de::Deserialize<'de> for ValueSpecUnion { + fn deserialize>(deserializer: D) -> Result { + #[derive(serde::Deserialize)] + #[serde(rename_all = "camelCase")] + #[serde(untagged)] + pub enum _UnionTag { + Old(String), + New(UnionTag), + } + #[derive(serde::Deserialize)] + #[serde(rename_all = "camelCase")] + pub struct _ValueSpecUnion { + pub variants: LinearMap, + pub tag: _UnionTag, + pub display_as: Option, + #[serde(default)] + pub unique_by: UniqueBy, + } + + let union = _ValueSpecUnion::deserialize(deserializer)?; + Ok(ValueSpecUnion { + tag: match union.tag { + _UnionTag::Old(id) => UnionTag { + id: id.clone(), + name: id, + description: None, + variant_names: union + .variants + .keys() + .map(|k| (k.to_owned(), k.to_owned())) + .collect(), + }, + _UnionTag::New(UnionTag { + id, + name, + description, + mut variant_names, + }) => UnionTag { + id, + name, + description, + variant_names: { + let mut iter = union.variants.keys(); + while variant_names.len() < union.variants.len() { + if let Some(variant) = iter.next() { + variant_names.insert(variant.to_owned(), variant.to_owned()); + } else { + break; + } + } + variant_names + }, + }, + }, + variants: union.variants, + display_as: union.display_as, + unique_by: union.unique_by, + }) + } +} + +#[async_trait] +impl ValueSpec for ValueSpecUnion { + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + match value { + Value::Object(o) => { + if let Some(Value::String(ref tag)) = o.0.get(&self.tag.id) { + if let Some(obj_spec) = self.variants.get(tag) { + let mut without_tag = o.clone(); + without_tag.0.remove(&self.tag.id); + obj_spec.matches(&without_tag) + } else { + Err(NoMatchWithPath::new(MatchError::Union( + tag.clone(), + self.variants.keys().cloned().collect(), + ))) + } + } else { + Err(NoMatchWithPath::new(MatchError::MissingTag( + self.tag.id.clone(), + ))) + } + } + Value::Null => Err(NoMatchWithPath::new(MatchError::NotNullable)), + a => Err(NoMatchWithPath::new(MatchError::InvalidType( + "object", + a.type_of(), + ))), + } + } + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + for (name, variant) in &self.variants { + if variant.0.get(&self.tag.id).is_some() { + return Err(NoMatchWithPath::new(MatchError::PropertyMatchesUnionTag( + self.tag.id.clone(), + name.clone(), + ))); + } + variant.validate(manifest)?; + } + Ok(()) + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + if let Value::Object(o) = value { + match o.0.get(&self.tag.id) { + None => Err(ConfigurationError::NoMatch(NoMatchWithPath::new( + MatchError::MissingTag(self.tag.id.clone()), + ))), + Some(Value::String(tag)) => match self.variants.get(tag) { + None => Err(ConfigurationError::InvalidVariant(tag.clone())), + Some(spec) => spec.update(o).await, + }, + Some(other) => Err(ConfigurationError::NoMatch( + NoMatchWithPath::new(MatchError::InvalidType("string", other.type_of())) + .prepend(self.tag.id.clone()), + )), + } + } else { + Err(ConfigurationError::NoMatch(NoMatchWithPath::new( + MatchError::InvalidType("object", value.type_of()), + ))) + } + } + fn requires(&self, id: &str, value: &Value) -> bool { + if let Value::Object(o) = value { + match o.0.get(&self.tag.id) { + Some(Value::String(tag)) => match self.variants.get(tag) { + None => false, + Some(spec) => spec.requires(id, o), + }, + _ => false, + } + } else { + false + } + } + fn eq(&self, lhs: &Value, rhs: &Value) -> bool { + match (lhs, rhs) { + (Value::Object(lhs), Value::Object(rhs)) => self.unique_by.eq(lhs, rhs), + _ => false, + } + } +} +impl DefaultableWith for ValueSpecUnion { + type DefaultSpec = String; + type Error = ConfigurationError; + + fn gen_with( + &self, + spec: &Self::DefaultSpec, + rng: &mut R, + timeout: &Option, + ) -> Result { + let variant = if let Some(v) = self.variants.get(spec) { + v + } else { + return Err(ConfigurationError::InvalidVariant(spec.clone())); + }; + let cfg_res = variant.gen(rng, timeout)?; + + let mut tagged_cfg = LinearMap::new(); + tagged_cfg.insert(self.tag.id.clone(), Value::String(spec.clone())); + tagged_cfg.extend(cfg_res.0.into_iter()); + + Ok(Value::Object(Config(tagged_cfg))) + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(tag = "subtype")] +#[serde(rename_all = "kebab-case")] +pub enum ValueSpecPointer { + App(AppPointerSpec), + System(SystemPointerSpec), +} +impl fmt::Display for ValueSpecPointer { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + ValueSpecPointer::App(p) => write!(f, "{}", p), + ValueSpecPointer::System(p) => write!(f, "{}", p), + } + } +} +impl Defaultable for ValueSpecPointer { + type Error = ConfigurationError; + fn gen( + &self, + _rng: &mut R, + _timeout: &Option, + ) -> Result { + Ok(Value::Null) + } +} +#[async_trait] +impl ValueSpec for ValueSpecPointer { + fn matches(&self, value: &Value) -> Result<(), NoMatchWithPath> { + match self { + ValueSpecPointer::App(a) => a.matches(value), + ValueSpecPointer::System(a) => a.matches(value), + } + } + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + match self { + ValueSpecPointer::App(a) => a.validate(manifest), + ValueSpecPointer::System(a) => a.validate(manifest), + } + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + match self { + ValueSpecPointer::App(a) => a.update(value).await, + ValueSpecPointer::System(a) => a.update(value).await, + } + } + fn requires(&self, id: &str, value: &Value) -> bool { + match self { + ValueSpecPointer::App(a) => a.requires(id, value), + ValueSpecPointer::System(a) => a.requires(id, value), + } + } + fn eq(&self, _lhs: &Value, _rhs: &Value) -> bool { + false + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "kebab-case")] +pub struct AppPointerSpec { + pub app_id: String, + #[serde(flatten)] + pub target: AppPointerSpecVariants, +} +impl fmt::Display for AppPointerSpec { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "[{}].{}", self.app_id, self.target) + } +} +impl AppPointerSpec { + async fn deref(&self) -> Result { + match self.target { + AppPointerSpecVariants::TorAddress => { + let mut apps = crate::apps::list_info() + .await + .map_err(ConfigurationError::SystemError)?; + let info = apps.remove(&self.app_id); + Ok(info + .and_then(|info| info.tor_address) + .map(Value::String) + .unwrap_or(Value::Null)) + } + AppPointerSpecVariants::TorKey => { + let services_path = PersistencePath::from_ref(crate::SERVICES_YAML); + let service_map = crate::tor::services_map(&services_path) + .await + .map_err(ConfigurationError::SystemError)?; + let service = + service_map + .map + .get(&self.app_id) + .ok_or(ConfigurationError::SystemError(crate::Error::new( + failure::format_err!("App Not Found"), + Some(crate::error::NOT_FOUND), + )))?; + Ok( + crate::tor::read_tor_key(&self.app_id, service.hidden_service_version, None) + .await + .map(Value::String) + .unwrap_or(Value::Null), + ) + } + AppPointerSpecVariants::LanAddress => { + let services_path = PersistencePath::from_ref(crate::SERVICES_YAML); + let mut service_map = crate::tor::services_map(&services_path) + .await + .map_err(ConfigurationError::SystemError)?; + let service = service_map.map.remove(&self.app_id); + Ok(service + .map(|service| Value::String(format!("{}", service.ip))) + .unwrap_or(Value::Null)) + } + AppPointerSpecVariants::Config { ref index } => { + // check if the app exists + if !crate::apps::list_info() + .await + .map_err(ConfigurationError::SystemError)? + .contains_key(&self.app_id) + { + return Ok(Value::Null); + } + // fetch the config of the pointer target + let app_config = crate::apps::config(&self.app_id) + .await + .map_err(ConfigurationError::SystemError)?; + let cfg = if let Some(cfg) = app_config.config { + cfg + } else { + return Ok(Value::Null); + }; + let mut cfgs = LinearMap::new(); + cfgs.insert(self.app_id.as_str(), Cow::Borrowed(&cfg)); + + Ok((index.compiled)(&cfg, &cfgs)) + } + } + } +} +impl Defaultable for AppPointerSpec { + type Error = ConfigurationError; + fn gen( + &self, + _rng: &mut R, + _timeout: &Option, + ) -> Result { + Ok(Value::Null) + } +} +#[async_trait] +impl ValueSpec for AppPointerSpec { + fn matches(&self, _value: &Value) -> Result<(), NoMatchWithPath> { + Ok(()) + } + fn validate(&self, manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + if manifest.id != self.app_id && !manifest.dependencies.0.contains_key(&self.app_id) { + return Err(NoMatchWithPath::new(MatchError::InvalidPointer( + ValueSpecPointer::App(self.clone()), + ))); + } + match self.target { + AppPointerSpecVariants::TorKey if manifest.id != self.app_id => { + Err(NoMatchWithPath::new(MatchError::InvalidPointer( + ValueSpecPointer::App(self.clone()), + ))) + } + _ => Ok(()), + } + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + *value = self.deref().await?; + Ok(()) + } + fn requires(&self, id: &str, _value: &Value) -> bool { + self.app_id == id + } + fn eq(&self, _lhs: &Value, _rhs: &Value) -> bool { + false + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(tag = "target")] +#[serde(rename_all = "kebab-case")] +pub enum AppPointerSpecVariants { + TorAddress, + TorKey, + LanAddress, + Config { index: Arc }, +} +impl fmt::Display for AppPointerSpecVariants { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + Self::TorAddress => write!(f, "TOR_ADDRESS"), + Self::TorKey => write!(f, "TOR_KEY"), + Self::LanAddress => write!(f, "LAN_ADDRESS"), + Self::Config { index } => write!(f, "{}", index.src), + } + } +} + +#[derive(Clone)] +pub struct ConfigPointer { + pub src: String, + pub compiled: Arc>, +} +impl std::fmt::Debug for ConfigPointer { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ConfigPointer") + .field("src", &self.src) + .field("compiled", &"Fn(&Config, &Config) -> bool") + .finish() + } +} +impl<'de> serde::de::Deserialize<'de> for ConfigPointer { + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + let src = String::deserialize(deserializer)?; + let compiled = super::rules::compile_expr(&src).map_err(serde::de::Error::custom)?; + Ok(ConfigPointer { + src, + compiled: Arc::new(compiled), + }) + } +} +impl serde::ser::Serialize for ConfigPointer { + fn serialize(&self, serializer: S) -> Result + where + S: serde::ser::Serializer, + { + serializer.serialize_str(&self.src) + } +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "kebab-case")] +#[serde(tag = "target")] +pub enum SystemPointerSpec { + HostIp, +} +impl fmt::Display for SystemPointerSpec { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!( + f, + "[SYSTEM].{}", + match self { + SystemPointerSpec::HostIp => "HOST_IP", + } + ) + } +} +impl SystemPointerSpec { + async fn deref(&self) -> Result { + Ok(match self { + SystemPointerSpec::HostIp => { + Value::String(format!("{}", std::net::Ipv4Addr::from(crate::HOST_IP))) + } + }) + } +} +impl Defaultable for SystemPointerSpec { + type Error = ConfigurationError; + fn gen( + &self, + _rng: &mut R, + _timeout: &Option, + ) -> Result { + Ok(Value::Null) + } +} +#[async_trait] +impl ValueSpec for SystemPointerSpec { + fn matches(&self, _value: &Value) -> Result<(), NoMatchWithPath> { + Ok(()) + } + fn validate(&self, _manifest: &ManifestLatest) -> Result<(), NoMatchWithPath> { + Ok(()) + } + async fn update(&self, value: &mut Value) -> Result<(), ConfigurationError> { + *value = self.deref().await?; + Ok(()) + } + fn requires(&self, _id: &str, _value: &Value) -> bool { + false + } + fn eq(&self, _lhs: &Value, _rhs: &Value) -> bool { + false + } +} + +#[cfg(test)] +mod test { + use rand::SeedableRng; + + use super::*; + + #[test] + fn test_config() { + let spec = serde_json::json!({ + "randomEnum": { + "name": "Random Enum", + "type": "enum", + "default": "null", + "description": "This is not even real.", + "changeWarning": "Be careful chnaging this!", + "values": [ + "null", + "option1", + "option2", + "option3" + ] + }, + "testnet": { + "name": "Testnet", + "type": "boolean", + "description": "determines whether your node is running ontestnet or mainnet", + "changeWarning": "Chain will have to resync!", + "default": false + }, + "favoriteNumber": { + "name": "Favorite Number", + "type": "number", + "integral": false, + "description": "Your favorite number of all time", + "changeWarning": "Once you set this number, it can never be changed without severe consequences.", + "nullable": false, + "default": 7, + "range": "(-100,100]" + }, + "secondaryNumbers": { + "name": "Unlucky Numbers", + "type": "list", + "subtype": "number", + "description": "Numbers that you like but are not your top favorite.", + "spec": { + "type": "number", + "integral": false, + "range": "[-100,200)" + }, + "range": "[0,10]", + "default": [ + 2, + 3 + ] + }, + "rpcsettings": { + "name": "RPC Settings", + "type": "object", + "description": "rpc username and password", + "changeWarning": "Adding RPC users gives them special permissions on your node.", + "nullable": false, + "nullByDefault": false, + "spec": { + "laws": { + "name": "Laws", + "type": "object", + "description": "the law of the realm", + "nullable": true, + "nullByDefault": true, + "spec": { + "law1": { + "name": "First Law", + "type": "string", + "description": "the first law", + "nullable": true + }, + "law2": { + "name": "Second Law", + "type": "string", + "description": "the second law", + "nullable": true + } + } + }, + "rulemakers": { + "name": "Rule Makers", + "type": "list", + "subtype": "object", + "description": "the people who make the rules", + "range": "[0,2]", + "default": [], + "spec": { + "type": "object", + "spec": { + "rulemakername": { + "name": "Rulemaker Name", + "type": "string", + "description": "the name of the rule maker", + "nullable": false, + "default": { + "charset": "a-g,2-9", + "len": 12 + } + }, + "rulemakerip": { + "name": "Rulemaker IP", + "type": "string", + "description": "the ip of the rule maker", + "nullable": false, + "default": "192.168.1.0", + "pattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$", + "patternDescription": "may only contain numbers and periods" + } + } + } + }, + "rpcuser": { + "name": "RPC Username", + "type": "string", + "description": "rpc username", + "nullable": false, + "default": "defaultrpcusername", + "pattern": "^[a-zA-Z]+$", + "patternDescription": "must contain only letters." + }, + "rpcpass": { + "name": "RPC User Password", + "type": "string", + "description": "rpc password", + "nullable": false, + "default": { + "charset": "a-z,A-Z,2-9", + "len": 20 + } + } + } + }, + "advanced": { + "name": "Advanced", + "type": "object", + "description": "Advanced settings", + "nullable": false, + "nullByDefault": false, + "spec": { + "notifications": { + "name": "Notification Preferences", + "type": "list", + "subtype": "enum", + "description": "how you want to be notified", + "range": "[1,3]", + "default": [ + "email" + ], + "spec": { + "type": "enum", + "values": [ + "email", + "text", + "call", + "push", + "webhook" + ] + } + } + } + }, + "bitcoinNode": { + "name": "Bitcoin Node Settings", + "type": "union", + "description": "The node settings", + "default": "internal", + "tag": { + "id": "type", + "name": "Type", + "variantNames": {} + }, + "variants": { + "internal": { + "lan-address": { + "name": "LAN Address", + "type": "pointer", + "subtype": "app", + "target": "lan-address", + "app-id": "bitcoind", + "description": "the lan address" + } + }, + "external": { + "public-domain": { + "name": "Public Domain", + "type": "string", + "description": "the public address of the node", + "nullable": false, + "default": "bitcoinnode.com", + "pattern": ".*", + "patternDescription": "anything" + } + } + } + }, + "port": { + "name": "Port", + "type": "number", + "integral": true, + "description": "the default port for your Bitcoin node. default: 8333, testnet: 18333, regtest: 18444", + "nullable": true, + "default": 8333, + "range": "[0, 9999]", + "units": "m/s" + }, + "maxconnections": { + "name": "Max Connections", + "type": "string", + "description": "the maximum number of commections allowed to your Bitcoin node", + "nullable": true + }, + "rpcallowip": { + "name": "RPC Allowed IPs", + "type": "list", + "subtype": "string", + "description": "external ip addresses that are authorized to access your Bitcoin node", + "changeWarning": "Any IP you allow here will have RPC access to your Bitcoin node.", + "range": "[1,10]", + "default": [ + "192.168.1.1" + ], + "spec": { + "type": "string", + "pattern": "((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))", + "patternDescription": "must be a valid ipv4, ipv6, or domain name" + } + }, + "rpcauth": { + "name": "RPC Auth", + "type": "list", + "subtype": "string", + "description": "api keys that are authorized to access your Bitcoin node.", + "range": "[0,*)", + "default": [], + "spec": { + "type": "string" + } + } + }); + let spec: ConfigSpec = serde_json::from_value(spec).unwrap(); + let mut deps = crate::dependencies::Dependencies::default(); + deps.0.insert( + "bitcoind".to_owned(), + crate::dependencies::DepInfo { + version: "^0.20.0".parse().unwrap(), + description: None, + mount_public: false, + mount_shared: false, + optional: Some("Could be external.".to_owned()), + config: Vec::new(), + }, + ); + spec.validate(&crate::manifest::ManifestV0 { + id: "test-app".to_owned(), + version: "0.1.0".parse().unwrap(), + title: "Test App".to_owned(), + description: crate::manifest::Description { + short: "A test app.".to_owned(), + long: "A super cool test app for testing".to_owned(), + }, + release_notes: "Some things changed".to_owned(), + ports: Vec::new(), + image: crate::manifest::ImageConfig::Tar, + shm_size_mb: None, + mount: "/root".parse().unwrap(), + public: None, + shared: None, + has_instructions: false, + os_version_required: ">=0.2.5".parse().unwrap(), + os_version_recommended: ">=0.2.5".parse().unwrap(), + assets: Vec::new(), + hidden_service_version: crate::tor::HiddenServiceVersion::V3, + dependencies: deps, + extra: LinearMap::new(), + }) + .unwrap(); + let config = spec + .gen(&mut rand::rngs::StdRng::from_entropy(), &None) + .unwrap(); + spec.matches(&config).unwrap(); + } +} diff --git a/appmgr/src/config/util.rs b/appmgr/src/config/util.rs new file mode 100644 index 000000000..d7595e52d --- /dev/null +++ b/appmgr/src/config/util.rs @@ -0,0 +1,367 @@ +use std::ops::Bound; +use std::ops::RangeBounds; +use std::ops::RangeInclusive; + +use rand::{distributions::Distribution, Rng}; + +use super::value::Config; + +pub const STATIC_NULL: super::value::Value = super::value::Value::Null; + +#[derive(Clone, Debug)] +pub struct CharSet(pub Vec<(RangeInclusive, usize)>, usize); +impl CharSet { + pub fn contains(&self, c: &char) -> bool { + self.0.iter().any(|r| r.0.contains(c)) + } + pub fn gen(&self, rng: &mut R) -> char { + let mut idx = rng.gen_range(0, self.1); + for r in &self.0 { + if idx < r.1 { + return std::convert::TryFrom::try_from( + rand::distributions::Uniform::new_inclusive( + u32::from(*r.0.start()), + u32::from(*r.0.end()), + ) + .sample(rng), + ) + .unwrap(); + } else { + idx -= r.1; + } + } + unreachable!() + } +} +impl Default for CharSet { + fn default() -> Self { + CharSet(vec![('!'..='~', 94)], 94) + } +} +impl<'de> serde::de::Deserialize<'de> for CharSet { + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + let mut res = Vec::new(); + let mut len = 0; + let mut a: Option = None; + let mut b: Option = None; + let mut in_range = false; + for c in s.chars() { + match c { + ',' => match (a, b, in_range) { + (Some(start), Some(end), _) => { + if !end.is_ascii() { + return Err(serde::de::Error::custom("Invalid Character")); + } + if start >= end { + return Err(serde::de::Error::custom("Invalid Bounds")); + } + let l = u32::from(end) - u32::from(start) + 1; + res.push((start..=end, l as usize)); + len += l as usize; + a = None; + b = None; + in_range = false; + } + (Some(start), None, false) => { + len += 1; + res.push((start..=start, 1)); + a = None; + } + (Some(_), None, true) => { + b = Some(','); + } + (None, None, false) => { + a = Some(','); + } + _ => { + return Err(serde::de::Error::custom("Syntax Error")); + } + }, + '-' => { + if a.is_none() { + a = Some('-'); + } else if !in_range { + in_range = true; + } else if b.is_none() { + b = Some('-') + } else { + return Err(serde::de::Error::custom("Syntax Error")); + } + } + _ => { + if a.is_none() { + a = Some(c); + } else if in_range && b.is_none() { + b = Some(c); + } else { + return Err(serde::de::Error::custom("Syntax Error")); + } + } + } + } + match (a, b) { + (Some(start), Some(end)) => { + if !end.is_ascii() { + return Err(serde::de::Error::custom("Invalid Character")); + } + if start >= end { + return Err(serde::de::Error::custom("Invalid Bounds")); + } + let l = u32::from(end) - u32::from(start) + 1; + res.push((start..=end, l as usize)); + len += l as usize; + } + (Some(c), None) => { + len += 1; + res.push((c..=c, 1)); + } + _ => (), + } + + Ok(CharSet(res, len)) + } +} +impl serde::ser::Serialize for CharSet { + fn serialize(&self, serializer: S) -> Result + where + S: serde::ser::Serializer, + { + <&str>::serialize( + &self + .0 + .iter() + .map(|r| match r.1 { + 1 => format!("{}", r.0.start()), + _ => format!("{}-{}", r.0.start(), r.0.end()), + }) + .collect::>() + .join(",") + .as_str(), + serializer, + ) + } +} + +pub mod serde_regex { + use regex::Regex; + use serde::*; + + pub fn serialize(regex: &Regex, serializer: S) -> Result + where + S: Serializer, + { + <&str>::serialize(®ex.as_str(), serializer) + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + Regex::new(&s).map_err(|e| de::Error::custom(e)) + } +} + +#[derive(Clone, Debug)] +pub struct NumRange( + pub (Bound, Bound), +); +impl std::ops::Deref for NumRange +where + T: std::str::FromStr + std::fmt::Display + std::cmp::PartialOrd, +{ + type Target = (Bound, Bound); + + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl<'de, T> serde::de::Deserialize<'de> for NumRange +where + T: std::str::FromStr + std::fmt::Display + std::cmp::PartialOrd, + ::Err: std::fmt::Display, +{ + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + let mut split = s.split(","); + let start = split + .next() + .map(|s| match s.get(..1) { + Some("(") => match s.get(1..2) { + Some("*") => Ok(Bound::Unbounded), + _ => s[1..] + .trim() + .parse() + .map(Bound::Excluded) + .map_err(|e| serde::de::Error::custom(e)), + }, + Some("[") => s[1..] + .trim() + .parse() + .map(Bound::Included) + .map_err(|e| serde::de::Error::custom(e)), + _ => Err(serde::de::Error::custom(format!( + "Could not parse left bound: {}", + s + ))), + }) + .transpose()? + .unwrap(); + let end = split + .next() + .map(|s| match s.get(s.len() - 1..) { + Some(")") => match s.get(s.len() - 2..s.len() - 1) { + Some("*") => Ok(Bound::Unbounded), + _ => s[..s.len() - 1] + .trim() + .parse() + .map(Bound::Excluded) + .map_err(|e| serde::de::Error::custom(e)), + }, + Some("]") => s[..s.len() - 1] + .trim() + .parse() + .map(Bound::Included) + .map_err(|e| serde::de::Error::custom(e)), + _ => Err(serde::de::Error::custom(format!( + "Could not parse right bound: {}", + s + ))), + }) + .transpose()? + .unwrap_or(Bound::Unbounded); + + Ok(NumRange((start, end))) + } +} +impl std::fmt::Display for NumRange +where + T: std::str::FromStr + std::fmt::Display + std::cmp::PartialOrd, +{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self.start_bound() { + Bound::Excluded(n) => write!(f, "({},", n)?, + Bound::Included(n) => write!(f, "[{},", n)?, + Bound::Unbounded => write!(f, "(*,")?, + }; + match self.end_bound() { + Bound::Excluded(n) => write!(f, "{})", n), + Bound::Included(n) => write!(f, "{}]", n), + Bound::Unbounded => write!(f, "*)"), + } + } +} +impl serde::ser::Serialize for NumRange +where + T: std::str::FromStr + std::fmt::Display + std::cmp::PartialOrd, +{ + fn serialize(&self, serializer: S) -> Result + where + S: serde::ser::Serializer, + { + <&str>::serialize(&format!("{}", self).as_str(), serializer) + } +} + +#[derive(Clone, Debug)] +pub enum UniqueBy { + Any(Vec), + All(Vec), + Exactly(String), + NotUnique, +} +impl UniqueBy { + pub fn eq(&self, lhs: &Config, rhs: &Config) -> bool { + match self { + UniqueBy::Any(any) => any.iter().any(|u| u.eq(lhs, rhs)), + UniqueBy::All(all) => all.iter().all(|u| u.eq(lhs, rhs)), + UniqueBy::Exactly(key) => lhs.0.get(key) == rhs.0.get(key), + UniqueBy::NotUnique => false, + } + } +} +impl Default for UniqueBy { + fn default() -> Self { + UniqueBy::NotUnique + } +} +impl<'de> serde::de::Deserialize<'de> for UniqueBy { + fn deserialize>(deserializer: D) -> Result { + struct Visitor; + impl<'de> serde::de::Visitor<'de> for Visitor { + type Value = UniqueBy; + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(formatter, "a key, an \"any\" object, or an \"all\" object") + } + fn visit_str(self, v: &str) -> Result { + Ok(UniqueBy::Exactly(v.to_owned())) + } + fn visit_string(self, v: String) -> Result { + Ok(UniqueBy::Exactly(v)) + } + fn visit_map>( + self, + mut map: A, + ) -> Result { + let mut variant = None; + while let Some(key) = map.next_key()? { + match key { + "any" => { + return Ok(UniqueBy::Any(map.next_value()?)); + } + "all" => { + return Ok(UniqueBy::All(map.next_value()?)); + } + _ => { + variant = Some(key); + } + } + } + Err(serde::de::Error::unknown_variant( + variant.unwrap_or_default(), + &["any", "all"], + )) + } + fn visit_unit(self) -> Result { + Ok(UniqueBy::NotUnique) + } + fn visit_none(self) -> Result { + Ok(UniqueBy::NotUnique) + } + } + deserializer.deserialize_any(Visitor) + } +} + +impl serde::ser::Serialize for UniqueBy { + fn serialize(&self, serializer: S) -> Result + where + S: serde::ser::Serializer, + { + use serde::ser::SerializeMap; + + match self { + UniqueBy::Any(any) => { + let mut map = serializer.serialize_map(Some(1))?; + map.serialize_key("any")?; + map.serialize_value(any)?; + map.end() + } + UniqueBy::All(all) => { + let mut map = serializer.serialize_map(Some(1))?; + map.serialize_key("all")?; + map.serialize_value(all)?; + map.end() + } + UniqueBy::Exactly(key) => serializer.serialize_str(key), + UniqueBy::NotUnique => serializer.serialize_unit(), + } + } +} diff --git a/appmgr/src/config/value.rs b/appmgr/src/config/value.rs new file mode 100644 index 000000000..deb8439a9 --- /dev/null +++ b/appmgr/src/config/value.rs @@ -0,0 +1,66 @@ +use linear_map::LinearMap; + +#[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct Config(pub LinearMap); + +impl Config { + pub fn merge_with(&mut self, other: Config) { + for (key, val) in other.0.into_iter() { + match (self.0.get_mut(&key), &val) { + (Some(Value::Object(l_obj)), Value::Object(_)) => { + // gross, I know. https://github.com/rust-lang/rust/issues/45600 + let r_obj = match val { + Value::Object(r_obj) => r_obj, + _ => unreachable!(), + }; + l_obj.merge_with(r_obj) + } + (Some(Value::List(l_vec)), Value::List(_)) => { + let mut r_vec = match val { + Value::List(r_vec) => r_vec, + _ => unreachable!(), + }; + l_vec.append(&mut r_vec); + } + _ => { + self.0.insert(key, val); + } + } + } + } +} + +fn serialize_num(num: &f64, serializer: S) -> Result { + if *num < (1_i64 << f64::MANTISSA_DIGITS) as f64 + && *num > -(1_i64 << f64::MANTISSA_DIGITS) as f64 + && num.trunc() == *num + { + serializer.serialize_i64(*num as i64) + } else { + serializer.serialize_f64(*num) + } +} + +#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(untagged)] +pub enum Value { + String(String), + #[serde(serialize_with = "serialize_num")] + Number(f64), + Bool(bool), + List(Vec), + Object(Config), + Null, +} +impl Value { + pub fn type_of(&self) -> &'static str { + match self { + Value::String(_) => "string", + Value::Number(_) => "number", + Value::Bool(_) => "boolean", + Value::List(_) => "list", + Value::Object(_) => "object", + Value::Null => "null", + } + } +} diff --git a/appmgr/src/control.rs b/appmgr/src/control.rs new file mode 100644 index 000000000..72e464ca8 --- /dev/null +++ b/appmgr/src/control.rs @@ -0,0 +1,194 @@ +use std::path::Path; + +use futures::future::{BoxFuture, FutureExt}; +use linear_map::LinearMap; + +use crate::dependencies::{DependencyError, TaggedDependencyError}; +use crate::Error; + +pub async fn start_app(name: &str, update_metadata: bool) -> Result<(), Error> { + let lock = crate::util::lock_file( + format!( + "{}", + Path::new(crate::PERSISTENCE_DIR) + .join("apps") + .join(name) + .join("control.lock") + .display() + ), + true, + ) + .await?; + let status = crate::apps::status(name).await?.status; + if status == crate::apps::DockerStatus::Stopped { + if update_metadata { + crate::config::configure(name, None, None, false).await?; + crate::dependencies::update_shared(name).await?; + crate::dependencies::update_binds(name).await?; + } + crate::apps::set_needs_restart(name, false).await?; + let output = tokio::process::Command::new("docker") + .args(&["start", name]) + .stdout(std::process::Stdio::null()) + .output() + .await?; + crate::ensure_code!( + output.status.success(), + crate::error::DOCKER_ERROR, + "Failed to Start Application: {}", + std::str::from_utf8(&output.stderr).unwrap_or("Unknown Error") + ); + } else if status == crate::apps::DockerStatus::Paused { + resume_app(name).await?; + } + crate::util::unlock(lock).await?; + Ok(()) +} + +pub async fn stop_app( + name: &str, + cascade: bool, + dry_run: bool, +) -> Result, Error> { + let mut res = LinearMap::new(); + if cascade { + stop_dependents(name, dry_run, DependencyError::NotRunning, &mut res).await?; + } + if !dry_run { + let lock = crate::util::lock_file( + format!( + "{}", + Path::new(crate::PERSISTENCE_DIR) + .join("apps") + .join(name) + .join("control.lock") + .display() + ), + true, + ) + .await?; + log::info!("Stopping {}", name); + let output = tokio::process::Command::new("docker") + .args(&["stop", "-t", "25", name]) + .stdout(std::process::Stdio::null()) + .output() + .await?; + crate::ensure_code!( + output.status.success(), + crate::error::DOCKER_ERROR, + "Failed to Stop Application: {}", + std::str::from_utf8(&output.stderr).unwrap_or("Unknown Error") + ); + crate::util::unlock(lock).await?; + } + Ok(res) +} + +pub async fn stop_dependents( + name: &str, + dry_run: bool, + err: DependencyError, + res: &mut LinearMap, +) -> Result<(), Error> { + fn stop_dependents_rec<'a>( + name: &'a str, + dry_run: bool, + err: DependencyError, + res: &'a mut LinearMap, + ) -> BoxFuture<'a, Result<(), Error>> { + async move { + for dependent in crate::apps::dependents(name, false).await? { + if crate::apps::status(&dependent).await?.status + != crate::apps::DockerStatus::Stopped + { + stop_dependents_rec(&dependent, dry_run, DependencyError::NotRunning, res) + .await?; + stop_app(&dependent, false, dry_run).await?; + res.insert( + dependent, + TaggedDependencyError { + dependency: name.to_owned(), + error: err.clone(), + }, + ); + } + } + Ok(()) + } + .boxed() + } + stop_dependents_rec(name, dry_run, err, res).await +} + +pub async fn restart_app(name: &str) -> Result<(), Error> { + stop_app(name, false, false).await?; + if let Err(e) = start_app(name, true).await { + log::warn!("Stopping dependents"); + stop_dependents( + name, + false, + crate::dependencies::DependencyError::NotRunning, + &mut linear_map::LinearMap::new(), + ) + .await?; + return Err(e); + } + Ok(()) +} + +pub async fn pause_app(name: &str) -> Result<(), Error> { + let lock = crate::util::lock_file( + format!( + "{}", + Path::new(crate::PERSISTENCE_DIR) + .join("apps") + .join(name) + .join("control.lock") + .display() + ), + true, + ) + .await?; + let output = tokio::process::Command::new("docker") + .args(&["pause", name]) + .stdout(std::process::Stdio::null()) + .output() + .await?; + crate::ensure_code!( + output.status.success(), + crate::error::DOCKER_ERROR, + "Failed to Pause Application: {}", + std::str::from_utf8(&output.stderr).unwrap_or("Unknown Error") + ); + + crate::util::unlock(lock).await?; + Ok(()) +} + +pub async fn resume_app(name: &str) -> Result<(), Error> { + let lock = crate::util::lock_file( + format!( + "{}", + Path::new(crate::PERSISTENCE_DIR) + .join("apps") + .join(name) + .join("control.lock") + .display() + ), + true, + ) + .await?; + let output = tokio::process::Command::new("docker") + .args(&["unpause", name]) + .stdout(std::process::Stdio::null()) + .output() + .await?; + crate::ensure_code!( + output.status.success(), + crate::error::DOCKER_ERROR, + "Failed to Resume Application: {}", + std::str::from_utf8(&output.stderr).unwrap_or("Unknown Error") + ); + crate::util::unlock(lock).await?; + Ok(()) +} diff --git a/appmgr/src/dependencies.rs b/appmgr/src/dependencies.rs new file mode 100644 index 000000000..df7732461 --- /dev/null +++ b/appmgr/src/dependencies.rs @@ -0,0 +1,276 @@ +use std::borrow::Cow; +use std::path::Path; + +use emver::{Version, VersionRange}; +use linear_map::LinearMap; +use rand::SeedableRng; + +use crate::config::{Config, ConfigRuleEntryWithSuggestions, ConfigSpec}; +use crate::manifest::ManifestLatest; +use crate::Error; +use crate::ResultExt as _; + +#[derive(Clone, Debug, Fail, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum DependencyError { + NotInstalled, // "not-installed" + NotRunning, // "not-running" + IncorrectVersion { + expected: VersionRange, + received: Version, + }, // { "incorrect-version": { "expected": "0.1.0", "received": "^0.2.0" } } + ConfigUnsatisfied(Vec), // { "config-unsatisfied": ["Bitcoin Core must have pruning set to manual."] } + PointerUpdateError(String), // { "pointer-update-error": "Bitcoin Core RPC Port must not be 18332" } + Other(String), // { "other": "Well fuck." } +} +impl std::fmt::Display for DependencyError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + use DependencyError::*; + match self { + NotInstalled => write!(f, "Not Installed"), + NotRunning => write!(f, "Not Running"), + IncorrectVersion { expected, received } => write!( + f, + "Incorrect Version: Expected {}, Received {}", + expected, received + ), + ConfigUnsatisfied(rules) => { + write!(f, "Configuration Rule(s) Violated: {}", rules.join(", ")) + } + PointerUpdateError(e) => write!(f, "Pointer Update Caused {}", e), + Other(e) => write!(f, "System Error: {}", e), + } + } +} + +#[derive(Clone, Debug, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct TaggedDependencyError { + pub dependency: String, + pub error: DependencyError, +} +impl std::fmt::Display for TaggedDependencyError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}: {}", self.dependency, self.error) + } +} + +#[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize)] +pub struct Dependencies(pub LinearMap); + +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct DepInfo { + pub version: VersionRange, + pub optional: Option, + pub description: Option, + #[serde(default)] + pub mount_public: bool, + #[serde(default)] + pub mount_shared: bool, + #[serde(default)] + pub config: Vec, +} +impl DepInfo { + pub async fn satisfied( + &self, + dependency_id: &str, + dependency_config: Option, // fetch if none + dependent_id: &str, + dependent_config: &Config, + ) -> Result, Error> { + let info = if let Some(info) = crate::apps::list_info().await?.remove(dependency_id) { + info + } else { + return Ok(Err(DependencyError::NotInstalled)); + }; + if !&info.version.satisfies(&self.version) { + return Ok(Err(DependencyError::IncorrectVersion { + expected: self.version.clone(), + received: info.version.clone(), + })); + } + let dependency_config = if let Some(cfg) = dependency_config { + cfg + } else { + let app_config = crate::apps::config(dependency_id).await?; + if let Some(cfg) = app_config.config { + cfg + } else { + app_config + .spec + .gen(&mut rand::rngs::StdRng::from_entropy(), &None) + .unwrap_or_default() + } + }; + let mut errors = Vec::new(); + let mut cfgs = LinearMap::with_capacity(2); + cfgs.insert(dependency_id, Cow::Borrowed(&dependency_config)); + cfgs.insert(dependent_id, Cow::Borrowed(dependent_config)); + for rule in self.config.iter() { + if !(rule.entry.rule.compiled)(&dependency_config, &cfgs) { + errors.push(rule.entry.description.clone()); + } + } + if !errors.is_empty() { + return Ok(Err(DependencyError::ConfigUnsatisfied(errors))); + } + if crate::apps::status(dependency_id).await?.status != crate::apps::DockerStatus::Running { + return Ok(Err(DependencyError::NotRunning)); + } + Ok(Ok(())) + } +} + +#[derive(Debug, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct AppDepInfo { + #[serde(flatten)] + pub info: DepInfo, + pub required: bool, + #[serde(skip_serializing_if = "Option::is_none")] + pub error: Option, +} + +#[derive(Debug, Default, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct AppDependencies(pub LinearMap); + +pub async fn check_dependencies( + manifest: ManifestLatest, + dependent_config: &Config, + dependent_config_spec: &ConfigSpec, +) -> Result { + let mut deps = AppDependencies::default(); + for (dependency_id, dependency_info) in manifest.dependencies.0.into_iter() { + let required = dependency_info.optional.is_none() + || dependent_config_spec.requires(&dependency_id, dependent_config); + let error = dependency_info + .satisfied(&dependency_id, None, &manifest.id, dependent_config) + .await? + .err(); + let app_dep_info = AppDepInfo { + error, + required, + info: dependency_info, + }; + deps.0.insert(dependency_id, app_dep_info); + } + Ok(deps) +} + +pub async fn auto_configure( + dependent: &str, + dependency: &str, + dry_run: bool, +) -> Result { + let (dependent_config, mut dependency_config, manifest) = futures::try_join!( + crate::apps::config_or_default(dependent), + crate::apps::config_or_default(dependency), + crate::apps::manifest(dependent) + )?; + let mut cfgs = LinearMap::new(); + cfgs.insert(dependent, Cow::Borrowed(&dependent_config)); + cfgs.insert(dependency, Cow::Owned(dependency_config.clone())); + let dep_info = manifest + .dependencies + .0 + .get(dependency) + .ok_or_else(|| failure::format_err!("{} Does Not Depend On {}", dependent, dependency)) + .no_code()?; + for rule in &dep_info.config { + if let Err(e) = rule.apply(dependency, &mut dependency_config, &mut cfgs) { + log::warn!("Rule Unsatisfied After Applying Suggestions: {}", e); + } + } + crate::config::configure(dependency, Some(dependency_config), None, dry_run).await +} + +pub async fn update_shared(dependency_id: &str) -> Result<(), Error> { + let dependency_manifest = crate::apps::manifest(dependency_id).await?; + if let Some(shared) = dependency_manifest.shared { + for dependent_id in &crate::apps::dependents(dependency_id, false).await? { + let dependent_manifest = crate::apps::manifest(&dependent_id).await?; + if dependent_manifest + .dependencies + .0 + .get(dependency_id) + .ok_or_else(|| failure::format_err!("failed to index dependent: {}", dependent_id))? + .mount_shared + { + tokio::fs::create_dir_all( + Path::new(crate::VOLUMES) + .join(dependency_id) + .join(&shared) + .join(&dependent_id), + ) + .await?; + } + } + } + Ok(()) +} + +pub async fn update_binds(dependent_id: &str) -> Result<(), Error> { + let dependent_manifest = crate::apps::manifest(dependent_id).await?; + let dependency_manifests = futures::future::try_join_all( + dependent_manifest + .dependencies + .0 + .into_iter() + .filter(|(_, info)| info.mount_public || info.mount_shared) + .map(|(id, info)| async { + crate::apps::manifest(&id).await.map(|man| (id, info, man)) + }), + ) + .await?; + // i just have a gut feeling this shouldn't be concurrent + for (dependency_id, info, dependency_manifest) in dependency_manifests { + match (dependency_manifest.public, info.mount_public) { + (Some(public), true) => { + let public_path = Path::new(crate::VOLUMES).join(&dependency_id).join(public); + if let Ok(metadata) = tokio::fs::metadata(&public_path).await { + if metadata.is_dir() { + crate::disks::bind( + public_path, + Path::new(crate::VOLUMES) + .join(&dependent_id) + .join("start9") + .join("public") + .join(&dependency_id), + true, + ) + .await? + } + } + } + _ => (), + } + match (dependency_manifest.shared, info.mount_shared) { + (Some(shared), true) => { + let shared_path = Path::new(crate::VOLUMES) + .join(&dependency_id) + .join(shared) + .join(dependent_id); // namespaced by dependent + tokio::fs::create_dir_all(&shared_path).await?; + if let Ok(metadata) = tokio::fs::metadata(&shared_path).await { + if metadata.is_dir() { + crate::disks::bind( + shared_path, + Path::new(crate::VOLUMES) + .join(&dependent_id) + .join("start9") + .join("shared") + .join(&dependency_id), + false, + ) + .await? + } + } + } + _ => (), + } + } + + Ok(()) +} diff --git a/appmgr/src/disks.rs b/appmgr/src/disks.rs new file mode 100644 index 000000000..47efe7191 --- /dev/null +++ b/appmgr/src/disks.rs @@ -0,0 +1,230 @@ +use std::path::Path; + +use futures::future::try_join_all; + +use crate::util::Invoke; +use crate::Error; +use crate::ResultExt; + +pub const FSTAB: &'static str = "/etc/fstab"; + +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct DiskInfo { + pub logicalname: String, + pub size: String, + pub description: Option, +} + +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct PartitionInfo { + pub logicalname: String, + pub is_mounted: bool, + pub size: Option, + pub label: Option, +} + +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct Disk { + #[serde(flatten)] + pub info: DiskInfo, + pub partitions: Vec, +} + +pub async fn list() -> Result, Error> { + let output = tokio::process::Command::new("parted") + .arg("-lm") + .invoke("GNU Parted") + .await?; + let output_str = std::str::from_utf8(&output).no_code()?; + let disks = output_str.split("\n\n").filter_map(|s| -> Option { + let mut lines = s.split("\n"); + let has_size = lines.next()? == "BYT;"; + let disk_info_line = lines.next()?; + let mut disk_info_iter = disk_info_line.split(":"); + let logicalname = disk_info_iter.next()?.to_owned(); + let partition_prefix = if logicalname.ends_with(|c: char| c.is_digit(10)) { + logicalname.clone() + "p" + } else { + logicalname.clone() + }; + let size = disk_info_iter.next()?.to_owned(); + disk_info_iter.next()?; // transport-type + disk_info_iter.next()?; // logical-sector-size + disk_info_iter.next()?; // physical-sector-size + disk_info_iter.next()?; // partition-table-type + let description = disk_info_iter.next()?; + let description = if description.is_empty() { + None + } else { + Some(description.to_owned()) + }; + let info = DiskInfo { + logicalname, + size, + description, + }; + let partitions = lines + .filter_map(|partition_info_line| -> Option { + let mut partition_info_iter = partition_info_line.split(":"); + let partition_idx = partition_info_iter.next()?; + let logicalname = partition_prefix.clone() + partition_idx; + let size = if has_size { + partition_info_iter.next()?; // begin + partition_info_iter.next()?; // end + Some(partition_info_iter.next()?.to_owned()) + } else { + None + }; + Some(PartitionInfo { + logicalname, + is_mounted: false, + size, + label: None, + }) + }) + .collect(); + Some(Disk { info, partitions }) + }); + try_join_all(disks.map(|disk| async move { + Ok(Disk { + info: disk.info, + partitions: try_join_all(disk.partitions.into_iter().map(|mut partition| async move { + let mut blkid_command = tokio::process::Command::new("blkid"); + let (blkid_res, findmnt_status) = futures::join!( + blkid_command + .arg(&partition.logicalname) + .arg("-s") + .arg("LABEL") + .arg("-o") + .arg("value") + .invoke("BLKID"), + tokio::process::Command::new("findmnt") + .arg(&partition.logicalname) + .stdout(std::process::Stdio::null()) + .stderr(std::process::Stdio::null()) + .status() + ); + let blkid_output = blkid_res?; + let label = std::str::from_utf8(&blkid_output).no_code()?.trim(); + if !label.is_empty() { + partition.label = Some(label.to_owned()); + } + if findmnt_status?.success() { + partition.is_mounted = true; + } + Ok::<_, Error>(partition) + })) + .await?, + }) + })) + .await +} + +pub async fn mount>(logicalname: &str, mount_point: P) -> Result<(), Error> { + let is_mountpoint = tokio::process::Command::new("mountpoint") + .arg(mount_point.as_ref()) + .stdout(std::process::Stdio::null()) + .stderr(std::process::Stdio::null()) + .status() + .await?; + if is_mountpoint.success() { + unmount(mount_point.as_ref()).await?; + } + tokio::fs::create_dir_all(&mount_point).await?; + let mount_output = tokio::process::Command::new("mount") + .arg(logicalname) + .arg(mount_point.as_ref()) + .output() + .await?; + crate::ensure_code!( + mount_output.status.success(), + crate::error::FILESYSTEM_ERROR, + "Error Mounting Drive: {}", + std::str::from_utf8(&mount_output.stderr).unwrap_or("Unknown Error") + ); + Ok(()) +} + +pub async fn bind, P1: AsRef>( + src: P0, + dst: P1, + read_only: bool, +) -> Result<(), Error> { + let is_mountpoint = tokio::process::Command::new("mountpoint") + .arg(dst.as_ref()) + .stdout(std::process::Stdio::null()) + .stderr(std::process::Stdio::null()) + .status() + .await?; + if is_mountpoint.success() { + unmount(dst.as_ref()).await?; + } + tokio::fs::create_dir_all(&dst).await?; + let mut mount_cmd = tokio::process::Command::new("mount"); + mount_cmd.arg("--bind"); + if read_only { + mount_cmd.arg("-o").arg("ro"); + } + let mount_output = mount_cmd + .arg(src.as_ref()) + .arg(dst.as_ref()) + .output() + .await?; + crate::ensure_code!( + mount_output.status.success(), + crate::error::FILESYSTEM_ERROR, + "Error Binding {} to {}: {}", + src.as_ref().display(), + dst.as_ref().display(), + std::str::from_utf8(&mount_output.stderr).unwrap_or("Unknown Error") + ); + Ok(()) +} + +pub async fn unmount>(mount_point: P) -> Result<(), Error> { + let umount_output = tokio::process::Command::new("umount") + .arg(mount_point.as_ref()) + .output() + .await?; + crate::ensure_code!( + umount_output.status.success(), + crate::error::FILESYSTEM_ERROR, + "Error Unmounting Drive: {}", + std::str::from_utf8(&umount_output.stderr).unwrap_or("Unknown Error") + ); + tokio::fs::remove_dir_all(mount_point.as_ref()).await?; + Ok(()) +} + +#[must_use] +pub struct MountGuard> { + path: Option

, +} +impl> MountGuard

{ + pub async fn new(logicalname: &str, mount_point: P) -> Result { + mount(logicalname, mount_point.as_ref()).await?; + Ok(Self { + path: Some(mount_point), + }) + } + pub async fn unmount(mut self) -> Result<(), Error> { + if let Some(ref path) = self.path { + unmount(path).await?; + self.path = None; + } + Ok(()) + } +} +impl> Drop for MountGuard

{ + fn drop(&mut self) { + if let Some(ref path) = self.path { + tokio::runtime::Runtime::new() + .unwrap() + .block_on(unmount(path)) + .unwrap() + } + } +} diff --git a/appmgr/src/error.rs b/appmgr/src/error.rs new file mode 100644 index 000000000..6b3f12c1b --- /dev/null +++ b/appmgr/src/error.rs @@ -0,0 +1,107 @@ +use std::fmt::Display; + +pub const GENERAL_ERROR: i32 = 1; +pub const FILESYSTEM_ERROR: i32 = 2; +pub const DOCKER_ERROR: i32 = 3; +pub const CFG_SPEC_VIOLATION: i32 = 4; +pub const CFG_RULES_VIOLATION: i32 = 5; +pub const NOT_FOUND: i32 = 6; +pub const INVALID_BACKUP_PASSWORD: i32 = 7; +pub const VERSION_INCOMPATIBLE: i32 = 8; +pub const NETWORK_ERROR: i32 = 9; +pub const REGISTRY_ERROR: i32 = 10; +pub const SERDE_ERROR: i32 = 11; + +#[derive(Debug, Fail)] +#[fail(display = "{}", _0)] +pub struct Error { + pub failure: failure::Error, + pub code: Option, +} +impl Error { + pub fn new>(e: E, code: Option) -> Self { + Error { + failure: e.into(), + code, + } + } + pub fn from>(e: E) -> Self { + Error { + failure: e.into(), + code: None, + } + } +} +impl From for Error { + fn from(e: failure::Error) -> Self { + Error { + failure: e, + code: None, + } + } +} +impl From for Error { + fn from(e: std::io::Error) -> Self { + Error { + failure: e.into(), + code: Some(2), + } + } +} +pub trait ResultExt +where + Self: Sized, +{ + fn with_code(self, code: i32) -> Result; + fn with_ctx (Option, D), D: Display + Send + Sync + 'static>( + self, + f: F, + ) -> Result; + fn no_code(self) -> Result; +} +impl ResultExt for Result +where + failure::Error: From, +{ + fn with_code(self, code: i32) -> Result { + #[cfg(not(feature = "production"))] + assert!(code != 0); + self.map_err(|e| Error { + failure: e.into(), + code: Some(code), + }) + } + + fn with_ctx (Option, D), D: Display + Send + Sync + 'static>( + self, + f: F, + ) -> Result { + self.map_err(|e| { + let (code, ctx) = f(&e); + let failure = failure::Error::from(e).context(ctx); + Error { + code, + failure: failure.into(), + } + }) + } + + fn no_code(self) -> Result { + self.map_err(|e| Error { + failure: e.into(), + code: None, + }) + } +} + +#[macro_export] +macro_rules! ensure_code { + ($x:expr, $c:expr, $fmt:expr $(, $arg:expr)*) => { + if !($x) { + return Err(crate::Error { + failure: format_err!($fmt, $($arg, )*), + code: Some($c), + }); + } + }; +} diff --git a/appmgr/src/index.rs b/appmgr/src/index.rs new file mode 100644 index 000000000..95e45e16f --- /dev/null +++ b/appmgr/src/index.rs @@ -0,0 +1,130 @@ +use std::cmp::Ord; +use std::ffi::OsStr; +use std::iter::FromIterator; +use std::path::Path; + +use emver::{Version, VersionRange}; +use futures::future::{BoxFuture, FutureExt}; +use linear_map::LinearMap; + +use crate::inspect::info_full; +use crate::manifest::{Description, ManifestLatest}; +use crate::{Error, ResultExt}; + +#[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize)] +pub struct AppIndex(pub LinearMap); + +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct IndexInfo { + pub title: String, + pub description: Description, + pub version_info: Vec, + pub icon_type: String, +} + +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct VersionInfo { + pub version: Version, + pub release_notes: String, + pub os_version_required: VersionRange, + pub os_version_recommended: VersionRange, +} + +const NULL_VERSION: Version = Version::new(0, 0, 0, 0); + +impl AppIndex { + fn add(&mut self, manifest: ManifestLatest) { + if let Some(ref mut entry) = self.0.get_mut(&manifest.id) { + if entry + .version_info + .get(0) + .map(|i| &i.version) + .unwrap_or(&NULL_VERSION) + <= &manifest.version + { + entry.title = manifest.title; + entry.description = manifest.description; + } + entry.version_info.push(VersionInfo { + version: manifest.version, + release_notes: manifest.release_notes, + os_version_required: manifest.os_version_required, + os_version_recommended: manifest.os_version_recommended, + }); + entry + .version_info + .sort_unstable_by(|a, b| b.version.cmp(&a.version)); + entry.version_info.dedup_by(|a, b| a.version == b.version); + } else { + self.0.insert( + manifest.id, + IndexInfo { + title: manifest.title, + description: manifest.description, + version_info: vec![VersionInfo { + version: manifest.version, + release_notes: manifest.release_notes, + os_version_required: manifest.os_version_required, + os_version_recommended: manifest.os_version_recommended, + }], + icon_type: "png".to_owned(), // TODO + }, + ); + } + } +} + +impl Extend for AppIndex { + fn extend>(&mut self, iter: I) { + for manifest in iter { + self.add(manifest); + } + } +} + +impl FromIterator for AppIndex { + fn from_iter>(iter: I) -> Self { + let mut res = Self::default(); + res.extend(iter); + res + } +} + +pub async fn index>(dir: P) -> Result { + let dir_path = dir.as_ref(); + let mut idx = AppIndex::default(); + fn index_rec<'a, P: AsRef + Send + Sync + 'a>( + idx: &'a mut AppIndex, + dir: P, + ) -> BoxFuture<'a, Result<(), Error>> { + async move { + let dir_path = dir.as_ref(); + if let Ok(_) = tokio::fs::metadata(dir_path.join(".ignore")).await { + log::info!("Skipping {}", dir_path.display()); + return Ok(()); + } + let mut entry_stream = tokio::fs::read_dir(dir_path).await?; + while let Some(entry) = entry_stream.next_entry().await? { + let path = entry.path(); + let metadata = entry.metadata().await?; + if metadata.is_file() { + let ext = path.extension(); + if ext == Some(OsStr::new("s9pk")) { + let info = info_full(&path, true, false) + .await + .with_ctx(|e| (e.code.clone(), format!("{}: {}", path.display(), e)))?; + idx.add(info.manifest.unwrap()); + } + } else if metadata.is_dir() { + index_rec(idx, &path).await?; + } + } + Ok(()) + } + .boxed() + } + index_rec(&mut idx, dir_path).await?; + Ok(idx) +} diff --git a/appmgr/src/inspect.rs b/appmgr/src/inspect.rs new file mode 100644 index 000000000..6ef9c5b63 --- /dev/null +++ b/appmgr/src/inspect.rs @@ -0,0 +1,195 @@ +use std::path::Path; + +use failure::ResultExt as _; +use futures::stream::StreamExt; +use tokio_tar as tar; + +use crate::config::{ConfigRuleEntry, ConfigSpec}; +use crate::manifest::{Manifest, ManifestLatest}; +use crate::util::from_cbor_async_reader; +use crate::version::VersionT; +use crate::Error; +use crate::ResultExt as _; + +#[derive(Debug, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct AppInfoFull { + #[serde(flatten)] + pub info: AppInfo, + #[serde(skip_serializing_if = "Option::is_none")] + pub manifest: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub config: Option, +} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "kebab-case")] +pub struct AppInfo { + pub title: String, + pub version: emver::Version, +} + +#[derive(Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct AppConfig { + pub spec: ConfigSpec, + pub rules: Vec, +} + +pub async fn info_full>( + path: P, + with_manifest: bool, + with_config: bool, +) -> Result { + let p = path.as_ref(); + log::info!("Opening file."); + let r = tokio::fs::File::open(p) + .await + .with_context(|e| format!("{}: {}", p.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + log::info!("Extracting archive."); + let mut pkg = tar::Archive::new(r); + let mut entries = pkg.entries()?; + log::info!("Opening manifest from archive."); + let manifest = entries + .next() + .await + .ok_or(crate::install::Error::CorruptedPkgFile("missing manifest")) + .no_code()??; + crate::ensure_code!( + manifest.path()?.to_str() == Some("manifest.cbor"), + crate::error::GENERAL_ERROR, + "Package File Invalid or Corrupted" + ); + log::trace!("Deserializing manifest."); + let manifest: Manifest = from_cbor_async_reader(manifest).await?; + let manifest = manifest.into_latest(); + crate::ensure_code!( + crate::version::Current::new() + .semver() + .satisfies(&manifest.os_version_required), + crate::error::VERSION_INCOMPATIBLE, + "AppMgr Version Not Compatible: needs {}", + manifest.os_version_required + ); + Ok(AppInfoFull { + info: AppInfo { + title: manifest.title.clone(), + version: manifest.version.clone(), + }, + manifest: if with_manifest { Some(manifest) } else { None }, + config: if with_config { + log::info!("Opening config spec from archive."); + let spec = entries + .next() + .await + .ok_or(crate::install::Error::CorruptedPkgFile( + "missing config spec", + )) + .no_code()??; + crate::ensure_code!( + spec.path()?.to_str() == Some("config_spec.cbor"), + crate::error::GENERAL_ERROR, + "Package File Invalid or Corrupted" + ); + log::trace!("Deserializing config spec."); + let spec = from_cbor_async_reader(spec).await?; + log::info!("Opening config rules from archive."); + let rules = entries + .next() + .await + .ok_or(crate::install::Error::CorruptedPkgFile( + "missing config rules", + )) + .no_code()??; + crate::ensure_code!( + rules.path()?.to_str() == Some("config_rules.cbor"), + crate::error::GENERAL_ERROR, + "Package File Invalid or Corrupted" + ); + log::trace!("Deserializing config rules."); + let rules = from_cbor_async_reader(rules).await?; + Some(AppConfig { spec, rules }) + } else { + None + }, + }) +} + +pub async fn print_instructions>(path: P) -> Result<(), Error> { + let p = path.as_ref(); + log::info!("Opening file."); + let r = tokio::fs::File::open(p) + .await + .with_context(|e| format!("{}: {}", p.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + log::info!("Extracting archive."); + let mut pkg = tar::Archive::new(r); + let mut entries = pkg.entries()?; + log::info!("Opening manifest from archive."); + let manifest = entries + .next() + .await + .ok_or(crate::install::Error::CorruptedPkgFile("missing manifest")) + .no_code()??; + crate::ensure_code!( + manifest.path()?.to_str() == Some("manifest.cbor"), + crate::error::GENERAL_ERROR, + "Package File Invalid or Corrupted" + ); + log::trace!("Deserializing manifest."); + let manifest: Manifest = from_cbor_async_reader(manifest).await?; + let manifest = manifest.into_latest(); + crate::ensure_code!( + crate::version::Current::new() + .semver() + .satisfies(&manifest.os_version_required), + crate::error::VERSION_INCOMPATIBLE, + "AppMgr Version Not Compatible: needs {}", + manifest.os_version_required + ); + entries + .next() + .await + .ok_or(crate::install::Error::CorruptedPkgFile( + "missing config spec", + )) + .no_code()??; + entries + .next() + .await + .ok_or(crate::install::Error::CorruptedPkgFile( + "missing config rules", + )) + .no_code()??; + + if manifest.has_instructions { + use tokio::io::AsyncWriteExt; + + let mut instructions = entries + .next() + .await + .ok_or(crate::install::Error::CorruptedPkgFile( + "missing instructions", + )) + .no_code()??; + + let mut stdout = tokio::io::stdout(); + tokio::io::copy(&mut instructions, &mut stdout) + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + stdout + .flush() + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + stdout + .shutdown() + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + } else { + return Err(failure::format_err!("No instructions for {}", p.display())) + .with_code(crate::error::NOT_FOUND); + } + + Ok(()) +} diff --git a/appmgr/src/install.rs b/appmgr/src/install.rs new file mode 100644 index 000000000..bdeb72550 --- /dev/null +++ b/appmgr/src/install.rs @@ -0,0 +1,564 @@ +use std::borrow::Cow; +use std::ffi::{OsStr, OsString}; +use std::marker::Unpin; +use std::path::{Path, PathBuf}; +use std::pin::Pin; +use std::sync::{ + atomic::{self, AtomicBool, AtomicU64}, + Arc, +}; +use std::task::Context; +use std::task::Poll; +use std::time::Duration; + +use failure::ResultExt as _; +use futures::stream::StreamExt; +use futures::stream::TryStreamExt; +use tokio::io::AsyncRead; +use tokio::io::AsyncWriteExt; +use tokio_tar as tar; + +use crate::config::{ConfigRuleEntry, ConfigSpec}; +use crate::manifest::{ImageConfig, Manifest, ManifestV0}; +use crate::util::{from_cbor_async_reader, to_yaml_async_writer, AsyncCompat, PersistencePath}; +use crate::version::VersionT; +use crate::ResultExt as _; + +#[derive(Fail, Debug, Clone)] +pub enum Error { + #[fail(display = "Package File Invalid or Corrupted: {}", _0)] + CorruptedPkgFile(&'static str), + #[fail(display = "Invalid File Name")] + InvalidFileName, +} + +pub async fn install_name(name_version: &str, use_cache: bool) -> Result<(), crate::Error> { + let name = name_version.split("@").next().unwrap(); + let tmp_path = Path::new(crate::TMP_DIR).join(format!("{}.s9pk", name)); + if !use_cache || !tmp_path.exists() { + download_name(name_version).await?; + } + install_path( + &tmp_path + .as_os_str() + .to_str() + .ok_or(Error::InvalidFileName) + .with_code(crate::error::FILESYSTEM_ERROR)?, + Some(name), + ) + .await?; + tokio::fs::remove_file(&tmp_path) + .await + .with_context(|e| format!("{}: {}", tmp_path.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + Ok(()) +} + +struct CountingReader(pub R, pub Arc); +impl AsyncRead for CountingReader +where + R: AsyncRead, +{ + fn poll_read( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut [u8], + ) -> Poll> { + let atomic = self.as_ref().1.clone(); // TODO: not efficient + match unsafe { self.map_unchecked_mut(|a| &mut a.0) }.poll_read(cx, buf) { + Poll::Ready(Ok(res)) => { + atomic.fetch_add(res as u64, atomic::Ordering::SeqCst); + Poll::Ready(Ok(res)) + } + a => a, + } + } +} + +pub async fn download_name(name_version: &str) -> Result { + let mut split = name_version.split("@"); + let name = split.next().unwrap(); + let req: Option = split.next().map(|a| a.parse()).transpose().no_code()?; + if let Some(req) = req { + download( + &format!("{}/{}.s9pk?spec={}", &*crate::APP_REGISTRY_URL, name, req), + Some(name), + ) + .await + } else { + download( + &format!("{}/{}.s9pk", &*crate::APP_REGISTRY_URL, name), + Some(name), + ) + .await + } +} + +pub async fn download(url: &str, name: Option<&str>) -> Result { + let url = reqwest::Url::parse(url).no_code()?; + log::info!("Downloading {}.", url.as_str()); + let response = reqwest::get(url) + .await + .with_code(crate::error::NETWORK_ERROR)? + .error_for_status() + .with_code(crate::error::REGISTRY_ERROR)?; + tokio::fs::create_dir_all(crate::TMP_DIR).await?; + let tmp_file_path = + Path::new(crate::TMP_DIR).join(&format!("{}.s9pk", name.unwrap_or("download"))); + let mut f = tokio::fs::File::create(&tmp_file_path).await?; + let len: Option = response.content_length().map(|a| { + log::info!("{}KiB to download.", a / 1024); + a + }); + let done = Arc::new(AtomicBool::new(false)); + let counter = Arc::new(AtomicU64::new(0)); + let mut reader = CountingReader( + AsyncCompat( + response + .bytes_stream() + .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + .into_async_read(), + ), + counter.clone(), + ); + let done_handle = done.clone(); + let download_handle = tokio::spawn(async move { + let res = tokio::io::copy(&mut reader, &mut f).await; + done_handle.store(true, atomic::Ordering::SeqCst); + res + }); + let poll_handle = tokio::spawn(async move { + loop { + let is_done = done.load(atomic::Ordering::SeqCst); + let downloaded_bytes = counter.load(atomic::Ordering::SeqCst); + if !*crate::QUIET.read().await { + if let Some(len) = len { + print!("\rDownloading... {}%", downloaded_bytes * 100 / len); + } else { + print!("\rDownloading... {}KiB", downloaded_bytes / 1024); + } + } + if is_done { + break; + } + tokio::time::delay_for(Duration::from_millis(10)).await; + } + if !*crate::QUIET.read().await { + println!("\rDownloading... 100%"); + } + }); + download_handle.await.unwrap()?; + poll_handle.await.unwrap(); + Ok(tmp_file_path) +} + +pub async fn install_url(url: &str, name: Option<&str>) -> Result<(), crate::Error> { + let tmp_file_path = download(url, name).await?; + install_path(&tmp_file_path, name).await?; + tokio::fs::remove_file(&tmp_file_path) + .await + .with_context(|e| format!("{}: {}", tmp_file_path.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + Ok(()) +} + +pub async fn install_path>(p: P, name: Option<&str>) -> Result<(), crate::Error> { + let path = p.as_ref(); + log::info!( + "Starting install of {}.", + path.file_name() + .and_then(|a| a.to_str()) + .ok_or(Error::InvalidFileName) + .no_code()? + ); + let file = tokio::fs::File::open(&path) + .await + .with_context(|e| format!("{}: {}", path.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + let len = file.metadata().await?.len(); + let done = Arc::new(AtomicBool::new(false)); + let counter = Arc::new(AtomicU64::new(0)); + let done_handle = done.clone(); + let name_clone = name.map(|a| a.to_owned()); + let counter_clone = counter.clone(); + let poll_handle = tokio::spawn(async move { + loop { + let is_done = done.load(atomic::Ordering::SeqCst); + let installed_bytes = counter.load(atomic::Ordering::SeqCst); + if !*crate::QUIET.read().await { + print!("\rInstalling... {}%", installed_bytes * 100 / len); + } + if is_done { + break; + } + tokio::time::delay_for(Duration::from_millis(10)).await; + } + if !*crate::QUIET.read().await { + println!("\rInstalling... 100%"); + } + }); + let reader = CountingReader(file, counter_clone); + let res = install(reader, name_clone.as_ref().map(|a| a.as_str())).await; + done_handle.store(true, atomic::Ordering::SeqCst); + res?; + poll_handle.await.unwrap(); + if !*crate::QUIET.read().await { + println!("Complete."); + } + Ok(()) +} + +pub async fn install( + r: R, + name: Option<&str>, +) -> Result<(), crate::Error> { + log::info!("Extracting archive."); + let mut pkg = tar::Archive::new(r); + let mut entries = pkg.entries()?; + log::info!("Opening manifest from archive."); + let manifest = entries + .next() + .await + .ok_or(Error::CorruptedPkgFile("missing manifest")) + .no_code()??; + crate::ensure_code!( + manifest.path()?.to_str() == Some("manifest.cbor"), + crate::error::GENERAL_ERROR, + "Package File Invalid or Corrupted" + ); + log::trace!("Deserializing manifest."); + let manifest: Manifest = from_cbor_async_reader(manifest).await.no_code()?; + match manifest { + Manifest::V0(m) => install_v0(m, entries, name).await?, + }; + Ok(()) +} + +pub async fn install_v0( + manifest: ManifestV0, + mut entries: tar::Entries, + name: Option<&str>, +) -> Result<(), crate::Error> { + crate::ensure_code!( + crate::version::Current::new() + .semver() + .satisfies(&manifest.os_version_required), + crate::error::VERSION_INCOMPATIBLE, + "OS Version Not Compatible: need {}", + manifest.os_version_required + ); + if let Some(name) = name { + crate::ensure_code!( + manifest.id == name, + crate::error::GENERAL_ERROR, + "Package Name Does Not Match Expected" + ); + } + let (ip, tor_addr, tor_key) = crate::tor::set_svc( + &manifest.id, + crate::tor::NewService { + ports: manifest.ports.clone(), + hidden_service_version: manifest.hidden_service_version, + }, + ) + .await?; + + let recoverable = Path::new(crate::VOLUMES).join(&manifest.id).exists(); + + log::info!("Creating volume {}/{}.", crate::VOLUMES, manifest.id); + tokio::fs::create_dir_all(Path::new(crate::VOLUMES).join(&manifest.id)).await?; + + let app_dir = PersistencePath::from_ref("apps").join(&manifest.id); + let app_dir_path = app_dir.path(); + if app_dir_path.exists() { + tokio::fs::remove_dir_all(&app_dir_path).await?; + } + tokio::fs::create_dir_all(&app_dir_path).await?; + let _lock = app_dir.lock(true).await?; + log::info!("Saving manifest."); + let mut manifest_out = app_dir.join("manifest.yaml").write(None).await?; + to_yaml_async_writer(&mut *manifest_out, &Manifest::V0(manifest.clone())).await?; + manifest_out.commit().await?; + log::info!("Opening config spec from archive."); + let config_spec = entries + .next() + .await + .ok_or(Error::CorruptedPkgFile("missing config spec")) + .no_code()??; + crate::ensure_code!( + config_spec.path()?.to_str() == Some("config_spec.cbor"), + crate::error::GENERAL_ERROR, + "Package File Invalid or Corrupted" + ); + log::trace!("Deserializing config spec."); + let config_spec: ConfigSpec = from_cbor_async_reader(config_spec).await?; + log::info!("Saving config spec."); + let mut config_spec_out = app_dir.join("config_spec.yaml").write(None).await?; + to_yaml_async_writer(&mut *config_spec_out, &config_spec).await?; + config_spec_out.commit().await?; + log::info!("Opening config rules from archive."); + let config_rules = entries + .next() + .await + .ok_or(Error::CorruptedPkgFile("missing config rules")) + .no_code()??; + crate::ensure_code!( + config_rules.path()?.to_str() == Some("config_rules.cbor"), + crate::error::GENERAL_ERROR, + "Package File Invalid or Corrupted" + ); + log::trace!("Deserializing config rules."); + let config_rules: Vec = from_cbor_async_reader(config_rules).await?; + log::info!("Saving config rules."); + let mut config_rules_out = app_dir.join("config_rules.yaml").write(None).await?; + to_yaml_async_writer(&mut *config_rules_out, &config_rules).await?; + config_rules_out.commit().await?; + if manifest.has_instructions { + log::info!("Opening instructions from archive."); + let mut instructions = entries + .next() + .await + .ok_or(Error::CorruptedPkgFile("missing config rules")) + .no_code()??; + crate::ensure_code!( + instructions.path()?.to_str() == Some("instructions.md"), + crate::error::GENERAL_ERROR, + "Package File Invalid or Corrupted" + ); + log::info!("Saving instructions."); + let mut instructions_out = app_dir.join("instructions.md").write(None).await?; + tokio::io::copy(&mut instructions, &mut *instructions_out) + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + instructions_out.commit().await?; + } + + log::info!("Copying over assets."); + for asset in manifest.assets.iter() { + let dst_path = Path::new(crate::VOLUMES) + .join(&manifest.id) + .join(&asset.dst); + log::info!("Copying {} to {}", asset.src.display(), dst_path.display()); + let src_path = Path::new(&asset.src); + log::info!("Opening {} from archive.", src_path.display()); + let mut src = entries + .next() + .await + .ok_or(Error::CorruptedPkgFile("missing asset")) + .no_code()??; + crate::ensure_code!( + src.path()? == src_path, + crate::error::GENERAL_ERROR, + "Package File Invalid or Corrupted" + ); + let dst_path_file = dst_path.join(src_path); + if dst_path_file.exists() && !asset.overwrite { + log::info!("{} already exists, skipping.", dst_path_file.display()); + } else { + if dst_path_file.exists() { + if dst_path_file.is_dir() { + tokio::fs::remove_dir_all(&dst_path_file) + .await + .with_context(|e| format!("{}: {}", dst_path_file.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + } else { + tokio::fs::remove_file(&dst_path_file) + .await + .with_context(|e| format!("{}: {}", dst_path_file.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + } + } + src.unpack_in(&dst_path).await?; + if src.header().entry_type().is_dir() { + loop { + let mut file = entries + .next() + .await + .ok_or(Error::CorruptedPkgFile("missing asset")) + .no_code()??; + if file + .path()? + .starts_with(format!("APPMGR_DIR_END:{}", asset.src.display())) + { + break; + } else { + file.unpack_in(&dst_path).await?; + } + } + } + } + } + + let tag = match &manifest.image { + ImageConfig::Tar => { + let image_name = format!("start9/{}", manifest.id); + let tag = format!("{}:latest", image_name); + if tokio::process::Command::new("docker") + .arg("images") + .arg("-q") + .arg(&image_name) + .output() + .await? + .stdout + .len() + > 0 + { + tokio::process::Command::new("docker") + .arg("stop") + .arg(&manifest.id) + .spawn()? + .await?; + tokio::process::Command::new("docker") + .arg("rm") + .arg(&manifest.id) + .spawn()? + .await?; + crate::ensure_code!( + tokio::process::Command::new("docker") + .arg("rmi") + .arg(&image_name) + .output() + .await? + .status + .success(), + crate::error::DOCKER_ERROR, + "Failed to Remove Existing Image" + ) + } + log::info!("Opening image.tar from archive."); + let mut image = entries + .next() + .await + .ok_or(Error::CorruptedPkgFile("missing image.tar")) + .no_code()??; + let image_path = image.path()?; + if image_path != Path::new("image.tar") { + return Err(crate::Error::from(format_err!( + "Package File Invalid or Corrupted: expected image.tar, got {}", + image_path.display() + ))); + } + log::info!( + "Loading docker image start9/{} from image.tar.", + manifest.id + ); + let mut child = tokio::process::Command::new("docker") + .arg("load") + .stdin(std::process::Stdio::piped()) + .stdout(std::process::Stdio::inherit()) + .stderr(match log::max_level() { + log::LevelFilter::Error => std::process::Stdio::null(), + _ => std::process::Stdio::inherit(), + }) + .spawn()?; + let mut child_in = child.stdin.take().unwrap(); + tokio::io::copy(&mut image, &mut child_in).await?; + child_in.flush().await?; + child_in.shutdown().await?; + drop(child_in); + crate::ensure_code!( + child.await?.success(), + crate::error::DOCKER_ERROR, + "Failed to Load Docker Image From Tar" + ); + tag + } + }; + log::info!("Creating docker container: {} from {}.", manifest.id, tag); + let volume_arg = format!( + "type=bind,src={}/{},dst={}", + crate::VOLUMES, + manifest.id, + manifest.mount.display() + ); + let mut args = vec![ + Cow::Borrowed(OsStr::new("create")), + Cow::Borrowed(OsStr::new("--restart")), + Cow::Borrowed(OsStr::new("on-failure")), + Cow::Borrowed(OsStr::new("--name")), + Cow::Borrowed(OsStr::new(&manifest.id)), + Cow::Borrowed(OsStr::new("--mount")), + Cow::Borrowed(OsStr::new(&volume_arg)), + Cow::Borrowed(OsStr::new("--net")), + Cow::Borrowed(OsStr::new("start9")), + Cow::Borrowed(OsStr::new("--ip")), + Cow::Owned(OsString::from(format!("{}", ip))), + ]; + if let (Some(ref tor_addr), Some(ref tor_key)) = (&tor_addr, &tor_key) { + args.extend( + std::iter::empty() + .chain(std::iter::once(Cow::Borrowed(OsStr::new("--env")))) + .chain(std::iter::once(Cow::Owned(OsString::from(format!( + "TOR_ADDRESS={}", + tor_addr + ))))) + .chain(std::iter::once(Cow::Borrowed(OsStr::new("--env")))) + .chain(std::iter::once(Cow::Owned(OsString::from(format!( + "TOR_KEY={}", + tor_key + ))))), + ); + } + if let Some(shm_size_mb) = manifest.shm_size_mb { + args.push(Cow::Borrowed(OsStr::new("--shm-size"))); + args.push(Cow::Owned(OsString::from(format!("{}m", shm_size_mb)))); + } + args.push(Cow::Borrowed(OsStr::new(&tag))); + crate::ensure_code!( + std::process::Command::new("docker") + .args(&args) + .stdout(std::process::Stdio::null()) + .stderr(match log::max_level() { + log::LevelFilter::Error => std::process::Stdio::null(), + _ => std::process::Stdio::inherit(), + }) + .status()? + .success(), + crate::error::DOCKER_ERROR, + "Failed to Create Docker Container" + ); + tokio::fs::create_dir_all(Path::new(crate::VOLUMES).join(&manifest.id).join("start9")).await?; + if let Some(public) = manifest.public { + tokio::fs::create_dir_all(Path::new(crate::VOLUMES).join(&manifest.id).join(public)) + .await?; + } + if let Some(shared) = manifest.shared { + tokio::fs::create_dir_all(Path::new(crate::VOLUMES).join(&manifest.id).join(shared)) + .await?; + } + log::info!("Updating app list."); + crate::apps::add( + &manifest.id, + crate::apps::AppInfo { + title: manifest.title.clone(), + version: manifest.version.clone(), + tor_address: tor_addr.clone(), + configured: false, + recoverable, + needs_restart: false, + }, + ) + .await?; + let config = crate::apps::config(&manifest.id).await?; + if let Some(cfg) = config.config { + if config.spec.matches(&cfg).is_ok() { + crate::apps::set_configured(&manifest.id, true).await?; + } + } else { + let empty_config = crate::config::Config::default(); + if config.spec.matches(&empty_config).is_ok() { + crate::config::configure(&manifest.id, Some(empty_config), None, false).await?; + } + } + for (dep_id, dep_info) in manifest.dependencies.0 { + if dep_info.mount_shared + && crate::apps::list_info().await?.get(&dep_id).is_some() + && crate::apps::manifest(&dep_id).await?.shared.is_some() + && crate::apps::status(&dep_id).await?.status != crate::apps::DockerStatus::Stopped + { + crate::apps::set_needs_restart(&dep_id, true).await?; + } + } + + Ok(()) +} diff --git a/appmgr/src/lib.rs b/appmgr/src/lib.rs new file mode 100644 index 000000000..a18d01df0 --- /dev/null +++ b/appmgr/src/lib.rs @@ -0,0 +1,51 @@ +#[macro_use] +extern crate failure; +#[macro_use] +extern crate pest_derive; + +pub const TOR_RC: &'static str = "/root/appmgr/tor/torrc"; +pub const SERVICES_YAML: &'static str = "tor/services.yaml"; +pub const VOLUMES: &'static str = "/root/volumes"; +pub const PERSISTENCE_DIR: &'static str = "/root/appmgr"; +pub const TMP_DIR: &'static str = "/root/tmp/appmgr"; +pub const BACKUP_MOUNT_POINT: &'static str = "/mnt/backup_drive"; +pub const BACKUP_DIR: &'static str = "Embassy Backups"; +pub const BUFFER_SIZE: usize = 1024; +pub const HOST_IP: [u8; 4] = [172, 18, 0, 1]; + +lazy_static::lazy_static! { + pub static ref REGISTRY_URL: String = std::env::var("REGISTRY_URL").unwrap_or_else(|_| "https://registry.start9labs.com".to_owned()); + pub static ref SYS_REGISTRY_URL: String = format!("{}/sys", *REGISTRY_URL); + pub static ref APP_REGISTRY_URL: String = format!("{}/apps", *REGISTRY_URL); + pub static ref QUIET: tokio::sync::RwLock = tokio::sync::RwLock::new(!std::env::var("APPMGR_QUIET").map(|a| a == "0").unwrap_or(true)); +} + +pub mod apps; +pub mod backup; +pub mod config; +pub mod control; +pub mod dependencies; +pub mod disks; +pub mod error; +pub mod index; +pub mod inspect; +pub mod install; +pub mod logs; +pub mod manifest; +pub mod pack; +pub mod registry; +pub mod remove; +pub mod tor; +pub mod update; +pub mod util; +pub mod version; + +pub use config::{configure, Config}; +pub use control::{restart_app, start_app, stop_app, stop_dependents}; +pub use error::{Error, ResultExt}; +pub use install::{install_name, install_path, install_url}; +pub use logs::{logs, notifications, stats, LogOptions}; +pub use pack::{pack, verify}; +pub use remove::remove; +pub use update::update; +pub use version::{init, self_update}; diff --git a/appmgr/src/logs.rs b/appmgr/src/logs.rs new file mode 100644 index 000000000..da6cf5b63 --- /dev/null +++ b/appmgr/src/logs.rs @@ -0,0 +1,199 @@ +use std::borrow::Cow; +use std::ffi::{OsStr, OsString}; +use std::path::Path; + +use failure::ResultExt as _; +use futures::stream::StreamExt; +use futures::stream::TryStreamExt; +use itertools::Itertools; + +use crate::util::PersistencePath; +use crate::Error; +use crate::ResultExt as _; + +#[derive(Clone, Copy, Debug, serde::Serialize)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +pub enum Level { + Error, + Warn, + Success, + Info, +} +impl std::fmt::Display for Level { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Level::Error => write!(f, "ERROR"), + Level::Warn => write!(f, "WARN"), + Level::Success => write!(f, "SUCCESS"), + Level::Info => write!(f, "INFO"), + } + } +} +impl std::str::FromStr for Level { + type Err = Error; + fn from_str(s: &str) -> Result { + match s { + "ERROR" => Ok(Level::Error), + "WARN" => Ok(Level::Warn), + "SUCCESS" => Ok(Level::Success), + "INFO" => Ok(Level::Info), + _ => Err(Error::from(format_err!("Unknown Notification Level"))), + } + } +} + +#[derive(Clone, Debug, serde::Serialize)] +pub struct Notification { + pub time: i64, + pub level: Level, + pub code: usize, + pub title: String, + pub message: String, +} +impl std::fmt::Display for Notification { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}:{}:{}:{}", + self.level, + self.code, + self.title.replace(":", "\u{A789}"), + self.message.replace("\n", "\u{2026}") + ) + } +} +impl std::str::FromStr for Notification { + type Err = Error; + fn from_str(s: &str) -> Result { + let mut split = s.split(":"); + Ok(Notification { + time: split + .next() + .ok_or_else(|| format_err!("missing time"))? + .parse::() + .map(|a| a as i64) + .no_code()?, + level: split + .next() + .ok_or_else(|| format_err!("missing level"))? + .parse()?, + code: split + .next() + .ok_or_else(|| format_err!("missing code"))? + .parse() + .no_code()?, + title: split + .next() + .ok_or_else(|| format_err!("missing title"))? + .replace("\u{A789}", ":"), + message: split + .intersperse(":") + .collect::() + .replace("\u{2026}", "\n"), + }) + } +} + +pub struct LogOptions, B: AsRef> { + pub details: bool, + pub follow: bool, + pub since: Option, + pub until: Option, + pub tail: Option, + pub timestamps: bool, +} + +pub async fn logs, B: AsRef>( + name: &str, + options: LogOptions, +) -> Result<(), Error> { + let mut args = vec![Cow::Borrowed(OsStr::new("logs"))]; + if options.details { + args.push(Cow::Borrowed(OsStr::new("--details"))); + } + if options.follow { + args.push(Cow::Borrowed(OsStr::new("-f"))); + } + if let Some(since) = options.since.as_ref() { + args.push(Cow::Borrowed(OsStr::new("--since"))); + args.push(Cow::Borrowed(OsStr::new(since.as_ref()))); + } + if let Some(until) = options.until.as_ref() { + args.push(Cow::Borrowed(OsStr::new("--until"))); + args.push(Cow::Borrowed(OsStr::new(until.as_ref()))); + } + if let Some(tail) = options.tail { + args.push(Cow::Borrowed(OsStr::new("--tail"))); + args.push(Cow::Owned(OsString::from(format!("{}", tail)))); + } + if options.timestamps { + args.push(Cow::Borrowed(OsStr::new("-t"))); + } + args.push(Cow::Borrowed(OsStr::new(name))); + crate::ensure_code!( + std::process::Command::new("docker") + .args(args.into_iter()) + .status()? + .success(), + crate::error::DOCKER_ERROR, + "Failed to Collect Logs from Docker" + ); + Ok(()) +} + +pub async fn notifications(id: &str) -> Result, Error> { + let p = PersistencePath::from_ref("notifications").join(id).tmp(); + if let Some(parent) = p.parent() { + if !parent.exists() { + tokio::fs::create_dir_all(parent).await?; + } + } + match tokio::fs::rename( + Path::new(crate::VOLUMES) + .join(id) + .join("start9") + .join("notifications.log"), + &p, + ) + .await + { + Err(ref e) if e.kind() == std::io::ErrorKind::NotFound => return Ok(Vec::new()), + a => a, + }?; + let f = tokio::fs::File::open(&p) + .await + .with_context(|e| format!("{}: {}", p.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + tokio::io::AsyncBufReadExt::lines(tokio::io::BufReader::new(f)) + .map(|a| a.map_err(From::from).and_then(|a| a.parse())) + .try_collect() + .await +} + +pub async fn stats(id: &str) -> Result { + let p = PersistencePath::from_ref("stats").join(id).tmp(); + if let Some(parent) = p.parent() { + if !parent.exists() { + tokio::fs::create_dir_all(parent).await?; + } + } + match tokio::fs::copy( + Path::new(crate::VOLUMES) + .join(id) + .join("start9") + .join("stats.yaml"), + &p, + ) + .await + { + Err(ref e) if e.kind() == std::io::ErrorKind::NotFound => { + return Ok(serde_yaml::Value::Null) + } + a => a, + }?; + let f = tokio::fs::File::open(&p) + .await + .with_context(|e| format!("{}: {}", p.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + crate::util::from_yaml_async_reader(f).await.no_code() +} diff --git a/appmgr/src/main.rs b/appmgr/src/main.rs new file mode 100644 index 000000000..41226d7b6 --- /dev/null +++ b/appmgr/src/main.rs @@ -0,0 +1,1645 @@ +#![type_length_limit = "10000000"] + +use std::borrow::Cow; +use std::path::Path; + +use appmgrlib::version::VersionT; +use appmgrlib::*; + +use clap::{App, Arg, SubCommand}; + +#[tokio::main] +async fn main() { + match inner_main().await { + Ok(()) => (), + Err(e) => { + eprintln!("{}", e.failure); + log::warn!("{:?}", e.failure); + std::process::exit(e.code.unwrap_or(1)); + } + } +} + +async fn inner_main() -> Result<(), Error> { + simple_logging::log_to_stderr(log::LevelFilter::Info); + #[cfg(not(feature = "portable"))] + { + if !Path::new(crate::PERSISTENCE_DIR).join(".lock").exists() { + tokio::fs::create_dir_all(crate::PERSISTENCE_DIR).await?; + tokio::fs::File::create(Path::new(crate::PERSISTENCE_DIR).join(".lock")).await?; + } + } + let q = *QUIET.read().await; + *QUIET.write().await = true; + #[cfg(not(feature = "portable"))] + init().await?; + *QUIET.write().await = q; + let version = format!("{}", crate::version::Current::new().semver()); + let git_version = + git_version::git_version!(args = ["--always", "--abbrev=40", "--dirty=-modified"]); + #[allow(unused_mut)] + let mut app = App::new("Start9 Application Manager") + .version(version.as_str()) + .author("Dr. BoneZ ") + .about("Manage applications installed on the Start9 Embassy") + .arg( + Arg::with_name("verbosity") + .short("v") + .help("Sets verbosity level") + .multiple(true), + ) + .subcommand(SubCommand::with_name("semver").about("Prints semantic version and exits")) + .subcommand(SubCommand::with_name("git-info").about("Prints git version info and exits")) + .subcommand( + SubCommand::with_name("pack") + .about("Creates a new application package") + .arg( + Arg::with_name("output") + .short("o") + .long("output") + .takes_value(true) + .default_value("app.s9pk"), + ) + .arg( + Arg::with_name("PATH") + .help("Path to the folder containing the application data") + .required(true), + ), + ) + .subcommand( + SubCommand::with_name("verify") + .about("Verifies an application package") + .arg( + Arg::with_name("PATH") + .help("Path to the s9pk file to verify") + .required(true), + ), + ) + .subcommand( + SubCommand::with_name("inspect") + .about("Inspects an application package") + .subcommand( + SubCommand::with_name("info") + .about("Prints information about an app") + .arg( + Arg::with_name("PATH") + .help("Path to the s9pk file to inspect") + .required(true), + ) + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .required_unless("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .required_unless("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ) + .arg( + Arg::with_name("include-manifest") + .long("include-manifest") + .short("m"), + ) + .arg( + Arg::with_name("include-config") + .long("include-config") + .short("c"), + ) + .arg( + Arg::with_name("only-manifest") + .long("only-manifest") + .short("M") + .conflicts_with_all(&[ + "include-manifest", + "include-config", + "only-config", + ]), + ) + .arg( + Arg::with_name("only-config") + .long("only-config") + .short("C") + .conflicts_with_all(&[ + "include-manifest", + "include-config", + "only-manifest", + ]), + ), + ) + .subcommand( + SubCommand::with_name("instructions") + .about("Prints instructions for an app") + .arg( + Arg::with_name("PATH") + .help("Path to the s9pk file to inspect") + .required(true), + ), + ), + ) + .subcommand( + SubCommand::with_name("index") + .about("Indexes all s9pk files in a directory") + .arg( + Arg::with_name("DIR") + .help("Path to the directory to index") + .required(true), + ), + ); + + #[cfg(not(feature = "portable"))] + let mut app = app + .subcommand( + SubCommand::with_name("install") + .about("Installs a new app") + .arg( + Arg::with_name("no-cache") + .long("no-cache") + .help("Replace cached download of application"), + ) + .arg( + Arg::with_name("ID|PATH|URL") + .help("The app to install") + .long_help(concat!( + "The app to install\n", + "ID: The id of the app in the Start9 registry\n", + "PATH: The path to the s9pk file on your local file system\n", + "URL: The url of the s9pk file" + )) + .required(true), + ), + ) + .subcommand( + SubCommand::with_name("update") + .about("Updates an app") + .arg( + Arg::with_name("ID") + .help("The id of the app in the Start9 registry") + .required(true), + ) + .arg( + Arg::with_name("dry-run") + .long("dry-run") + .help("Do not commit result"), + ) + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ), + ) + .subcommand( + SubCommand::with_name("start") + .about("Starts an app") + .arg(Arg::with_name("ID").help("The app to start").required(true)), + ) + .subcommand( + SubCommand::with_name("stop") + .about("Stops an app") + .arg(Arg::with_name("ID").help("The app to stop").required(true)) + .arg( + Arg::with_name("dry-run") + .long("dry-run") + .help("Do not commit result"), + ) + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ), + ) + .subcommand( + SubCommand::with_name("restart") + .about("Restarts an app") + .arg( + Arg::with_name("ID") + .help("The app to restart") + .required(true), + ), + ) + .subcommand( + SubCommand::with_name("configure") + .about("Configures an app") + .arg( + Arg::with_name("ID") + .help("The app to configure") + .required(true), + ) + .arg(Arg::with_name("FILE").help("The configuration file to use")) + .arg( + Arg::with_name("stdin") + .long("stdin") + .help("Use stdin for the config file") + .conflicts_with("FILE"), + ) + .arg( + Arg::with_name("timeout") + .short("t") + .long("timeout") + .help("Max seconds to attempt generating entropy per field") + .default_value("3") + .conflicts_with("no-timeout"), + ) + .arg( + Arg::with_name("no-timeout") + .long("no-timeout") + .help("Disable timeout on entropy generation") + .conflicts_with("timeout"), + ) + .arg( + Arg::with_name("dry-run") + .long("dry-run") + .help("Do not commit result"), + ) + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ), + ) + .subcommand( + SubCommand::with_name("check-dependencies") + .about("Check dependencies for an app") + .arg( + Arg::with_name("ID") + .help("The app to check dependencies for.") + .required(true), + ) + .arg(Arg::with_name("local-only").long("local-only").help( + "Disable reaching out to the Start9 registry if the app isn't installed.", + )) + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ), + ) + .subcommand( + SubCommand::with_name("autoconfigure-dependency") + .about("Automatically configure a dependency") + .arg( + Arg::with_name("ID") + .help("The app to autoconfigure a dependency for.") + .required(true), + ) + .arg( + Arg::with_name("DEPENDENCY") + .help("The dependency to autoconfigure.") + .required(true), + ) + .arg( + Arg::with_name("dry-run") + .long("dry-run") + .help("Do not commit result"), + ) + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ), + ) + .subcommand( + SubCommand::with_name("remove") + .alias("rm") + .about("Removes an installed app") + .arg( + Arg::with_name("purge") + .short("p") + .long("purge") + .help("Deletes all application data"), + ) + .arg( + Arg::with_name("ID") + .help("ID of the application to be removed") + .required(true), + ) + .arg( + Arg::with_name("dry-run") + .long("dry-run") + .help("Do not commit result"), + ) + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ), + ) + .subcommand( + SubCommand::with_name("tor") + .about("Configures tor hidden services") + .subcommand( + SubCommand::with_name("show") + .about("Shows the onion address for the hidden service") + .arg( + Arg::with_name("ID") + .help("ID of the application to get the onion address for") + .required(true), + ), + ) + .subcommand(SubCommand::with_name("reload").about("Reloads the tor configuration")), + ) + .subcommand( + SubCommand::with_name("info") + .about("Prints information about an installed app") + .arg( + Arg::with_name("ID") + .help("ID of the application to print information about") + .required(true), + ) + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .required_unless("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .required_unless("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ) + .arg( + Arg::with_name("include-status") + .long("include-status") + .short("s"), + ) + .arg( + Arg::with_name("include-manifest") + .long("include-manifest") + .short("m"), + ) + .arg( + Arg::with_name("include-config") + .long("include-config") + .short("c"), + ) + .arg( + Arg::with_name("include-dependencies") + .long("include-dependencies") + .short("d"), + ) + .arg( + Arg::with_name("only-status") + .long("only-status") + .short("S") + .conflicts_with_all(&[ + "include-status", + "include-manifest", + "include-config", + "include-dependencies", + "only-manifest", + "only-config", + "only-dependencies", + ]), + ) + .arg( + Arg::with_name("only-manifest") + .long("only-manifest") + .short("M") + .conflicts_with_all(&[ + "include-status", + "include-manifest", + "include-config", + "include-dependencies", + "only-status", + "only-config", + "only-dependencies", + ]), + ) + .arg( + Arg::with_name("only-config") + .long("only-config") + .short("C") + .conflicts_with_all(&[ + "include-status", + "include-manifest", + "include-config", + "include-dependencies", + "only-status", + "only-manifest", + "only-dependencies", + ]), + ) + .arg( + Arg::with_name("only-dependencies") + .long("only-dependencies") + .short("D") + .conflicts_with_all(&[ + "include-status", + "include-manifest", + "include-config", + "include-dependencies", + "only-status", + "only-manifest", + "only-config", + ]), + ), + ) + .subcommand( + SubCommand::with_name("instructions") + .about("Prints instructions for an installed app") + .arg( + Arg::with_name("ID") + .help("ID of the application to print instructions for") + .required(true), + ), + ) + .subcommand( + SubCommand::with_name("list") + .alias("ls") + .about("Lists apps successfully installed on the system") + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ) + .arg( + Arg::with_name("include-status") + .long("include-status") + .short("s"), + ) + .arg( + Arg::with_name("include-manifest") + .long("include-manifest") + .short("m"), + ) + .arg( + Arg::with_name("include-config") + .long("include-config") + .short("c"), + ) + .arg( + Arg::with_name("include-dependencies") + .long("include-dependencies") + .short("d"), + ), + ) + .subcommand( + SubCommand::with_name("self-update") + .about("Updates appmgr") + .arg( + Arg::with_name("VERSION_REQUIREMENT") + .help("Version requirement to update to (i.e. ^0.1.0)"), + ), + ) + .subcommand( + SubCommand::with_name("logs") + .about("Fetch the logs of an app") + .arg( + Arg::with_name("ID") + .help("ID of the application to fetch logs for") + .required(true), + ) + .arg( + Arg::with_name("details") + .help("Show extra details provided to logs") + .long("details"), + ) + .arg( + Arg::with_name("follow") + .help("Follow log output") + .long("follow") + .short("f"), + ) + .arg( + Arg::with_name("since") + .help(concat!( + "Show logs since timestamp (e.g. 2013-01-02T13:23:37)", + " or relative (e.g. 42m for 42 minutes)" + )) + .long("since") + .takes_value(true), + ) + .arg( + Arg::with_name("tail") + .help("Number of lines to show from the end of the logs") + .long("tail") + .takes_value(true) + .default_value("all"), + ) + .arg( + Arg::with_name("timestamps") + .help("Show timestamps") + .short("t") + .long("timestamps"), + ) + .arg( + Arg::with_name("until") + .help(concat!( + "Show logs before a timestamp (e.g. 2013-01-02T13:23:37)", + " or relative (e.g. 42m for 42 minutes)" + )) + .long("until") + .takes_value(true), + ), + ) + .subcommand( + SubCommand::with_name("notifications") + .about("Get notifications broadcast by an app") + .arg( + Arg::with_name("ID") + .help("ID of the application to get notifications for") + .required(true), + ) + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ), + ) + .subcommand( + SubCommand::with_name("stats") + .about("Get stats broadcast by an app") + .arg( + Arg::with_name("ID") + .help("ID of the application to get stats for") + .required(true), + ) + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .required_unless("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .required_unless("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ), + ) + .subcommand( + SubCommand::with_name("disks") + .about("Manage external disks") + .subcommand( + SubCommand::with_name("show") + .alias("list") + .alias("ls") + .about("List external drive information") + .arg( + Arg::with_name("json") + .conflicts_with("yaml") + .long("json") + .short("j") + .help("Output as json"), + ) + .arg( + Arg::with_name("pretty") + .requires("json") + .long("pretty") + .short("p") + .help("Pretty print output"), + ) + .arg( + Arg::with_name("yaml") + .conflicts_with("json") + .long("yaml") + .short("y") + .help("Output as yaml"), + ), + ) + .subcommand(SubCommand::with_name("use")), + ) + .subcommand( + SubCommand::with_name("backup") + .about("Manage app data backups") + .subcommand( + SubCommand::with_name("create") + .about("Backup current app state") + .arg( + Arg::with_name("ID") + .help("ID of the application to backup data for") + .required(true), + ) + .arg( + Arg::with_name("PARTITION") + .help("Logical name of the partition you would like to backup to") + .required(true), + ) + .arg( + Arg::with_name("password") + .long("password") + .short("p") + .takes_value(true) + .help("Password to use for encryption of backup file"), + ), + ) + .subcommand( + SubCommand::with_name("restore") + .about("Restore app state from backup") + .arg( + Arg::with_name("ID") + .help("ID of the application to restore data for") + .required(true), + ) + .arg( + Arg::with_name("PARTITION") + .help("Logical name of the partition you would like to backup to") + .required(true), + ) + .arg( + Arg::with_name("timestamp") + .long("timestamp") + .short("t") + .takes_value(true) + .help("Timestamp of the backup to restore"), + ) + .arg( + Arg::with_name("password") + .long("password") + .short("p") + .takes_value(true) + .help("Password to use for encryption of backup file"), + ), + ), + ); + + let matches = app.clone().get_matches(); + + log::set_max_level(match matches.occurrences_of("verbosity") { + 0 => log::LevelFilter::Error, + 1 => log::LevelFilter::Warn, + 2 => log::LevelFilter::Info, + 3 => log::LevelFilter::Debug, + _ => log::LevelFilter::Trace, + }); + + match matches.subcommand() { + ("semver", _) => { + println!("{}", version); + } + ("git-info", _) => { + println!("{}", git_version); + } + #[cfg(not(feature = "portable"))] + ("install", Some(sub_m)) => { + let target = sub_m.value_of("ID|PATH|URL").unwrap(); + if target.starts_with("https://") || target.starts_with("http://") { + install_url(target, None).await?; + } else if target.ends_with(".s9pk") { + install_path(target, None).await?; + } else { + install_name(target, !sub_m.is_present("no-cache")).await?; + } + } + #[cfg(not(feature = "portable"))] + ("update", Some(sub_m)) => { + let res = update(sub_m.value_of("ID").unwrap(), sub_m.is_present("dry-run")).await?; + if sub_m.is_present("json") { + if sub_m.is_present("pretty") { + println!( + "{}", + serde_json::to_string_pretty(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } + } else if sub_m.is_present("yaml") { + println!( + "{}", + serde_yaml::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else if !res.is_empty() { + use prettytable::{Cell, Row, Table}; + let mut table = Table::new(); + let heading = vec![ + Cell::new("APPLICATION ID"), + Cell::new("STATUS"), + Cell::new("REASON"), + ]; + table.add_row(Row::new(heading)); + for (name, reason) in res { + table.add_row(Row::new(vec![ + Cell::new(&name), + Cell::new("Stopped"), + Cell::new(&format!("{}", reason)), + ])); + } + table.print(&mut std::io::stdout())?; + } + } + #[cfg(not(feature = "portable"))] + ("start", Some(sub_m)) => { + start_app(sub_m.value_of("ID").unwrap(), true).await?; + } + #[cfg(not(feature = "portable"))] + ("stop", Some(sub_m)) => { + let res = stop_app( + sub_m.value_of("ID").unwrap(), + true, + sub_m.is_present("dry-run"), + ) + .await?; + if sub_m.is_present("json") { + if sub_m.is_present("pretty") { + println!( + "{}", + serde_json::to_string_pretty(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } + } else if sub_m.is_present("yaml") { + println!( + "{}", + serde_yaml::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else if !res.is_empty() { + use prettytable::{Cell, Row, Table}; + let mut table = Table::new(); + let heading = vec![ + Cell::new("APPLICATION ID"), + Cell::new("STATUS"), + Cell::new("REASON"), + ]; + table.add_row(Row::new(heading)); + for (name, reason) in res { + table.add_row(Row::new(vec![ + Cell::new(&name), + Cell::new("Stopped"), + Cell::new(&format!("{}", reason)), + ])); + } + table.print(&mut std::io::stdout())?; + } + } + #[cfg(not(feature = "portable"))] + ("restart", Some(sub_m)) => { + restart_app(sub_m.value_of("ID").unwrap()).await?; + } + #[cfg(not(feature = "portable"))] + ("configure", Some(sub_m)) => { + let config: Option = if let Some(path) = sub_m.value_of("FILE") { + let p = Path::new(path); + if p.extension() == Some(std::ffi::OsStr::new("json")) + || (sub_m.is_present("json") + && p.extension() != Some(std::ffi::OsStr::new("yaml"))) + { + Some(util::from_json_async_reader(tokio::fs::File::open(p).await?).await?) + } else { + Some(util::from_yaml_async_reader(tokio::fs::File::open(p).await?).await?) + } + } else if sub_m.is_present("stdin") { + if sub_m.is_present("json") { + Some(util::from_yaml_async_reader(tokio::io::stdin()).await?) + } else { + Some(util::from_yaml_async_reader(tokio::io::stdin()).await?) + } + } else { + None + }; + let timeout = if sub_m.is_present("no-timeout") { + None + } else if let Some(t) = sub_m.value_of("timeout") { + Some(std::time::Duration::from_secs(t.parse().no_code()?)) + } else { + Some(std::time::Duration::from_secs(3)) + }; + let res = configure( + sub_m.value_of("ID").unwrap(), + config, + timeout, + sub_m.is_present("dry-run"), + ) + .await?; + if sub_m.is_present("json") { + if sub_m.is_present("pretty") { + println!( + "{}", + serde_json::to_string_pretty(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } + } else if sub_m.is_present("yaml") { + println!( + "{}", + serde_yaml::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else if !res.needs_restart.is_empty() || !res.stopped.is_empty() { + use prettytable::{Cell, Row, Table}; + let mut table = Table::new(); + let heading = vec![ + Cell::new("APPLICATION ID"), + Cell::new("STATUS"), + Cell::new("REASON"), + ]; + table.add_row(Row::new(heading)); + for name in res.needs_restart { + table.add_row(Row::new(vec![ + Cell::new(&name), + Cell::new("Needs Restart"), + Cell::new("Configuration Changed"), + ])); + } + for (name, reason) in res.stopped { + table.add_row(Row::new(vec![ + Cell::new(&name), + Cell::new("Stopped"), + Cell::new(&format!("{}", reason)), + ])); + } + table.print(&mut std::io::stdout())?; + } + } + #[cfg(not(feature = "portable"))] + ("check-dependencies", Some(sub_m)) => { + let res = apps::dependencies( + sub_m.value_of("ID").unwrap(), + sub_m.is_present("local-only"), + ) + .await?; + if sub_m.is_present("json") { + if sub_m.is_present("pretty") { + println!( + "{}", + serde_json::to_string_pretty(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } + } else if sub_m.is_present("yaml") { + println!( + "{}", + serde_yaml::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else if !res.0.is_empty() { + use prettytable::{Cell, Row, Table}; + let mut table = Table::new(); + let heading = vec![ + Cell::new("APPLICATION ID"), + Cell::new("REQUIRED"), + Cell::new("VIOLATION"), + ]; + table.add_row(Row::new(heading)); + for (name, info) in res.0 { + table.add_row(Row::new(vec![ + Cell::new(&name), + Cell::new(&format!("{}", info.required)), + Cell::new(&if let Some(error) = info.error { + format!("{}", error) + } else { + "N/A".to_owned() + }), + ])); + } + table.print(&mut std::io::stdout())?; + } else { + println!("No dependencies for {}", sub_m.value_of("ID").unwrap()); + } + } + ("autoconfigure-dependency", Some(sub_m)) => { + let res = dependencies::auto_configure( + sub_m.value_of("ID").unwrap(), + sub_m.value_of("DEPENDENCY").unwrap(), + sub_m.is_present("dry-run"), + ) + .await?; + if sub_m.is_present("json") { + if sub_m.is_present("pretty") { + println!( + "{}", + serde_json::to_string_pretty(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } + } else if sub_m.is_present("yaml") { + println!( + "{}", + serde_yaml::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else if !res.needs_restart.is_empty() || !res.stopped.is_empty() { + use prettytable::{Cell, Row, Table}; + let mut table = Table::new(); + let heading = vec![ + Cell::new("APPLICATION ID"), + Cell::new("STATUS"), + Cell::new("REASON"), + ]; + table.add_row(Row::new(heading)); + for name in res.needs_restart { + table.add_row(Row::new(vec![ + Cell::new(&name), + Cell::new("Needs Restart"), + Cell::new("Configuration Changed"), + ])); + } + for (name, reason) in res.stopped { + table.add_row(Row::new(vec![ + Cell::new(&name), + Cell::new("Stopped"), + Cell::new(&format!("{}", reason)), + ])); + } + table.print(&mut std::io::stdout())?; + } + } + #[cfg(not(feature = "portable"))] + ("remove", Some(sub_m)) | ("rm", Some(sub_m)) => { + let res = remove( + sub_m.value_of("ID").unwrap(), + sub_m.is_present("purge"), + sub_m.is_present("dry-run"), + ) + .await?; + if sub_m.is_present("json") { + if sub_m.is_present("pretty") { + println!( + "{}", + serde_json::to_string_pretty(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } + } else if sub_m.is_present("yaml") { + println!( + "{}", + serde_yaml::to_string(&res).with_code(crate::error::SERDE_ERROR)? + ); + } else if !res.is_empty() { + use prettytable::{Cell, Row, Table}; + let mut table = Table::new(); + let heading = vec![ + Cell::new("APPLICATION ID"), + Cell::new("STATUS"), + Cell::new("REASON"), + ]; + table.add_row(Row::new(heading)); + for (name, reason) in res { + table.add_row(Row::new(vec![ + Cell::new(&name), + Cell::new("Stopped"), + Cell::new(&format!("{}", reason)), + ])); + } + table.print(&mut std::io::stdout())?; + } + } + #[cfg(not(feature = "portable"))] + ("tor", Some(sub_m)) => match sub_m.subcommand() { + ("show", Some(sub_sub_m)) => { + println!( + "{}", + crate::tor::read_tor_address(sub_sub_m.value_of("ID").unwrap(), None).await? + ); + } + ("reload", Some(_)) => { + crate::tor::reload().await?; + } + _ => { + println!("{}", sub_m.usage()); + std::process::exit(1); + } + }, + #[cfg(not(feature = "portable"))] + ("info", Some(sub_m)) => { + let name = sub_m.value_of("ID").unwrap(); + let info = crate::apps::info_full( + &name, + sub_m.is_present("include-status") || sub_m.is_present("only-status"), + sub_m.is_present("include-manifest") || sub_m.is_present("only-manifest"), + sub_m.is_present("include-config") || sub_m.is_present("only-config"), + sub_m.is_present("include-dependencies") || sub_m.is_present("only-dependencies"), + ) + .await?; + if sub_m.is_present("json") { + if sub_m.is_present("pretty") { + if sub_m.is_present("only-status") { + println!( + "{}", + serde_json::to_string_pretty(&info.status) + .with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_m.is_present("only-manifest") { + println!( + "{}", + serde_json::to_string_pretty(&info.manifest) + .with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_m.is_present("only-config") { + println!( + "{}", + serde_json::to_string_pretty(&info.config) + .with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_m.is_present("only-dependencies") { + println!( + "{}", + serde_json::to_string_pretty(&info.dependencies) + .with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string_pretty(&info) + .with_code(crate::error::SERDE_ERROR)? + ); + } + } else { + if sub_m.is_present("only-status") { + println!( + "{}", + serde_json::to_string(&info.status) + .with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_m.is_present("only-manifest") { + println!( + "{}", + serde_json::to_string(&info.manifest) + .with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_m.is_present("only-config") { + println!( + "{}", + serde_json::to_string(&info.config) + .with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_m.is_present("only-dependencies") { + println!( + "{}", + serde_json::to_string(&info.dependencies) + .with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } + } + } else if sub_m.is_present("yaml") { + if sub_m.is_present("only-status") { + println!( + "{}", + serde_yaml::to_string(&info.status).with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_m.is_present("only-manifest") { + println!( + "{}", + serde_yaml::to_string(&info.manifest) + .with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_m.is_present("only-config") { + println!( + "{}", + serde_yaml::to_string(&info.config).with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_m.is_present("only-dependencies") { + println!( + "{}", + serde_yaml::to_string(&info.dependencies) + .with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_yaml::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } + } + } + #[cfg(not(feature = "portable"))] + ("instructions", Some(sub_m)) => { + crate::apps::print_instructions(sub_m.value_of("ID").unwrap()).await?; + } + #[cfg(not(feature = "portable"))] + ("list", Some(sub_m)) | ("ls", Some(sub_m)) => { + let info = crate::apps::list( + sub_m.is_present("include-status"), + sub_m.is_present("include-manifest"), + sub_m.is_present("include-config"), + sub_m.is_present("include-dependencies"), + ) + .await?; + if sub_m.is_present("json") { + if sub_m.is_present("pretty") { + println!( + "{}", + serde_json::to_string_pretty(&info).with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } + } else if sub_m.is_present("yaml") { + println!( + "{}", + serde_yaml::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } else if !info.is_empty() { + use prettytable::{Cell, Row, Table}; + let mut table = Table::new(); + let mut heading = vec![ + Cell::new("APPLICATION ID"), + Cell::new("TITLE"), + Cell::new("VERSION"), + Cell::new("TOR ADDRESS"), + Cell::new("CONFIGURED"), + ]; + if sub_m.is_present("include-status") { + heading.push(Cell::new("STATUS")); + } + if sub_m.is_present("include-dependencies") { + heading.push(Cell::new("DEPENDENCIES MET")) + } + table.add_row(Row::new(heading)); + for (name, info) in info { + table.add_row(Row::new( + vec![ + Cell::new(&name), + Cell::new(&format!("{}", info.info.title)), + Cell::new(&format!("{}", info.info.version)), + Cell::new(&format!( + "{}", + info.info.tor_address.unwrap_or_else(|| "N/A".to_owned()) + )), + Cell::new(&format!("{}", info.info.configured)), + ] + .into_iter() + .chain( + info.status + .into_iter() + .map(|s| Cell::new(&format!("{:?}", s.status))), + ) + .chain(info.dependencies.into_iter().map(|s| { + Cell::new(&format!( + "{}", + s.0.into_iter() + .all(|(_, dep)| dep.error.is_none() || !dep.required) + )) + })) + .collect(), + )); + } + table.print(&mut std::io::stdout())?; + } else { + println!("No apps installed"); + } + } + #[cfg(not(feature = "portable"))] + ("self-update", Some(sub_m)) => { + self_update( + sub_m + .value_of("VERSION_REQUIREMENT") + .map(|a| a.parse()) + .transpose() + .no_code()? + .unwrap_or_else(|| emver::VersionRange::any()), + ) + .await?; + } + #[cfg(not(feature = "portable"))] + ("logs", Some(sub_m)) => { + logs( + sub_m.value_of("ID").unwrap(), + LogOptions { + details: sub_m.is_present("details"), + follow: sub_m.is_present("follow"), + since: sub_m.value_of("since"), + until: sub_m.value_of("until"), + tail: sub_m + .value_of("tail") + .filter(|t| t != &"all") + .map(|a| a.parse()) + .transpose() + .no_code()?, + timestamps: sub_m.is_present("timestamps"), + }, + ) + .await?; + } + #[cfg(not(feature = "portable"))] + ("notifications", Some(sub_m)) => { + let info = notifications(sub_m.value_of("ID").unwrap()).await?; + if sub_m.is_present("json") { + if sub_m.is_present("pretty") { + println!( + "{}", + serde_json::to_string_pretty(&info).with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } + } else if sub_m.is_present("yaml") { + println!( + "{}", + serde_yaml::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } else if !info.is_empty() { + use prettytable::{Cell, Row, Table}; + let mut table = Table::new(); + let heading = vec![ + Cell::new("LEVEL"), + Cell::new("CODE"), + Cell::new("TITLE"), + Cell::new("MESSAGE"), + ]; + table.add_row(Row::new(heading)); + for note in info { + table.add_row(Row::new(vec![ + Cell::new(&format!("{}", note.level)), + Cell::new(&format!("{}", note.code)), + Cell::new(&format!("{}", note.title)), + Cell::new(&format!("{}", note.message)), + ])); + } + table.print(&mut std::io::stdout())?; + } else { + println!("No notifications for {}", sub_m.value_of("ID").unwrap()); + } + } + #[cfg(not(feature = "portable"))] + ("stats", Some(sub_m)) => { + let info = stats(sub_m.value_of("ID").unwrap()).await?; + if sub_m.is_present("json") { + if sub_m.is_present("pretty") { + println!( + "{}", + serde_json::to_string_pretty(&info).with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } + } else if sub_m.is_present("yaml") { + println!( + "{}", + serde_yaml::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } else if let serde_yaml::Value::Mapping(map) = info { + use prettytable::{Cell, Row, Table}; + let mut table = Table::new(); + for (k, v) in map { + let ks = match k { + serde_yaml::Value::Bool(k) => format!("{}", k), + serde_yaml::Value::Null => "null".to_owned(), + serde_yaml::Value::Number(k) => format!("{}", k), + serde_yaml::Value::String(k) => k, + k => serde_yaml::to_string(&k).with_code(crate::error::SERDE_ERROR)?, + }; + let vs = match v { + serde_yaml::Value::Bool(v) => format!("{}", v), + serde_yaml::Value::Null => "null".to_owned(), + serde_yaml::Value::Number(v) => format!("{}", v), + serde_yaml::Value::String(v) => v, + v => serde_yaml::to_string(&v).with_code(crate::error::SERDE_ERROR)?, + }; + table.add_row(Row::new(vec![Cell::new(&ks), Cell::new(&vs)])); + } + table.print(&mut std::io::stdout())?; + } + } + #[cfg(not(feature = "portable"))] + ("disks", Some(sub_m)) => match sub_m.subcommand() { + ("show", Some(sub_sub_m)) | ("list", Some(sub_sub_m)) | ("ls", Some(sub_sub_m)) => { + let info = disks::list().await?; + if sub_sub_m.is_present("json") { + if sub_sub_m.is_present("pretty") { + println!( + "{}", + serde_json::to_string_pretty(&info) + .with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } + } else if sub_sub_m.is_present("yaml") { + println!( + "{}", + serde_yaml::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } else { + todo!() + } + } + _ => { + println!("{}", sub_m.usage()); + std::process::exit(1); + } + }, + #[cfg(not(feature = "portable"))] + ("backup", Some(sub_m)) => match sub_m.subcommand() { + ("create", Some(sub_sub_m)) => { + crate::backup::backup_to_partition( + sub_sub_m.value_of("PARTITION").unwrap(), + sub_sub_m.value_of("ID").unwrap(), + &match sub_sub_m.value_of("password") { + Some(a) => Cow::Borrowed(a), + None => Cow::Owned(rpassword::read_password_from_tty(Some("Password: "))?), + }, + ) + .await? + } + ("restore", Some(sub_sub_m)) => { + crate::backup::restore_from_partition( + sub_sub_m.value_of("PARTITION").unwrap(), + sub_sub_m.value_of("ID").unwrap(), + &match sub_sub_m.value_of("password") { + Some(a) => Cow::Borrowed(a), + None => Cow::Owned(rpassword::read_password_from_tty(Some("Password: "))?), + }, + ) + .await? + } + _ => { + println!("{}", sub_m.usage()); + std::process::exit(1); + } + }, + ("pack", Some(sub_m)) => { + pack( + sub_m.value_of("PATH").unwrap(), + sub_m.value_of("output").unwrap(), + ) + .await? + } + ("verify", Some(sub_m)) => verify(sub_m.value_of("PATH").unwrap()).await?, + ("inspect", Some(sub_m)) => match sub_m.subcommand() { + ("info", Some(sub_sub_m)) => { + let path = sub_sub_m.value_of("PATH").unwrap(); + let info = crate::inspect::info_full( + path, + sub_sub_m.is_present("include-manifest") + || sub_sub_m.is_present("only-manifest"), + sub_sub_m.is_present("include-config") || sub_sub_m.is_present("only-config"), + ) + .await?; + if sub_sub_m.is_present("json") { + if sub_sub_m.is_present("pretty") { + if sub_sub_m.is_present("only-manifest") { + println!( + "{}", + serde_json::to_string_pretty(&info.manifest) + .with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_sub_m.is_present("only-config") { + println!( + "{}", + serde_json::to_string_pretty(&info.config) + .with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string_pretty(&info) + .with_code(crate::error::SERDE_ERROR)? + ); + } + } else { + if sub_sub_m.is_present("only-manifest") { + println!( + "{}", + serde_json::to_string(&info.manifest) + .with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_sub_m.is_present("only-config") { + println!( + "{}", + serde_json::to_string(&info.config) + .with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_json::to_string(&info) + .with_code(crate::error::SERDE_ERROR)? + ); + } + } + } else if sub_sub_m.is_present("yaml") { + if sub_sub_m.is_present("only-manifest") { + println!( + "{}", + serde_yaml::to_string(&info.manifest) + .with_code(crate::error::SERDE_ERROR)? + ); + } else if sub_sub_m.is_present("only-config") { + println!( + "{}", + serde_yaml::to_string(&info.config) + .with_code(crate::error::SERDE_ERROR)? + ); + } else { + println!( + "{}", + serde_yaml::to_string(&info).with_code(crate::error::SERDE_ERROR)? + ); + } + } + } + ("instructions", Some(sub_sub_m)) => { + crate::inspect::print_instructions(Path::new(sub_sub_m.value_of("PATH").unwrap())) + .await?; + } + _ => { + println!("{}", sub_m.usage()); + std::process::exit(1); + } + }, + ("index", Some(sub_m)) => { + let idx = crate::index::index(Path::new(sub_m.value_of("DIR").unwrap())).await?; + println!( + "{}", + serde_yaml::to_string(&idx).with_code(crate::error::SERDE_ERROR)? + ); + } + _ => { + app.print_long_help().unwrap(); + std::process::exit(1); + } + } + + Ok(()) +} diff --git a/appmgr/src/manifest.rs b/appmgr/src/manifest.rs new file mode 100644 index 000000000..47d92af63 --- /dev/null +++ b/appmgr/src/manifest.rs @@ -0,0 +1,76 @@ +use std::path::PathBuf; + +use linear_map::LinearMap; + +use crate::dependencies::Dependencies; +use crate::tor::HiddenServiceVersion; +use crate::tor::PortMapping; + +pub type ManifestLatest = ManifestV0; + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub struct Description { + pub short: String, + pub long: String, +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +#[serde(tag = "type")] +#[serde(rename_all = "snake_case")] +pub enum ImageConfig { + Tar, +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub struct Asset { + pub src: PathBuf, + pub dst: PathBuf, + pub overwrite: bool, +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct ManifestV0 { + pub id: String, + pub version: emver::Version, + pub title: String, + pub description: Description, + pub release_notes: String, + #[serde(default)] + pub has_instructions: bool, + #[serde(default = "emver::VersionRange::any")] + pub os_version_required: emver::VersionRange, + #[serde(default = "emver::VersionRange::any")] + pub os_version_recommended: emver::VersionRange, + pub ports: Vec, + pub image: ImageConfig, + #[serde(default)] + pub shm_size_mb: Option, + pub mount: PathBuf, + #[serde(default)] + pub public: Option, + #[serde(default)] + pub shared: Option, + #[serde(default)] + pub assets: Vec, + #[serde(default)] + pub hidden_service_version: HiddenServiceVersion, + #[serde(default)] + pub dependencies: Dependencies, + #[serde(flatten)] + pub extra: LinearMap, +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +#[serde(tag = "compat")] +#[serde(rename_all = "lowercase")] +pub enum Manifest { + V0(ManifestV0), +} +impl Manifest { + pub fn into_latest(self) -> ManifestLatest { + match self { + Manifest::V0(m) => m, + } + } +} diff --git a/appmgr/src/pack.rs b/appmgr/src/pack.rs new file mode 100644 index 000000000..86ec98619 --- /dev/null +++ b/appmgr/src/pack.rs @@ -0,0 +1,398 @@ +use std::borrow::Cow; +use std::path::{Path, PathBuf}; + +use failure::ResultExt; +use futures::stream::StreamExt; +use linear_map::LinearMap; +use rand::SeedableRng; +use tokio_tar as tar; + +use crate::config::{ConfigRuleEntry, ConfigSpec}; +use crate::manifest::{ImageConfig, Manifest}; +use crate::util::{from_cbor_async_reader, from_json_async_reader, from_yaml_async_reader}; +use crate::version::VersionT; + +#[derive(Clone, Debug, Fail)] +pub enum Error { + #[fail(display = "Invalid Directory Name: {}", _0)] + InvalidDirectoryName(String), + #[fail(display = "Invalid File Name: {}", _0)] + InvalidFileName(String), + #[fail(display = "Invalid Output Path: {}", _0)] + InvalidOutputPath(String), +} + +pub async fn pack(path: &str, output: &str) -> Result<(), failure::Error> { + let path = Path::new(path.trim_end_matches("/")); + let output = Path::new(output); + ensure!( + output + .extension() + .and_then(|a| a.to_str()) + .ok_or_else(|| Error::InvalidOutputPath(format!("{}", output.display())))? + == "s9pk", + "Extension Must Be '.s9pk'" + ); + log::info!( + "Starting pack of {} to {}.", + path.file_name() + .and_then(|a| a.to_str()) + .ok_or_else(|| Error::InvalidDirectoryName(format!("{}", path.display())))?, + output.display(), + ); + let out_file = tokio::fs::File::create(output).await?; + let mut out = tar::Builder::new(out_file); + log::info!("Reading {}/manifest.yaml.", path.display()); + let manifest: Manifest = crate::util::from_yaml_async_reader( + tokio::fs::File::open(path.join("manifest.yaml")) + .await + .with_context(|e| format!("{}: manifest.yaml", e))?, + ) + .await?; + log::info!("Writing manifest to archive."); + let bin_manifest = serde_cbor::to_vec(&manifest)?; + let mut manifest_header = tar::Header::new_gnu(); + manifest_header.set_size(bin_manifest.len() as u64); + out.append_data( + &mut manifest_header, + "manifest.cbor", + std::io::Cursor::new(bin_manifest), + ) + .await?; + let manifest = manifest.into_latest(); + ensure!( + crate::version::Current::new() + .semver() + .satisfies(&manifest.os_version_required), + "Unsupported AppMgr version: expected {}", + manifest.os_version_required + ); + log::info!("Reading {}/config_spec.yaml.", path.display()); + let config_spec: ConfigSpec = from_yaml_async_reader( + tokio::fs::File::open(path.join("config_spec.yaml")) + .await + .with_context(|e| format!("{}: config_spec.yaml", e))?, + ) + .await?; + config_spec.validate(&manifest)?; + let config = config_spec.gen(&mut rand::rngs::StdRng::from_entropy(), &None)?; + config_spec.matches(&config)?; + log::info!("Writing config spec to archive."); + let bin_config_spec = serde_cbor::to_vec(&config_spec)?; + let mut config_spec_header = tar::Header::new_gnu(); + config_spec_header.set_size(bin_config_spec.len() as u64); + out.append_data( + &mut config_spec_header, + "config_spec.cbor", + std::io::Cursor::new(bin_config_spec), + ) + .await?; + log::info!("Reading {}/config_rules.yaml.", path.display()); + let config_rules: Vec = from_yaml_async_reader( + tokio::fs::File::open(path.join("config_rules.yaml")) + .await + .with_context(|e| format!("{}: config_rules.yaml", e))?, + ) + .await?; + let mut cfgs = LinearMap::new(); + cfgs.insert(manifest.id.as_str(), Cow::Borrowed(&config)); + for rule in &config_rules { + rule.check(&config, &cfgs) + .with_context(|e| format!("Default Config does not satisfy: {}", e))?; + } + log::info!("Writing config rules to archive."); + let bin_config_rules = serde_cbor::to_vec(&config_rules)?; + let mut config_rules_header = tar::Header::new_gnu(); + config_rules_header.set_size(bin_config_rules.len() as u64); + out.append_data( + &mut config_rules_header, + "config_rules.cbor", + std::io::Cursor::new(bin_config_rules), + ) + .await?; + if manifest.has_instructions { + log::info!("Packing instructions.md"); + out.append_path_with_name(path.join("instructions.md"), "instructions.md") + .await?; + } + log::info!("Copying over assets."); + for asset in &manifest.assets { + let src_path = Path::new("assets").join(&asset.src); + log::info!("Reading {}/{}.", path.display(), src_path.display()); + let file_path = path.join(&src_path); + let src = tokio::fs::File::open(&file_path) + .await + .with_context(|e| format!("{}: {}", e, src_path.display()))?; + log::info!("Writing {} to archive.", src_path.display()); + if src.metadata().await?.is_dir() { + out.append_dir_all(&asset.src, &file_path).await?; + let mut h = tar::Header::new_gnu(); + h.set_size(0); + h.set_path(format!("APPMGR_DIR_END:{}", asset.src.display()))?; + h.set_cksum(); + out.append(&h, tokio::io::empty()).await?; + } else { + out.append_path_with_name(&file_path, &asset.src).await?; + } + } + match manifest.image { + ImageConfig::Tar => { + log::info!("Reading {}/image.tar.", path.display()); + let image = tokio::fs::File::open(path.join("image.tar")) + .await + .with_context(|e| format!("{}: image.tar", e))?; + log::info!("Writing image.tar to archive."); + let mut header = tar::Header::new_gnu(); + header.set_size(image.metadata().await?.len()); + out.append_data(&mut header, "image.tar", image).await?; + } + } + out.into_inner().await?; + + Ok(()) +} + +pub fn validate_path>(p: P) -> Result<(), Error> { + let path = p.as_ref(); + if path.is_absolute() { + return Err(Error::InvalidFileName(format!("{}", path.display()))); + } + for seg in path { + if seg == ".." { + return Err(Error::InvalidFileName(format!("{}", path.display()))); + } + } + Ok(()) +} + +pub async fn verify(path: &str) -> Result<(), failure::Error> { + let path = Path::new(path.trim_end_matches("/")); + ensure!( + path.extension() + .and_then(|a| a.to_str()) + .ok_or_else(|| Error::InvalidFileName(format!("{}", path.display())))? + == "s9pk", + "Extension Must Be '.s9pk'" + ); + let name = path + .file_stem() + .and_then(|a| a.to_str()) + .ok_or_else(|| Error::InvalidFileName(format!("{}", path.display())))?; + ensure!( + !name.starts_with("start9") + && name + .chars() + .filter(|c| !c.is_alphanumeric() && c != &'-') + .next() + .is_none(), + "Invalid Application ID" + ); + log::info!( + "Starting verification of {}.", + path.file_name() + .and_then(|a| a.to_str()) + .ok_or_else(|| Error::InvalidFileName(format!("{}", path.display())))?, + ); + {} + log::info!("Opening file."); + let r = tokio::fs::File::open(&path) + .await + .with_context(|e| format!("{}: {}", path.display(), e))?; + log::info!("Extracting archive."); + let mut pkg = tar::Archive::new(r); + let mut entries = pkg.entries()?; + log::info!("Opening manifest from archive."); + let manifest = entries + .next() + .await + .ok_or_else(|| format_err!("missing manifest"))??; + ensure!( + manifest.path()?.to_str() == Some("manifest.cbor"), + "Package File Invalid or Corrupted: expected manifest.cbor, got {}", + manifest.path()?.display() + ); + log::trace!("Deserializing manifest."); + let manifest: Manifest = from_cbor_async_reader(manifest).await?; + let manifest = manifest.into_latest(); + ensure!( + crate::version::Current::new() + .semver() + .satisfies(&manifest.os_version_required), + "Unsupported AppMgr Version: expected {}", + manifest.os_version_required + ); + ensure!(manifest.id == name, "Package Name Does Not Match Expected",); + if let (Some(public), Some(shared)) = (&manifest.public, &manifest.shared) { + ensure!( + !public.starts_with(shared) && !shared.starts_with(public), + "Public Directory Conflicts With Shared Directory" + ) + } + if let Some(public) = &manifest.public { + validate_path(public)?; + } + if let Some(shared) = &manifest.shared { + validate_path(shared)?; + } + log::info!("Opening config spec from archive."); + let config_spec = entries + .next() + .await + .ok_or_else(|| format_err!("missing config spec"))??; + ensure!( + config_spec.path()?.to_str() == Some("config_spec.cbor"), + "Package File Invalid or Corrupted: expected config_rules.cbor, got {}", + config_spec.path()?.display() + ); + log::trace!("Deserializing config spec."); + let config_spec: ConfigSpec = from_cbor_async_reader(config_spec).await?; + log::trace!("Validating config spec."); + config_spec.validate(&manifest)?; + let config = config_spec.gen(&mut rand::rngs::StdRng::from_entropy(), &None)?; + config_spec.matches(&config)?; + log::info!("Opening config rules from archive."); + let config_rules = entries + .next() + .await + .ok_or_else(|| format_err!("missing config rules"))??; + ensure!( + config_rules.path()?.to_str() == Some("config_rules.cbor"), + "Package File Invalid or Corrupted: expected config_rules.cbor, got {}", + config_rules.path()?.display() + ); + log::trace!("Deserializing config rules."); + let config_rules: Vec = from_cbor_async_reader(config_rules).await?; + log::trace!("Validating config rules against config spec."); + let mut cfgs = LinearMap::new(); + cfgs.insert(name, Cow::Borrowed(&config)); + for rule in &config_rules { + rule.check(&config, &cfgs) + .with_context(|e| format!("Default Config does not satisfy: {}", e))?; + } + if manifest.has_instructions { + let instructions = entries + .next() + .await + .ok_or_else(|| format_err!("missing instructions"))??; + ensure!( + instructions.path()?.to_str() == Some("instructions.md"), + "Package File Invalid or Corrupted: expected instructions.md, got {}", + instructions.path()?.display() + ); + } + for asset_info in manifest.assets { + validate_path(&asset_info.src)?; + validate_path(&asset_info.dst)?; + let asset = entries + .next() + .await + .ok_or_else(|| format_err!("missing asset: {}", asset_info.src.display()))??; + if asset.header().entry_type().is_file() { + ensure!( + asset.path()?.to_str() == Some(&format!("{}", asset_info.src.display())), + "Package File Invalid or Corrupted: expected {}, got {}", + asset_info.src.display(), + asset.path()?.display() + ); + } else if asset.header().entry_type().is_dir() { + ensure!( + asset.path()?.to_str() == Some(&format!("{}/", asset_info.src.display())), + "Package File Invalid or Corrupted: expected {}, got {}", + asset_info.src.display(), + asset.path()?.display() + ); + loop { + let file = entries.next().await.ok_or_else(|| { + format_err!( + "missing directory end marker: APPMGR_DIR_END:{}", + asset_info.src.display() + ) + })??; + if file + .path()? + .starts_with(format!("APPMGR_DIR_END:{}", asset_info.src.display())) + { + break; + } else { + ensure!( + file.path()? + .to_str() + .map(|p| p.starts_with(&format!("{}/", asset_info.src.display()))) + .unwrap_or(false), + "Package File Invalid or Corrupted: expected {}, got {}", + asset_info.src.display(), + asset.path()?.display() + ); + } + } + } else { + bail!("Asset Not Regular File: {}", asset_info.src.display()); + } + } + match &manifest.image { + ImageConfig::Tar => { + #[derive(Clone, Debug, serde::Deserialize)] + #[serde(rename_all = "PascalCase")] + struct DockerManifest { + config: PathBuf, + repo_tags: Vec, + layers: Vec, + } + let image_name = format!("start9/{}", manifest.id); + log::debug!("Opening image.tar from archive."); + let image = entries + .next() + .await + .ok_or_else(|| format_err!("missing image.tar"))??; + let image_path = image.path()?; + if image_path != Path::new("image.tar") { + return Err(format_err!( + "Package File Invalid or Corrupted: expected image.tar, got {}", + image_path.display() + )); + } + log::info!("Verifying image.tar."); + let mut image_tar = tar::Archive::new(image); + let image_manifest = image_tar + .entries()? + .map(|e| { + let e = e?; + Ok((e.path()?.to_path_buf(), e)) + }) + .filter_map(|res: Result<(PathBuf, tar::Entry<_>), std::io::Error>| { + futures::future::ready(match res { + Ok((path, e)) => { + if path == Path::new("manifest.json") { + Some(Ok(e)) + } else { + None + } + } + Err(e) => Some(Err(e)), + }) + }) + .next() + .await + .ok_or_else(|| format_err!("image.tar is missing manifest.json"))??; + let image_manifest: Vec = + from_json_async_reader(image_manifest).await?; + image_manifest + .into_iter() + .flat_map(|a| a.repo_tags) + .map(|t| { + if t.starts_with("start9/") { + if t.split(":").next().unwrap() != image_name { + Err(format_err!("Contains prohibited image tag: {}", t)) + } else { + Ok(()) + } + } else { + Ok(()) + } + }) + .collect::>()?; + } + }; + + Ok(()) +} diff --git a/appmgr/src/registry.rs b/appmgr/src/registry.rs new file mode 100644 index 000000000..1bd9d69fe --- /dev/null +++ b/appmgr/src/registry.rs @@ -0,0 +1,66 @@ +use emver::VersionRange; + +use crate::apps::AppConfig; +use crate::manifest::ManifestLatest; +use crate::Error; +use crate::ResultExt as _; + +pub async fn manifest(id: &str, version: &VersionRange) -> Result { + let manifest: ManifestLatest = reqwest::get(&format!( + "{}/manifest/{}?spec={}", + &*crate::APP_REGISTRY_URL, + id, + version + )) + .await + .with_code(crate::error::NETWORK_ERROR)? + .error_for_status() + .with_code(crate::error::REGISTRY_ERROR)? + .json() + .await + .with_code(crate::error::SERDE_ERROR)?; + Ok(manifest) +} + +pub async fn version(id: &str, version: &VersionRange) -> Result { + #[derive(serde::Deserialize)] + struct VersionRes { + version: emver::Version, + } + + let version: VersionRes = reqwest::get(&format!( + "{}/version/{}?spec={}", + &*crate::APP_REGISTRY_URL, + id, + version + )) + .await + .with_code(crate::error::NETWORK_ERROR)? + .error_for_status() + .with_code(crate::error::REGISTRY_ERROR)? + .json() + .await + .with_code(crate::error::SERDE_ERROR)?; + Ok(version.version) +} + +pub async fn config(id: &str, version: &VersionRange) -> Result { + let config: crate::inspect::AppConfig = reqwest::get(&format!( + "{}/config/{}?spec={}", + &*crate::APP_REGISTRY_URL, + id, + version + )) + .await + .with_code(crate::error::NETWORK_ERROR)? + .error_for_status() + .with_code(crate::error::REGISTRY_ERROR)? + .json() + .await + .with_code(crate::error::SERDE_ERROR)?; + Ok(AppConfig { + config: None, + spec: config.spec, + rules: config.rules, + }) +} diff --git a/appmgr/src/remove.rs b/appmgr/src/remove.rs new file mode 100644 index 000000000..53b75f075 --- /dev/null +++ b/appmgr/src/remove.rs @@ -0,0 +1,117 @@ +use std::path::Path; + +use linear_map::LinearMap; + +use crate::dependencies::{DependencyError, TaggedDependencyError}; +use crate::Error; + +pub async fn remove( + name: &str, + purge: bool, + dry_run: bool, +) -> Result, Error> { + let manifest = crate::apps::manifest(name).await?; + let mut res = LinearMap::new(); + crate::stop_dependents(name, dry_run, DependencyError::NotInstalled, &mut res).await?; + if dry_run { + return Ok(res); + } + let image_name = format!("start9/{}", name); + log::info!("Removing app from manifest."); + crate::apps::remove(name).await?; + log::info!("Stopping docker container."); + let res = crate::control::stop_app(name, false, false) + .await + .unwrap_or_else(|e| { + log::error!("Error stopping app: {}", e); + LinearMap::new() + }); + log::info!("Removing docker container."); + if !std::process::Command::new("docker") + .args(&["rm", name]) + .stdout(std::process::Stdio::null()) + .stderr(match log::max_level() { + log::LevelFilter::Error => std::process::Stdio::null(), + _ => std::process::Stdio::inherit(), + }) + .status()? + .success() + { + log::error!("Failed to Remove Docker Container"); + }; + if !std::process::Command::new("docker") + .args(&["rmi", &image_name]) + .stdout(std::process::Stdio::null()) + .stderr(match log::max_level() { + log::LevelFilter::Error => std::process::Stdio::null(), + _ => std::process::Stdio::inherit(), + }) + .status()? + .success() + { + log::error!("Failed to Remove Docker Image"); + }; + if purge { + log::info!("Removing tor hidden service."); + crate::tor::rm_svc(name).await?; + log::info!("Removing app metadata."); + tokio::fs::remove_dir_all(Path::new(crate::PERSISTENCE_DIR).join("apps").join(name)) + .await?; + log::info!("Destroying mounted volume."); + log::info!("Unbinding shared filesystem."); + for (dep, info) in manifest.dependencies.0.iter() { + if info.mount_public { + crate::disks::unmount( + Path::new(crate::VOLUMES) + .join(name) + .join("start9") + .join("public") + .join(&dep), + ) + .await?; + } + if info.mount_shared { + if let Some(shared) = match crate::apps::manifest(dep).await { + Ok(man) => man.shared, + Err(e) => { + log::error!("Failed to Fetch Dependency Manifest: {}", e); + None + } + } { + let path = Path::new(crate::VOLUMES) + .join(name) + .join("start9") + .join("shared") + .join(&dep); + if path.exists() { + crate::disks::unmount(&path).await?; + } + let path = Path::new(crate::VOLUMES).join(dep).join(&shared).join(name); + if path.exists() { + tokio::fs::remove_dir_all( + Path::new(crate::VOLUMES).join(dep).join(&shared).join(name), + ) + .await?; + } + } + } + } + tokio::fs::remove_dir_all(Path::new(crate::VOLUMES).join(name)).await?; + log::info!("Pruning unused docker images."); + crate::ensure_code!( + std::process::Command::new("docker") + .args(&["image", "prune", "-a", "-f"]) + .stdout(std::process::Stdio::null()) + .stderr(match log::max_level() { + log::LevelFilter::Error => std::process::Stdio::null(), + _ => std::process::Stdio::inherit(), + }) + .status()? + .success(), + crate::error::DOCKER_ERROR, + "Failed to Prune Docker Images" + ); + }; + + Ok(res) +} diff --git a/appmgr/src/tor.rs b/appmgr/src/tor.rs new file mode 100644 index 000000000..a565aa585 --- /dev/null +++ b/appmgr/src/tor.rs @@ -0,0 +1,414 @@ +use std::collections::{BTreeSet, HashMap}; +use std::net::Ipv4Addr; +use std::os::unix::process::ExitStatusExt; +use std::path::Path; +use std::time::{Duration, Instant}; + +use failure::ResultExt as _; +use tokio::io::AsyncReadExt; +use tokio::io::AsyncWriteExt; + +use crate::util::{PersistencePath, YamlUpdateHandle}; +use crate::{Error, ResultExt as _}; + +#[derive(Debug, Clone, Copy, serde::Deserialize, serde::Serialize)] +pub struct PortMapping { + pub internal: u16, + pub tor: u16, +} + +pub const ETC_TOR_RC: &'static str = "/etc/tor/torrc"; +pub const HIDDEN_SERVICE_DIR_ROOT: &'static str = "/var/lib/tor"; + +#[derive(Debug, Clone, Copy, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "lowercase")] +pub enum HiddenServiceVersion { + V1, + V2, + V3, +} +impl From for usize { + fn from(v: HiddenServiceVersion) -> Self { + match v { + HiddenServiceVersion::V1 => 1, + HiddenServiceVersion::V2 => 2, + HiddenServiceVersion::V3 => 3, + } + } +} +impl std::convert::TryFrom for HiddenServiceVersion { + type Error = failure::Error; + fn try_from(v: usize) -> Result { + Ok(match v { + 1 => HiddenServiceVersion::V1, + 2 => HiddenServiceVersion::V2, + 3 => HiddenServiceVersion::V3, + n => bail!("Invalid HiddenServiceVersion {}", n), + }) + } +} +impl Default for HiddenServiceVersion { + fn default() -> Self { + HiddenServiceVersion::V3 + } +} +impl std::fmt::Display for HiddenServiceVersion { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "HiddenServiceVersion {}", usize::from(*self)) + } +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub struct Service { + pub ip: Ipv4Addr, + pub ports: Vec, + #[serde(default)] + pub hidden_service_version: HiddenServiceVersion, +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub struct NewService { + pub ports: Vec, + #[serde(default)] + pub hidden_service_version: HiddenServiceVersion, +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub struct ServicesMap { + pub map: HashMap, + pub ips: BTreeSet, +} +impl Default for ServicesMap { + fn default() -> Self { + ServicesMap { + map: Default::default(), + ips: Default::default(), + } + } +} +impl ServicesMap { + pub fn add(&mut self, name: String, service: NewService) -> Ipv4Addr { + let ip = self + .map + .get(&name) + .map(|a| a.ip.clone()) + .unwrap_or_else(|| { + Ipv4Addr::from( + u32::from( + self.ips + .range(..) + .next_back() + .cloned() + .unwrap_or_else(|| crate::HOST_IP.into()), + ) + 1, + ) + }); + self.ips.insert(ip); + self.map.insert( + name, + Service { + ip, + ports: service.ports, + hidden_service_version: service.hidden_service_version, + }, + ); + ip + } + pub fn remove(&mut self, name: &str) { + let s = self.map.remove(name); + if let Some(s) = s { + self.ips.remove(&s.ip); + } + } +} + +pub async fn services_map(path: &PersistencePath) -> Result { + let f = path.maybe_read(false).await.transpose()?; + if let Some(mut f) = f { + crate::util::from_yaml_async_reader(&mut *f).await + } else { + Ok(Default::default()) + } +} + +pub async fn services_map_mut( + path: PersistencePath, +) -> Result, Error> { + YamlUpdateHandle::new_or_default(path).await +} + +pub async fn write_services(hidden_services: &ServicesMap) -> Result<(), Error> { + tokio::fs::copy(crate::TOR_RC, ETC_TOR_RC) + .await + .with_context(|e| format!("{} -> {}: {}", crate::TOR_RC, ETC_TOR_RC, e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + let mut f = tokio::fs::OpenOptions::new() + .append(true) + .open(ETC_TOR_RC) + .await?; + f.write_all(b"\n").await?; + for (name, service) in &hidden_services.map { + if service.ports.is_empty() { + continue; + } + f.write_all(b"\n").await?; + f.write_all(format!("# HIDDEN SERVICE FOR {}\n", name).as_bytes()) + .await?; + f.write_all( + format!( + "HiddenServiceDir {}/app-{}/\n", + HIDDEN_SERVICE_DIR_ROOT, name + ) + .as_bytes(), + ) + .await?; + f.write_all(format!("{}\n", service.hidden_service_version).as_bytes()) + .await?; + for port in &service.ports { + f.write_all( + format!( + "HiddenServicePort {} {}:{}\n", + port.tor, service.ip, port.internal + ) + .as_bytes(), + ) + .await?; + } + f.write_all(b"\n").await?; + } + Ok(()) +} + +pub async fn read_tor_address(name: &str, timeout: Option) -> Result { + log::info!("Retrieving Tor hidden service address for {}.", name); + let addr_path = Path::new(HIDDEN_SERVICE_DIR_ROOT) + .join(format!("app-{}", name)) + .join("hostname"); + if let Some(timeout) = timeout { + let start = Instant::now(); + while { + if addr_path.exists() { + false + } else { + if start.elapsed() >= timeout { + log::warn!("Timed out waiting for tor to start."); + false + } else { + true + } + } + } { + tokio::time::delay_for(Duration::from_millis(100)).await; + } + } + let tor_addr = match tokio::fs::read_to_string(&addr_path).await { + Err(e) if e.kind() == std::io::ErrorKind::NotFound => Err(e) + .with_context(|e| format!("{}: {}", addr_path.display(), e)) + .with_code(crate::error::NOT_FOUND), + a => a + .with_context(|e| format!("{}: {}", addr_path.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR), + }?; + Ok(tor_addr.trim().to_owned()) +} + +pub async fn read_tor_key( + name: &str, + version: HiddenServiceVersion, + timeout: Option, +) -> Result { + log::info!("Retrieving Tor hidden service address for {}.", name); + let addr_path = Path::new(HIDDEN_SERVICE_DIR_ROOT) + .join(format!("app-{}", name)) + .join(match version { + HiddenServiceVersion::V3 => "hs_ed25519_secret_key", + _ => "private_key", + }); + if let Some(timeout) = timeout { + let start = Instant::now(); + while { + if addr_path.exists() { + false + } else { + if start.elapsed() >= timeout { + log::warn!("Timed out waiting for tor to start."); + false + } else { + true + } + } + } { + tokio::time::delay_for(Duration::from_millis(100)).await; + } + } + let tor_key = match version { + HiddenServiceVersion::V3 => { + let mut f = tokio::fs::File::open(&addr_path) + .await + .with_context(|e| format!("{}: {}", e, addr_path.display())) + .with_code(crate::error::FILESYSTEM_ERROR)?; + let mut buf = [0; 96]; + f.read_exact(&mut buf).await?; + base32::encode(base32::Alphabet::RFC4648 { padding: false }, &buf[32..]).to_lowercase() + } + _ => tokio::fs::read_to_string(&addr_path) + .await + .with_context(|e| format!("{}: {}", e, addr_path.display())) + .with_code(crate::error::FILESYSTEM_ERROR)? + .trim_end_matches("\u{0}") + .to_string(), + }; + Ok(tor_key.trim().to_owned()) +} + +pub async fn set_svc( + name: &str, + service: NewService, +) -> Result<(Ipv4Addr, Option, Option), Error> { + log::info!( + "Adding Tor hidden service {} to {}.", + name, + crate::SERVICES_YAML + ); + let is_listening = !service.ports.is_empty(); + let path = PersistencePath::from_ref(crate::SERVICES_YAML); + let mut hidden_services = services_map_mut(path).await?; + let ver = service.hidden_service_version; + let ip = hidden_services.add(name.to_owned(), service); + log::info!("Adding Tor hidden service {} to {}.", name, ETC_TOR_RC); + write_services(&hidden_services).await?; + hidden_services.commit().await?; + log::info!("Reloading Tor."); + let svc_exit = std::process::Command::new("service") + .args(&["tor", "reload"]) + .status()?; + crate::ensure_code!( + svc_exit.success(), + crate::error::GENERAL_ERROR, + "Failed to Reload Tor: {}", + svc_exit + .code() + .or_else(|| { svc_exit.signal().map(|a| 128 + a) }) + .unwrap_or(0) + ); + Ok(( + ip, + if is_listening { + Some(read_tor_address(name, Some(Duration::from_secs(30))).await?) + } else { + None + }, + if is_listening { + Some(read_tor_key(name, ver, Some(Duration::from_secs(30))).await?) + } else { + None + }, + )) +} + +pub async fn rm_svc(name: &str) -> Result<(), Error> { + log::info!( + "Removing Tor hidden service {} from {}.", + name, + crate::SERVICES_YAML + ); + let path = PersistencePath::from_ref(crate::SERVICES_YAML); + let mut hidden_services = services_map_mut(path).await?; + hidden_services.remove(name); + let hidden_service_path = Path::new(HIDDEN_SERVICE_DIR_ROOT).join(format!("app-{}", name)); + log::info!("Removing {}", hidden_service_path.display()); + if hidden_service_path.exists() { + tokio::fs::remove_dir_all(hidden_service_path).await?; + } + log::info!("Removing Tor hidden service {} from {}.", name, ETC_TOR_RC); + write_services(&hidden_services).await?; + hidden_services.commit().await?; + log::info!("Reloading Tor."); + let svc_exit = std::process::Command::new("service") + .args(&["tor", "reload"]) + .status()?; + crate::ensure_code!( + svc_exit.success(), + crate::error::GENERAL_ERROR, + "Failed to Reload Tor: {}", + svc_exit.code().unwrap_or(0) + ); + Ok(()) +} + +pub async fn change_key( + name: &str, + key: Option<&ed25519_dalek::ExpandedSecretKey>, +) -> Result<(), Error> { + let hidden_service_path = Path::new(HIDDEN_SERVICE_DIR_ROOT).join(format!("app-{}", name)); + log::info!("Removing {}", hidden_service_path.display()); + if hidden_service_path.exists() { + tokio::fs::remove_dir_all(&hidden_service_path) + .await + .with_context(|e| format!("{}: {}", hidden_service_path.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + } + if let Some(key) = key { + tokio::fs::create_dir_all(&hidden_service_path).await?; + let key_path = hidden_service_path.join("hs_ed25519_secret_key"); + let mut key_data = b"== ed25519v1-secret: type0 ==".to_vec(); + key_data.extend_from_slice(&key.to_bytes()); + tokio::fs::write(&key_path, key_data) + .await + .with_context(|e| format!("{}: {}", key_path.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + } + log::info!("Reloading Tor."); + let svc_exit = std::process::Command::new("service") + .args(&["tor", "reload"]) + .status()?; + crate::ensure_code!( + svc_exit.success(), + crate::error::GENERAL_ERROR, + "Failed to Reload Tor: {}", + svc_exit.code().unwrap_or(0) + ); + let mut info = crate::apps::list_info_mut().await?; + if let Some(mut i) = info.get_mut(name) { + if i.tor_address.is_some() { + i.tor_address = Some(read_tor_address(name, Some(Duration::from_secs(30))).await?); + } + } + Ok(()) +} + +pub async fn reload() -> Result<(), Error> { + let path = PersistencePath::from_ref(crate::SERVICES_YAML); + let hidden_services = services_map(&path).await?; + log::info!("Syncing Tor hidden services to {}.", ETC_TOR_RC); + write_services(&hidden_services).await?; + log::info!("Reloading Tor."); + let svc_exit = std::process::Command::new("service") + .args(&["tor", "reload"]) + .status()?; + crate::ensure_code!( + svc_exit.success(), + crate::error::GENERAL_ERROR, + "Failed to Reload Tor: {}", + svc_exit.code().unwrap_or(0) + ); + Ok(()) +} + +pub async fn restart() -> Result<(), Error> { + let path = PersistencePath::from_ref(crate::SERVICES_YAML); + let hidden_services = services_map(&path).await?; + log::info!("Syncing Tor hidden services to {}.", ETC_TOR_RC); + write_services(&hidden_services).await?; + log::info!("Restarting Tor."); + let svc_exit = std::process::Command::new("service") + .args(&["tor", "restart"]) + .status()?; + crate::ensure_code!( + svc_exit.success(), + crate::error::GENERAL_ERROR, + "Failed to Restart Tor: {}", + svc_exit.code().unwrap_or(0) + ); + Ok(()) +} diff --git a/appmgr/src/update.rs b/appmgr/src/update.rs new file mode 100644 index 000000000..1b8ab598c --- /dev/null +++ b/appmgr/src/update.rs @@ -0,0 +1,80 @@ +use linear_map::LinearMap; + +use crate::dependencies::{DependencyError, TaggedDependencyError}; +use crate::Error; +use crate::ResultExt as _; + +pub async fn update( + name_version: &str, + dry_run: bool, +) -> Result, Error> { + let mut name_version_iter = name_version.split("@"); + let name = name_version_iter.next().unwrap(); + let version_req = name_version_iter + .next() + .map(|v| v.parse()) + .transpose() + .no_code()? + .unwrap_or_else(emver::VersionRange::any); + let version = crate::registry::version(name, &version_req).await?; + let mut res = LinearMap::new(); + for dependent in crate::apps::dependents(name, false).await? { + if crate::apps::status(&dependent).await?.status != crate::apps::DockerStatus::Stopped { + let manifest = crate::apps::manifest(&dependent).await?; + match manifest.dependencies.0.get(name) { + Some(dep) if !version.satisfies(&dep.version) => { + crate::control::stop_dependents( + &dependent, + dry_run, + DependencyError::NotRunning, + &mut res, + ) + .await?; + if crate::apps::status(name).await?.status != crate::apps::DockerStatus::Stopped + { + crate::control::stop_app(&dependent, false, dry_run).await?; + res.insert( + dependent, + TaggedDependencyError { + dependency: name.to_owned(), + error: DependencyError::IncorrectVersion { + expected: version_req.clone(), + received: version.clone(), + }, + }, + ); + } + } + _ => { + crate::control::stop_dependents( + &dependent, + dry_run, + DependencyError::NotRunning, + &mut res, + ) + .await?; + if crate::apps::status(name).await?.status != crate::apps::DockerStatus::Stopped + { + crate::control::stop_app(&dependent, false, dry_run).await?; + res.insert( + dependent, + TaggedDependencyError { + dependency: name.to_owned(), + error: DependencyError::NotRunning, + }, + ); + } + } + } + } + } + if dry_run { + return Ok(res); + } + let download_path = crate::install::download_name(name_version).await?; + crate::remove::remove(name, false, false).await?; + crate::install::install_path(download_path, Some(name)).await?; + crate::apps::set_recoverable(name, false).await?; + + Ok(res) +} diff --git a/appmgr/src/util.rs b/appmgr/src/util.rs new file mode 100644 index 000000000..18006a9bf --- /dev/null +++ b/appmgr/src/util.rs @@ -0,0 +1,553 @@ +use std::fmt; +use std::marker::PhantomData; +use std::path::{Path, PathBuf}; + +use failure::ResultExt as _; +use file_lock::FileLock; +use tokio::fs::File; +use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt}; + +use crate::Error; +use crate::ResultExt as _; + +#[derive(Debug, Clone)] +pub struct PersistencePath(PathBuf); +impl PersistencePath { + pub fn from_ref>(p: P) -> Self { + let path = p.as_ref(); + PersistencePath(if path.has_root() { + path.strip_prefix("/").unwrap().to_owned() + } else { + path.to_owned() + }) + } + + pub fn new(path: PathBuf) -> Self { + PersistencePath(if path.has_root() { + path.strip_prefix("/").unwrap().to_owned() + } else { + path.to_owned() + }) + } + + pub fn join>(&self, path: P) -> Self { + PersistencePath::new(self.0.join(path)) + } + + pub fn tmp(&self) -> PathBuf { + Path::new(crate::TMP_DIR).join(&self.0) + } + + pub fn path(&self) -> PathBuf { + Path::new(crate::PERSISTENCE_DIR).join(&self.0) + } + + pub async fn lock(&self, for_update: bool) -> Result { + let path = self.path(); + let lock_path = format!("{}.lock", path.display()); + if tokio::fs::metadata(Path::new(&lock_path)).await.is_err() { + // !exists + tokio::fs::File::create(&lock_path) + .await + .with_context(|e| format!("{}: {}", lock_path, e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + } + let lock = lock_file(lock_path.clone(), for_update) + .await + .with_context(|e| format!("{}: {}", lock_path, e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + Ok(lock) + } + + pub async fn exists(&self) -> bool { + tokio::fs::metadata(self.path()).await.is_ok() + } + + pub async fn maybe_read(&self, for_update: bool) -> Option> { + if self.exists().await { + // exists + Some(self.read(for_update).await) + } else { + None + } + } + + pub async fn read(&self, for_update: bool) -> Result { + let path = self.path(); + let lock = self.lock(for_update).await?; + let file = File::open(&path) + .await + .with_context(|e| format!("{}: {}", path.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + Ok(PersistenceFile::new(file, lock, None)) + } + + pub async fn write(&self, lock: Option) -> Result { + let path = self.path(); + if let Some(parent) = path.parent() { + if tokio::fs::metadata(parent).await.is_err() { + // !exists + tokio::fs::create_dir_all(parent).await?; + } + } + let lock = if let Some(lock) = lock { + lock + } else { + self.lock(true).await? + }; + Ok({ + let path = self.tmp(); + if let Some(parent) = path.parent() { + if tokio::fs::metadata(parent).await.is_err() { + // !exists + tokio::fs::create_dir_all(parent).await?; + } + } + PersistenceFile::new(File::create(path).await?, lock, Some(self.clone())) + }) + } + + pub async fn for_update(self) -> Result, Error> { + UpdateHandle::new(self).await + } +} + +#[derive(Debug)] +pub struct PersistenceFile { + file: Option, + lock: Option, + needs_commit: Option, +} +impl PersistenceFile { + pub fn new(file: File, lock: FileLock, needs_commit: Option) -> Self { + PersistenceFile { + file: Some(file), + lock: Some(lock), + needs_commit, + } + } + + pub fn take_lock(&mut self) -> Option { + self.lock.take() + } + + /// Commits the file to the persistence directory. + /// If this fails, the file was not saved. + pub async fn commit(mut self) -> Result<(), Error> { + if let Some(mut file) = self.file.take() { + file.flush().await?; + file.shutdown().await?; + drop(file); + } + if let Some(path) = self.needs_commit.take() { + tokio::fs::rename(path.tmp(), path.path()) + .await + .with_context(|e| { + format!( + "{} -> {}: {}", + path.tmp().display(), + path.path().display(), + e + ) + }) + .with_code(crate::error::FILESYSTEM_ERROR)?; + if let Some(lock) = self.lock.take() { + unlock(lock) + .await + .with_context(|e| format!("{}.lock: {}", path.path().display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + tokio::fs::remove_file(format!("{}.lock", path.path().display())) + .await + .with_context(|e| format!("{}.lock: {}", path.path().display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + } + + Ok(()) + } else { + Ok(()) + } + } +} +impl std::ops::Deref for PersistenceFile { + type Target = File; + + fn deref(&self) -> &Self::Target { + self.file.as_ref().unwrap() + } +} +impl std::ops::DerefMut for PersistenceFile { + fn deref_mut(&mut self) -> &mut Self::Target { + self.file.as_mut().unwrap() + } +} +impl AsRef for PersistenceFile { + fn as_ref(&self) -> &File { + &*self + } +} +impl AsMut for PersistenceFile { + fn as_mut(&mut self) -> &mut File { + &mut *self + } +} +impl Drop for PersistenceFile { + fn drop(&mut self) { + if let Some(path) = &self.needs_commit { + log::warn!( + "{} was dropped without being committed.", + path.path().display() + ); + } + } +} + +pub trait UpdateHandleMode {} +pub struct ForRead; +impl UpdateHandleMode for ForRead {} +pub struct ForWrite; +impl UpdateHandleMode for ForWrite {} + +pub struct UpdateHandle { + path: PersistencePath, + file: PersistenceFile, + mode: PhantomData, +} +impl UpdateHandle { + pub async fn new(path: PersistencePath) -> Result { + if !path.path().exists() { + tokio::fs::File::create(path.path()).await?; + } + Ok(UpdateHandle { + file: path.read(true).await?, + path, + mode: PhantomData, + }) + } + + pub async fn into_writer(mut self) -> Result, Error> { + let lock = self.file.take_lock(); + Ok(UpdateHandle { + file: self.path.write(lock).await?, + path: self.path, + mode: PhantomData, + }) + } +} + +impl UpdateHandle { + pub async fn commit(self) -> Result<(), Error> { + self.file.commit().await + } +} + +impl tokio::io::AsyncRead for UpdateHandle { + fn poll_read( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &mut [u8], + ) -> std::task::Poll> { + unsafe { self.map_unchecked_mut(|a| a.file.file.as_mut().unwrap()) }.poll_read(cx, buf) + } +} + +impl tokio::io::AsyncWrite for UpdateHandle { + fn poll_write( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &[u8], + ) -> std::task::Poll> { + tokio::io::AsyncWrite::poll_write( + unsafe { self.map_unchecked_mut(|a| a.file.file.as_mut().unwrap()) }, + cx, + buf, + ) + } + fn poll_flush( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll> { + tokio::io::AsyncWrite::poll_flush( + unsafe { self.map_unchecked_mut(|a| a.file.file.as_mut().unwrap()) }, + cx, + ) + } + fn poll_shutdown( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll> { + tokio::io::AsyncWrite::poll_shutdown( + unsafe { self.map_unchecked_mut(|a| a.file.file.as_mut().unwrap()) }, + cx, + ) + } +} + +pub struct YamlUpdateHandle serde::Deserialize<'de>> { + inner: T, + handle: UpdateHandle, + committed: bool, +} +impl YamlUpdateHandle +where + T: serde::Serialize + for<'de> serde::Deserialize<'de>, +{ + pub async fn new(path: PersistencePath) -> Result { + let mut handle = path.for_update().await?; + let inner = from_yaml_async_reader(&mut handle).await?; + Ok(YamlUpdateHandle { + inner, + handle, + committed: false, + }) + } + + pub async fn commit(mut self) -> Result<(), Error> { + let mut file = self.handle.into_writer().await?; + to_yaml_async_writer(&mut file, &self.inner) + .await + .no_code()?; + file.commit().await?; + self.committed = true; + Ok(()) + } +} + +impl YamlUpdateHandle +where + T: serde::Serialize + for<'de> serde::Deserialize<'de> + Default, +{ + pub async fn new_or_default(path: PersistencePath) -> Result { + if !path.path().exists() { + Ok(YamlUpdateHandle { + inner: Default::default(), + handle: path.for_update().await?, + committed: false, + }) + } else { + Self::new(path).await + } + } +} + +impl std::ops::Deref for YamlUpdateHandle +where + T: serde::Serialize + for<'de> serde::Deserialize<'de> + Default, +{ + type Target = T; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} +impl std::ops::DerefMut for YamlUpdateHandle +where + T: serde::Serialize + for<'de> serde::Deserialize<'de> + Default, +{ + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +#[derive(Clone, Debug)] +pub enum Never {} +pub fn absurd(lol: Never) -> T { + match lol {} +} +impl fmt::Display for Never { + fn fmt(&self, _f: &mut fmt::Formatter) -> fmt::Result { + absurd(self.clone()) + } +} +impl failure::Fail for Never {} + +#[derive(Clone, Debug)] +pub struct AsyncCompat(pub T); +impl futures::io::AsyncRead for AsyncCompat +where + T: tokio::io::AsyncRead, +{ + fn poll_read( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &mut [u8], + ) -> std::task::Poll> { + tokio::io::AsyncRead::poll_read(unsafe { self.map_unchecked_mut(|a| &mut a.0) }, cx, buf) + } +} +impl tokio::io::AsyncRead for AsyncCompat +where + T: futures::io::AsyncRead, +{ + fn poll_read( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &mut [u8], + ) -> std::task::Poll> { + futures::io::AsyncRead::poll_read(unsafe { self.map_unchecked_mut(|a| &mut a.0) }, cx, buf) + } +} +impl futures::io::AsyncWrite for AsyncCompat +where + T: tokio::io::AsyncWrite, +{ + fn poll_write( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &[u8], + ) -> std::task::Poll> { + tokio::io::AsyncWrite::poll_write(unsafe { self.map_unchecked_mut(|a| &mut a.0) }, cx, buf) + } + fn poll_flush( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll> { + tokio::io::AsyncWrite::poll_flush(unsafe { self.map_unchecked_mut(|a| &mut a.0) }, cx) + } + fn poll_close( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll> { + tokio::io::AsyncWrite::poll_shutdown(unsafe { self.map_unchecked_mut(|a| &mut a.0) }, cx) + } +} +impl tokio::io::AsyncWrite for AsyncCompat +where + T: futures::io::AsyncWrite, +{ + fn poll_write( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &[u8], + ) -> std::task::Poll> { + futures::io::AsyncWrite::poll_write( + unsafe { self.map_unchecked_mut(|a| &mut a.0) }, + cx, + buf, + ) + } + fn poll_flush( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll> { + futures::io::AsyncWrite::poll_flush(unsafe { self.map_unchecked_mut(|a| &mut a.0) }, cx) + } + fn poll_shutdown( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll> { + futures::io::AsyncWrite::poll_close(unsafe { self.map_unchecked_mut(|a| &mut a.0) }, cx) + } +} + +pub async fn lock_file(filename: String, for_write: bool) -> std::io::Result { + tokio::task::spawn_blocking(move || FileLock::lock(&filename, true, for_write)).await? +} + +pub async fn unlock(lock: FileLock) -> std::io::Result<()> { + tokio::task::spawn_blocking(move || lock.unlock()).await? +} + +pub async fn from_yaml_async_reader(mut reader: R) -> Result +where + T: for<'de> serde::Deserialize<'de>, + R: AsyncRead + Unpin, +{ + let mut buffer = Vec::new(); + reader.read_to_end(&mut buffer).await?; + serde_yaml::from_slice(&buffer) + .map_err(failure::Error::from) + .with_code(crate::error::SERDE_ERROR) +} + +pub async fn to_yaml_async_writer(mut writer: W, value: &T) -> Result<(), crate::Error> +where + T: serde::Serialize, + W: AsyncWrite + Unpin, +{ + let mut buffer = serde_yaml::to_vec(value).with_code(crate::error::SERDE_ERROR)?; + buffer.extend_from_slice(b"\n"); + writer.write_all(&buffer).await?; + Ok(()) +} + +pub async fn from_cbor_async_reader(mut reader: R) -> Result +where + T: for<'de> serde::Deserialize<'de>, + R: AsyncRead + Unpin, +{ + let mut buffer = Vec::new(); + reader.read_to_end(&mut buffer).await?; + serde_cbor::from_slice(&buffer) + .map_err(failure::Error::from) + .with_code(crate::error::SERDE_ERROR) +} + +pub async fn from_json_async_reader(mut reader: R) -> Result +where + T: for<'de> serde::Deserialize<'de>, + R: AsyncRead + Unpin, +{ + let mut buffer = Vec::new(); + reader.read_to_end(&mut buffer).await?; + serde_json::from_slice(&buffer) + .map_err(failure::Error::from) + .with_code(crate::error::SERDE_ERROR) +} + +pub async fn to_json_async_writer(mut writer: W, value: &T) -> Result<(), crate::Error> +where + T: serde::Serialize, + W: AsyncWrite + Unpin, +{ + let buffer = serde_json::to_string(value).with_code(crate::error::SERDE_ERROR)?; + writer.write_all(&buffer.as_bytes()).await?; + Ok(()) +} + +pub async fn to_json_pretty_async_writer(mut writer: W, value: &T) -> Result<(), crate::Error> +where + T: serde::Serialize, + W: AsyncWrite + Unpin, +{ + let mut buffer = serde_json::to_string_pretty(value).with_code(crate::error::SERDE_ERROR)?; + buffer.push_str("\n"); + writer.write_all(&buffer.as_bytes()).await?; + Ok(()) +} + +#[async_trait::async_trait] +pub trait Invoke { + async fn invoke(&mut self, name: &str) -> Result, failure::Error>; +} +#[async_trait::async_trait] +impl Invoke for tokio::process::Command { + async fn invoke(&mut self, name: &str) -> Result, failure::Error> { + let res = self.output().await?; + ensure!( + res.status.success(), + "{} Error: {}", + name, + std::str::from_utf8(&res.stderr).unwrap_or("Unknown Error") + ); + Ok(res.stdout) + } +} + +pub trait Apply: Sized { + fn apply O>(self, func: F) -> O { + func(self) + } +} + +pub trait ApplyRef { + fn apply_ref O>(&self, func: F) -> O { + func(&self) + } + + fn apply_mut O>(&mut self, func: F) -> O { + func(self) + } +} + +impl Apply for T {} +impl ApplyRef for T {} diff --git a/appmgr/src/version/mod.rs b/appmgr/src/version/mod.rs new file mode 100644 index 000000000..26f89cccf --- /dev/null +++ b/appmgr/src/version/mod.rs @@ -0,0 +1,251 @@ +use std::cmp::Ordering; + +use async_trait::async_trait; +use failure::ResultExt as _; +use futures::stream::TryStreamExt; + +use crate::util::{to_yaml_async_writer, AsyncCompat, PersistencePath}; +use crate::Error; +use crate::ResultExt as _; + +mod v0_1_0; +mod v0_1_1; +mod v0_1_2; +mod v0_1_3; +mod v0_1_4; +mod v0_1_5; +mod v0_2_0; +mod v0_2_1; +mod v0_2_2; +mod v0_2_3; +mod v0_2_4; +mod v0_2_5; + +pub use v0_2_5::Version as Current; + +#[derive(serde::Serialize, serde::Deserialize)] +#[serde(untagged)] +enum Version { + V0_0_0(Wrapper<()>), + V0_1_0(Wrapper), + V0_1_1(Wrapper), + V0_1_2(Wrapper), + V0_1_3(Wrapper), + V0_1_4(Wrapper), + V0_1_5(Wrapper), + V0_2_0(Wrapper), + V0_2_1(Wrapper), + V0_2_2(Wrapper), + V0_2_3(Wrapper), + V0_2_4(Wrapper), + V0_2_5(Wrapper), + Other(emver::Version), +} + +#[async_trait] +pub trait VersionT +where + Self: Sized + Send + Sync, +{ + type Previous: VersionT; + fn new() -> Self; + fn semver(&self) -> &'static emver::Version; + async fn up(&self) -> Result<(), Error>; + async fn down(&self) -> Result<(), Error>; + async fn commit(&self) -> Result<(), Error> { + let mut out = PersistencePath::from_ref("version").write(None).await?; + to_yaml_async_writer(out.as_mut(), &self.semver()).await?; + out.commit().await?; + Ok(()) + } + async fn migrate_to(&self, version: &V) -> Result<(), Error> { + match self.semver().cmp(version.semver()) { + Ordering::Greater => self.rollback_to_unchecked(version).await, + Ordering::Less => version.migrate_from_unchecked(self).await, + Ordering::Equal => Ok(()), + } + } + async fn migrate_from_unchecked(&self, version: &V) -> Result<(), Error> { + let previous = Self::Previous::new(); + if version.semver() != previous.semver() { + previous.migrate_from_unchecked(version).await?; + } + log::info!("{} -> {}", previous.semver(), self.semver()); + self.up().await?; + self.commit().await?; + Ok(()) + } + async fn rollback_to_unchecked(&self, version: &V) -> Result<(), Error> { + let previous = Self::Previous::new(); + log::info!("{} -> {}", self.semver(), previous.semver()); + self.down().await?; + previous.commit().await?; + if version.semver() != previous.semver() { + previous.rollback_to_unchecked(version).await?; + } + Ok(()) + } +} +struct Wrapper(T); +impl serde::Serialize for Wrapper +where + T: VersionT, +{ + fn serialize(&self, serializer: S) -> Result { + self.0.semver().serialize(serializer) + } +} +impl<'de, T> serde::Deserialize<'de> for Wrapper +where + T: VersionT, +{ + fn deserialize>(deserializer: D) -> Result { + let v = emver::Version::deserialize(deserializer)?; + let version = T::new(); + if &v == version.semver() { + Ok(Wrapper(version)) + } else { + Err(serde::de::Error::custom("Mismatched Version")) + } + } +} +const V0_0_0: emver::Version = emver::Version::new(0, 0, 0, 0); +#[async_trait] +impl VersionT for () { + type Previous = (); + fn new() -> Self { + () + } + fn semver(&self) -> &'static emver::Version { + &V0_0_0 + } + async fn up(&self) -> Result<(), Error> { + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} + +pub async fn init() -> Result<(), failure::Error> { + let _lock = PersistencePath::from_ref("").lock(true).await?; + let vpath = PersistencePath::from_ref("version"); + if let Some(mut f) = vpath.maybe_read(false).await.transpose()? { + let v: Version = crate::util::from_yaml_async_reader(&mut *f).await?; + match v { + Version::V0_0_0(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_1_0(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_1_1(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_1_2(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_1_3(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_1_4(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_1_5(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_2_0(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_2_1(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_2_2(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_2_3(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_2_4(v) => v.0.migrate_to(&Current::new()).await?, + Version::V0_2_5(v) => v.0.migrate_to(&Current::new()).await?, + Version::Other(_) => (), + // TODO find some way to automate this? + } + } else { + ().migrate_to(&Current::new()).await?; + } + Ok(()) +} + +pub async fn self_update(requirement: emver::VersionRange) -> Result<(), Error> { + let req_str: String = format!("{}", requirement) + .chars() + .filter(|c| !c.is_whitespace()) + .collect(); + let url = format!("{}/appmgr?spec={}", &*crate::SYS_REGISTRY_URL, req_str); + log::info!("Fetching new version from {}", url); + let response = reqwest::get(&url) + .await + .with_code(crate::error::NETWORK_ERROR)? + .error_for_status() + .with_code(crate::error::REGISTRY_ERROR)?; + let tmp_appmgr_path = PersistencePath::from_ref("appmgr").tmp(); + if let Some(parent) = tmp_appmgr_path.parent() { + if !parent.exists() { + tokio::fs::create_dir_all(parent) + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + } + } + let mut f = tokio::fs::OpenOptions::new() + .create(true) + .write(true) + .open(&tmp_appmgr_path) + .await + .with_context(|e| format!("{}: {}", tmp_appmgr_path.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + tokio::io::copy( + &mut AsyncCompat( + response + .bytes_stream() + .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + .into_async_read(), + ), + &mut f, + ) + .await + .no_code()?; + drop(f); + crate::ensure_code!( + tokio::process::Command::new("chmod") + .arg("700") + .arg(&tmp_appmgr_path) + .output() + .await? + .status + .success(), + crate::error::FILESYSTEM_ERROR, + "chmod failed" + ); + let out = std::process::Command::new(&tmp_appmgr_path) + .arg("semver") + .stdout(std::process::Stdio::piped()) + .spawn()? + .wait_with_output() + .with_context(|e| format!("{} semver: {}", tmp_appmgr_path.display(), e)) + .no_code()?; + let out_str = std::str::from_utf8(&out.stdout).no_code()?; + log::info!("Migrating to version {}", out_str); + let v: Version = serde_yaml::from_str(out_str) + .with_context(|e| format!("{}: {:?}", e, out_str)) + .with_code(crate::error::SERDE_ERROR)?; + match v { + Version::V0_0_0(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_1_0(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_1_1(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_1_2(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_1_3(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_1_4(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_1_5(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_2_0(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_2_1(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_2_2(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_2_3(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_2_4(v) => Current::new().migrate_to(&v.0).await?, + Version::V0_2_5(v) => Current::new().migrate_to(&v.0).await?, + Version::Other(_) => (), + // TODO find some way to automate this? + }; + let cur_path = std::path::Path::new("/usr/local/bin/appmgr"); + tokio::fs::rename(&tmp_appmgr_path, &cur_path) + .await + .with_context(|e| { + format!( + "{} -> {}: {}", + tmp_appmgr_path.display(), + cur_path.display(), + e + ) + }) + .with_code(crate::error::FILESYSTEM_ERROR)?; + + Ok(()) +} diff --git a/appmgr/src/version/v0_1_0.rs b/appmgr/src/version/v0_1_0.rs new file mode 100644 index 000000000..f2444d928 --- /dev/null +++ b/appmgr/src/version/v0_1_0.rs @@ -0,0 +1,278 @@ +use std::path::Path; + +use super::*; + +const V0_1_0: emver::Version = emver::Version::new(0, 1, 0, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = (); + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_1_0 + } + async fn up(&self) -> Result<(), Error> { + tokio::fs::create_dir_all(Path::new(crate::PERSISTENCE_DIR).join("tor")).await?; + tokio::fs::create_dir_all(Path::new(crate::PERSISTENCE_DIR).join("apps")).await?; + tokio::fs::create_dir_all(Path::new(crate::TMP_DIR).join("tor")).await?; + tokio::fs::create_dir_all(Path::new(crate::TMP_DIR).join("apps")).await?; + let mut outfile = legacy::util::PersistencePath::from_ref("tor/torrc") + .write() + .await?; + tokio::io::copy( + &mut AsyncCompat( + reqwest::get(&format!("{}/torrc?spec==0.0.0", &*crate::SYS_REGISTRY_URL)) + .await + .with_context(|e| format!("GET {}/torrc: {}", &*crate::SYS_REGISTRY_URL, e)) + .with_code(crate::error::NETWORK_ERROR)? + .error_for_status() + .with_context(|e| format!("GET {}/torrc: {}", &*crate::SYS_REGISTRY_URL, e)) + .with_code(crate::error::REGISTRY_ERROR)? + .bytes_stream() + .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + .into_async_read(), + ), + outfile.as_mut(), + ) + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + outfile.commit().await?; + legacy::tor::set_svc( + "start9-agent", + legacy::tor::Service { + ports: vec![5959], + hidden_service_version: Default::default(), + }, + ) + .await + .no_code()?; + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} + +mod legacy { + pub mod tor { + use failure::{Error, ResultExt}; + use linear_map::LinearMap; + use tokio::io::AsyncWriteExt; + + use crate::tor::HiddenServiceVersion; + + use super::util::PersistencePath; + + pub const ETC_TOR_RC: &'static str = "/etc/tor/torrc"; + pub const HIDDEN_SERVICE_DIR_ROOT: &'static str = "/var/lib/tor"; + + #[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] + pub struct Service { + pub ports: Vec, + pub hidden_service_version: HiddenServiceVersion, + } + + async fn services_map(path: &PersistencePath) -> Result, Error> { + use crate::util::Apply; + Ok(path + .maybe_read() + .await + .transpose()? + .map(crate::util::from_yaml_async_reader) + .apply(futures::future::OptionFuture::from) + .await + .transpose()? + .unwrap_or_else(LinearMap::new)) + } + + pub async fn write_services( + hidden_services: &LinearMap, + ) -> Result<(), Error> { + tokio::fs::copy(crate::TOR_RC, ETC_TOR_RC) + .await + .with_context(|e| format!("{} -> {}: {}", crate::TOR_RC, ETC_TOR_RC, e))?; + let mut f = tokio::fs::OpenOptions::new() + .append(true) + .open(ETC_TOR_RC) + .await?; + f.write("\n".as_bytes()).await?; + for (name, service) in hidden_services { + f.write("\n".as_bytes()).await?; + f.write(format!("# HIDDEN SERVICE FOR {}\n", name).as_bytes()) + .await?; + f.write( + format!( + "HiddenServiceDir {}/app-{}/\n", + HIDDEN_SERVICE_DIR_ROOT, name + ) + .as_bytes(), + ) + .await?; + f.write(format!("{}\n", service.hidden_service_version).as_bytes()) + .await?; + for port in &service.ports { + f.write(format!("HiddenServicePort {} 127.0.0.1:{}\n", port, port).as_bytes()) + .await?; + } + f.write("\n".as_bytes()).await?; + } + Ok(()) + } + + pub async fn set_svc(name: &str, service: Service) -> Result<(), Error> { + log::info!( + "Adding Tor hidden service {} to {}.", + name, + crate::SERVICES_YAML + ); + let path = PersistencePath::from_ref(crate::SERVICES_YAML); + let mut hidden_services = services_map(&path).await?; + hidden_services.insert(name.to_owned(), service); + let mut services_yaml = path.write().await?; + crate::util::to_yaml_async_writer(services_yaml.as_mut(), &hidden_services).await?; + services_yaml.write_all("\n".as_bytes()).await?; + services_yaml.commit().await?; + log::info!("Adding Tor hidden service {} to {}.", name, ETC_TOR_RC); + write_services(&hidden_services).await?; + log::info!("Restarting Tor."); + let svc_exit = std::process::Command::new("service") + .args(&["tor", "restart"]) + .status()?; + ensure!( + svc_exit.success(), + "Failed to Restart Tor: {}", + svc_exit.code().unwrap_or(0) + ); + Ok(()) + } + } + + pub mod util { + use std::path::{Path, PathBuf}; + use tokio::fs::File; + + use crate::Error; + use crate::ResultExt as _; + use failure::ResultExt as _; + + #[derive(Clone, Debug)] + pub struct PersistencePath(PathBuf); + impl PersistencePath { + pub fn from_ref>(p: P) -> Self { + let path = p.as_ref(); + PersistencePath(if path.has_root() { + path.strip_prefix("/").unwrap().to_owned() + } else { + path.to_owned() + }) + } + + pub fn tmp(&self) -> PathBuf { + Path::new(crate::TMP_DIR).join(&self.0) + } + + pub fn path(&self) -> PathBuf { + Path::new(crate::PERSISTENCE_DIR).join(&self.0) + } + + pub async fn maybe_read(&self) -> Option> { + let path = self.path(); + if path.exists() { + Some( + File::open(&path) + .await + .with_context(|e| format!("{}: {}", path.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR), + ) + } else { + None + } + } + + pub async fn write(&self) -> Result { + let path = self.path(); + if let Some(parent) = path.parent() { + if !parent.exists() { + tokio::fs::create_dir_all(parent).await?; + } + } + Ok(if path.exists() { + let path = self.tmp(); + if let Some(parent) = path.parent() { + if !parent.exists() { + tokio::fs::create_dir_all(parent).await?; + } + } + PersistenceFile::new(File::create(path).await?, Some(self.clone())) + } else { + PersistenceFile::new(File::create(path).await?, None) + }) + } + } + + #[derive(Debug)] + pub struct PersistenceFile { + file: File, + needs_commit: Option, + } + impl PersistenceFile { + pub fn new(file: File, needs_commit: Option) -> Self { + PersistenceFile { file, needs_commit } + } + /// Commits the file to the persistence directory. + /// If this fails, the file was not saved. + pub async fn commit(mut self) -> Result<(), Error> { + if let Some(path) = self.needs_commit.take() { + tokio::fs::rename(path.tmp(), path.path()) + .await + .with_context(|e| { + format!( + "{} -> {}: {}", + path.tmp().display(), + path.path().display(), + e + ) + }) + .with_code(crate::error::FILESYSTEM_ERROR) + } else { + Ok(()) + } + } + } + impl std::ops::Deref for PersistenceFile { + type Target = File; + + fn deref(&self) -> &Self::Target { + &self.file + } + } + impl std::ops::DerefMut for PersistenceFile { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.file + } + } + impl AsRef for PersistenceFile { + fn as_ref(&self) -> &File { + &*self + } + } + impl AsMut for PersistenceFile { + fn as_mut(&mut self) -> &mut File { + &mut *self + } + } + impl Drop for PersistenceFile { + fn drop(&mut self) { + if let Some(path) = &self.needs_commit { + log::warn!( + "{} was dropped without being committed.", + path.path().display() + ); + } + } + } + } +} diff --git a/appmgr/src/version/v0_1_1.rs b/appmgr/src/version/v0_1_1.rs new file mode 100644 index 000000000..3bc1c8b62 --- /dev/null +++ b/appmgr/src/version/v0_1_1.rs @@ -0,0 +1,202 @@ +use std::path::Path; + +use super::*; + +const V0_1_1: emver::Version = emver::Version::new(0, 1, 1, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_1_0::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_1_1 + } + async fn up(&self) -> Result<(), Error> { + log::info!("Update torrc"); + let mut outfile = crate::util::PersistencePath::from_ref("tor/torrc") + .write(None) + .await?; + tokio::io::copy( + &mut AsyncCompat( + reqwest::get(&format!("{}/torrc?spec==0.1.1", &*crate::SYS_REGISTRY_URL)) + .await + .with_context(|e| format!("GET {}/torrc: {}", &*crate::SYS_REGISTRY_URL, e)) + .with_code(crate::error::NETWORK_ERROR)? + .error_for_status() + .with_context(|e| format!("GET {}/torrc: {}", &*crate::SYS_REGISTRY_URL, e)) + .with_code(crate::error::REGISTRY_ERROR)? + .bytes_stream() + .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + .into_async_read(), + ), + outfile.as_mut(), + ) + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + outfile.commit().await?; + if !std::process::Command::new("docker") + .arg("network") + .arg("create") + .arg("-d") + .arg("bridge") + .arg("--subnet=172.18.0.0/16") + .arg("start9") + .stdout(std::process::Stdio::null()) + .status()? + .success() + { + log::warn!("Failed to Create Network") + } + + match tokio::fs::remove_file(Path::new(crate::PERSISTENCE_DIR).join(crate::SERVICES_YAML)) + .await + { + Ok(_) => Ok(()), + Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(()), + Err(e) => Err(e), + } + .with_context(|e| format!("{}/{}: {}", crate::PERSISTENCE_DIR, crate::SERVICES_YAML, e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + crate::tor::reload().await?; + + for app in crate::apps::list_info().await? { + legacy::update::update(&app.0).await?; + } + + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + let mut outfile = crate::util::PersistencePath::from_ref("tor/torrc") + .write(None) + .await?; + + tokio::io::copy( + &mut AsyncCompat( + reqwest::get(&format!("{}/torrc?spec==0.1.0", &*crate::SYS_REGISTRY_URL)) + .await + .with_context(|e| format!("GET {}/torrc: {}", &*crate::SYS_REGISTRY_URL, e)) + .no_code()? + .error_for_status() + .with_context(|e| format!("GET {}/torrc: {}", &*crate::SYS_REGISTRY_URL, e)) + .no_code()? + .bytes_stream() + .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + .into_async_read(), + ), + outfile.as_mut(), + ) + .await + .with_code(crate::error::FILESYSTEM_ERROR)?; + outfile.commit().await?; + + for app in crate::apps::list_info().await? { + legacy::remove::remove(&app.0, false).await?; + } + let tor_svcs = crate::util::PersistencePath::from_ref(crate::SERVICES_YAML).path(); + if tor_svcs.exists() { + tokio::fs::remove_file(&tor_svcs) + .await + .with_context(|e| format!("{}: {}", tor_svcs.display(), e)) + .with_code(crate::error::FILESYSTEM_ERROR)?; + } + if !std::process::Command::new("docker") + .arg("network") + .arg("rm") + .arg("start9") + .stdout(std::process::Stdio::null()) + .status()? + .success() + { + log::warn!("Failed to Remove Network"); + } + + Ok(()) + } +} + +mod legacy { + pub mod remove { + use std::path::Path; + + use crate::Error; + + pub async fn remove(name: &str, purge: bool) -> Result<(), Error> { + log::info!("Removing app from manifest."); + crate::apps::remove(name).await?; + log::info!("Stopping docker container."); + if !tokio::process::Command::new("docker") + .args(&["stop", name]) + .stdout(std::process::Stdio::null()) + .stderr(match log::max_level() { + log::LevelFilter::Error => std::process::Stdio::null(), + _ => std::process::Stdio::inherit(), + }) + .status() + .await? + .success() + { + log::error!("Failed to Stop Docker Container"); + }; + log::info!("Removing docker container."); + if !tokio::process::Command::new("docker") + .args(&["rm", name]) + .stdout(std::process::Stdio::null()) + .stderr(match log::max_level() { + log::LevelFilter::Error => std::process::Stdio::null(), + _ => std::process::Stdio::inherit(), + }) + .status() + .await? + .success() + { + log::error!("Failed to Remove Docker Container"); + }; + if purge { + log::info!("Removing tor hidden service."); + crate::tor::rm_svc(name).await?; + log::info!("Removing app metadata."); + std::fs::remove_dir_all(Path::new(crate::PERSISTENCE_DIR).join("apps").join(name))?; + log::info!("Destroying mounted volume."); + std::fs::remove_dir_all(Path::new(crate::VOLUMES).join(name))?; + log::info!("Pruning unused docker images."); + crate::ensure_code!( + std::process::Command::new("docker") + .args(&["image", "prune", "-a", "-f"]) + .stdout(std::process::Stdio::null()) + .stderr(match log::max_level() { + log::LevelFilter::Error => std::process::Stdio::null(), + _ => std::process::Stdio::inherit(), + }) + .status()? + .success(), + 3, + "Failed to Prune Docker Images" + ); + }; + + Ok(()) + } + } + pub mod update { + use crate::Error; + pub async fn update(name_version: &str) -> Result<(), Error> { + let name = name_version + .split("@") + .next() + .ok_or_else(|| failure::format_err!("invalid app id"))?; + crate::install::download_name(name_version).await?; + super::remove::remove(name, false).await?; + crate::install::install_name(name_version, true).await?; + let config = crate::apps::config(name).await?; + if let Some(cfg) = config.config { + if config.spec.matches(&cfg).is_ok() { + crate::apps::set_configured(name, true).await?; + } + } + Ok(()) + } + } +} diff --git a/appmgr/src/version/v0_1_2.rs b/appmgr/src/version/v0_1_2.rs new file mode 100644 index 000000000..1f41809dd --- /dev/null +++ b/appmgr/src/version/v0_1_2.rs @@ -0,0 +1,104 @@ +use futures::StreamExt; +use futures::TryStreamExt; +use linear_map::LinearMap; + +use super::*; + +const V0_1_2: emver::Version = emver::Version::new(0, 1, 2, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_1_1::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_1_2 + } + async fn up(&self) -> Result<(), Error> { + let app_info = legacy::apps::list_info().await?; + for (name, _) in &app_info { + let p = PersistencePath::from_ref("apps") + .join(name) + .join("manifest.yaml"); + let mut f = p.for_update().await?; + let manifest: crate::manifest::ManifestV0 = crate::util::from_yaml_async_reader(&mut f) + .await + .no_code()?; + let mut f = f.into_writer().await?; + crate::util::to_yaml_async_writer(&mut f, &crate::manifest::Manifest::V0(manifest)) + .await + .no_code()?; + f.commit().await?; + } + + let p = PersistencePath::from_ref("apps.yaml"); + let exists = p.path().exists(); + let mut f = p.for_update().await?; + let info: LinearMap = if exists { + crate::util::from_yaml_async_reader(&mut f) + .await + .no_code()? + } else { + LinearMap::new() + }; + let new_info: LinearMap = futures::stream::iter(info) + .then(|(name, i)| async move { + let title = crate::apps::manifest(&name).await?.title; + Ok::<_, Error>(( + name, + crate::apps::AppInfo { + title, + version: i.version, + tor_address: i.tor_address, + configured: i.configured, + recoverable: false, + needs_restart: false, + }, + )) + }) + .try_collect() + .await?; + let mut f = f.into_writer().await?; + crate::util::to_yaml_async_writer(&mut f, &new_info) + .await + .no_code()?; + f.commit().await?; + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} + +mod legacy { + pub mod apps { + use linear_map::LinearMap; + + use crate::util::from_yaml_async_reader; + use crate::util::Apply; + use crate::util::PersistencePath; + use crate::Error; + + #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] + pub struct AppInfo { + pub version: emver::Version, + pub tor_address: Option, + pub configured: bool, + } + + pub async fn list_info() -> Result, Error> { + let apps_path = PersistencePath::from_ref("apps.yaml"); + Ok(apps_path + .maybe_read(false) + .await + .transpose()? + .map(|mut f| async move { from_yaml_async_reader(&mut *f).await }) + .apply(futures::future::OptionFuture::from) + .await + .transpose()? + .unwrap_or_else(LinearMap::new)) + } + } +} diff --git a/appmgr/src/version/v0_1_3.rs b/appmgr/src/version/v0_1_3.rs new file mode 100644 index 000000000..2a5084adf --- /dev/null +++ b/appmgr/src/version/v0_1_3.rs @@ -0,0 +1,21 @@ +use super::*; + +const V0_1_3: emver::Version = emver::Version::new(0, 1, 3, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_1_2::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_1_3 + } + async fn up(&self) -> Result<(), Error> { + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} diff --git a/appmgr/src/version/v0_1_4.rs b/appmgr/src/version/v0_1_4.rs new file mode 100644 index 000000000..df302c88c --- /dev/null +++ b/appmgr/src/version/v0_1_4.rs @@ -0,0 +1,21 @@ +use super::*; + +const V0_1_4: emver::Version = emver::Version::new(0, 1, 4, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_1_3::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_1_4 + } + async fn up(&self) -> Result<(), Error> { + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} diff --git a/appmgr/src/version/v0_1_5.rs b/appmgr/src/version/v0_1_5.rs new file mode 100644 index 000000000..5ab455b58 --- /dev/null +++ b/appmgr/src/version/v0_1_5.rs @@ -0,0 +1,21 @@ +use super::*; + +const V0_1_5: emver::Version = emver::Version::new(0, 1, 5, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_1_4::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_1_5 + } + async fn up(&self) -> Result<(), Error> { + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} diff --git a/appmgr/src/version/v0_2_0.rs b/appmgr/src/version/v0_2_0.rs new file mode 100644 index 000000000..db5607fd1 --- /dev/null +++ b/appmgr/src/version/v0_2_0.rs @@ -0,0 +1,98 @@ +use linear_map::LinearMap; + +use super::*; +use crate::util::{to_yaml_async_writer, PersistencePath}; + +const V0_2_0: emver::Version = emver::Version::new(0, 2, 0, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_1_5::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_2_0 + } + async fn up(&self) -> Result<(), Error> { + let app_info: LinearMap = legacy::apps::list_info() + .await? + .into_iter() + .map(|(id, ai)| { + ( + id, + crate::apps::AppInfo { + title: ai.title, + version: ai.version, + tor_address: ai.tor_address, + configured: ai.configured, + recoverable: ai.recoverable, + needs_restart: false, + }, + ) + }) + .collect(); + let mut apps_file = PersistencePath::from_ref("apps.yaml").write(None).await?; + to_yaml_async_writer(&mut *apps_file, &app_info).await?; + apps_file.commit().await?; + + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + let app_info: LinearMap = crate::apps::list_info() + .await? + .into_iter() + .map(|(id, ai)| { + ( + id, + legacy::apps::AppInfo { + title: ai.title, + version: ai.version, + tor_address: ai.tor_address, + configured: ai.configured, + recoverable: ai.recoverable, + }, + ) + }) + .collect(); + let mut apps_file = PersistencePath::from_ref("apps.yaml").write(None).await?; + to_yaml_async_writer(&mut *apps_file, &app_info).await?; + apps_file.commit().await?; + + Ok(()) + } +} + +mod legacy { + pub mod apps { + use linear_map::LinearMap; + + use crate::util::{from_yaml_async_reader, PersistencePath}; + use crate::Error; + + fn not(b: &bool) -> bool { + !b + } + + #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] + pub struct AppInfo { + pub title: String, + pub version: emver::Version, + pub tor_address: Option, + pub configured: bool, + #[serde(default)] + #[serde(skip_serializing_if = "not")] + pub recoverable: bool, + } + + pub async fn list_info() -> Result, Error> { + let apps_path = PersistencePath::from_ref("apps.yaml"); + let mut f = match apps_path.maybe_read(false).await.transpose()? { + Some(a) => a, + None => return Ok(LinearMap::new()), + }; + from_yaml_async_reader(&mut *f).await + } + } +} diff --git a/appmgr/src/version/v0_2_1.rs b/appmgr/src/version/v0_2_1.rs new file mode 100644 index 000000000..e4b8ae954 --- /dev/null +++ b/appmgr/src/version/v0_2_1.rs @@ -0,0 +1,21 @@ +use super::*; + +const V0_2_1: emver::Version = emver::Version::new(0, 2, 1, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_2_0::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_2_1 + } + async fn up(&self) -> Result<(), Error> { + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} diff --git a/appmgr/src/version/v0_2_2.rs b/appmgr/src/version/v0_2_2.rs new file mode 100644 index 000000000..322fc814e --- /dev/null +++ b/appmgr/src/version/v0_2_2.rs @@ -0,0 +1,21 @@ +use super::*; + +const V0_2_2: emver::Version = emver::Version::new(0, 2, 2, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_2_1::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_2_2 + } + async fn up(&self) -> Result<(), Error> { + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} diff --git a/appmgr/src/version/v0_2_3.rs b/appmgr/src/version/v0_2_3.rs new file mode 100644 index 000000000..6be1c670d --- /dev/null +++ b/appmgr/src/version/v0_2_3.rs @@ -0,0 +1,21 @@ +use super::*; + +const V0_2_3: emver::Version = emver::Version::new(0, 2, 3, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_2_2::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_2_3 + } + async fn up(&self) -> Result<(), Error> { + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} diff --git a/appmgr/src/version/v0_2_4.rs b/appmgr/src/version/v0_2_4.rs new file mode 100644 index 000000000..eb8274f52 --- /dev/null +++ b/appmgr/src/version/v0_2_4.rs @@ -0,0 +1,21 @@ +use super::*; + +const V0_2_4: emver::Version = emver::Version::new(0, 2, 4, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_2_3::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_2_4 + } + async fn up(&self) -> Result<(), Error> { + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} diff --git a/appmgr/src/version/v0_2_5.rs b/appmgr/src/version/v0_2_5.rs new file mode 100644 index 000000000..5b127a198 --- /dev/null +++ b/appmgr/src/version/v0_2_5.rs @@ -0,0 +1,21 @@ +use super::*; + +const V0_2_5: emver::Version = emver::Version::new(0, 2, 5, 0); + +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_2_4::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> &'static emver::Version { + &V0_2_5 + } + async fn up(&self) -> Result<(), Error> { + Ok(()) + } + async fn down(&self) -> Result<(), Error> { + Ok(()) + } +} diff --git a/make_image.sh b/make_image.sh new file mode 100644 index 000000000..72f0672c1 --- /dev/null +++ b/make_image.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +>&2 echo "As of 0.2.5, it is not possible to programmatically generate an Embassy image." +>&2 echo "The image must be setup manually by copying over the artifacts, and installing the necessary dependencies." +exit 1 \ No newline at end of file diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 000000000..545596336 --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,33 @@ +# Specifies intentionally untracked files to ignore when using Git +# http://git-scm.com/docs/gitignore + +*~ +*.sw[mnpcod] +.tmp +*.tmp +*.tmp.* +.DS_Store +Thumbs.db +UserInterfaceState.xcuserstate +$RECYCLE.BIN/ + +start9-ambassador +*.tar.gz + +ambassador.tar.gz +*.log +log.txt +npm-debug.log* + +postprocess.js + +/.idea +/.ionic +/.sass-cache +/.sourcemaps +/.vscode +/.gradle +/dist +/out-tsc +/node_modules +/www diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 000000000..a05cb70c4 --- /dev/null +++ b/ui/README.md @@ -0,0 +1,19 @@ +# Embassy UI + +## Setup Instructions + +**Make sure you have git, node, and npm installed** + +`npm i -g @ionic/cli` + +`git clone https://github.com/Start9Labs/embassy-ui.git` + +`cd embassy-ui` + +`npm i` + +`ionic serve` + +## Production Deployment + +`ionic build --prod` diff --git a/ui/angular.json b/ui/angular.json new file mode 100644 index 000000000..1d980b5dc --- /dev/null +++ b/ui/angular.json @@ -0,0 +1,144 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "defaultProject": "app", + "newProjectRoot": "projects", + "projects": { + "app": { + "root": "", + "sourceRoot": "src", + "projectType": "application", + "prefix": "app", + "schematics": {}, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "www", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.json", + "assets": [ + { + "glob": "**/*", + "input": "src/assets", + "output": "assets" + }, + { + "glob": "**/*.svg", + "input": "node_modules/ionicons/dist/ionicons/svg", + "output": "./svg" + } + ], + "styles": [ + { + "input": "src/theme/variables.scss" + }, + { + "input": "src/global.scss" + } + ], + "scripts": [] + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "aot": true, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + } + ] + }, + "ci": { + "progress": false + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "app:build" + }, + "configurations": { + "production": { + "browserTarget": "app:build:production" + }, + "ci": { + "progress": false + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "app:build" + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "tsconfig.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + }, + "ionic-cordova-build": { + "builder": "@ionic/angular-toolkit:cordova-build", + "options": { + "browserTarget": "app:build" + }, + "configurations": { + "production": { + "browserTarget": "app:build:production" + } + } + }, + "ionic-cordova-serve": { + "builder": "@ionic/angular-toolkit:cordova-serve", + "options": { + "cordovaBuildTarget": "app:ionic-cordova-build", + "devServerTarget": "app:serve" + }, + "configurations": { + "production": { + "cordovaBuildTarget": "app:ionic-cordova-build:production", + "devServerTarget": "app:serve:production" + } + } + } + } + } + }, + "cli": { + "defaultCollection": "@ionic/angular-toolkit", + "analytics": false + }, + "schematics": { + "@ionic/angular-toolkit:component": { + "styleext": "scss" + }, + "@ionic/angular-toolkit:page": { + "styleext": "scss" + } + } +} \ No newline at end of file diff --git a/ui/browserslist b/ui/browserslist new file mode 100644 index 000000000..b15c7fae5 --- /dev/null +++ b/ui/browserslist @@ -0,0 +1,12 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 # For IE 9-11 support, remove 'not'. diff --git a/ui/build-send-beta.sh b/ui/build-send-beta.sh new file mode 100755 index 000000000..fbbc147cd --- /dev/null +++ b/ui/build-send-beta.sh @@ -0,0 +1,40 @@ +#!/bin/bash +set -e + +echo "turn off mocks" +echo "$( jq '.useMocks = false' use-mocks.json )" > use-mocks.json + +echo "FILTER: rm -rf www" +rm -rf www + +echo "FILTER: ionic build" +npm run build-prod + +echo "FILTER: cp client-manifest.yaml www" +cp client-manifest.yaml www + +echo "FILTER: git hash" +touch git-hash.txt +git log | head -n1 > git-hash.txt +mv git-hash.txt www + +echo "FILTER: removing mock icons" +rm -rf www/assets/img/service-icons + +echo "FILTER: tar -zcvf ambassador-ui.tar.gz www" +tar -zcvf ambassador-ui.tar.gz www + +SHA_SUM=$(sha1sum ambassador-ui.tar.gz) +echo "${SHA_SUM}" + +echo "Set version" +VERSION=$(jq ".version" package.json) +echo "${VERSION}" + +echo "FILTER: mkdir beta-reg" +ssh root@beta-registry.start9labs.com "mkdir -p /var/www/html/resources/sys/ambassador-ui.tar.gz/${VERSION}" + +echo "FILTER: scp ambassador-ui.tar.gz" +scp ambassador-ui.tar.gz root@beta-registry.start9labs.com:/var/www/html/resources/sys/ambassador-ui.tar.gz/${VERSION}/ambassador-ui.tar.gz + +echo "FILTER: fin" diff --git a/ui/build-send.sh b/ui/build-send.sh new file mode 100755 index 000000000..5f31a0b73 --- /dev/null +++ b/ui/build-send.sh @@ -0,0 +1,38 @@ +#!/bin/bash +set -e + +#echo "turn off mocks" +#echo "$( jq '.useMocks = false' use-mocks.json )" > use-mocks.json + +echo "FILTER: rm -rf www" +rm -rf www + +echo "FILTER: ionic build" +npm run build-prod + +echo "FILTER: cp client-manifest.yaml www" +cp client-manifest.yaml www + +echo "FILTER: git hash" +touch git-hash.txt +git log | head -n1 > git-hash.txt +mv git-hash.txt www + +echo "FILTER: ssh + rm -rf /var/www/html/start9-ambassador/" +ssh root@start9-$1.local "rm -rf /var/www/html/start9-ambassador" + +echo "FILTER: tar -zcvf ambassador.tar.gz www" +rm -rf start9-ambassador +mv www start9-ambassador +tar -zcvf ambassador.tar.gz start9-ambassador + +echo "FILTER: scp ambassador.tar.gz root@start9-def09913.local:/root" +scp ambassador.tar.gz root@start9-$1.local:/root/agent + +echo "FILTER: ssh root@start9-$1.local:/root 1" +ssh root@start9-$1.local "cd /root/agent && tar -C /var/www/html/ -xvf ambassador.tar.gz" + +echo "FILTER: ssh root@start9-$1.local:/root 2" +ssh root@start9-$1.local "systemctl restart nginx" + +echo "FILTER: fin" diff --git a/ui/client-manifest.yaml b/ui/client-manifest.yaml new file mode 100644 index 000000000..c9b087b52 --- /dev/null +++ b/ui/client-manifest.yaml @@ -0,0 +1,117 @@ +manifest-version: 0 +app-id: start9-ambassador +app-version: 0.2.5 +uri-rewrites: + - =/api -> http://{{start9-ambassador}}:5959/authenticate + - /api/ -> http://{{start9-ambassador}}:5959/ +main-is: index.html +error-pages: + 404: index.html +mime-types: + wasm: application/wasm + bin: application/octet-stream + json: application/json + html: text/html + htm: text/html + shtml: text/html + css: text/css + xml: text/xml + gif: image/gif + jpeg: image/jpeg + jpg: image/jpeg + js: application/javascript + atom: application/atom+xml + rss: application/rss+xml + mml: text/mathml + txt: text/plain + jad: text/vnd.sun.j2me.app-descriptor + wml: text/vnd.wap.wml + htc: text/x-component + png: image/png + tif: image/tiff + tiff: image/tiff + wbmp: image/vnd.wap.wbmp + ico: image/x-icon + jng: image/x-jng + bmp: image/x-ms-bmp + svg: image/svg+xml + svgz: image/svg+xml + webp: image/webp + woff: application/font-woff + jar: application/java-archive + war: application/java-archive + ear: application/java-archive + json: application/json + hqx: application/mac-binhex40 + doc: application/msword + pdf: application/pdf + ps: application/postscript + eps: application/postscript + ai: application/postscript + rtf: application/rtf + m3u8: application/vnd.apple.mpegur + xls: application/vnd.ms-exce + eot: application/vnd.ms-fontobjec + ppt: application/vnd.ms-powerpoin + wmlc: application/vnd.wap.wml + kml: application/vnd.google-earth.kml+xm + kmz: application/vnd.google-earth.km + 7z: application/x-7z-compresse + cco: application/x-cocoa + jardiff: application/x-java-archive-diff + jnlp: application/x-java-jnlp-file + run: application/x-makesel + pl: application/x-perl + pm: application/x-perl + prc: application/x-pilot + pdb: application/x-pilot + rar: application/x-rar-compressed + rpm: application/x-redhat-package-manager + sea: application/x-sea + swf: application/x-shockwave-flash + sit: application/x-stuffit + tk: application/x-tcl + tcl: application/x-tcl + der: application/x-x509-ca-cert + pem: application/x-x509-ca-cert + crt: application/x-x509-ca-cert + xpi: application/x-xpinstall + xhtml: application/xhtml+xml + xspf: application/xspf+xml + zip: application/zip + bin: application/octet-stream + exe: application/octet-stream + dll: application/octet-stream + deb: application/octet-stream + dmg: application/octet-stream + iso: application/octet-stream + img: application/octet-stream + msi: application/octet-stream + msp: application/octet-stream + msm: application/octet-stream + docx: application/vnd.openxmlformats-officedocument.wordprocessingml.document + xlsx: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + pptx: application/vnd.openxmlformats-officedocument.presentationml.presentation + mid: audio/mid + kar: audio/mid + midi: audio/mid + mp3: audio/mpe + ogg: audio/og + m4a: audio/x-m4 + ra: audio/x-realaudio + 3gpp: video/3gp + 3gp: video/3gp + ts: video/mp2 + mp4: video/mp + mpeg: video/mpe + mpg: video/mpe + mov: video/quicktime + webm: video/web + flv: video/x-fl + m4v: video/x-m4 + mng: video/x-mn + asx: video/x-ms-asf + asf: video/x-ms-asf + wmv: video/x-ms-wmv + avi: video/x-msvideo +mime-default: text/plain diff --git a/ui/ionic.config.json b/ui/ionic.config.json new file mode 100644 index 000000000..58dfd88ad --- /dev/null +++ b/ui/ionic.config.json @@ -0,0 +1,5 @@ +{ + "name": "Embassy", + "integrations": {}, + "type": "angular" +} \ No newline at end of file diff --git a/ui/package-lock.json b/ui/package-lock.json new file mode 100644 index 000000000..ee4c3bfb0 --- /dev/null +++ b/ui/package-lock.json @@ -0,0 +1,13885 @@ +{ + "name": "embassy-ui", + "version": "0.2.5", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.1002.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.0.tgz", + "integrity": "sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w==", + "dev": true, + "requires": { + "@angular-devkit/core": "10.2.0", + "rxjs": "6.6.2" + }, + "dependencies": { + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/build-angular": { + "version": "0.1002.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1002.0.tgz", + "integrity": "sha512-cPkdp1GceokGHc79Wg0hACMqqmnJ4W3H9kY4c9qp1Xz18b3vk1aq09JNawOpfUN09S9vBCnn4glg22lRyqmJNA==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1002.0", + "@angular-devkit/build-optimizer": "0.1002.0", + "@angular-devkit/build-webpack": "0.1002.0", + "@angular-devkit/core": "10.2.0", + "@babel/core": "7.11.1", + "@babel/generator": "7.11.0", + "@babel/plugin-transform-runtime": "7.11.0", + "@babel/preset-env": "7.11.0", + "@babel/runtime": "7.11.2", + "@babel/template": "7.10.4", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@ngtools/webpack": "10.2.0", + "autoprefixer": "9.8.6", + "babel-loader": "8.1.0", + "browserslist": "^4.9.1", + "cacache": "15.0.5", + "caniuse-lite": "^1.0.30001032", + "circular-dependency-plugin": "5.2.0", + "copy-webpack-plugin": "6.0.3", + "core-js": "3.6.4", + "css-loader": "4.2.2", + "cssnano": "4.1.10", + "file-loader": "6.0.0", + "find-cache-dir": "3.3.1", + "glob": "7.1.6", + "jest-worker": "26.3.0", + "karma-source-map-support": "1.4.0", + "less-loader": "6.2.0", + "license-webpack-plugin": "2.3.0", + "loader-utils": "2.0.0", + "mini-css-extract-plugin": "0.10.0", + "minimatch": "3.0.4", + "open": "7.2.0", + "parse5": "6.0.1", + "parse5-htmlparser2-tree-adapter": "6.0.1", + "pnp-webpack-plugin": "1.6.4", + "postcss": "7.0.32", + "postcss-import": "12.0.1", + "postcss-loader": "3.0.0", + "raw-loader": "4.0.1", + "regenerator-runtime": "0.13.7", + "resolve-url-loader": "3.1.2", + "rimraf": "3.0.2", + "rollup": "2.26.5", + "rxjs": "6.6.2", + "sass": "1.26.10", + "sass-loader": "10.0.1", + "semver": "7.3.2", + "source-map": "0.7.3", + "source-map-loader": "1.0.2", + "source-map-support": "0.5.19", + "speed-measure-webpack-plugin": "1.3.3", + "style-loader": "1.2.1", + "stylus": "0.54.8", + "stylus-loader": "3.0.2", + "terser": "5.3.0", + "terser-webpack-plugin": "4.1.0", + "tree-kill": "1.2.2", + "webpack": "4.44.1", + "webpack-dev-middleware": "3.7.2", + "webpack-dev-server": "3.11.0", + "webpack-merge": "4.2.2", + "webpack-sources": "1.4.3", + "webpack-subresource-integrity": "1.4.1", + "worker-plugin": "5.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==", + "dev": true + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/build-optimizer": { + "version": "0.1002.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1002.0.tgz", + "integrity": "sha512-ACnm9doPMbRtSy1UZN5ir7smeLMx0g0oW7jX3jyPepeQKZ+9U1Bn09t10NLZQH+Z509jWZgvNJH/aOh85P6euw==", + "dev": true, + "requires": { + "loader-utils": "2.0.0", + "source-map": "0.7.3", + "tslib": "2.0.1", + "typescript": "4.0.2", + "webpack-sources": "1.4.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "dev": true + }, + "typescript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", + "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", + "dev": true + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1002.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1002.0.tgz", + "integrity": "sha512-TLBBQ6ANOLKXOPxpCOnxAtoknwHA7XhsLuueN06w5qqF+QNNbWUMPoieKFGs2TnotfCgbiq6x57IDEZTyT6V0w==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1002.0", + "@angular-devkit/core": "10.2.0", + "rxjs": "6.6.2" + }, + "dependencies": { + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/core": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.0.tgz", + "integrity": "sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.1.7.tgz", + "integrity": "sha512-nk9RXA09b+7uq59HS/gyztNzUGHH/eQAUQhWHdDYSCG6v1lhJVCKx1HgDPELVxmeq9f+HArkAW7Y7c+ccdNQ7A==", + "dev": true, + "requires": { + "@angular-devkit/core": "10.1.7", + "ora": "5.0.0", + "rxjs": "6.6.2" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular/cli": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.1.7.tgz", + "integrity": "sha512-0tbeHnPIzSV/z+KlZT7N2J1yMnwQi4xIxvbsANrLjoAxNssse84i9BDdMZYsPoV8wbzcDhFOtt5KmfTO0GIeYQ==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1001.7", + "@angular-devkit/core": "10.1.7", + "@angular-devkit/schematics": "10.1.7", + "@schematics/angular": "10.1.7", + "@schematics/update": "0.1001.7", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "4.1.1", + "ini": "1.3.5", + "inquirer": "7.3.3", + "npm-package-arg": "8.0.1", + "npm-pick-manifest": "6.1.0", + "open": "7.2.0", + "pacote": "9.5.12", + "read-package-tree": "5.3.1", + "rimraf": "3.0.2", + "semver": "7.3.2", + "symbol-observable": "1.2.0", + "universal-analytics": "0.4.23", + "uuid": "8.3.0" + }, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.1001.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1001.7.tgz", + "integrity": "sha512-uFYIvMdewU44GbIyRfsUHNMLkx+C0kokpnj7eH5NbJfbyFpCfd3ijBHh+voPdPsDRWs9lLgjbxfHpswSPj4D8w==", + "dev": true, + "requires": { + "@angular-devkit/core": "10.1.7", + "rxjs": "6.6.2" + } + }, + "@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "open": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.2.0.tgz", + "integrity": "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "uuid": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", + "dev": true + } + } + }, + "@angular/common": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-10.1.6.tgz", + "integrity": "sha512-4ywlUHHF5ofZRTHJ/jQTHoO8Tu05Wvn+3N7swaJ9yAfiywbSE4Bop6FYsocxaxROrGS0k6Unvgj8+J7x6AeqlA==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/compiler": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.1.6.tgz", + "integrity": "sha512-LynYIrzSV+7pVcY5a3N3mCtyZ2eMKzIk1iKLI76w4PHfJBTpBuv8L8aSy/kmnaPwCT/YM/657DMMy2A4HwU5nw==", + "dev": true, + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/compiler-cli": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.1.6.tgz", + "integrity": "sha512-FPb/9E4HEhFWlCPf85xtmgXDmnD+iTtfjPATEMERRY0/si1Or9JeFya2VLdWldOmBQYqnvxc9o/rpdNkpT8TYA==", + "dev": true, + "requires": { + "canonical-path": "1.0.0", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.7.2", + "fs-extra": "4.0.2", + "magic-string": "^0.25.0", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "semver": "^6.3.0", + "source-map": "^0.6.1", + "sourcemap-codec": "^1.4.8", + "tslib": "^2.0.0", + "yargs": "15.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", + "integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.0" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@angular/core": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.1.6.tgz", + "integrity": "sha512-sUleQouCedT87VOCb49T7cm6La2VeJg1omtO5+QfjWmifNcQ/nqV56Zxov3RT7CmsVwVbkA0X5Q62oSEPAUXrw==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/forms": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.1.6.tgz", + "integrity": "sha512-sTPnwL0r7lniv2/XU4nK3eU9osGpGD4YdJ0qLsXfR/ku4mhgbKk/taVBTmAdQwWBUOOafzU1yG9asvsm8H1Kbw==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/language-service": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-10.1.6.tgz", + "integrity": "sha512-lxZHL4RGjir6acj0eF7xihIXWtRg/Z4Y+PMX7fKEI66hc1sLxH+AKkZKG6yr+rrJK2DcakC8Izz/BO+BS2ELjw==", + "dev": true + }, + "@angular/platform-browser": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.1.6.tgz", + "integrity": "sha512-kN2ik35eBqFWNmKPRkZbp5qHkhNINf3PudFUy9ii8kP01OL+Nyrn0MBisIHl3sf+KOV8sf9dMQGPOyQDz22wig==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.1.6.tgz", + "integrity": "sha512-MOdaLnbAXVruYpV0Q5CXLb/fP6xHxWzjRhAh7sLaIIu/TnhTSZpxgxZxBx05hvzP4rH/7S2XvAiuQQomevCIXQ==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/router": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-10.1.6.tgz", + "integrity": "sha512-MV8kSDhboFRH23MnrQvNGHncMb4nkdJDwS108p7oNZjjDkUUR3A5TMWmmN/3BRnue6JoPRWBCPyb53cA21schQ==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", + "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==", + "dev": true + }, + "@babel/core": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", + "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.1", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.0", + "@babel/types": "^7.11.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", + "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.1", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.12.0", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", + "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", + "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", + "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", + "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helpers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", + "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", + "dev": true, + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz", + "integrity": "sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", + "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", + "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", + "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.11.0", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", + "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.1", + "@babel/types": "^7.12.1", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@ionic/angular": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.4.0.tgz", + "integrity": "sha512-FpAdtPfN8TgXwkkk+zG1h1QZBkyVhOjlbyMXLO2G8Z67q7eKao0AAE22BjzhKO9STGDlzPViEpzG4QZMPYih8g==", + "requires": { + "@ionic/core": "5.4.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@ionic/angular-toolkit": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@ionic/angular-toolkit/-/angular-toolkit-2.3.3.tgz", + "integrity": "sha512-r87mApDLWbLaUtd5LvNHrRlZWxjQhaBBM1yPlk9M98dHOxcX3jy7kv60ZurGZutuvbhXISGvHcvvR90yywDC1A==", + "dev": true, + "requires": { + "@schematics/angular": ">=8.0.0", + "cheerio": "1.0.0-rc.3", + "colorette": "1.1.0", + "copy-webpack-plugin": "^6.0.3", + "tslib": "^1.9.0", + "ws": "^7.0.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "ws": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", + "dev": true + } + } + }, + "@ionic/cli-framework": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@ionic/cli-framework/-/cli-framework-5.0.6.tgz", + "integrity": "sha512-CygkCCn+O3vMmt+l5y+evmcBHBI/HVr+QWQVca84ooM2lrLzIQDRC+iZ5RKOnF+eCcywGZ6a68FvXoWAvQzfmw==", + "dev": true, + "requires": { + "@ionic/cli-framework-output": "2.2.2", + "@ionic/utils-array": "2.1.5", + "@ionic/utils-fs": "3.1.5", + "@ionic/utils-object": "2.1.5", + "@ionic/utils-process": "2.1.8", + "@ionic/utils-stream": "3.1.5", + "@ionic/utils-subprocess": "2.1.8", + "@ionic/utils-terminal": "2.3.1", + "chalk": "^4.0.0", + "debug": "^4.0.0", + "lodash": "^4.17.5", + "minimist": "^1.2.0", + "rimraf": "^3.0.0", + "tslib": "^2.0.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@ionic/cli-framework-output": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.2.tgz", + "integrity": "sha512-eQYkqIW1/tCwSC6Bd0gjse96U11lDX/ikf3jvsjX7a8z/zwSmGzCHRizb7xogV65Ey+1/zyAZR71cpDRQuFLBQ==", + "dev": true, + "requires": { + "@ionic/utils-terminal": "2.3.1", + "debug": "^4.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/core": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.4.0.tgz", + "integrity": "sha512-VmAqWWNozVDms2tA0I0fiqgu1tRdh58uhxwM8+xOVjIy8yoJmFxc5/glg4XIrbsYRfb347UICFx75Eh464zJJw==", + "requires": { + "ionicons": "^5.1.2", + "tslib": "^1.10.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@ionic/lab": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@ionic/lab/-/lab-3.2.9.tgz", + "integrity": "sha512-+0fzd3SZ+4dZOaVHNAbhN/2R5pDqJnQLitVgkAFp4gMpyjkIW3enBMpXBLnOaqGhUABUF1Qve7qT+ySQBP8yTA==", + "dev": true, + "requires": { + "@ionic/cli-framework": "5.0.6", + "@ionic/utils-fs": "3.1.5", + "chalk": "^4.0.0", + "express": "^4.16.2", + "tslib": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@ionic/storage": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ionic/storage/-/storage-2.2.0.tgz", + "integrity": "sha512-2pszrzmI+fAar2Rx0WmJDVpc15D1k5tvLkB49NLYWJ2pOMaO/3/vp7mg/mEbg3rdsPE9FRbYI6vdKjQ2pP1EWA==", + "requires": { + "localforage": "1.7.1", + "localforage-cordovasqlitedriver": "1.7.0", + "tslib": "^1.7.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@ionic/utils-array": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz", + "integrity": "sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-fs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.5.tgz", + "integrity": "sha512-a41bY2dHqWSEQQ/80CpbXSs8McyiCFf2DnIWWLukrhYWf46h4qi6M/8dxcMKrofRiqI/3F+cL3S2mOm9Zz/o2Q==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "fs-extra": "^9.0.0", + "tslib": "^2.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + } + } + }, + "@ionic/utils-object": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz", + "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-process": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.8.tgz", + "integrity": "sha512-VBBoyTzi+m6tgKAItl+jiTQneGwTOsctcrTG4CsEgmVOVOEhUYkPhddXqzD+oC54hPDU9ROsd3I014P5CWEuhQ==", + "dev": true, + "requires": { + "@ionic/utils-object": "2.1.5", + "@ionic/utils-terminal": "2.3.1", + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "tree-kill": "^1.2.2", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-stream": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.5.tgz", + "integrity": "sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + } + }, + "@ionic/utils-subprocess": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.8.tgz", + "integrity": "sha512-pkmtf1LtXcEMPn6/cctREL2aZtZoy0+0Sl+nT0NIkOHIoBUcqrcfMWdctCSM4Mp6+2/hLWtgpHE3TOIibkWfIg==", + "dev": true, + "requires": { + "@ionic/utils-array": "2.1.5", + "@ionic/utils-fs": "3.1.5", + "@ionic/utils-process": "2.1.8", + "@ionic/utils-stream": "3.1.5", + "@ionic/utils-terminal": "2.3.1", + "cross-spawn": "^7.0.0", + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@ionic/utils-terminal": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.1.tgz", + "integrity": "sha512-cglsSd2AckI3Ldtdfczeq64vIIDjtPspV5QJtky8f8uIdxkeOIGeRV7bCj1+BEf1hyo+ZuggQxLviHnbMZhiRw==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "slice-ansi": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "tslib": "^2.0.1", + "untildify": "^4.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true + }, + "@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "dev": true, + "requires": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "@ngtools/webpack": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.2.0.tgz", + "integrity": "sha512-W4SSFNQhIiC8JRhIn3c4mb1+fsFKiHp+THVMAUNo+wRZEt/rgzsCdnqv0EmQJJojZhnilUIyB/wVYJu2+S/Bxg==", + "dev": true, + "requires": { + "@angular-devkit/core": "10.2.0", + "enhanced-resolve": "4.3.0", + "webpack-sources": "1.4.3" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@npmcli/move-file": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", + "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "@schematics/angular": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-10.1.7.tgz", + "integrity": "sha512-jcyLWDSbpgHvB/BNVSsV4uLJpC2qRx9Z5+rcQpBB1BerqIPS/1cTQg7TViHZtcqnZqWvzHR3jfqzDUSOCZpuJQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "10.1.7", + "@angular-devkit/schematics": "10.1.7", + "jsonc-parser": "2.3.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@schematics/update": { + "version": "0.1001.7", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1001.7.tgz", + "integrity": "sha512-q7g/9YaAiqyWxYmUXiSWxB9xwc30xL5iUWY3Rp2LXSH6ihaRsLabmNr743R2YQmMj2Ss+9OhILHmj7nMmqODgw==", + "dev": true, + "requires": { + "@angular-devkit/core": "10.1.7", + "@angular-devkit/schematics": "10.1.7", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "npm-package-arg": "^8.0.0", + "pacote": "9.5.12", + "semver": "7.3.2", + "semver-intersect": "1.4.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@start9labs/ambassador-sdk": { + "version": "file:../ambassador-sdk", + "requires": { + "ts-transformer-keys": "^0.4.1", + "uuid": "^8.0.0" + }, + "dependencies": { + "@types/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-PUdqTZVrNYTNcIhLHkiaYzoOIaUi5LFg/XLerAdgvwQrUCx+oSbtoBze1AMyvYbcwzUSNC+Isl58SM4Sm/6COw==" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "ts-transformer-keys": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/ts-transformer-keys/-/ts-transformer-keys-0.4.1.tgz", + "integrity": "sha512-CahLCOHt6MS8Sixz5cU8XovuKOoP6hnQd91pxG3a7iuuLsdrbWLveQvKi7d/FJjRhEtVELp3bMnqvSpm+nCgKw==" + }, + "ttypescript": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/ttypescript/-/ttypescript-1.5.10.tgz", + "integrity": "sha512-Hk7TRej1hM+p+Fo+Pyb/XK9pe9CAt3Sh5n5YRutxFS8hUgkh2u1Vd2K40kMcNP3WYhiVFBMqXwM/2E8O95Ep6g==", + "requires": { + "resolve": "^1.9.0" + } + }, + "typescript": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==" + }, + "uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==" + } + } + }, + "@start9labs/emver": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@start9labs/emver/-/emver-0.1.1.tgz", + "integrity": "sha512-UvholOAhRBATB/mSoovCqxZrZ/tEzIXOtGt5fEyKWiJp35cRTiku/XwI+MKY+TVJdqFPLqgPtwUQW6FqVhJUCw==" + }, + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" + } + }, + "@types/elliptic": { + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.12.tgz", + "integrity": "sha512-gP1KsqoouLJGH6IJa28x7PXb3cRqh83X8HCLezd2dF+XcAIMKYv53KV+9Zn6QA561E120uOqZBQ+Jy/cl+fviw==", + "requires": { + "@types/bn.js": "*" + } + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/json-pointer": { + "version": "1.0.30", + "resolved": "https://registry.npmjs.org/@types/json-pointer/-/json-pointer-1.0.30.tgz", + "integrity": "sha1-uXPB95sfYdQkt9krlU4B5saO5m0=", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "@types/marked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-1.1.0.tgz", + "integrity": "sha512-j8XXj6/l9kFvCwMyVqozznqpd/nk80krrW+QiIJN60Uu9gX5Pvn4/qPJ2YngQrR3QREPwmrE1f9/EWKVTFzoEw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "14.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz", + "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==" + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/uuid": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", + "dev": true + }, + "@types/webpack-sources": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz", + "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "angularx-qrcode": { + "version": "10.0.11", + "resolved": "https://registry.npmjs.org/angularx-qrcode/-/angularx-qrcode-10.0.11.tgz", + "integrity": "sha512-sbtqdqAboEFNoyxgG4FQYPZDzwX9TlICT2mLpsC/Se3OuT+HntW56q8E/i1BL1fJhx7zt0JJR7bc7LfofUeAlQ==", + "requires": { + "qrcode": "1.4.2", + "tslib": "^2.0.0" + } + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", + "dev": true + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base32.js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz", + "integrity": "sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=" + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bip174": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.0.1.tgz", + "integrity": "sha512-i3X26uKJOkDTAalYAp0Er+qGMDhrbbh2o93/xiPyAN2s25KrClSpe3VXo/7mNJoqA5qfko8rLS2l3RWZgYmjKQ==" + }, + "bip32": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz", + "integrity": "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==", + "requires": { + "@types/node": "10.12.18", + "bs58check": "^2.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "tiny-secp256k1": "^1.1.3", + "typeforce": "^1.11.5", + "wif": "^2.0.6" + }, + "dependencies": { + "@types/node": { + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + } + } + }, + "bip39": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.2.tgz", + "integrity": "sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==", + "requires": { + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" + }, + "dependencies": { + "@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" + } + } + }, + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bitcoin-ops": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", + "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" + }, + "bitcoinjs-lib": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.2.0.tgz", + "integrity": "sha512-5DcLxGUDejgNBYcieMIUfjORtUeNWl828VWLHJGVKZCb4zIS1oOySTUr0LGmcqJBQgTBz3bGbRQla4FgrdQEIQ==", + "requires": { + "bech32": "^1.1.2", + "bip174": "^2.0.1", + "bip32": "^2.0.4", + "bip66": "^1.1.0", + "bitcoin-ops": "^1.4.0", + "bs58check": "^2.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.3", + "merkle-lib": "^2.0.10", + "pushdata-bitcoin": "^1.0.1", + "randombytes": "^2.0.1", + "tiny-secp256k1": "^1.1.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.0.4", + "wif": "^2.0.1" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "dev": true, + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001150", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001150.tgz", + "integrity": "sha512-kiNKvihW0m36UhAFnl7bOAv0i1K1f6wpfVtTF5O5O82XzgtBnb05V0XeV3oZ968vfg2sRNChsHw8ASH2hDfoYQ==", + "dev": true + }, + "canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "dependencies": { + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + } + } + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-dependency-plugin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz", + "integrity": "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", + "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", + "integrity": "sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "requires": { + "arity-n": "^1.0.4" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz", + "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==", + "dev": true, + "requires": { + "cacache": "^15.0.4", + "fast-glob": "^3.2.4", + "find-cache-dir": "^3.3.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.1", + "schema-utils": "^2.7.0", + "serialize-javascript": "^4.0.0", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "cacache": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "dev": true, + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" + }, + "core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "dev": true, + "requires": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.2.2.tgz", + "integrity": "sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^2.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.3", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^7.3.2" + }, + "dependencies": { + "camelcase": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", + "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", + "dev": true + } + } + }, + "css-parse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", + "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "dev": true, + "requires": { + "css": "^2.0.0" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "dev": true, + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "dev": true + } + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dijkstrajs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", + "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", + "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.583", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.583.tgz", + "integrity": "sha512-L9BwLwJohjZW9mQESI79HRzhicPk1DFgM+8hOCfGgGCFEcA3Otpv7QK6SGtYoZvfQfE3wKLh0Hd5ptqUFv3gvQ==", + "dev": true + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-loader": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", + "integrity": "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.5" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-extra": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", + "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "handlebars": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", + "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ionicons": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-5.2.3.tgz", + "integrity": "sha512-87qtgBkieKVFagwYA9Cf91B3PCahQbEOMwMt8bSvlQSgflZ4eE5qI4MGj2ZlIyadeX0dgo+0CzZsy3ow0CsBAg==" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", + "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "jest-worker": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", + "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-pointer": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.1.tgz", + "integrity": "sha512-3OvjqKdCBvH41DLpV4iSt6v2XhZXV1bPB4OROuknvUXI7ZQNofieCPkmE26stEJ9zdQuvIxDHCuYhfgxFAAs+Q==", + "requires": { + "foreach": "^2.0.4" + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonc-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.0.tgz", + "integrity": "sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsonpointerx": { + "version": "1.0.30", + "resolved": "https://registry.npmjs.org/jsonpointerx/-/jsonpointerx-1.0.30.tgz", + "integrity": "sha512-nEyQ2/CntckMpxK4ZTDOO3NmuRmxYTT5qnwnxoYKHZon1aa4TtEzLXF3FDVIH8Ra15zoKaNVmff1O3jcSlEKqA==" + }, + "jsontokens": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsontokens/-/jsontokens-3.0.0.tgz", + "integrity": "sha512-P0QZC5AjOkn3t1ej6OuI7+XqoEctYj83UK4pw0WpHY4/z6a5PpZCJSpp5NZodq94GFkw2PfB9DPFoDM5qpyp/g==", + "requires": { + "@types/elliptic": "^6.4.9", + "asn1.js": "^5.0.1", + "base64url": "^3.0.1", + "ecdsa-sig-formatter": "^1.0.11", + "elliptic": "^6.4.1", + "sha.js": "^2.4.11" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, + "less": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", + "integrity": "sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==", + "dev": true, + "requires": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "native-request": "^1.0.5", + "source-map": "~0.6.0", + "tslib": "^1.10.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "less-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.2.0.tgz", + "integrity": "sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg==", + "dev": true, + "requires": { + "clone": "^2.1.2", + "less": "^3.11.3", + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, + "license-webpack-plugin": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-JK/DXrtN6UeYQSgkg5q1+pgJ8aiKPL9tnz9Wzw+Ikkf+8mJxG56x6t8O+OH/tAeF/5NREnelTEMyFtbJNkjH4w==", + "dev": true, + "requires": { + "@types/webpack-sources": "^0.1.5", + "webpack-sources": "^1.2.0" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "~3.0.5" + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "localforage": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.1.tgz", + "integrity": "sha1-5JJ+BCMCuGTbMPMhHxO1xvDell0=", + "requires": { + "lie": "3.1.1" + } + }, + "localforage-cordovasqlitedriver": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/localforage-cordovasqlitedriver/-/localforage-cordovasqlitedriver-1.7.0.tgz", + "integrity": "sha1-i5OVd1nuaI06WNW6fAR39sy1ODg=", + "requires": { + "localforage": ">=1.5.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "loglevel": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "make-fetch-happen": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", + "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + }, + "dependencies": { + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "marked": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.0.tgz", + "integrity": "sha512-tiRxakgbNPBr301ihe/785NntvYyhxlqcL3YaC8CaxJQh7kiaEtrN9B/eK2I2943Yjkh5gw25chYFDQhOMCwMA==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "merkle-lib": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz", + "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz", + "integrity": "sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-request": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", + "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", + "dev": true, + "optional": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch-npm": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", + "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-html-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.3.1.tgz", + "integrity": "sha512-AwYVI6GyEKj9NGoyMfSx4j5l7Axf7obQgLWGxtasLjED6RggTTQoq5ZRzjwSUfgSZ+Mv8Nzbi3pID0gFGqNUsA==", + "dev": true, + "requires": { + "he": "1.2.0" + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.64", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", + "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.0.1.tgz", + "integrity": "sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ==", + "dev": true, + "requires": { + "hosted-git-info": "^3.0.2", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz", + "integrity": "sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.0.0", + "semver": "^7.0.0" + } + }, + "npm-registry-fetch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", + "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "dev": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-is": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", + "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.2.0.tgz", + "integrity": "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } + } + }, + "ora": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.0.0.tgz", + "integrity": "sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.4.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pacote": { + "version": "9.5.12", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", + "integrity": "sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-normalize-package-bin": "^1.0.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^3.0.0", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "dev": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-pick-manifest": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", + "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-import": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + } + } + }, + "protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "dev": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pushdata-bitcoin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", + "integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=", + "requires": { + "bitcoin-ops": "^1.3.0" + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qrcode": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.2.tgz", + "integrity": "sha512-eR6RgxFYPDFH+zFLTJKtoNP/RlsHANQb52AUmQ2bGDPMuUw7jJb0F+DNEgx7qQGIElrbFxWYMc0/B91zLZPF9Q==", + "requires": { + "dijkstrajs": "^1.0.1", + "isarray": "^2.0.1", + "pngjs": "^3.3.0", + "yargs": "^13.2.4" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "raw-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.1.tgz", + "integrity": "sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.5" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "dev": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "dev": true, + "requires": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", + "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "3.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rollup": { + "version": "2.26.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.5.tgz", + "integrity": "sha512-rCyFG3ZtQdnn9YwfuAVH0l/Om34BdO5lwCA0W6Hq+bNB21dVEBbCRxhaHOmu1G7OBFDWytbzAC104u7rxHwGjA==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass": { + "version": "1.26.10", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz", + "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.1.tgz", + "integrity": "sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ==", + "dev": true, + "requires": { + "klona": "^2.0.3", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^2.7.0", + "semver": "^7.3.2" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "semver-intersect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", + "dev": true, + "requires": { + "semver": "^5.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + } + } + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "socks": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "dev": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-loader": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.2.tgz", + "integrity": "sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw==", + "dev": true, + "requires": { + "data-urls": "^2.0.0", + "iconv-lite": "^0.6.2", + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0", + "source-map": "^0.6.1" + } + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "speed-measure-webpack-plugin": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz", + "integrity": "sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", + "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "style-loader": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", + "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.6" + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "stylus": { + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "dev": true, + "requires": { + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.3.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "stylus-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", + "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "when": "~3.6.x" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "terser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.0.tgz", + "integrity": "sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-0ZWDPIP8BtEDZdChbufcXUigOYk6dOX/P/X0hWxqDDcVAQLb8Yy/0FAaemSfax3PAA67+DJR778oz8qVbmy4hA==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.3.0", + "p-limit": "^3.0.2", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^5.0.0", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tiny-secp256k1": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.5.tgz", + "integrity": "sha512-duE2hSLSQIpHGzmK48OgRrGTi+4OTkXLC6aa86uOYQ6LLCYZSarVKIAvEtY7MoXjoL6bOXMSerEGMzrvW4SkDw==", + "requires": { + "bindings": "^1.3.0", + "bn.js": "^4.11.8", + "create-hmac": "^1.1.7", + "elliptic": "^6.4.0", + "nan": "^2.13.2" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "ts-node": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.0.0.tgz", + "integrity": "sha512-/TqB4SnererCDR/vb4S/QvSZvzQMJN8daAslg7MeaiHvD8rDZsSfXmNeNumyZZzMned72Xoq/isQljYSt8Ynfg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + }, + "tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typeforce": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" + }, + "typescript": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", + "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", + "dev": true + }, + "uglify-js": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.3.tgz", + "integrity": "sha512-wDRziHG94mNj2n3R864CvYw/+pc9y/RNImiTyrrf8BzgWn75JgFSwYvXrtZQMnMnOp/4UTrf3iCSQxSStPiByA==", + "optional": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universal-analytics": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", + "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "request": "^2.88.2", + "uuid": "^3.0.0" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "varuint-bitcoin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", + "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "webpack": { + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", + "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "webpack-subresource-integrity": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.1.tgz", + "integrity": "sha512-XMLFInbGbB1HV7K4vHWANzc1CN0t/c4bBvnlvGxGwV45yE/S/feAXIm8dJsCkzqWtSKnmaEgTp/meyeThxG4Iw==", + "dev": true, + "requires": { + "webpack-sources": "^1.3.0" + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wif": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", + "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", + "requires": { + "bs58check": "<3.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "worker-plugin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", + "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "zone.js": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.2.tgz", + "integrity": "sha512-JUpNKmWIovqRZlqkX6pFdBVlOU42n5Mt1n2yEaJdy+msBant/l2L1hTG6BFxCzM+KV3SX4XQOcwbhnwsPAeUTA==", + "requires": { + "tslib": "^2.0.0" + } + } + } +} diff --git a/ui/package.json b/ui/package.json new file mode 100644 index 000000000..1c88a5088 --- /dev/null +++ b/ui/package.json @@ -0,0 +1,62 @@ +{ + "name": "embassy-ui", + "version": "0.2.5", + "description": "GUI for EmbassyOS", + "author": "Start9 Labs", + "homepage": "https://github.com/Start9Labs/embassy-ui", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "build-prod": "ng build --prod && tsc postprocess.ts && node postprocess.js", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/common": "^10.1.6", + "@angular/core": "^10.1.6", + "@angular/forms": "^10.1.6", + "@angular/platform-browser": "^10.1.6", + "@angular/platform-browser-dynamic": "^10.1.6", + "@angular/router": "^10.1.6", + "@ionic/angular": "^5.4.0", + "@ionic/storage": "2.2.0", + "@start9labs/ambassador-sdk": "file:../ambassador-sdk", + "@start9labs/emver": "^0.1.1", + "ajv": "^6.12.6", + "angularx-qrcode": "^10.0.11", + "base32.js": "^0.1.0", + "base64url": "^3.0.1", + "bip39": "^3.0.2", + "bitcoinjs-lib": "^5.2.0", + "compare-versions": "^3.5.0", + "core-js": "^3.4.0", + "handlebars": "^4.7.6", + "json-pointer": "^0.6.1", + "jsonpointerx": "^1.0.30", + "jsontokens": "^3.0.0", + "marked": "^1.2.0", + "rxjs": "^6.6.3", + "uuid": "^8.3.1", + "zone.js": "^0.11.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^0.1002.0", + "@angular/cli": "^10.1.7", + "@angular/compiler": "^10.1.6", + "@angular/compiler-cli": "^10.1.6", + "@angular/language-service": "^10.1.6", + "@ionic/angular-toolkit": "^2.3.3", + "@ionic/lab": "^3.2.9", + "@types/json-pointer": "^1.0.30", + "@types/marked": "^1.1.0", + "@types/node": "^14.11.10", + "@types/uuid": "^8.0.0", + "node-html-parser": "^1.3.1", + "ts-node": "^9.0.0", + "tslint": "^6.1.0", + "typescript": "^4.0.3" + } +} diff --git a/ui/postprocess.ts b/ui/postprocess.ts new file mode 100644 index 000000000..2aa4aa897 --- /dev/null +++ b/ui/postprocess.ts @@ -0,0 +1,13 @@ +import { parse } from 'node-html-parser' +import * as fs from 'fs' + +let index = fs.readFileSync('./www/index.html').toString('utf-8') + +const root = parse(index) +for (let elem of root.querySelectorAll('link')) { + if (elem.getAttribute('rel') === 'stylesheet') { + const sheet = fs.readFileSync('./www/' + elem.getAttribute('href')).toString('utf-8') + index = index.replace(elem.toString(), '') + } +} +fs.writeFileSync('./www/index.html', index) \ No newline at end of file diff --git a/ui/src/app/app-config/config-cursor.ts b/ui/src/app/app-config/config-cursor.ts new file mode 100644 index 000000000..b09d46706 --- /dev/null +++ b/ui/src/app/app-config/config-cursor.ts @@ -0,0 +1,446 @@ +import { + ValueSpec, ConfigSpec, UniqueBy, ValueSpecOf, ValueType +} from './config-types' +import * as pointer from 'json-pointer' +import * as handlebars from 'handlebars' +import { Annotations, getDefaultObject, getDefaultUnion, listInnerSpec, mapConfigSpec, Range } from './config-utilities' + +export class ConfigCursor { + private cachedSpec?: ValueSpecOf + + constructor ( + private readonly rootSpec: ConfigSpec, + private readonly rootOldConfig: object, + private readonly rootMappedConfig: object = null, + private readonly rootConfig: object = null, + private readonly ptr: string = '', + ) { + if (!this.rootOldConfig) { + this.rootOldConfig = getDefaultObject(this.rootSpec) + } + if (!this.rootMappedConfig) { + this.rootMappedConfig = JSON.parse(JSON.stringify(this.rootOldConfig)) + mapConfigSpec(this.rootSpec, this.rootMappedConfig) + } + if (!this.rootConfig) { + this.rootConfig = JSON.parse(JSON.stringify(this.rootMappedConfig)) + } + } + + seek (ptr: string): ConfigCursor { + return new ConfigCursor( + this.rootSpec, + this.rootOldConfig, + this.rootMappedConfig, + this.rootConfig, + pointer.compile( + pointer.parse(this.ptr) + .concat(pointer.parse(ptr)), + ), + ) + } + + seekNext (key: string | number): ConfigCursor { + return this.seek(pointer.compile([`${key}`])) + } + + unseek (levels?: number): ConfigCursor { + let ptr: string + if (levels === undefined) { + ptr = '' + } else { + // TODO, delete or make use of, it isn't being used so far + // This is not being used so far + let ptr_arr = pointer.parse(this.ptr) + for (let i = 0; i < levels; i++) { + ptr_arr.pop() + } + ptr = pointer.compile(ptr_arr) + } + return new ConfigCursor( + this.rootSpec, + this.rootOldConfig, + this.rootMappedConfig, + this.rootConfig, + ptr, + ) + } + + key (): string { + return pointer.parse(this.ptr).pop() + } + + oldConfig (): any { + if (pointer.has(this.rootOldConfig, this.ptr)) { + return pointer.get(this.rootOldConfig, this.ptr) + } else { + return undefined + } + } + + mappedConfig (): any { + if (pointer.has(this.rootMappedConfig, this.ptr)) { + return pointer.get(this.rootMappedConfig, this.ptr) + } else { + return undefined + } + } + + toString (): string { + const spec: ValueSpec = this.spec() + const config = this.config() + switch (spec.type) { + case 'string': + return config + case 'number': + return `${config}${spec.units ? ' ' + spec.units : ''}` + case 'object': + return spec.displayAs ? handlebars.compile(spec.displayAs)(config) : '' + case 'union': + return spec.displayAs ? handlebars.compile(spec.displayAs)(config) : config[spec.tag.id] + case 'pointer': + return 'System Defined' + default: + return '' + } + } + + // if (config : T) then (spec : ValueSpecOf) + config (): any { + if (pointer.has(this.rootConfig, this.ptr)) { + return pointer.get(this.rootConfig, this.ptr) + } else { + return undefined + } + } + + // if (config : T) then (spec : ValueSpecOf) + spec (): ValueSpecOf { + if (this.cachedSpec) return this.cachedSpec + const parsed = pointer.parse(this.ptr) + + // We elevate the rootSpec (ConfigSpec) to a dummy ValueSpecObject + let ret: ValueSpec = { + type: 'object', + spec: this.rootSpec, + nullable: false, + nullByDefault: false, + name: 'Config', + displayAs: 'Config', + uniqueBy: null, + } + let ptr = [] + for (let seg of parsed) { + switch (ret.type) { + case 'object': + ret = ret.spec[seg] + break + case 'union': + if (seg === ret.tag.id) { + ret = { + type: 'enum', + default: ret.default, + values: Object.keys(ret.variants), + name: ret.tag.name, + description: ret.tag.description, + valueNames: ret.tag.variantNames, + } + } else { + const cfg = this.unseek().seek(pointer.compile(ptr)) + ret = ret.variants[cfg.config()[ret.tag.id]][seg] + } + break + case 'list': + //in essence, for a list we replace the list typed ValueSpecOf with it's internal ListValueSpec, a ValueSpecOf where config @ ptr is of type T[]. + // we also append default values to it. + // note also that jsonKey is not used. jsonKey in this case is an index of an array, like 0, 1, etc. + // this implies that every index of a list has an identical inner spec + ret = listInnerSpec(ret) + break + default: + return undefined + } + if (ret === undefined) break + ptr.push(seg) + } + this.cachedSpec = ret as ValueSpecOf + return this.cachedSpec + } + + checkInvalid (): string | null { // null if valid + const spec: ValueSpec = this.spec() + const cfg = this.config() + switch (spec.type) { + case 'string': + if (!cfg) { + return spec.nullable ? null : `${spec.name} is missing.` + } else if (typeof cfg === 'string') { + if (!spec.pattern || new RegExp(spec.pattern).test(cfg)) { + return null + } else { + return spec.patternDescription + } + } else { + throw new TypeError(`${this.ptr}: expected string, got ${Array.isArray(cfg) ? 'array' : typeof cfg}`) + } + case 'number': + if (!cfg) { + return spec.nullable ? null : `${spec.name} is missing.` + } else if (typeof cfg === 'number') { + if (spec.integral && cfg != Math.trunc(cfg)) { + return `${spec.name} must be an integer.` + } + try { + Range.from(spec.range).checkIncludes(cfg) + return null + } catch (e) { + return e.message + } + } else { + throw new TypeError(`${this.ptr}: expected number, got ${Array.isArray(cfg) ? 'array' : typeof cfg}`) + } + case 'boolean': + if (typeof cfg === 'boolean') { + return null + } else { + throw new TypeError(`${this.ptr}: expected boolean, got ${Array.isArray(cfg) ? 'array' : typeof cfg}`) + } + case 'enum': + if (typeof cfg === 'string') { + return spec.values.includes(cfg) ? null : `${cfg} is not a valid selection.` + } else { + throw new TypeError(`${this.ptr}: expected string, got ${Array.isArray(cfg) ? 'array' : typeof cfg}`) + } + case 'list': + if (Array.isArray(cfg)) { + const range = Range.from(spec.range) + const min = range.integralMin() + const max = range.integralMax() + const length = cfg.length + if (min && length < min) { + return spec.subtype === 'enum' ? 'Not enough options selected.' : 'List is too short.' + } + if (max && length > max) { + return spec.subtype === 'enum' ? 'Too many options selected.' : 'List is too long.' + } + for (let idx in cfg) { + let cursor = this.seekNext(idx) + if (cursor.checkInvalid()) { + return `Item #${idx + 1} is invalid. ${cursor.checkInvalid()}` + } + for (let idx2 in cfg) { + if (idx !== idx2 && cursor.equals(this.seekNext(idx2))) { + return `Item #${idx + 1} is not unique.` + } + } + } + return null + } else { + throw new TypeError(`${this.ptr}: expected array, got ${Array.isArray(cfg) ? 'array' : typeof cfg}`) + } + case 'object': + if (!cfg) { + return spec.nullable ? null : `${spec.name} is missing.` + } else if (typeof cfg === 'object' && !Array.isArray(cfg)) { + for (let idx in spec.spec) { + if (this.seekNext(idx).checkInvalid()) { + return `${spec.spec[idx].name} is invalid.` + } + } + return null + } else { + throw new TypeError(`${this.ptr}: expected object, got ${Array.isArray(cfg) ? 'array' : typeof cfg}`) + } + case 'pointer': + return null + case 'union': + if (typeof cfg === 'object' && !Array.isArray(cfg)) { + if (typeof cfg[spec.tag.id] === 'string') { + for (let idx in spec.variants[cfg[spec.tag.id]]) { + if (this.seekNext(idx).checkInvalid()) { + return `${spec.variants[cfg[spec.tag.id]][idx].name} is invalid.` + } + } + return null + } else { + throw new TypeError(`${this.ptr}/${spec.tag.id}: expected string, got ${Array.isArray(cfg) ? 'array' : typeof cfg}`) + } + } else { + throw new TypeError(`${this.ptr}: expected object, got ${Array.isArray(cfg) ? 'array' : typeof cfg}`) + } + } + } + + isNew (): boolean { + const oldCfg = this.oldConfig() + const mappedCfg = this.mappedConfig() + if (mappedCfg && oldCfg && typeof mappedCfg === 'object' && typeof oldCfg === 'object') { + for (let key in mappedCfg) { + if (this.seekNext(key).isNew()) return true + } + return false + } else { + return mappedCfg !== oldCfg + } + } + + isEdited (): boolean { + const cfg = this.config() + const mappedCfg = this.mappedConfig() + if (cfg && mappedCfg && typeof cfg === 'object' && typeof mappedCfg === 'object') { + const spec = this.spec() + let allKeys + if (spec.type === 'union') { + let unionSpec = spec as ValueSpecOf<'union'> + const labelForSelection = unionSpec.tag.id + allKeys = new Set([...Object.keys(unionSpec.variants[cfg[labelForSelection]])]) + } else { + allKeys = new Set([...Object.keys(cfg), ...Object.keys(mappedCfg)]) + } + + for (let key of allKeys) { + if (this.seekNext(key).isEdited()) return true + } + return false + } else { + return cfg !== mappedCfg + } + } + + equals (cursor: ConfigCursor): boolean { + const lhs = this.config() + const rhs = cursor.config() + const spec: ValueSpec = this.spec() + + switch (spec.type) { + case 'string': + case 'number': + case 'boolean': + case 'enum': + return lhs === rhs + case 'object': + case 'union': + return isEqual(spec.uniqueBy, this as ConfigCursor<'object' | 'union'>, cursor as ConfigCursor<'object' | 'union'>) + case 'list': + if (lhs.length !== rhs.length) { + return false + } + for (let idx = 0; idx < lhs.length; idx++) { + if (!this.seekNext(`${idx}`).equals(cursor.seekNext(`${idx}`))) { + return false + } + } + return true + default: + return false + } + } + + getAnnotations (): Annotations { + const spec: ValueSpec = this.spec() + switch (spec.type) { + case 'object': { + const ret: Annotations<'object'> = { + self: { + invalid: this.checkInvalid(), + edited: this.isEdited(), + added: this.isNew(), + }, + members: { }, + } + for (let key in spec.spec) { + let annotation: any = this.seekNext(key).getAnnotations() + if ('self' in annotation) { + annotation = annotation.self + } + ret.members[key] = annotation + } + return ret as Annotations + } + case 'union': { + const ret: Annotations<'union'> = { + self: { + invalid: this.checkInvalid(), + edited: this.isEdited(), + added: this.isNew(), + }, + members: { + [spec.tag.id]: this.seekNext<'enum'>(spec.tag.id).getAnnotations(), + }, + } + for (let key in spec.variants[this.config()[spec.tag.id]]) { + let annotation: any = this.seekNext(key).getAnnotations() + if ('self' in annotation) { + annotation = annotation.self + } + ret.members[key] = annotation + } + return ret as Annotations + } + case 'list': { + const ret: Annotations<'list'> = { + self: { + invalid: this.checkInvalid(), + edited: this.isEdited(), + added: this.isNew(), + }, + members: [], + } + for (let key in this.config()) { + let annotation: any = this.seekNext(key).getAnnotations() + if ('self' in annotation) { + annotation = annotation.self + } + ret.members[key] = annotation + } + return ret as Annotations + } + default: + return { + invalid: this.checkInvalid(), + edited: this.isEdited(), + added: this.isNew(), + } as Annotations + } + } + + async createFirstEntryForList () { + const spec: ValueSpec = this.spec() + + if (spec.type === 'object' && !this.config()) { + pointer.set(this.rootConfig, this.ptr, getDefaultObject(spec.spec)) + } + + if (spec.type === 'union' && !this.config()) { + pointer.set(this.rootConfig, this.ptr, getDefaultUnion(spec)) + } + } + + injectModalData (res: { data?: any }): void { + if (res.data !== undefined) { + pointer.set(this.rootConfig, this.ptr, res.data) + } + } +} + +function isEqual (uniqueBy: UniqueBy, lhs: ConfigCursor<'object'>, rhs: ConfigCursor<'object'>): boolean { + if (uniqueBy === null) { + return false + } else if (typeof uniqueBy === 'string') { + return lhs.seekNext(uniqueBy).equals(rhs.seekNext(uniqueBy)) + } else if ('any' in uniqueBy) { + for (let subSpec of uniqueBy.any) { + if (isEqual(subSpec, lhs, rhs)) { + return true + } + } + return false + } else if ('all' in uniqueBy) { + for (let subSpec of uniqueBy.all) { + if (!isEqual(subSpec, lhs, rhs)) { + return false + } + } + return true + } +} \ No newline at end of file diff --git a/ui/src/app/app-config/config-types.ts b/ui/src/app/app-config/config-types.ts new file mode 100644 index 000000000..c298b3b0b --- /dev/null +++ b/ui/src/app/app-config/config-types.ts @@ -0,0 +1,133 @@ +export interface ConfigSpec { [key: string]: ValueSpec } + +export type ValueType = 'string' | 'number' | 'boolean' | 'enum' | 'list' | 'object' | 'pointer' | 'union' +export type ValueSpec = ValueSpecOf + +// core spec types. These types provide the metadata for performing validations +export type ValueSpecOf = + T extends 'string' ? ValueSpecString : + T extends 'number' ? ValueSpecNumber : + T extends 'boolean' ? ValueSpecBoolean : + T extends 'enum' ? ValueSpecEnum : + T extends 'list' ? ValueSpecList : + T extends 'object' ? ValueSpecObject : + T extends 'pointer' ? ValueSpecPointer : + T extends 'union' ? ValueSpecUnion : + never + +export interface ValueSpecString extends ListValueSpecString, WithStandalone { + type: 'string' + default?: DefaultString + nullable: boolean + masked: boolean + copyable: boolean +} + +export interface ValueSpecNumber extends ListValueSpecNumber, WithStandalone { + type: 'number' + nullable: boolean + default?: number +} + +export interface ValueSpecEnum extends ListValueSpecEnum, WithStandalone { + type: 'enum' + default: string +} + +export interface ValueSpecBoolean extends WithStandalone { + type: 'boolean' + default: boolean +} + +export interface ValueSpecUnion extends ListValueSpecUnion, WithStandalone { + type: 'union' +} + +export interface ValueSpecPointer extends WithStandalone { + type: 'pointer' + subtype: 'app' | 'system' + target: 'lan-address' | 'tor-address' | 'config' + 'app-id': string +} + +export interface ValueSpecObject extends ListValueSpecObject, WithStandalone { + type: 'object' + nullable: boolean + nullByDefault: boolean +} + +export interface WithStandalone { + name: string + description?: string + changeWarning?: string +} + +// no lists of booleans, lists, pointers +export type ListValueSpecType = 'string' | 'number' | 'enum' | 'object' | 'union' + +// represents a spec for the values of a list +export type ListValueSpecOf = + T extends 'string' ? ListValueSpecString : + T extends 'number' ? ListValueSpecNumber : + T extends 'enum' ? ListValueSpecEnum : + T extends 'object' ? ListValueSpecObject : + T extends 'union' ? ListValueSpecUnion : + never + +// represents a spec for a list +export type ValueSpecList = ValueSpecListOf +export interface ValueSpecListOf extends WithStandalone { + type: 'list' + subtype: T + spec: ListValueSpecOf + range: string // '[0,1]' (inclusive) OR '[0,*)' (right unbounded), normal math rules + default: string[] | number[] | DefaultString[] | object[] +} + +// sometimes the type checker needs just a little bit of help +export function isValueSpecListOf (t: ValueSpecList, s: S): t is ValueSpecListOf { + return t.subtype === s +} + +export interface ListValueSpecString { + pattern?: string + patternDescription?: string +} + +export interface ListValueSpecNumber { + range: string + integral: boolean + units?: string +} + +export interface ListValueSpecEnum { + values: string[] + valueNames: { [value: string]: string } +} + +export interface ListValueSpecObject { + spec: ConfigSpec //this is a mapped type of the config object at this level, replacing the object's values with specs on those values + uniqueBy: UniqueBy //indicates whether duplicates can be permitted in the list + displayAs?: string //this should be a handlebars template which can make use of the entire config which corresponds to 'spec' +} + +export type UniqueBy = null | string | { any: UniqueBy[] } | { all: UniqueBy[] } + +export interface ListValueSpecUnion { + tag: UnionTagSpec + variants: { [key: string]: ConfigSpec } + displayAs?: string //this may be a handlebars template which can conditionally (on tag.id) make use of each union's entries, or if left blank will display as tag.id + uniqueBy: UniqueBy + default: string //this should be the variantName which one prefers a user to start with by default when creating a new union instance in a list +} + +export interface UnionTagSpec { + id: string //The name of the field containing one of the union variants + name: string + description?: string + variantNames: { //the name of each variant + [variant: string]: string + } +} + +export type DefaultString = string | { charset: string, len: number } diff --git a/ui/src/app/app-config/config-utilities.ts b/ui/src/app/app-config/config-utilities.ts new file mode 100644 index 000000000..4f67ed843 --- /dev/null +++ b/ui/src/app/app-config/config-utilities.ts @@ -0,0 +1,413 @@ +import { + ValueSpec, ValueSpecList, DefaultString, ValueSpecUnion, ConfigSpec, + ValueSpecObject, ValueSpecString, ValueSpecEnum, ValueSpecNumber, + ValueSpecBoolean, ValueSpecPointer, ValueSpecOf, ListValueSpecType +} from './config-types' + +export interface Annotation { + invalid: string | null + edited: boolean + added: boolean +} + +export type Annotations = + T extends 'object' | 'union' ? { self: Annotation, members: { [key: string]: Annotation } } : + T extends 'list' ? { self: Annotation, members: Annotation[] } : + Annotation + +export class Range { + min?: number + max?: number + minInclusive: boolean + maxInclusive: boolean + + + static from (s: string): Range { + const r = new Range() + r.minInclusive = s.startsWith('[') + r.maxInclusive = s.endsWith(']') + const [minStr, maxStr] = s.split(',').map(a => a.trim()) + r.min = minStr === '(*' ? undefined : Number(minStr.slice(1)) + r.max = maxStr === '*)' ? undefined : Number(maxStr.slice(0, -1)) + return r + } + + checkIncludes (n: number) { + if (this.hasMin() !== undefined && ((!this.minInclusive && this.min == n || (this.min > n)))) { + throw new Error(`Value must be ${this.minMessage()}.`) + } + if (this.hasMax() && ((!this.maxInclusive && this.max == n || (this.max < n)))) { + throw new Error(`Value must be ${this.maxMessage()}.`) + } + } + + hasMin (): boolean { + return this.min !== undefined + } + + hasMax (): boolean { + return this.max !== undefined + } + + minMessage (): string { + return `greater than${this.minInclusive ? ' or equal to' : ''} ${this.min}` + } + + maxMessage (): string { + return `less than${this.maxInclusive ? ' or equal to' : ''} ${this.max}` + } + + description (): string { + let message = 'Value can be any number.' + + if (this.hasMin() || this.hasMax()) { + message = 'Value must be' + } + + if (this.hasMin() && this.hasMax()) { + message = `${message} ${this.minMessage()} AND ${this.maxMessage()}.` + } else if (this.hasMin() && !this.hasMax()) { + message = `${message} ${this.minMessage()}.` + } else if (!this.hasMin() && this.hasMax()) { + message = `${message} ${this.maxMessage()}.` + } + + return message + } + + integralMin (): number | undefined { + if (this.min) { + const ceil = Math.ceil(this.min) + if (this.minInclusive) { + return ceil + } else { + if (ceil === this.min) { + return ceil + 1 + } else { + return ceil + } + } + } + } + + integralMax (): number | undefined { + if (this.max) { + const floor = Math.floor(this.max) + if (this.maxInclusive) { + return floor + } else { + if (floor === this.max) { + return floor - 1 + } else { + return floor + } + } + } + } +} + +// converts a ValueSpecList, i.e. a spec for a list, to its inner ListValueSpec, i.e., a spec for the values within the list. +// We then augment it with the defalt values (e.g. nullable: false) to make a +export function listInnerSpec (listSpec: ValueSpecList): ValueSpecOf { + return { + type: listSpec.subtype, + nullable: false, + name: listSpec.name, + description: listSpec.description, + changeWarning: listSpec.changeWarning, + ...listSpec.spec as any, //listSpec.spec is a ListValueSpecOf listSpec.subtype + } +} + +export function mapSpecToConfigValue (spec: ValueSpec, value: any): any { + if (value === undefined) return undefined + switch (spec.type) { + case 'string': return mapStringSpec(value) + case 'number': return mapNumberSpec(value) + case 'boolean': return mapBooleanSpec(spec, value) + case 'enum': return mapEnumSpec(spec, value) + case 'list': return mapListSpec(spec, value) + case 'object': return mapObjectSpec(spec, value) + case 'union': return mapUnionSpec(spec, value) + case 'pointer': return value + } +} + +export function mapConfigSpec (configSpec: ConfigSpec, value: any): object { + if (value && typeof value === 'object' && !Array.isArray(value)) { + Object.entries(configSpec).map(([key, val]) => { + value[key] = mapSpecToConfigValue(val, value[key]) + if (value[key] === undefined) { + value[key] = getDefaultConfigValue(val) + } + }) + return value + } else { + return getDefaultObject(configSpec) + } +} + +export function mapObjectSpec (spec: ValueSpecObject, value: any): object { + if (value && typeof value === 'object' && !Array.isArray(value)) { + return mapConfigSpec(spec.spec, value) + } else { + return null + } +} + +export function mapUnionSpec (spec: ValueSpecUnion, value: any): object { + if (value && typeof value === 'object' && !Array.isArray(value)) { + const variant = mapEnumSpec({ + ...spec.tag, + type: 'enum', + default: spec.default, + values: Object.keys(spec.variants), + valueNames: spec.tag.variantNames, + }, value[spec.tag.id]) + value = mapConfigSpec(spec.variants[variant], value) + value[spec.tag.id] = variant + return value + } else { + return getDefaultUnion(spec) + } +} + +export function mapStringSpec (value: any): string { + if (typeof value === 'string') { + return value + } else { + return null + } +} + +export function mapNumberSpec (value: any): number { + if (typeof value === 'number') { + return value + } else { + return null + } +} + +export function mapEnumSpec (spec: ValueSpecEnum, value: any): string { + if (typeof value === 'string' && spec.values.includes(value)) { + return value + } else { + return spec.default + } +} + +export function mapListSpec (spec: ValueSpecList, value: any): string[] | number[] | object[] { + if (Array.isArray(value)) { + const innerSpec = listInnerSpec(spec) + return value.map(item => mapSpecToConfigValue(innerSpec, item)) + } else { + return getDefaultList(spec) + } +} + +export function mapBooleanSpec (spec: ValueSpecBoolean, value: any): boolean { + if (typeof value === 'boolean') { + return value + } else { + return spec.default + } +} + +export function getDefaultConfigValue (spec: ValueSpec): string | number | object | string[] | number[] | object[] | boolean | null { + switch (spec.type) { + case 'object': + return spec.nullByDefault ? null : getDefaultObject(spec.spec) + case 'union': + return getDefaultUnion(spec) + case 'string': + return spec.default ? getDefaultString(spec.default) : null + case 'number': + return spec.default || null + case 'list': + return getDefaultList(spec) + case 'enum': + case 'boolean': + return spec.default + case 'pointer': + return null + } +} + +export function getDefaultObject (spec: ConfigSpec): object { + const obj = { } + Object.entries(spec).map(([key, val]) => { + obj[key] = getDefaultConfigValue(val) + }) + + return obj +} + +export function getDefaultList (spec: ValueSpecList): string[] | number[] | object[] { + if (spec.subtype === 'object') { + const l = (spec.default as any[]) + const range = Range.from(spec.range) + while (l.length < range.integralMin()) { + l.push(getDefaultConfigValue(listInnerSpec(spec))) + } + return l as string[] | number[] | object[] + } else { + const l = (spec.default as any[]).map(d => getDefaultConfigValue({ ...listInnerSpec(spec), default: d })) + return l as string[] | number[] | object[] + } +} + +export function getDefaultUnion (spec: ValueSpecUnion): object { + return { [spec.tag.id]: spec.default, ...getDefaultObject(spec.variants[spec.default]) } +} + +export function getDefaultMapTagKey (defaultSpec: DefaultString = '', value: object): string { + const keySrc = getDefaultString(defaultSpec) + + const keys = Object.keys(value) + + let key = keySrc + let idx = 1 + while (keys.includes(key)) { + key = `${keySrc}-${idx++}` + } + + return key +} + +export function getDefaultString (defaultSpec: DefaultString): string { + if (typeof defaultSpec === 'string') { + return defaultSpec + } else { + let s = '' + for (let i = 0; i < defaultSpec.len; i++) { + s = s + getRandomCharInSet(defaultSpec.charset) + } + + return s + } +} + +export function getDefaultDescription (spec: ValueSpec): string { + let toReturn: string | undefined + switch (spec.type) { + case 'string': + if (typeof spec.default === 'string') { + toReturn = spec.default + } else if (typeof spec.default === 'object') { + toReturn = 'random' + } + break + case 'number': + if (typeof spec.default === 'number') { + toReturn = String(spec.default) + } + break + case 'boolean': + toReturn = spec.default === true ? 'True' : 'False' + break + case 'enum': + toReturn = spec.valueNames[spec.default] + break + } + + return toReturn || '' +} + +// a,g,h,A-Z,,,,- +export function getRandomCharInSet (charset: string): string { + const set = stringToCharSet(charset) + let charIdx = Math.floor(Math.random() * set.len) + for (let range of set.ranges) { + if (range.len > charIdx) { + return String.fromCharCode(range.start.charCodeAt(0) + charIdx) + } + charIdx -= range.len + } + throw new Error('unreachable') +} + +function stringToCharSet (charset: string): CharSet { + let set: CharSet = { ranges: [], len: 0 } + let start: string | null = null + let end: string | null = null + let in_range = false + for (let char of charset) { + switch (char) { + case ',': + if (start !== null && end !== null) { + if (start!.charCodeAt(0) > end!.charCodeAt(0)) { + throw new Error('start > end of charset') + } + const len = end.charCodeAt(0) - start.charCodeAt(0) + 1 + set.ranges.push({ + start, + end, + len, + }) + set.len += len + start = null + end = null + in_range = false + } else if (start !== null && !in_range) { + set.len += 1 + set.ranges.push({ start, end: start, len: 1 }) + start = null + } else if (start !== null && in_range) { + end = ',' + } else if (start === null && end === null && !in_range) { + start = ',' + } else { + throw new Error('unexpected ","') + } + break + case '-': + if (start === null) { + start = '-' + } else if (!in_range) { + in_range = true + } else if (in_range && end === null) { + end = '-' + } else { + throw new Error('unexpected "-"') + } + break + default: + if (start === null) { + start = char + } else if (in_range && end === null) { + end = char + } else { + throw new Error(`unexpected "${char}"`) + } + } + } + if (start !== null && end !== null) { + if (start!.charCodeAt(0) > end!.charCodeAt(0)) { + throw new Error('start > end of charset') + } + const len = end.charCodeAt(0) - start.charCodeAt(0) + 1 + set.ranges.push({ + start, + end, + len, + }) + set.len += len + } else if (start !== null) { + set.len += 1 + set.ranges.push({ + start, + end: start, + len: 1, + }) + } + return set +} + +interface CharSet { + ranges: { + start: string + end: string + len: number + }[] + len: number +} \ No newline at end of file diff --git a/ui/src/app/app-config/modal-presentable.ts b/ui/src/app/app-config/modal-presentable.ts new file mode 100644 index 000000000..52473b947 --- /dev/null +++ b/ui/src/app/app-config/modal-presentable.ts @@ -0,0 +1,27 @@ +import { ConfigCursor } from './config-cursor' +import { TrackingModalController } from '../services/tracking-modal-controller.service' + +export class ModalPresentable { + constructor (private readonly trackingModalCtrl: TrackingModalController) { } + + async presentModal (cursor: ConfigCursor, callback: () => any) { + const modal = await this.trackingModalCtrl.createConfigModal({ + backdropDismiss: false, + presentingElement: await this.trackingModalCtrl.getTop(), + componentProps: { + cursor, + }, + }, cursor.spec().type) + + modal.onWillDismiss().then(res => { + cursor.injectModalData(res) + callback() + }) + + await modal.present() + } + + dismissModal (a: any) { + return this.trackingModalCtrl.dismiss(a) + } +} diff --git a/ui/src/app/app-routing.module.ts b/ui/src/app/app-routing.module.ts new file mode 100644 index 000000000..235803d9b --- /dev/null +++ b/ui/src/app/app-routing.module.ts @@ -0,0 +1,48 @@ +import { NgModule } from '@angular/core' +import { PreloadAllModules, RouterModule, Routes } from '@angular/router' +import { AuthGuard } from './guards/auth.guard' +import { UnauthGuard } from './guards/unauth.guard' + +const routes: Routes = [ + { + redirectTo: 'services', + pathMatch: 'full', + path: '', + }, + { + path: 'authenticate', + canActivate: [UnauthGuard], + pathMatch: 'full', + loadChildren: () => import('./pages/authenticate/authenticate.module').then( m => m.AuthenticatePageModule), + }, + { + path: 'embassy', + canActivate: [AuthGuard], + canActivateChild: [AuthGuard], + loadChildren: () => import('./pages/server-routes/server-routing.module').then(m => m.ServerRoutingModule), + }, + { + path: 'notifications', + canActivate: [AuthGuard], + canActivateChild: [AuthGuard], + loadChildren: () => import('./pages/notifications/notifications.module').then(m => m.NotificationsPageModule), + }, + { + path: 'services', + canActivate: [AuthGuard], + canActivateChild: [AuthGuard], + loadChildren: () => import('./pages/apps-routes/apps-routing.module').then(m => m.AppsRoutingModule), + }, +] + +@NgModule({ + imports: [ + RouterModule.forRoot(routes, { + preloadingStrategy: PreloadAllModules, + initialNavigation: false, + useHash: true, + }), + ], + exports: [RouterModule], +}) +export class AppRoutingModule { } diff --git a/ui/src/app/app.component.html b/ui/src/app/app.component.html new file mode 100644 index 000000000..62f63caf9 --- /dev/null +++ b/ui/src/app/app.component.html @@ -0,0 +1,159 @@ + + + + + + {{ name }} + + + + + + + + + + {{page.title}} + {{s}} + + + + + + + + Welcome + + +

This is the private website of your Start9 Embassy device.

+
+

Please authenticate yourself to continue.

+ + + + + + + + + Logout + + + + + + + + + + diff --git a/ui/src/app/app.component.scss b/ui/src/app/app.component.scss new file mode 100644 index 000000000..dbacbb664 --- /dev/null +++ b/ui/src/app/app.component.scss @@ -0,0 +1,13 @@ +.selected { + --background: linear-gradient(120deg, #1e1e1e -1%, var(--ion-color-start9) 96%); +} + +.menu-style { + border-style: solid; + border-width: 0px 1px 0px 0px; + border-color: #ff4960; +} + +.selected-badge { + background-color: #1e1e1e; +} \ No newline at end of file diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts new file mode 100644 index 000000000..233c8374c --- /dev/null +++ b/ui/src/app/app.component.ts @@ -0,0 +1,190 @@ +import { Component } from '@angular/core' +import { ServerModel, ServerStatus } from './models/server-model' +import { Storage } from '@ionic/storage' +import { SyncDaemon } from './services/sync.service' +import { AuthService, AuthState } from './services/auth.service' +import { ApiService } from './services/api/api.service' +import { Router } from '@angular/router' +import { BehaviorSubject, Observable } from 'rxjs' +import { AppModel } from './models/app-model' +import { filter, take } from 'rxjs/operators' +import { AlertController } from '@ionic/angular' +import { LoaderService } from './services/loader.service' +import { Emver } from './services/emver.service' +import { SplitPaneTracker } from './services/split-pane.service' +import { LoadingOptions } from '@ionic/core' + +@Component({ + selector: 'app-root', + templateUrl: 'app.component.html', + styleUrls: ['app.component.scss'], +}) +export class AppComponent { + isUpdating = false + fullPageMenu = true + $showMenuContent$ = new BehaviorSubject(false) + serverName$ : Observable + serverBadge$: Observable + selectedIndex = 0 + appPages = [ + { + title: 'Services', + url: '/services/installed', + icon: 'grid-outline', + }, + { + title: 'Embassy', + url: '/embassy', + icon: 'cube-outline', + }, + { + title: 'Marketplace', + url: '/services/marketplace', + icon: 'cart-outline', + }, + { + title: 'Notifications', + url: '/notifications', + icon: 'notifications-outline', + }, + ] + + constructor ( + private readonly serverModel: ServerModel, + private readonly syncDaemon: SyncDaemon, + private readonly storage: Storage, + private readonly appModel: AppModel, + private readonly authService: AuthService, + private readonly router: Router, + private readonly api: ApiService, + private readonly alertCtrl: AlertController, + private readonly loader: LoaderService, + private readonly emver: Emver, + readonly splitPane: SplitPaneTracker, + ) { + // set dark theme + document.body.classList.toggle('dark', true) + this.serverName$ = this.serverModel.watch().name + this.serverBadge$ = this.serverModel.watch().badge + this.init() + } + + async init () { + let fromFresh = true + await this.storage.ready() + await this.authService.restoreCache() + await this.emver.init() + + this.authService.listen({ + [AuthState.VERIFIED]: async () => { + console.log('verified') + this.api.authenticatedRequestsEnabled = true + await this.serverModel.restoreCache() + await this.appModel.restoreCache() + this.syncDaemon.start() + this.$showMenuContent$.next(true) + if (fromFresh) { + this.router.initialNavigation() + fromFresh = false + } + }, + [AuthState.UNVERIFIED]: () => { + console.log('unverified') + this.api.authenticatedRequestsEnabled = false + this.serverModel.clear() + this.appModel.clear() + this.syncDaemon.stop() + this.storage.clear() + this.router.navigate(['/authenticate'], { replaceUrl: true }) + this.$showMenuContent$.next(false) + if (fromFresh) { + this.router.initialNavigation() + fromFresh = false + } + }, + }) + + this.serverModel.watch().status.subscribe(s => { + this.isUpdating = (s === ServerStatus.UPDATING) + }) + + this.router.events.pipe(filter(e => !!(e as any).urlAfterRedirects)).subscribe((e: any) => { + const appPageIndex = this.appPages.findIndex( + appPage => (e.urlAfterRedirects || e.url || '').startsWith(appPage.url), + ) + if (appPageIndex > -1) this.selectedIndex = appPageIndex + + // TODO: while this works, it is dangerous and impractical. + if (e.urlAfterRedirects !== '/embassy' && e.urlAfterRedirects !== '/authenticate' && this.isUpdating) { + this.router.navigateByUrl('/embassy') + } + }) + this.api.watch401$().subscribe(() => { + this.authService.setAuthStateUnverified() + return this.api.postLogout() + }) + } + + async presentAlertLogout () { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: 'Caution', + message: 'Are you sure you want to logout?', + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: 'Logout', + cssClass: 'alert-danger', + handler: () => { + this.logout() + }, + }, + ], + }) + await alert.present() + } + + private async logout () { + this.serverName$.pipe(take(1)).subscribe(name => { + this.loader.of(LoadingSpinner(`Logging out ${name || ''}...`)) + .displayDuringP(this.api.postLogout()) + .then(() => this.authService.setAuthStateUnverified()) + .catch(e => this.setError(e)) + }) + } + + async setError (e: Error) { + console.error(e) + await this.presentError(e.message) + } + + async presentError (e: string) { + const alert = await this.alertCtrl.create({ + backdropDismiss: true, + message: `Exception on logout: ${e}`, + buttons: [ + { + text: 'Dismiss', + role: 'cancel', + }, + ], + }) + await alert.present() + } + + splitPaneVisible (e) { + this.splitPane.$menuFixedOpenOnLeft$.next(e.detail.visible) + } +} + +const LoadingSpinner: (m?: string) => LoadingOptions = (m) => { + const toMergeIn = m ? { message: m } : { } + return { + spinner: 'lines', + cssClass: 'loader', + ...toMergeIn, + } as LoadingOptions +} diff --git a/ui/src/app/app.module.ts b/ui/src/app/app.module.ts new file mode 100644 index 000000000..8d47f2f20 --- /dev/null +++ b/ui/src/app/app.module.ts @@ -0,0 +1,41 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA, Type } from '@angular/core' +import { BrowserModule } from '@angular/platform-browser' +import { RouteReuseStrategy } from '@angular/router' +import { IonicModule, IonicRouteStrategy } from '@ionic/angular' +import { IonicStorageModule } from '@ionic/storage' +import { HttpClientModule } from '@angular/common/http' +import { AppComponent } from './app.component' +import { AppRoutingModule } from './app-routing.module' +import { ApiService } from './services/api/api.service' +import { ApiServiceFactory } from './services/api/api.service.factory' +import { AppModel } from './models/app-model' +import { HttpService } from './services/http.service' +import { ServerModel } from './models/server-model' +import { ConfigService } from './services/config.service' +import { QRCodeModule } from 'angularx-qrcode' +import { APP_CONFIG_COMPONENT_MAPPING } from './modals/app-config-injectable/modal-injectable-token' +import { appConfigComponents } from './modals/app-config-injectable/modal-injectable-value'; + +@NgModule({ + declarations: [AppComponent], + entryComponents: [], + imports: [ + HttpClientModule, + BrowserModule, + IonicModule.forRoot(), + AppRoutingModule, + IonicStorageModule.forRoot(), + QRCodeModule, + ], + providers: [ + { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, + { provide: ApiService, useFactory: ApiServiceFactory, deps: [ConfigService, HttpService, AppModel, ServerModel] }, + { provide: APP_CONFIG_COMPONENT_MAPPING, useValue: appConfigComponents }, + ], + bootstrap: [AppComponent], + schemas: [ CUSTOM_ELEMENTS_SCHEMA ], +}) +export class AppModule { } + + + diff --git a/ui/src/app/components/badge-menu-button/badge-menu.component.html b/ui/src/app/components/badge-menu-button/badge-menu.component.html new file mode 100644 index 000000000..738173e18 --- /dev/null +++ b/ui/src/app/components/badge-menu-button/badge-menu.component.html @@ -0,0 +1,12 @@ +
+ + + +
diff --git a/ui/src/app/components/badge-menu-button/badge-menu.component.module.ts b/ui/src/app/components/badge-menu-button/badge-menu.component.module.ts new file mode 100644 index 000000000..0a2c247fc --- /dev/null +++ b/ui/src/app/components/badge-menu-button/badge-menu.component.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { BadgeMenuComponent } from './badge-menu.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' + +@NgModule({ + declarations: [ + BadgeMenuComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + ], + exports: [BadgeMenuComponent], +}) +export class BadgeMenuComponentModule { } diff --git a/ui/src/app/components/badge-menu-button/badge-menu.component.scss b/ui/src/app/components/badge-menu-button/badge-menu.component.scss new file mode 100644 index 000000000..26c065665 --- /dev/null +++ b/ui/src/app/components/badge-menu-button/badge-menu.component.scss @@ -0,0 +1,17 @@ +.ios-badge { + background-color: var(--ion-color-start9); + position: absolute; + top: 1px; + left: 62%; + border-radius: 5px; + z-index: 1; +} + +.md-badge { + background-color: var(--ion-color-start9); + position: absolute; + top: -2px; + left: 56%; + border-radius: 5px; + z-index: 1; +} diff --git a/ui/src/app/components/badge-menu-button/badge-menu.component.ts b/ui/src/app/components/badge-menu-button/badge-menu.component.ts new file mode 100644 index 000000000..3b7a0e858 --- /dev/null +++ b/ui/src/app/components/badge-menu-button/badge-menu.component.ts @@ -0,0 +1,27 @@ +import { Component } from '@angular/core' +import { ServerModel } from '../../models/server-model' +import { Observable } from 'rxjs' +import { map } from 'rxjs/operators' +import { SplitPaneTracker } from 'src/app/services/split-pane.service' +import { isPlatform } from '@ionic/angular' + +@Component({ + selector: 'badge-menu-button', + templateUrl: './badge-menu.component.html', + styleUrls: ['./badge-menu.component.scss'], +}) + +export class BadgeMenuComponent { + badge$: Observable + menuFixedOpen$: Observable + isIos: boolean + + constructor ( + private readonly serverModel: ServerModel, + private readonly splitPane: SplitPaneTracker, + ) { + this.menuFixedOpen$ = this.splitPane.$menuFixedOpenOnLeft$.asObservable() + this.badge$ = this.serverModel.watch().badge.pipe(map(i => i > 0)) + this.isIos = isPlatform('ios') + } +} diff --git a/ui/src/app/components/config-header/config-header.component.html b/ui/src/app/components/config-header/config-header.component.html new file mode 100644 index 000000000..6a8bb7b6f --- /dev/null +++ b/ui/src/app/components/config-header/config-header.component.html @@ -0,0 +1,24 @@ + + + + + + {{ error }} + + + + + + +

Description

+

{{ spec.description }}

+
+
+ + + +

Warning!

+

{{ spec.changeWarning }}

+
+
+
\ No newline at end of file diff --git a/ui/src/app/components/config-header/config-header.component.module.ts b/ui/src/app/components/config-header/config-header.component.module.ts new file mode 100644 index 000000000..cec8c2822 --- /dev/null +++ b/ui/src/app/components/config-header/config-header.component.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { ConfigHeaderComponent } from './config-header.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' + +@NgModule({ + declarations: [ + ConfigHeaderComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + ], + exports: [ConfigHeaderComponent], +}) +export class ConfigHeaderComponentModule { } diff --git a/ui/src/app/components/config-header/config-header.component.scss b/ui/src/app/components/config-header/config-header.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/components/config-header/config-header.component.ts b/ui/src/app/components/config-header/config-header.component.ts new file mode 100644 index 000000000..b7fddf9e5 --- /dev/null +++ b/ui/src/app/components/config-header/config-header.component.ts @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core' +import { ValueSpec } from 'src/app/app-config/config-types' + +@Component({ + selector: 'config-header', + templateUrl: './config-header.component.html', + styleUrls: ['./config-header.component.scss'], +}) +export class ConfigHeaderComponent { + @Input() spec: ValueSpec + @Input() error: string +} diff --git a/ui/src/app/components/dependency-list/dependency-list.component.html b/ui/src/app/components/dependency-list/dependency-list.component.html new file mode 100644 index 000000000..b33e5ec20 --- /dev/null +++ b/ui/src/app/components/dependency-list/dependency-list.component.html @@ -0,0 +1,14 @@ +
+ + + + +
\ No newline at end of file diff --git a/ui/src/app/components/dependency-list/dependency-list.component.module.ts b/ui/src/app/components/dependency-list/dependency-list.component.module.ts new file mode 100644 index 000000000..3b848aabf --- /dev/null +++ b/ui/src/app/components/dependency-list/dependency-list.component.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { DependencyListComponent } from './dependency-list.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' +import { InformationPopoverComponentModule } from '../information-popover/information-popover.component.module' +import { StatusComponentModule } from '../status/status.component.module' +import { InstalledDependencyItemComponentModule } from './installed-dependency-item/installed-dependency-item.component.module' +import { MarketplaceDependencyItemComponentModule } from './marketplace-dependency-item/marketplace-dependency-item.component.module' + +@NgModule({ + declarations: [ + DependencyListComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + InformationPopoverComponentModule, + StatusComponentModule, + InstalledDependencyItemComponentModule, + MarketplaceDependencyItemComponentModule, + ], + exports: [DependencyListComponent], +}) +export class DependencyListComponentModule { } diff --git a/ui/src/app/components/dependency-list/dependency-list.component.scss b/ui/src/app/components/dependency-list/dependency-list.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/components/dependency-list/dependency-list.component.ts b/ui/src/app/components/dependency-list/dependency-list.component.ts new file mode 100644 index 000000000..c05883c14 --- /dev/null +++ b/ui/src/app/components/dependency-list/dependency-list.component.ts @@ -0,0 +1,30 @@ +import { Component, Input } from '@angular/core' +import { BehaviorSubject } from 'rxjs' +import { AppDependency, BaseApp, isOptional } from 'src/app/models/app-types' + +@Component({ + selector: 'dependency-list', + templateUrl: './dependency-list.component.html', + styleUrls: ['./dependency-list.component.scss'], +}) +export class DependencyListComponent { + @Input() depType: 'installed' | 'available' = 'available' + @Input() hostApp: BaseApp + @Input() dependencies: AppDependency[] + dependenciesToDisplay: AppDependency[] + @Input() $loading$: BehaviorSubject = new BehaviorSubject(true) + + constructor () { } + + ngOnChanges () { + this.dependenciesToDisplay = this.dependencies.filter(dep => + this.depType === 'available' ? !isOptional(dep) : true, + ) + } + + ngOnInit () { + this.dependenciesToDisplay = this.dependencies.filter(dep => + this.depType === 'available' ? !isOptional(dep) : true, + ) + } +} diff --git a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.html b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.html new file mode 100644 index 000000000..524cfc1ef --- /dev/null +++ b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.html @@ -0,0 +1,33 @@ + + + + +
+ +
+ +

{{ dep.title }}

+

{{ dep.versionSpec }}

+

{{statusText}}

+

Refreshing

+
+ + + {{actionText}} + + +
+
+ +
+ +
+ +
+
+
+
+ diff --git a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.module.ts b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.module.ts new file mode 100644 index 000000000..e362b55d0 --- /dev/null +++ b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { InstalledDependencyItemComponent } from './installed-dependency-item.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' +import { InformationPopoverComponentModule } from '../../information-popover/information-popover.component.module' +import { StatusComponentModule } from '../../status/status.component.module' + +@NgModule({ + declarations: [InstalledDependencyItemComponent], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + InformationPopoverComponentModule, + StatusComponentModule, + ], + exports: [InstalledDependencyItemComponent], +}) +export class InstalledDependencyItemComponentModule { } diff --git a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.scss b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.scss new file mode 100644 index 000000000..622ac9acd --- /dev/null +++ b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.scss @@ -0,0 +1,30 @@ + +.spinner { + background: rgba(0,0,0,0); + border-radius: 100px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin: 5px; +} + +.badge { + position: absolute; width: 2.5vh; + height: 2.5vh; + border-radius: 50px; + left: -1vh; + top: -1vh; +} + +.xSmallText { + font-size: x-small !important; +} + +.mediumText { + font-size: medium !important; +} + +.opacityUp { + opacity: 0.75; +} \ No newline at end of file diff --git a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.ts b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.ts new file mode 100644 index 000000000..ff89f482a --- /dev/null +++ b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.ts @@ -0,0 +1,113 @@ +import { Component, Input, OnInit } from '@angular/core' +import { NavigationExtras } from '@angular/router' +import { AlertController, NavController } from '@ionic/angular' +import { BehaviorSubject, Observable } from 'rxjs' +import { AppStatus } from 'src/app/models/app-model' +import { AppDependency, BaseApp, DependencyViolationSeverity, getInstalledViolationSeverity, getViolationSeverity, isInstalling, isMisconfigured, isMissing, isNotRunning, isVersionMismatch } from 'src/app/models/app-types' +import { Recommendation } from '../../recommendation-button/recommendation-button.component' + +@Component({ + selector: 'installed-dependency-item', + templateUrl: './installed-dependency-item.component.html', + styleUrls: ['./installed-dependency-item.component.scss'], +}) +export class InstalledDependencyItemComponent implements OnInit { + @Input() dep: AppDependency + @Input() hostApp: BaseApp + @Input() $loading$: BehaviorSubject + + isLoading$: Observable + color: string + installing = false + badgeStyle: string + violationSeverity: DependencyViolationSeverity + statusText: string + actionText: string + action: () => Promise + + constructor (private readonly navCtrl: NavController, private readonly alertCtrl: AlertController) { } + + ngOnInit () { + this.violationSeverity = getInstalledViolationSeverity(this.dep) + + const { color, statusText, installing, actionText, action } = this.getValues() + + this.color = color + this.statusText = statusText + this.installing = installing + this.actionText = actionText + this.action = action + this.badgeStyle = `background: radial-gradient(var(--ion-color-${this.color}) 40%, transparent)` + } + + isDanger () { + // installed dep violations are either REQUIRED or NONE, by getInstalledViolationSeverity above. + return [DependencyViolationSeverity.REQUIRED].includes(this.violationSeverity) + } + + getValues (): { color: string, statusText: string, installing: boolean, actionText: string, action: () => Promise } { + if (isInstalling(this.dep)) return { color: 'primary', statusText: 'Installing', installing: true, actionText: undefined, action: () => this.view() } + if (!this.isDanger()) return { color: 'success', statusText: 'Satisfied', installing: false, actionText: 'View', action: () => this.view() } + + if (isMissing(this.dep)) return { color: 'warning', statusText: 'Not Installed', installing: false, actionText: 'Install', action: () => this.install() } + if (isVersionMismatch(this.dep)) return { color: 'warning', statusText: 'Incompatible Version Installed', installing: false, actionText: 'Update', action: () => this.install() } + if (isMisconfigured(this.dep)) return { color: 'warning', statusText: 'Incompatible Config', installing: false, actionText: 'Configure', action: () => this.configure() } + if (isNotRunning(this.dep)) return { color: 'warning', statusText: 'Not Running', installing: false, actionText: 'View', action: () => this.view() } + return { color: 'success', statusText: 'Satisfied', installing: false, actionText: 'View', action: () => this.view() } + } + + async view () { + return this.navCtrl.navigateForward(`/services/installed/${this.dep.id}`) + } + + async install () { + const verb = 'requires' + const description = `${this.hostApp.title} ${verb} an install of ${this.dep.title} satisfying ${this.dep.versionSpec}.` + + const whyDependency = this.dep.description + + const installationRecommendation: Recommendation = { + iconURL: this.hostApp.iconURL, + appId: this.hostApp.id, + description, + title: this.hostApp.title, + versionSpec: this.dep.versionSpec, + whyDependency, + } + const navigationExtras: NavigationExtras = { + state: { installationRecommendation }, + } + + return this.navCtrl.navigateForward(`/services/marketplace/${this.dep.id}`, navigationExtras) + } + + async configure () { + if (this.dep.violation.name !== 'incompatible-config') return + const configViolationDesc = this.dep.violation.ruleViolations + + const configViolationFormatted = + `
    ${configViolationDesc.map(d => `
  • ${d}
  • `).join('\n')}
` + + const configRecommendation: Recommendation = { + iconURL: this.hostApp.iconURL, + appId: this.hostApp.id, + description: configViolationFormatted, + title: this.hostApp.title, + } + const navigationExtras: NavigationExtras = { + state: { configRecommendation }, + } + + return this.navCtrl.navigateForward(`/services/installed/${this.dep.id}/config`, navigationExtras) + } + + async presentAlertDescription() { + const description = `

${this.dep.description}<\p>` + + const alert = await this.alertCtrl.create({ + backdropDismiss: true, + message: description, + }) + await alert.present() + } +} diff --git a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.html b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.html new file mode 100644 index 000000000..0f25d3732 --- /dev/null +++ b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.html @@ -0,0 +1,45 @@ + + + + +

+ + + +

{{ dep.title }} + (recommended) +

+

{{ dep.versionSpec }}

+

{{statusText}}

+

Refreshing

+
+ + + + + + + + {{actionText}} + + +
+
+ +
+ +
+ +
+
+ + +
+
+
+ + diff --git a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.module.ts b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.module.ts new file mode 100644 index 000000000..de8204c12 --- /dev/null +++ b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { MarketplaceDependencyItemComponent } from './marketplace-dependency-item.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' +import { InformationPopoverComponentModule } from '../../information-popover/information-popover.component.module' +import { StatusComponentModule } from '../../status/status.component.module' + +@NgModule({ + declarations: [MarketplaceDependencyItemComponent], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + InformationPopoverComponentModule, + StatusComponentModule, + ], + exports: [MarketplaceDependencyItemComponent], +}) +export class MarketplaceDependencyItemComponentModule { } diff --git a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.scss b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.scss new file mode 100644 index 000000000..7021720ab --- /dev/null +++ b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.scss @@ -0,0 +1,35 @@ + +.spinner { + background: rgba(0,0,0,0); + border-radius: 100px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin: 14px; +} + +.badge { + position: absolute; width: 2.5vh; + height: 2.5vh; + border-radius: 50px; + left: -1vh; + top: -1vh; +} + +.xSmallText { + font-size: x-small !important; +} + +.mediumText { + font-size: medium !important; +} + +.opacityUp { + opacity: 0.75; +} + +.dependency { + --padding-start: 20px; + --padding-end: 2px; +} \ No newline at end of file diff --git a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.ts b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.ts new file mode 100644 index 000000000..66171dbba --- /dev/null +++ b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.ts @@ -0,0 +1,88 @@ +import { Component, Input, OnInit } from '@angular/core' +import { NavigationExtras } from '@angular/router' +import { NavController } from '@ionic/angular' +import { BehaviorSubject, Observable } from 'rxjs' +import { AppDependency, BaseApp, DependencyViolationSeverity, getViolationSeverity, isOptional, isMissing, isInstalling, isRecommended, isVersionMismatch } from 'src/app/models/app-types' +import { Recommendation } from '../../recommendation-button/recommendation-button.component' + +@Component({ + selector: 'marketplace-dependency-item', + templateUrl: './marketplace-dependency-item.component.html', + styleUrls: ['./marketplace-dependency-item.component.scss'], +}) +export class MarketplaceDependencyItemComponent implements OnInit { + @Input() dep: AppDependency + @Input() hostApp: BaseApp + @Input() $loading$: BehaviorSubject + + presentAlertDescription = false + + isLoading$: Observable + color: string + installing = false + recommended = false + badgeStyle: string + violationSeverity: DependencyViolationSeverity + statusText: string + actionText: 'View' | 'Get' + + descriptionText: string + + constructor ( + private readonly navCtrl: NavController, + ) { } + + ngOnInit () { + this.violationSeverity = getViolationSeverity(this.dep) + if (isOptional(this.dep)) throw new Error('Do not display optional deps, satisfied or otherwise, on the AAL') + + const { actionText, color, statusText, installing } = this.getValues() + + this.color = color + this.statusText = statusText + this.installing = installing + this.recommended = isRecommended(this.dep) + this.actionText = actionText + this.badgeStyle = `background: radial-gradient(var(--ion-color-${this.color}) 40%, transparent)` + this.descriptionText = `

${this.dep.description}<\p>` + if (this.recommended) { + this.descriptionText = this.descriptionText + `

This service is not required: ${this.dep.optional}<\p>` + } + } + + isDanger (): boolean { + return [DependencyViolationSeverity.REQUIRED, DependencyViolationSeverity.RECOMMENDED].includes(this.violationSeverity) + } + + getValues (): { color: string, statusText: string, installing: boolean, actionText: 'View' | 'Get' } { + if (isInstalling(this.dep)) return { color: 'primary', statusText: 'Installing', installing: true, actionText: undefined } + if (!this.isDanger()) return { color: 'success', statusText: 'Satisfied', installing: false, actionText: 'View' } + if (isMissing(this.dep)) return { color: 'warning', statusText: 'Not Installed', installing: false, actionText: 'Get' } + if (isVersionMismatch(this.dep)) return { color: 'warning', statusText: 'Incompatible Version Installed', installing: false, actionText: 'Get' } + return { color: 'success', statusText: 'Satisfied', installing: false, actionText: 'View' } + } + + async toInstall () { + if (this.actionText === 'View') return this.navCtrl.navigateForward(`/services/marketplace/${this.dep.id}`) + + const verb = this.violationSeverity === DependencyViolationSeverity.REQUIRED ? 'requires' : 'recommends' + const description = `${this.hostApp.title} ${verb} an install of ${this.dep.title} satisfying ${this.dep.versionSpec}.` + + const whyDependency = this.dep.description + + const installationRecommendation: Recommendation = { + iconURL: this.hostApp.iconURL, + appId: this.hostApp.id, + description, + title: this.hostApp.title, + versionSpec: this.dep.versionSpec, + whyDependency, + } + const navigationExtras: NavigationExtras = { + state: { installationRecommendation }, + } + + return this.navCtrl.navigateForward(`/services/marketplace/${this.dep.id}`, navigationExtras) + } + +} diff --git a/ui/src/app/components/error-message/error-message.component.html b/ui/src/app/components/error-message/error-message.component.html new file mode 100644 index 000000000..83112c02f --- /dev/null +++ b/ui/src/app/components/error-message/error-message.component.html @@ -0,0 +1,6 @@ + +

{{ error }}

+ + + + diff --git a/ui/src/app/components/error-message/error-message.component.module.ts b/ui/src/app/components/error-message/error-message.component.module.ts new file mode 100644 index 000000000..6f445372d --- /dev/null +++ b/ui/src/app/components/error-message/error-message.component.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { ErrorMessageComponent } from './error-message.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' + +@NgModule({ + declarations: [ + ErrorMessageComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + ], + exports: [ErrorMessageComponent], +}) +export class ErrorMessageComponentModule { } diff --git a/ui/src/app/components/error-message/error-message.component.scss b/ui/src/app/components/error-message/error-message.component.scss new file mode 100644 index 000000000..c500626a7 --- /dev/null +++ b/ui/src/app/components/error-message/error-message.component.scss @@ -0,0 +1,10 @@ +.error-message { + --background: var(--ion-color-danger); + margin: 12px; + border-radius: 3px; + font-weight: bold; +} + +.legacy-error-message { + margin: 5px; +} \ No newline at end of file diff --git a/ui/src/app/components/error-message/error-message.component.ts b/ui/src/app/components/error-message/error-message.component.ts new file mode 100644 index 000000000..313dfb3aa --- /dev/null +++ b/ui/src/app/components/error-message/error-message.component.ts @@ -0,0 +1,19 @@ +import { Component, Input, OnInit } from '@angular/core' +import { BehaviorSubject } from 'rxjs' + +@Component({ + selector: 'error-message', + templateUrl: './error-message.component.html', + styleUrls: ['./error-message.component.scss'], +}) +export class ErrorMessageComponent implements OnInit { + @Input() $error$: BehaviorSubject = new BehaviorSubject(undefined) + @Input() dismissable = true + + constructor () { } + ngOnInit () { } + + clear () { + this.$error$.next(undefined) + } +} diff --git a/ui/src/app/components/information-popover/information-popover.component.html b/ui/src/app/components/information-popover/information-popover.component.html new file mode 100644 index 000000000..66a3b6b84 --- /dev/null +++ b/ui/src/app/components/information-popover/information-popover.component.html @@ -0,0 +1,11 @@ +
+
diff --git a/ui/src/app/components/information-popover/information-popover.component.module.ts b/ui/src/app/components/information-popover/information-popover.component.module.ts new file mode 100644 index 000000000..7aaa53cfa --- /dev/null +++ b/ui/src/app/components/information-popover/information-popover.component.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { InformationPopoverComponent } from './information-popover.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' + +@NgModule({ + declarations: [ + InformationPopoverComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + ], + exports: [InformationPopoverComponent], +}) +export class InformationPopoverComponentModule { } diff --git a/ui/src/app/components/information-popover/information-popover.component.scss b/ui/src/app/components/information-popover/information-popover.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/components/information-popover/information-popover.component.ts b/ui/src/app/components/information-popover/information-popover.component.ts new file mode 100644 index 000000000..80f60f636 --- /dev/null +++ b/ui/src/app/components/information-popover/information-popover.component.ts @@ -0,0 +1,18 @@ +import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core' +import { DomSanitizer, SafeHtml } from '@angular/platform-browser' + +@Component({ + selector: 'app-information-popover', + templateUrl: './information-popover.component.html', + styleUrls: ['./information-popover.component.scss'], + encapsulation: ViewEncapsulation.None, +}) +export class InformationPopoverComponent implements OnInit { + @Input() title: string + @Input() information: string + unsafeInformation: SafeHtml + constructor (private sanitizer: DomSanitizer) { } + ngOnInit () { + this.unsafeInformation = this.sanitizer.bypassSecurityTrustHtml(this.information) + } +} diff --git a/ui/src/app/components/install-wizard/complete/complete.component.html b/ui/src/app/components/install-wizard/complete/complete.component.html new file mode 100644 index 000000000..226a014b3 --- /dev/null +++ b/ui/src/app/components/install-wizard/complete/complete.component.html @@ -0,0 +1,17 @@ +
+
+
+ + {{successText}} + +
+
+ {{summary}} +
+
+
+ +
+ + {{label}} +
\ No newline at end of file diff --git a/ui/src/app/components/install-wizard/complete/complete.component.module.ts b/ui/src/app/components/install-wizard/complete/complete.component.module.ts new file mode 100644 index 000000000..cd509591a --- /dev/null +++ b/ui/src/app/components/install-wizard/complete/complete.component.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { CompleteComponent } from './complete.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' + +@NgModule({ + declarations: [ + CompleteComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + ], + exports: [CompleteComponent], +}) +export class CompleteComponentModule { } diff --git a/ui/src/app/components/install-wizard/complete/complete.component.ts b/ui/src/app/components/install-wizard/complete/complete.component.ts new file mode 100644 index 000000000..def647c31 --- /dev/null +++ b/ui/src/app/components/install-wizard/complete/complete.component.ts @@ -0,0 +1,82 @@ +import { Component, Input, OnInit } from '@angular/core' +import { BehaviorSubject, from, Subject } from 'rxjs' +import { takeUntil } from 'rxjs/operators' +import { markAsLoadingDuring$ } from 'src/app/services/loader.service' +import { capitalizeFirstLetter } from 'src/app/util/misc.util' +import { Colorable, Loadable } from '../loadable' +import { WizardAction } from '../wizard-types' + +@Component({ + selector: 'complete', + templateUrl: './complete.component.html', + styleUrls: ['../install-wizard.component.scss'], +}) +export class CompleteComponent implements OnInit, Loadable, Colorable { + @Input() params: { + action: WizardAction + verb: string //loader verb: '*stopping* ...' + title: string + executeAction: () => Promise + skipCompletionDialogue?: boolean + } + + @Input() finished: (info: { error?: Error, cancelled?: true, final?: true }) => Promise + + $loading$ = new BehaviorSubject(false) + $color$ = new BehaviorSubject('medium') + $cancel$ = new Subject() + + label: string + summary: string + successText: string + + load () { + markAsLoadingDuring$(this.$loading$, from(this.params.executeAction())).pipe(takeUntil(this.$cancel$)).subscribe( + { error: e => this.finished({ error: new Error(`${this.params.action} failed: ${e.message || e}`) }), + complete: () => this.params.skipCompletionDialogue && this.finished( { final: true} ), + }, + ) + } + + constructor () { } + ngOnInit () { + switch (this.params.action) { + case 'install': + this.summary = `Installation of ${this.params.title} is now in progress. You will receive a notification when the installation has completed.` + this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` + this.$color$.next('primary') + this.successText = 'In Progress' + break + case 'downgrade': + this.summary = `Downgrade for ${this.params.title} is now in progress. You will receive a notification when the downgrade has completed.` + this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` + this.$color$.next('primary') + this.successText = 'In Progress' + break + case 'update': + this.summary = `Update for ${this.params.title} is now in progress. You will receive a notification when the update has completed.` + this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` + this.$color$.next('primary') + this.successText = 'In Progress' + break + case 'uninstall': + this.summary = `${capitalizeFirstLetter(this.params.title)} has been successfully uninstalled.` + this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` + this.$color$.next('success') + this.successText = 'Success' + break + case 'stop': + this.summary = `${capitalizeFirstLetter(this.params.title)} has been successfully stopped.` + this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` + this.$color$.next('success') + this.successText = 'Success' + break + case 'configure': + this.summary = `New config for ${this.params.title} has been successfully saved.` + this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` + this.$color$.next('success') + this.successText = 'Success' + break + } + } +} diff --git a/ui/src/app/components/install-wizard/dependencies/dependencies.component.html b/ui/src/app/components/install-wizard/dependencies/dependencies.component.html new file mode 100644 index 000000000..3363ddfcf --- /dev/null +++ b/ui/src/app/components/install-wizard/dependencies/dependencies.component.html @@ -0,0 +1,31 @@ +
+
+
+ + {{label}} + +
+ +
+ {{longMessage}} +
+ +
+ + +
+ +
+ +
{{dep.title}}
+ {{dep.versionSpec}} +
+ {{dep.violation}} + +
+
+
+
diff --git a/ui/src/app/components/install-wizard/dependencies/dependencies.component.module.ts b/ui/src/app/components/install-wizard/dependencies/dependencies.component.module.ts new file mode 100644 index 000000000..d41c07e08 --- /dev/null +++ b/ui/src/app/components/install-wizard/dependencies/dependencies.component.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { DependenciesComponent } from './dependencies.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' +import { StatusComponentModule } from '../../status/status.component.module' + +@NgModule({ + declarations: [ + DependenciesComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + StatusComponentModule, + ], + exports: [DependenciesComponent], +}) +export class DependenciesComponentModule { } diff --git a/ui/src/app/components/install-wizard/dependencies/dependencies.component.ts b/ui/src/app/components/install-wizard/dependencies/dependencies.component.ts new file mode 100644 index 000000000..6341f155f --- /dev/null +++ b/ui/src/app/components/install-wizard/dependencies/dependencies.component.ts @@ -0,0 +1,127 @@ +import { Component, Input, OnInit } from '@angular/core' +import { PopoverController } from '@ionic/angular' +import { BehaviorSubject, Subject } from 'rxjs' +import { AppStatus } from 'src/app/models/app-model' +import { AppDependency, DependencyViolationSeverity, getViolationSeverity } from 'src/app/models/app-types' +import { displayEmver } from 'src/app/pipes/emver.pipe' +import { InformationPopoverComponent } from '../../information-popover/information-popover.component' +import { Colorable, Loadable } from '../loadable' +import { WizardAction } from '../wizard-types' + +@Component({ + selector: 'dependencies', + templateUrl: './dependencies.component.html', + styleUrls: ['../install-wizard.component.scss'], +}) +export class DependenciesComponent implements OnInit, Loadable, Colorable { + @Input() params: { + action: WizardAction, + title: string, + version: string, + serviceRequirements: AppDependency[] + } + + filteredServiceRequirements: AppDependency[] + + $loading$ = new BehaviorSubject(false) + $cancel$ = new Subject() + + longMessage: string + dependencyViolations: { + iconURL: string + title: string, + versionSpec: string, + violation: string, + color: string, + badgeStyle: string + }[] + label: string + $color$ = new BehaviorSubject('medium') + + constructor (private readonly popoverController: PopoverController) { } + + load () { + this.$color$.next(this.$color$.getValue()) + } + + ngOnInit () { + this.filteredServiceRequirements = this.params.serviceRequirements.filter(dep => { + return [DependencyViolationSeverity.REQUIRED, DependencyViolationSeverity.RECOMMENDED].includes(getViolationSeverity(dep)) + }) + .filter(dep => ['incompatible-version', 'missing'].includes(dep.violation.name)) + + this.dependencyViolations = this.filteredServiceRequirements + .map(dep => ({ + iconURL: dep.iconURL, + title: dep.title, + versionSpec: (dep.violation && dep.violation.name === 'incompatible-config' && 'reconfigure') || dep.versionSpec, + isInstalling: dep.violation && dep.violation.name === 'incompatible-status' && dep.violation.status === AppStatus.INSTALLING, + violation: renderViolation(dep), + color: 'medium', + badgeStyle: `background: radial-gradient(var(--ion-color-warning) 40%, transparent)`, + })) + + this.setSeverityAttributes() + } + + setSeverityAttributes () { + switch (getWorstViolationSeverity(this.filteredServiceRequirements)){ + case DependencyViolationSeverity.REQUIRED: + this.longMessage = `${this.params.title} requires the installation of other services. Don't worry, you'll be able to install these requirements later.` + this.label = 'Notice' + this.$color$.next('dark') + break + case DependencyViolationSeverity.RECOMMENDED: + this.longMessage = `${this.params.title} recommends the installation of other services. Don't worry, you'll be able to install these requirements later.` + this.label = 'Notice' + this.$color$.next('dark') + break + default: + this.longMessage = `All installation requirements for ${this.params.title} version ${displayEmver(this.params.version)} are met.` + this.$color$.next('success') + this.label = `Ready` + } + } + + async presentPopover (ev: any, information: string) { + const popover = await this.popoverController.create({ + component: InformationPopoverComponent, + event: ev, + translucent: false, + showBackdrop: true, + backdropDismiss: true, + componentProps: { + information, + }, + }) + return popover.present() + } +} + +function renderViolation1 (dep: AppDependency): string { + const severity = getViolationSeverity(dep) + switch (severity){ + case DependencyViolationSeverity.REQUIRED: return 'mandatory' + case DependencyViolationSeverity.RECOMMENDED: return 'recommended' + case DependencyViolationSeverity.OPTIONAL: return 'optional' + case DependencyViolationSeverity.NONE: return 'none' + } +} + +function renderViolation (dep: AppDependency): string { + const severity = renderViolation1(dep) + if (severity === 'none') return '' + + switch (dep.violation.name){ + case 'missing': return `${severity}` + case 'incompatible-version': return `${severity}` + case 'incompatible-config': return `` + case 'incompatible-status': return '' + default: return '' + } +} + +function getWorstViolationSeverity (rs: AppDependency[]) : DependencyViolationSeverity { + if (!rs) return DependencyViolationSeverity.NONE + return rs.map(getViolationSeverity).sort( (a, b) => b - a )[0] || DependencyViolationSeverity.NONE +} diff --git a/ui/src/app/components/install-wizard/dependents/dependents.component.html b/ui/src/app/components/install-wizard/dependents/dependents.component.html new file mode 100644 index 000000000..5d2f6e30f --- /dev/null +++ b/ui/src/app/components/install-wizard/dependents/dependents.component.html @@ -0,0 +1,42 @@ +
+
+
+
+ + WARNING + + + READY + +
+ +
+ {{longMessage}} +
+
+
+ Will Stop +
+ + + + + +
{{dep.title}}
+
+
+
+
+
+
+ + Checking for installed services which depend on {{params.title}}... +
+
\ No newline at end of file diff --git a/ui/src/app/components/install-wizard/dependents/dependents.component.module.ts b/ui/src/app/components/install-wizard/dependents/dependents.component.module.ts new file mode 100644 index 000000000..cbe95d71f --- /dev/null +++ b/ui/src/app/components/install-wizard/dependents/dependents.component.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { DependentsComponent } from './dependents.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' +import { InformationPopoverComponentModule } from '../../information-popover/information-popover.component.module' + +@NgModule({ + declarations: [ + DependentsComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + InformationPopoverComponentModule, + ], + exports: [DependentsComponent], +}) +export class DependentsComponentModule { } diff --git a/ui/src/app/components/install-wizard/dependents/dependents.component.ts b/ui/src/app/components/install-wizard/dependents/dependents.component.ts new file mode 100644 index 000000000..14fac4be8 --- /dev/null +++ b/ui/src/app/components/install-wizard/dependents/dependents.component.ts @@ -0,0 +1,59 @@ +import { Component, Input, OnInit } from '@angular/core' +import { BehaviorSubject, from, Subject } from 'rxjs' +import { takeUntil, tap } from 'rxjs/operators' +import { DependentBreakage } from 'src/app/models/app-types' +import { markAsLoadingDuring$ } from 'src/app/services/loader.service' +import { capitalizeFirstLetter } from 'src/app/util/misc.util' +import { Colorable, Loadable } from '../loadable' +import { WizardAction } from '../wizard-types' + +@Component({ + selector: 'dependents', + templateUrl: './dependents.component.html', + styleUrls: ['../install-wizard.component.scss'], +}) +export class DependentsComponent implements OnInit, Loadable, Colorable { + @Input() params: { + title: string, + action: WizardAction, //Are you sure you want to *uninstall*..., + verb: string, // *Uninstalling* will cause problems... + fetchBreakages: () => Promise, + skipConfirmationDialogue?: boolean + } + @Input() finished: (info: { error?: Error, cancelled?: true, final?: true }) => Promise + + + dependentBreakages: DependentBreakage[] + hasDependentViolation: boolean + longMessage: string | null = null + $color$ = new BehaviorSubject('medium') // this will display disabled while loading + $loading$ = new BehaviorSubject(false) + $cancel$ = new Subject() + + constructor () { } + ngOnInit () { } + + load () { + this.$color$.next('medium') + markAsLoadingDuring$(this.$loading$, from(this.params.fetchBreakages())).pipe( + takeUntil(this.$cancel$), + tap(breakages => this.dependentBreakages = breakages || []), + ).subscribe( + { + complete: () => { + this.hasDependentViolation = this.dependentBreakages && this.dependentBreakages.length > 0 + if (this.hasDependentViolation) { + this.longMessage = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title} will cause the following services to STOP running. Starting them again will require additional actions.` + this.$color$.next('warning') + } else if (this.params.skipConfirmationDialogue) { + this.finished({ }) + } else { + this.longMessage = `No other services installed on your Embassy will be affected by this action.` + this.$color$.next('success') + } + }, + error: (e: Error) => this.finished({ error: new Error(`Fetching dependent service information failed: ${e.message || e}`) }), + }, + ) + } +} diff --git a/ui/src/app/components/install-wizard/install-wizard.component.html b/ui/src/app/components/install-wizard/install-wizard.component.html new file mode 100644 index 000000000..3194bedd9 --- /dev/null +++ b/ui/src/app/components/install-wizard/install-wizard.component.html @@ -0,0 +1,52 @@ + + + +

{{ params.toolbar.title }}

+

{{params.toolbar.action}} {{ params.toolbar.version | displayEmver }}

+
+
+
+ + + + + + + + + + + +
+
+
+ + Error + +
+
+ {{error}} +
+
+
+
+ + + + + + {{t}} + + + + {{t}} + + + {{nextButton}} + {{finishButton}} + + + Dismiss + + + diff --git a/ui/src/app/components/install-wizard/install-wizard.component.module.ts b/ui/src/app/components/install-wizard/install-wizard.component.module.ts new file mode 100644 index 000000000..dea976a81 --- /dev/null +++ b/ui/src/app/components/install-wizard/install-wizard.component.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { InstallWizardComponent } from './install-wizard.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' +import { DependenciesComponentModule } from './dependencies/dependencies.component.module' +import { DependentsComponentModule } from './dependents/dependents.component.module' +import { CompleteComponentModule } from './complete/complete.component.module' + +@NgModule({ + declarations: [ + InstallWizardComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + DependenciesComponentModule, + DependentsComponentModule, + CompleteComponentModule, + ], + exports: [InstallWizardComponent], +}) +export class InstallWizardComponentModule { } diff --git a/ui/src/app/components/install-wizard/install-wizard.component.scss b/ui/src/app/components/install-wizard/install-wizard.component.scss new file mode 100644 index 000000000..03a59a661 --- /dev/null +++ b/ui/src/app/components/install-wizard/install-wizard.component.scss @@ -0,0 +1,79 @@ +.toolbar-label { + display: flex; + flex-direction: column; + justify-content: center; + width: 100%; + color: white; + padding: 8px 0px 8px 15px; +} + +.toolbar-title { + font-size: x-large; + text-transform: capitalize; + border-style: solid; + border-width: 0px 0px 1px 0px; + border-color: #404040; + font-family: 'Montserrat'; +} + +.center-spinner { + min-height: 40vh; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + color:white; +} + +.slide-content { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 100%; + color:white; + min-height: 40vh +} + +.status-label { + font-size: xx-large; + font-weight: bold; +} + +.long-message { + margin-left: 5%; + margin-right: 5%; + padding: 10px; + font-size: small; + border-width: 0px 0px 1px 0px; + border-color: #393b40; +} + +@media (min-width:500px) { + .long-message { + margin-left: 5%; + margin-right: 5%; + padding: 10px; + font-size: medium; + border-width: 0px 0px 1px 0px; + border-color: #393b40; + } +} + +.toolbar-button { + text-transform: capitalize; + font-weight: bolder; +} + +.smaller-text { + font-size: 14px; +} + +.badge { + position: absolute; + width: 2vh; + height: 2vh; + border-radius: 50px; + left: -0.75vh; + top: -0.75vh; +} diff --git a/ui/src/app/components/install-wizard/install-wizard.component.ts b/ui/src/app/components/install-wizard/install-wizard.component.ts new file mode 100644 index 000000000..a02ad2aac --- /dev/null +++ b/ui/src/app/components/install-wizard/install-wizard.component.ts @@ -0,0 +1,128 @@ +import { Component, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core' +import { IonContent, IonSlides, ModalController } from '@ionic/angular' +import { BehaviorSubject, combineLatest, Subscription } from 'rxjs' +import { map } from 'rxjs/operators' +import { Cleanup } from 'src/app/util/cleanup' +import { capitalizeFirstLetter } from 'src/app/util/misc.util' +import { CompleteComponent } from './complete/complete.component' +import { DependenciesComponent } from './dependencies/dependencies.component' +import { DependentsComponent } from './dependents/dependents.component' +import { Colorable, Loadable } from './loadable' +import { WizardAction } from './wizard-types' + +@Component({ + selector: 'install-wizard', + templateUrl: './install-wizard.component.html', + styleUrls: ['./install-wizard.component.scss'], +}) +export class InstallWizardComponent extends Cleanup implements OnInit { + @Input() params: { + // defines the slideshow in the html + slideDefinitions: SlideDefinition[] + toolbar: TopbarParams + } + + // containers + @ViewChild(IonContent) contentContainer: IonContent + @ViewChild(IonSlides) slideContainer: IonSlides + + //don't use this, use slideComponents instead. + @ViewChildren('components') + public slideComponentsQL: QueryList + + //don't use this, use currentSlide instead. + slideIndex = 0 + + get slideComponents (): (Loadable & Colorable)[] { + return this.slideComponentsQL.toArray() + } + + get currentSlide (): (Loadable & Colorable) { + return this.slideComponents[this.slideIndex] + } + + get currentSlideDef (): SlideDefinition { + return this.params.slideDefinitions[this.slideIndex] + } + + $anythingLoading$: BehaviorSubject = new BehaviorSubject(true) + $currentColor$: BehaviorSubject = new BehaviorSubject('medium') + $error$ = new BehaviorSubject(undefined) + + constructor (private readonly modalController: ModalController) { super() } + ngOnInit () { } + + ngAfterViewInit () { + this.currentSlide.load() + this.slideContainer.update() + this.slideContainer.lockSwipes(true) + } + + ionViewDidEnter () { + this.cleanup( + combineLatest(this.slideComponents.map(component => component.$loading$)).pipe( + map(loadings => !loadings.every(p => !p)), + ).subscribe(this.$anythingLoading$), + combineLatest(this.slideComponents.map(component => component.$color$)).pipe( + map(colors => colors[this.slideIndex]), + ).subscribe(this.$currentColor$), + ) + } + + finished = (info: { error?: Error, cancelled?: true, final?: true }) => { + if (info.cancelled) this.currentSlide.$cancel$.next() + if (info.final || info.cancelled) return this.modalController.dismiss(info) + if (info.error) return this.$error$.next(capitalizeFirstLetter(info.error.message)) + + this.slide() + } + + private async slide () { + if (this.slideComponents[this.slideIndex + 1] === undefined) { return this.finished({ final: true }) } + this.slideIndex += 1 + await this.slideContainer.lockSwipes(false) + await Promise.all([this.contentContainer.scrollToTop(), this.slideContainer.slideNext()]) + await this.slideContainer.lockSwipes(true) + this.currentSlide.load() + } +} + +export interface SlideCommon { + selector: string + cancelButton: { + // indicates the existence of a cancel button, and whether to have text or an icon 'x' by default. + afterLoading?: { text?: string }, + whileLoading?: { text?: string } + } + nextButton?: string, + finishButton?: string +} + +export type SlideDefinition = SlideCommon & ( + { + selector: 'dependencies', + params: DependenciesComponent['params'] + } | { + selector: 'dependents', + params: DependentsComponent['params'] + } | { + selector: 'complete', + params: CompleteComponent['params'] + } +) + +export type TopbarParams = { action: WizardAction, title: string, version: string } + +export async function wizardModal ( + modalController: ModalController, params: InstallWizardComponent['params'], +): Promise<{ cancelled?: true, final?: true, modal: HTMLIonModalElement }> { + const modal = await modalController.create({ + backdropDismiss: false, + cssClass: 'wizard-modal', + component: InstallWizardComponent, + componentProps: { params }, + }) + + await modal.present() + return modal.onWillDismiss().then(({ data }) => ({ ...data, modal })) +} diff --git a/ui/src/app/components/install-wizard/loadable.ts b/ui/src/app/components/install-wizard/loadable.ts new file mode 100644 index 000000000..f2f69d6b6 --- /dev/null +++ b/ui/src/app/components/install-wizard/loadable.ts @@ -0,0 +1,11 @@ +import { BehaviorSubject, Subject } from 'rxjs' + +export interface Loadable { + load: () => void + $loading$: BehaviorSubject //will be true during load function + $cancel$: Subject //will cancel load function +} + +export interface Colorable { + $color$: BehaviorSubject +} diff --git a/ui/src/app/components/install-wizard/prebaked-wizards.ts b/ui/src/app/components/install-wizard/prebaked-wizards.ts new file mode 100644 index 000000000..548dba910 --- /dev/null +++ b/ui/src/app/components/install-wizard/prebaked-wizards.ts @@ -0,0 +1,161 @@ +import { Injectable } from '@angular/core' +import { AppModel, AppStatus } from 'src/app/models/app-model' +import { AppDependency, DependentBreakage, AppInstalledPreview } from '../../models/app-types' +import { ApiService } from '../../services/api/api.service' +import { InstallWizardComponent, SlideDefinition, TopbarParams } from './install-wizard.component' + +@Injectable({ providedIn: 'root' }) +export class WizardBaker { + constructor (private readonly apiService: ApiService, private readonly appModel: AppModel) { } + + install (values: { + id: string, title: string, version: string, serviceRequirements: AppDependency[] + }): InstallWizardComponent['params'] { + const { id, title, version, serviceRequirements } = values + + validate(id, exists, 'missing id') + validate(title, exists, 'missing title') + validate(version, exists, 'missing version') + validate(serviceRequirements, t => !!t && Array.isArray(t), 'missing serviceRequirements') + + const action = 'install' + const toolbar: TopbarParams = { action, title, version } + + const slideDefinitions: SlideDefinition[] = [ + { selector: 'dependencies', cancelButton: { afterLoading: { text: 'Cancel' } }, nextButton: 'Install', params: { + action, title, version, serviceRequirements, + }}, + { selector: 'complete', finishButton: 'Dismiss', cancelButton: { whileLoading: { } }, params: { + action, verb: 'beginning installation for', title, executeAction: () => this.apiService.installApp(id, version).then(app => { + this.appModel.add({ ...app, status: AppStatus.INSTALLING }) + }), + }}, + ] + return { toolbar, slideDefinitions } + } + + update (values: { + id: string, title: string, version: string, serviceRequirements: AppDependency[] + }): InstallWizardComponent['params'] { + const { id, title, version, serviceRequirements } = values + validate(id, exists, 'missing id') + validate(title, exists, 'missing title') + validate(version, exists, 'missing version') + validate(serviceRequirements, t => !!t && Array.isArray(t), 'missing serviceRequirements') + + const action = 'update' + const toolbar: TopbarParams = { action, title, version } + + const slideDefinitions: SlideDefinition[] = [ + { selector: 'dependencies', cancelButton: { afterLoading: { text: 'Cancel' } }, nextButton: 'Update', params: { + action, title, version, serviceRequirements, + }}, + { selector: 'dependents', cancelButton: { whileLoading: { }, afterLoading: { text: 'Cancel' } }, nextButton: 'Update Anyways', params: { + skipConfirmationDialogue: true, action, verb: 'updating', title, fetchBreakages: () => this.apiService.installApp(id, version, true).then( ({ breakages }) => breakages ), + }}, + { selector: 'complete', finishButton: 'Dismiss', cancelButton: { whileLoading: { } }, params: { + action, verb: 'beginning update for', title, executeAction: () => this.apiService.installApp(id, version).then(app => { + this.appModel.update({ id: app.id, status: AppStatus.INSTALLING }) + }), + }}, + ] + return { toolbar, slideDefinitions } + } + + downgrade (values: { + id: string, title: string, version: string, serviceRequirements: AppDependency[] + }): InstallWizardComponent['params'] { + const { id, title, version, serviceRequirements } = values + + validate(id, exists, 'missing id') + validate(title, exists, 'missing title') + validate(version, exists, 'missing version') + validate(serviceRequirements, t => !!t && Array.isArray(t), 'missing serviceRequirements') + + const action = 'downgrade' + const toolbar: TopbarParams = { action, title, version } + + const slideDefinitions: SlideDefinition[] = [ + { selector: 'dependencies', cancelButton: { afterLoading: { text: 'Cancel' } }, nextButton: 'Downgrade', params: { + action, title, version, serviceRequirements, + }}, + { selector: 'dependents', cancelButton: { whileLoading: { }, afterLoading: { text: 'Cancel' } }, nextButton: 'Downgrade Anyways', params: { + skipConfirmationDialogue: true, action, verb: 'downgrading', title, fetchBreakages: () => this.apiService.installApp(id, version, true).then( ({ breakages }) => breakages ), + }}, + { selector: 'complete', finishButton: 'Dismiss', cancelButton: { whileLoading: { } }, params: { + action, verb: 'beginning downgrade for', title, executeAction: () => this.apiService.installApp(id, version).then(app => { + this.appModel.update({ id: app.id, status: AppStatus.INSTALLING }) + }), + }}, + ] + return { toolbar, slideDefinitions } + } + + uninstall (values: { + id: string, title: string, version: string + }): InstallWizardComponent['params'] { + const { id, title, version } = values + + validate(id, exists, 'missing id') + validate(title, exists, 'missing title') + validate(version, exists, 'missing version') + + const action = 'uninstall' + const toolbar: TopbarParams = { action, title, version } + + const slideDefinitions: SlideDefinition[] = [ + { selector: 'dependents', cancelButton: { whileLoading: { }, afterLoading: { text: 'Cancel' } }, nextButton: 'Uninstall', params: { + action, verb: 'uninstalling', title, fetchBreakages: () => this.apiService.uninstallApp(id, true).then( ({ breakages }) => breakages ), + }}, + { selector: 'complete', finishButton: 'Dismiss', cancelButton: { whileLoading: { } }, params: { + action, verb: 'uninstalling', title, executeAction: () => this.apiService.uninstallApp(id).then(() => this.appModel.delete(id)), + }}, + ] + return { toolbar, slideDefinitions } + } + + stop (values: { + breakages: DependentBreakage[], id: string, title: string, version: string + }): InstallWizardComponent['params'] { + const { breakages, title, version } = values + + validate(breakages, t => !!t && Array.isArray(t), 'missing breakages') + validate(title, exists, 'missing title') + validate(version, exists, 'missing version') + + const action = 'stop' + const toolbar: TopbarParams = { action, title, version } + + const slideDefinitions: SlideDefinition[] = [ + { selector: 'dependents', cancelButton: { afterLoading: { text: 'Cancel' } }, nextButton: 'Stop Anyways', params: { + action, verb: 'stopping', title, fetchBreakages: () => Promise.resolve(breakages), + }}, + ] + return { toolbar, slideDefinitions } + } + + configure (values: { + breakages: DependentBreakage[], app: AppInstalledPreview + }): InstallWizardComponent['params'] { + const { breakages, app } = values + const { title, versionInstalled: version } = app + const action = 'configure' + const toolbar: TopbarParams = { action, title, version } + + const slideDefinitions: SlideDefinition[] = [ + { selector: 'dependents', cancelButton: { afterLoading: { text: 'Cancel' } }, nextButton: 'Save Config Anyways', params: { + action, verb: 'saving config for', title, fetchBreakages: () => Promise.resolve(breakages), + }}, + ] + return { toolbar, slideDefinitions } + } +} + +function validate (t: T, test: (t: T) => Boolean, desc: string) { + if (!test(t)) { + console.error('failed validation', desc, t) + throw new Error(desc) + } +} + +const exists = t => !!t \ No newline at end of file diff --git a/ui/src/app/components/install-wizard/wizard-types.ts b/ui/src/app/components/install-wizard/wizard-types.ts new file mode 100644 index 000000000..f7e31c953 --- /dev/null +++ b/ui/src/app/components/install-wizard/wizard-types.ts @@ -0,0 +1,7 @@ +export type WizardAction = + 'install' + | 'update' + | 'downgrade' + | 'uninstall' + | 'stop' + | 'configure' \ No newline at end of file diff --git a/ui/src/app/components/object-config/object-config-item.component.html b/ui/src/app/components/object-config/object-config-item.component.html new file mode 100644 index 000000000..7ed4bd2c7 --- /dev/null +++ b/ui/src/app/components/object-config/object-config-item.component.html @@ -0,0 +1,16 @@ + + + + + + +
+ + {{ spec.name }} + (new) + +
+ + {{ displayValue }} +
+ diff --git a/ui/src/app/components/object-config/object-config.component.html b/ui/src/app/components/object-config/object-config.component.html new file mode 100644 index 000000000..ed4a46da3 --- /dev/null +++ b/ui/src/app/components/object-config/object-config.component.html @@ -0,0 +1,10 @@ +
+ +
\ No newline at end of file diff --git a/ui/src/app/components/object-config/object-config.component.module.ts b/ui/src/app/components/object-config/object-config.component.module.ts new file mode 100644 index 000000000..3938c0614 --- /dev/null +++ b/ui/src/app/components/object-config/object-config.component.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { FormsModule } from '@angular/forms' +import { ObjectConfigComponent, ObjectConfigItemComponent } from './object-config.component' +import { IonicModule } from '@ionic/angular' +import { SharingModule } from 'src/app/modules/sharing.module' + +@NgModule({ + declarations: [ + ObjectConfigComponent, + ObjectConfigItemComponent, + ], + imports: [ + CommonModule, + FormsModule, + IonicModule, + SharingModule, + ], + exports: [ + ObjectConfigComponent, + ObjectConfigItemComponent, + ], +}) +export class ObjectConfigComponentModule { } diff --git a/ui/src/app/components/object-config/object-config.component.scss b/ui/src/app/components/object-config/object-config.component.scss new file mode 100644 index 000000000..97beee453 --- /dev/null +++ b/ui/src/app/components/object-config/object-config.component.scss @@ -0,0 +1,43 @@ +.add-margin { + margin: 0 16px; +} + +.help-button { + position: relative; + bottom: 7px; + right: 9px; +} + +.new-tag { + padding: 0px 5px; + font-weight: bold; + font-size: smaller; + color: #cecece; + font-style: italic; +} + +.status-icon{ + // width: 2%; + margin-right: 12px; +} + +.bright { + color: white !important; +} + +.bold { + font-weight: bold; +} + +.invalid { + color: var(--ion-color-danger) !important; +} + +.organizer { + display: flex; + align-items: center; +} + +.name { + text-decoration: underline; +} \ No newline at end of file diff --git a/ui/src/app/components/object-config/object-config.component.ts b/ui/src/app/components/object-config/object-config.component.ts new file mode 100644 index 000000000..6f4f9f482 --- /dev/null +++ b/ui/src/app/components/object-config/object-config.component.ts @@ -0,0 +1,101 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core' +import { Annotation, Annotations } from '../../app-config/config-utilities' +import { TrackingModalController } from 'src/app/services/tracking-modal-controller.service' +import { ConfigCursor } from 'src/app/app-config/config-cursor' +import { ModalPresentable } from 'src/app/app-config/modal-presentable' +import { ValueSpecOf, ValueSpec } from 'src/app/app-config/config-types' +import { MaskPipe } from 'src/app/pipes/mask.pipe' + +@Component({ + selector: 'object-config', + templateUrl: './object-config.component.html', + styleUrls: ['./object-config.component.scss'], +}) +export class ObjectConfigComponent extends ModalPresentable { + @Input() cursor: ConfigCursor<'object' | 'union'> + @Output() onEdit = new EventEmitter() + spec: ValueSpecOf<'object' | 'union'> + value: object + annotations: Annotations<'object' | 'union'> + + constructor ( + trackingModalCtrl: TrackingModalController, + ) { + super(trackingModalCtrl) + } + + ngOnInit () { + this.spec = this.cursor.spec() + this.value = this.cursor.config() + this.annotations = this.cursor.getAnnotations() + } + + async handleClick (key: string) { + const nextCursor = this.cursor.seekNext(key) + nextCursor.createFirstEntryForList() + + await this.presentModal(nextCursor, () => { + this.onEdit.emit(true) + this.annotations = this.cursor.getAnnotations() + }) + } + + asIsOrder () { + return 0 + } +} + +@Component({ + selector: 'object-config-item', + templateUrl: './object-config-item.component.html', + styleUrls: ['./object-config.component.scss'], +}) + +export class ObjectConfigItemComponent { + @Input() key: string + @Input() spec: ValueSpec + @Input() value: string | number + @Input() anno: Annotation + @Output() onClick = new EventEmitter() + maskPipe: MaskPipe = new MaskPipe() + + displayValue?: string | number | boolean + + ngOnChanges () { + switch (this.spec.type) { + case 'string': + if (this.value) { + if (this.spec.masked) { + this.displayValue = this.maskPipe.transform(this.value as string, 4) + } else { + this.displayValue = this.value + } + } else { + this.displayValue = '-' + } + break + case 'boolean': + this.displayValue = String(this.value) + break + case 'number': + this.displayValue = this.value || '-' + if (this.displayValue && this.spec.units) { + this.displayValue = `${this.displayValue} ${this.spec.units}` + } + break + case 'enum': + this.displayValue = this.spec.valueNames[this.value] + break + case 'pointer': + this.displayValue = 'System Defined' + break + default: + return + } + } + + async handleClick (): Promise { + if (this.spec.type === 'pointer') return + this.onClick.emit(true) + } +} \ No newline at end of file diff --git a/ui/src/app/components/pwa-back-button/pwa-back.component.html b/ui/src/app/components/pwa-back-button/pwa-back.component.html new file mode 100644 index 000000000..a68d114c6 --- /dev/null +++ b/ui/src/app/components/pwa-back-button/pwa-back.component.html @@ -0,0 +1,3 @@ + + + diff --git a/ui/src/app/components/pwa-back-button/pwa-back.component.module.ts b/ui/src/app/components/pwa-back-button/pwa-back.component.module.ts new file mode 100644 index 000000000..94443f554 --- /dev/null +++ b/ui/src/app/components/pwa-back-button/pwa-back.component.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { PwaBackComponent } from './pwa-back.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' + +@NgModule({ + declarations: [ + PwaBackComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + ], + exports: [PwaBackComponent], +}) +export class PwaBackComponentModule { } diff --git a/ui/src/app/components/pwa-back-button/pwa-back.component.scss b/ui/src/app/components/pwa-back-button/pwa-back.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/components/pwa-back-button/pwa-back.component.ts b/ui/src/app/components/pwa-back-button/pwa-back.component.ts new file mode 100644 index 000000000..cc8bb0379 --- /dev/null +++ b/ui/src/app/components/pwa-back-button/pwa-back.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core' +import { PwaBackService } from 'src/app/services/pwa-back.service' +@Component({ + selector: 'pwa-back-button', + templateUrl: './pwa-back.component.html', + styleUrls: ['./pwa-back.component.scss'], +}) +export class PwaBackComponent { + constructor ( + private readonly pwaBack: PwaBackService, + ) { } + + navigateBack () { + return this.pwaBack.back() + } +} diff --git a/ui/src/app/components/qr/qr.component.html b/ui/src/app/components/qr/qr.component.html new file mode 100644 index 000000000..24010028f --- /dev/null +++ b/ui/src/app/components/qr/qr.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/src/app/components/qr/qr.component.module.ts b/ui/src/app/components/qr/qr.component.module.ts new file mode 100644 index 000000000..bc52b9c5a --- /dev/null +++ b/ui/src/app/components/qr/qr.component.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { QRComponent } from './qr.component' +import { IonicModule } from '@ionic/angular' +import { QRCodeModule } from 'angularx-qrcode' + +@NgModule({ + declarations: [ + QRComponent, + ], + imports: [ + CommonModule, + IonicModule, + QRCodeModule, + ], + exports: [QRComponent], +}) +export class QRComponentModule { } diff --git a/ui/src/app/components/qr/qr.component.scss b/ui/src/app/components/qr/qr.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/components/qr/qr.component.ts b/ui/src/app/components/qr/qr.component.ts new file mode 100644 index 000000000..6a37bedf7 --- /dev/null +++ b/ui/src/app/components/qr/qr.component.ts @@ -0,0 +1,16 @@ +import { Component, Input } from '@angular/core' +import { isPlatform } from '@ionic/angular' + +@Component({ + selector: 'qr', + templateUrl: './qr.component.html', + styleUrls: ['./qr.component.scss'], +}) +export class QRComponent { + @Input() text: string + width: number + + ngOnInit () { + this.width = isPlatform('ios') || isPlatform('android') ? 320 : 420 + } +} diff --git a/ui/src/app/components/recommendation-button/recommendation-button.component.html b/ui/src/app/components/recommendation-button/recommendation-button.component.html new file mode 100644 index 000000000..785c811b2 --- /dev/null +++ b/ui/src/app/components/recommendation-button/recommendation-button.component.html @@ -0,0 +1,9 @@ + + + + + diff --git a/ui/src/app/components/recommendation-button/recommendation-button.component.module.ts b/ui/src/app/components/recommendation-button/recommendation-button.component.module.ts new file mode 100644 index 000000000..4bceb29c8 --- /dev/null +++ b/ui/src/app/components/recommendation-button/recommendation-button.component.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { RecommendationButtonComponent } from './recommendation-button.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' + +@NgModule({ + declarations: [ + RecommendationButtonComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + ], + exports: [RecommendationButtonComponent], +}) +export class RecommendationButtonComponentModule { } diff --git a/ui/src/app/components/recommendation-button/recommendation-button.component.scss b/ui/src/app/components/recommendation-button/recommendation-button.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/components/recommendation-button/recommendation-button.component.ts b/ui/src/app/components/recommendation-button/recommendation-button.component.ts new file mode 100644 index 000000000..32d9bf03b --- /dev/null +++ b/ui/src/app/components/recommendation-button/recommendation-button.component.ts @@ -0,0 +1,66 @@ +import { Component, Input, OnInit } from '@angular/core' +import { Router } from '@angular/router' +import { PopoverController } from '@ionic/angular' +import { filter, take } from 'rxjs/operators' +import { Cleanup } from 'src/app/util/cleanup' +import { capitalizeFirstLetter } from 'src/app/util/misc.util' +import { InformationPopoverComponent } from '../information-popover/information-popover.component' + +@Component({ + selector: 'recommendation-button', + templateUrl: './recommendation-button.component.html', + styleUrls: ['./recommendation-button.component.scss'], +}) +export class RecommendationButtonComponent extends Cleanup implements OnInit { + @Input() rec: Recommendation + @Input() raise?: { id: string } + constructor (private readonly router: Router, private readonly popoverController: PopoverController) { + super() + } + + ngOnInit () { + if (!this.raise) return + const mainContent = document.getElementsByTagName('ion-app')[0] + const recButton = document.getElementById(this.raise.id) + mainContent.appendChild(recButton) + + this.router.events.pipe(filter(e => !!(e as any).urlAfterRedirects, take(1))).subscribe((e: any) => { + recButton.remove() + }) + } + + disabled = false + + async presentPopover (ev: any) { + const popover = await this.popoverController.create({ + component: InformationPopoverComponent, + event: ev, + translucent: false, + showBackdrop: true, + backdropDismiss: true, + componentProps: { + information: ` +
+ ${capitalizeFirstLetter(this.rec.title)} Installation Recommendations +
+
+ ${this.rec.description} +
`, + }, + }) + popover.onWillDismiss().then(() => { + this.disabled = false + }) + this.disabled = true + return await popover.present() + } +} + +export type Recommendation = { + title: string + appId: string + iconURL: string, + description: string, + versionSpec?: string + whyDependency?: string +} diff --git a/ui/src/app/components/status/status.component.html b/ui/src/app/components/status/status.component.html new file mode 100644 index 000000000..9509a9ae5 --- /dev/null +++ b/ui/src/app/components/status/status.component.html @@ -0,0 +1,24 @@ +

+ {{ display }} + +

+ +

+ {{ display }} + +

+ +

+ {{ display }} + +

+ +

+ {{ display }} + +

+ +

+ {{ display }} + +

diff --git a/ui/src/app/components/status/status.component.module.ts b/ui/src/app/components/status/status.component.module.ts new file mode 100644 index 000000000..73d9bab53 --- /dev/null +++ b/ui/src/app/components/status/status.component.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { StatusComponent } from './status.component' +import { IonicModule } from '@ionic/angular' + +@NgModule({ + declarations: [ + StatusComponent, + ], + imports: [ + CommonModule, + IonicModule, + ], + exports: [StatusComponent], +}) +export class StatusComponentModule { } diff --git a/ui/src/app/components/status/status.component.scss b/ui/src/app/components/status/status.component.scss new file mode 100644 index 000000000..9c61e745d --- /dev/null +++ b/ui/src/app/components/status/status.component.scss @@ -0,0 +1,32 @@ +.icon-small { + width: auto; + height: 14px; + padding-left: 6px; +} + +.icon-medium { + width: auto; + height: 18px; + padding-left: 8px; +} + +.icon-large { + width: auto; + height: 24px; + padding-left: 12px; +} + +.dots { + vertical-align: middle; + margin-left: 8px; +} + +.dots-small { + width: 12px !important; + height: 12px !important; +} + +.dots-medium { + width: 16px !important; + height: 16px !important; +} \ No newline at end of file diff --git a/ui/src/app/components/status/status.component.ts b/ui/src/app/components/status/status.component.ts new file mode 100644 index 000000000..d6cb837b6 --- /dev/null +++ b/ui/src/app/components/status/status.component.ts @@ -0,0 +1,56 @@ +import { Component, Input } from '@angular/core' +import { AppStatus } from 'src/app/models/app-model' +import { ServerStatus } from 'src/app/models/server-model' +import { ServerStatusRendering, AppStatusRendering } from '../../util/status-rendering' + +@Component({ + selector: 'status', + templateUrl: './status.component.html', + styleUrls: ['./status.component.scss'], +}) +export class StatusComponent { + @Input() appStatus?: AppStatus + @Input() serverStatus?: ServerStatus + @Input() size: 'small' | 'medium' | 'large' | 'italics-small' | 'bold-large' = 'large' + @Input() text: string = '' + color: string + display: string + showDots: boolean + style = '' + + ngOnChanges () { + if (this.serverStatus) { + this.handleServerStatus() + } else if (this.appStatus) { + this.handleAppStatus() + } + } + + handleServerStatus () { + let res = ServerStatusRendering[this.serverStatus] + if (!res) { + console.warn(`Received invalid server status from the server: `, this.serverStatus) + res = ServerStatusRendering[ServerStatus.UNKNOWN] + } + + const { display, color, showDots } = res + this.display = display + this.color = color + this.showDots = showDots + } + + handleAppStatus () { + let res = AppStatusRendering[this.appStatus] + if (!res) { + console.warn(`Received invalid app status from the server: `, this.appStatus) + res = AppStatusRendering[AppStatus.UNKNOWN] + } + + const { display, color, showDots, style } = res + this.display = display + this.text + this.color = color + this.showDots = showDots + this.style = style + } +} + diff --git a/ui/src/app/guards/auth.guard.ts b/ui/src/app/guards/auth.guard.ts new file mode 100644 index 000000000..98fd1a6b5 --- /dev/null +++ b/ui/src/app/guards/auth.guard.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@angular/core' +import { CanActivate, Router, CanActivateChild } from '@angular/router' +import { AuthState, AuthService } from '../services/auth.service' + +@Injectable({ + providedIn: 'root', +}) +export class AuthGuard implements CanActivate, CanActivateChild { + constructor ( + private readonly authService: AuthService, + private readonly router: Router, + ) { } + + canActivate (): boolean { + return this.runCheck() + } + + canActivateChild (): boolean { + return this.runCheck() + } + + private runCheck (): boolean { + const state = this.authService.peek() + + switch (state){ + case AuthState.VERIFIED: return true + case AuthState.UNVERIFIED: return this.toAuthenticate() + case AuthState.INITIALIZING: return this.toAuthenticate() + } + } + + private toAuthenticate () { + this.router.navigate(['/authenticate'], { replaceUrl: true }) + return false + } +} diff --git a/ui/src/app/guards/deactivate.guard.ts b/ui/src/app/guards/deactivate.guard.ts new file mode 100644 index 000000000..43beacecc --- /dev/null +++ b/ui/src/app/guards/deactivate.guard.ts @@ -0,0 +1,26 @@ +import { Injectable, Directive } from '@angular/core' +import { CanDeactivate } from '@angular/router' +import { HostListener } from '@angular/core' + +@Directive() +export abstract class PageCanDeactivate { + abstract canDeactivate (): boolean + + @HostListener('window:beforeunload', ['$event']) + unloadNotification (e: any) { + console.log(e) + if (!this.canDeactivate()) { + e.returnValue = true + } + } +} + +@Injectable({ + providedIn: 'root', +}) +export class CanDeactivateGuard implements CanDeactivate { + + canDeactivate (page: PageCanDeactivate): boolean { + return page.canDeactivate() || confirm('You have unsaved changes. Are you sure you want to leave the page?') + } +} \ No newline at end of file diff --git a/ui/src/app/guards/unauth.guard.ts b/ui/src/app/guards/unauth.guard.ts new file mode 100644 index 000000000..e3312cbbb --- /dev/null +++ b/ui/src/app/guards/unauth.guard.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@angular/core' +import { CanActivate, Router } from '@angular/router' +import { AuthService, AuthState } from '../services/auth.service' + +@Injectable({ + providedIn: 'root', +}) +export class UnauthGuard implements CanActivate { + constructor ( + private readonly authService: AuthService, + private readonly router: Router, + ) { } + + canActivate (): boolean { + const state = this.authService.peek() + switch (state){ + case AuthState.VERIFIED: { + this.router.navigateByUrl('') + return false + } + case AuthState.UNVERIFIED: return true + case AuthState.INITIALIZING: return true + } + } +} + diff --git a/ui/src/app/modals/app-backup/app-backup.module.ts b/ui/src/app/modals/app-backup/app-backup.module.ts new file mode 100644 index 000000000..079f043c1 --- /dev/null +++ b/ui/src/app/modals/app-backup/app-backup.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { AppBackupPage } from './app-backup.page' + +@NgModule({ + declarations: [AppBackupPage], + imports: [ + CommonModule, + IonicModule, + ], + entryComponents: [AppBackupPage], + exports: [AppBackupPage], +}) +export class AppBackupPageModule { } \ No newline at end of file diff --git a/ui/src/app/modals/app-backup/app-backup.page.html b/ui/src/app/modals/app-backup/app-backup.page.html new file mode 100644 index 000000000..a1d8be267 --- /dev/null +++ b/ui/src/app/modals/app-backup/app-backup.page.html @@ -0,0 +1,50 @@ + + + + + + + + {{ type === 'create' ? 'Create Backup' : 'Restore Backup' }} + + + + + + + + + + + + + + + + {{ error }} + + + + + + + No partitions available. To begin a backup, insert a storage device into your Embassy. + No partitions available. Insert the storage device containing the backup you wish to restore. + + + {{ d.logicalname }} ({{ d.size }}) + + + + +

{{ p.label || p.logicalname }}

+

{{ p.size || 'unknown size' }}

+

Available

+

Unvailable

+
+
+
+
+
+ +
diff --git a/ui/src/app/modals/app-backup/app-backup.page.scss b/ui/src/app/modals/app-backup/app-backup.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/modals/app-backup/app-backup.page.ts b/ui/src/app/modals/app-backup/app-backup.page.ts new file mode 100644 index 000000000..fbcf6ae57 --- /dev/null +++ b/ui/src/app/modals/app-backup/app-backup.page.ts @@ -0,0 +1,206 @@ +import { Component, Input } from '@angular/core' +import { ModalController, AlertController, LoadingController, IonicSafeString } from '@ionic/angular' +import { AppModel, AppStatus } from 'src/app/models/app-model' +import { AppInstalledFull } from 'src/app/models/app-types' +import { ApiService } from 'src/app/services/api/api.service' +import { DiskInfo, DiskPartition } from 'src/app/models/server-model' +import { pauseFor } from 'src/app/util/misc.util' + +@Component({ + selector: 'app-backup', + templateUrl: './app-backup.page.html', + styleUrls: ['./app-backup.page.scss'], +}) +export class AppBackupPage { + @Input() app: AppInstalledFull + @Input() type: 'create' | 'restore' + disks: DiskInfo[] + loading = true + error: string + allPartitionsMounted: boolean + + constructor ( + private readonly modalCtrl: ModalController, + private readonly alertCtrl: AlertController, + private readonly loadingCtrl: LoadingController, + private readonly apiService: ApiService, + private readonly appModel: AppModel, + ) { } + + ngOnInit () { + return this.getExternalDisks().then(() => this.loading = false) + } + + async getExternalDisks (): Promise { + try { + this.disks = await this.apiService.getExternalDisks() + this.allPartitionsMounted = this.disks.every(d => d.partitions.every(p => p.isMounted)) + } catch (e) { + console.error(e) + this.error = e.message + } + } + + async doRefresh (event: any) { + await Promise.all([ + this.getExternalDisks(), + pauseFor(600), + ]) + event.target.complete() + } + + async dismiss () { + await this.modalCtrl.dismiss() + } + + async presentAlertHelp (): Promise { + let alert: HTMLIonAlertElement + if (this.type === 'create') { + alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: `Backups`, + message: `Select a location to back up ${this.app.title}.

Internal drives and drives currently backing up other services will not be available.

Depending on the amount of data in ${this.app.title}, your first backup may take a while. Since backups are diff-based, the speed of future backups to the same disk will likely be much faster.`, + buttons: ['Dismiss'], + }) + } else if (this.type === 'restore') { + alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: `Backups`, + message: `Select a location containing the backup you wish to restore for ${this.app.title}.

Restoring ${this.app.title} will re-sync your service with your previous backup. The speed of the restore process depends on the backup size.`, + buttons: ['Dismiss'], + }) + } + await alert.present() + } + + async presentAlert (partition: DiskPartition): Promise { + if (this.type === 'create') { + this.presentAlertCreateEncrypted(partition) + } else { + this.presentAlertWarn(partition) + } + } + + private async presentAlertCreateEncrypted (partition: DiskPartition): Promise { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: `Encrypt Backup`, + message: `Enter your master password to create an encrypted backup of ${this.app.title} to "${partition.label || partition.logicalname}".`, + inputs: [ + { + name: 'password', + label: 'Password', + type: 'password', + placeholder: 'Master Password', + }, + ], + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: 'Create Backup', + handler: (data) => { + if (!data.password || data.password.length < 12) { + alert.message = new IonicSafeString(alert.message + '

Password must be at least 12 characters in length.') + return false + } else { + this.create(partition, data.password) + } + }, + }, + ], + }) + await alert.present() + } + + private async presentAlertWarn (partition: DiskPartition): Promise { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: `Warning`, + message: `Restoring ${this.app.title} from "${partition.label || partition.logicalname}" will overwrite its current data.

Are you sure you want to continue?`, + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, { + text: 'Continue', + handler: () => { + this.presentAlertRestore(partition) + }, + }, + ], + }) + await alert.present() + } + + private async presentAlertRestore (partition: DiskPartition): Promise { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: `Decrypt Backup`, + message: `Enter your master password`, + inputs: [ + { + name: 'password', + type: 'password', + placeholder: 'Password', + }, + ], + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, { + text: 'Restore', + handler: (data) => { + this.restore(partition, data.password) + }, + }, + ], + }) + await alert.present() + } + + private async restore (partition: DiskPartition, password?: string): Promise { + this.error = '' + + const loader = await this.loadingCtrl.create({ + spinner: 'lines', + cssClass: 'loader-ontop-of-all', + }) + await loader.present() + + try { + await this.apiService.restoreAppBackup(this.app.id, partition.logicalname, password) + this.appModel.update({ id: this.app.id, status: AppStatus.RESTORING_BACKUP }) + await this.dismiss() + } catch (e) { + console.error(e) + this.error = e.message + } finally { + await loader.dismiss() + } + } + + private async create (partition: DiskPartition, password?: string): Promise { + this.error = '' + + const loader = await this.loadingCtrl.create({ + spinner: 'lines', + cssClass: 'loader-ontop-of-all', + }) + await loader.present() + + try { + await this.apiService.createAppBackup(this.app.id, partition.logicalname, password) + this.appModel.update({ id: this.app.id, status: AppStatus.CREATING_BACKUP }) + await this.dismiss() + } catch (e) { + console.error(e) + this.error = e.message + } finally { + await loader.dismiss() + } + } +} diff --git a/ui/src/app/modals/app-config-injectable/modal-injectable-token.ts b/ui/src/app/modals/app-config-injectable/modal-injectable-token.ts new file mode 100644 index 000000000..158df9672 --- /dev/null +++ b/ui/src/app/modals/app-config-injectable/modal-injectable-token.ts @@ -0,0 +1,3 @@ +import { InjectionToken } from '@angular/core' + +export const APP_CONFIG_COMPONENT_MAPPING = new InjectionToken('APP_CONFIG_COMPONENTS') \ No newline at end of file diff --git a/ui/src/app/modals/app-config-injectable/modal-injectable-type.ts b/ui/src/app/modals/app-config-injectable/modal-injectable-type.ts new file mode 100644 index 000000000..03c08bcca --- /dev/null +++ b/ui/src/app/modals/app-config-injectable/modal-injectable-type.ts @@ -0,0 +1,4 @@ +import { Type } from '@angular/core' +import { ValueType } from 'src/app/app-config/config-types' + +export type AppConfigComponentMapping = { [k in ValueType]: Type } diff --git a/ui/src/app/modals/app-config-injectable/modal-injectable-value.ts b/ui/src/app/modals/app-config-injectable/modal-injectable-value.ts new file mode 100644 index 000000000..727cd8f8f --- /dev/null +++ b/ui/src/app/modals/app-config-injectable/modal-injectable-value.ts @@ -0,0 +1,16 @@ +import { AppConfigObjectPage } from '../app-config-object/app-config-object.page' +import { AppConfigListPage } from '../app-config-list/app-config-list.page' +import { AppConfigUnionPage } from '../app-config-union/app-config-union.page' +import { AppConfigValuePage } from '../app-config-value/app-config-value.page' +import { AppConfigComponentMapping } from './modal-injectable-type' + +export const appConfigComponents: AppConfigComponentMapping = { + 'string': AppConfigValuePage, + 'number': AppConfigValuePage, + 'enum': AppConfigValuePage, + 'boolean': AppConfigValuePage, + 'list': AppConfigListPage, + 'object': AppConfigObjectPage, + 'union': AppConfigUnionPage, + 'pointer': undefined, +} diff --git a/ui/src/app/modals/app-config-list/app-config-list.module.ts b/ui/src/app/modals/app-config-list/app-config-list.module.ts new file mode 100644 index 000000000..a8ceacaec --- /dev/null +++ b/ui/src/app/modals/app-config-list/app-config-list.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { AppConfigListPage } from './app-config-list.page' +import { SharingModule } from 'src/app/modules/sharing.module' +import { ConfigHeaderComponentModule } from 'src/app/components/config-header/config-header.component.module' +import { FormsModule } from '@angular/forms' + +@NgModule({ + declarations: [AppConfigListPage], + imports: [ + CommonModule, + IonicModule, + SharingModule, + FormsModule, + ConfigHeaderComponentModule, + ], + entryComponents: [AppConfigListPage], + exports: [AppConfigListPage], +}) +export class AppConfigListPageModule { } \ No newline at end of file diff --git a/ui/src/app/modals/app-config-list/app-config-list.page.html b/ui/src/app/modals/app-config-list/app-config-list.page.html new file mode 100644 index 000000000..02c1d67b8 --- /dev/null +++ b/ui/src/app/modals/app-config-list/app-config-list.page.html @@ -0,0 +1,68 @@ + + + + + + + + {{ spec.name }} + + + + + + + + + + + + + + + + + {{ value.length }} selected +  (min: {{ min }}) +  (max: {{ max }}) + {{ selectAll ? 'All' : 'None' }} + + + {{ option.value }} + + + + + +
+ + + + {{ value.length }}  + Entry + Entries +  (min: {{ min }}) +  (max: {{ max }}) + + +
+ + + + + + + + {{ valueString[i] }} + + + + + + + +
+
+
+ +
diff --git a/ui/src/app/modals/app-config-list/app-config-list.page.scss b/ui/src/app/modals/app-config-list/app-config-list.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/modals/app-config-list/app-config-list.page.ts b/ui/src/app/modals/app-config-list/app-config-list.page.ts new file mode 100644 index 000000000..7074e6ca1 --- /dev/null +++ b/ui/src/app/modals/app-config-list/app-config-list.page.ts @@ -0,0 +1,146 @@ +import { Component, Input } from '@angular/core' +import { AlertController } from '@ionic/angular' +import { Annotations, Range } from '../../app-config/config-utilities' +import { TrackingModalController } from 'src/app/services/tracking-modal-controller.service' +import { ConfigCursor } from 'src/app/app-config/config-cursor' +import { ValueSpecList, isValueSpecListOf } from 'src/app/app-config/config-types' +import { ModalPresentable } from 'src/app/app-config/modal-presentable' + +@Component({ + selector: 'app-config-list', + templateUrl: './app-config-list.page.html', + styleUrls: ['./app-config-list.page.scss'], +}) +export class AppConfigListPage extends ModalPresentable { + @Input() cursor: ConfigCursor<'list'> + + spec: ValueSpecList + value: string[] | number[] | object[] + valueString: string[] + annotations: Annotations<'list'> + + // enum only + options: { value: string, checked: boolean }[] = [] + selectAll = true + // + + min: number | undefined + max: number | undefined + + minMessage: string + maxMessage: string + + error: string + + constructor ( + private readonly alertCtrl: AlertController, + trackingModalCtrl: TrackingModalController, + ) { + super(trackingModalCtrl) + } + + ngOnInit () { + this.spec = this.cursor.spec() + this.value = this.cursor.config() + const range = Range.from(this.spec.range) + this.min = range.integralMin() + this.max = range.integralMax() + this.minMessage = `The minimum number of ${this.cursor.key()} is ${this.min}.` + this.maxMessage = `The maximum number of ${this.cursor.key()} is ${this.max}.` + // enum list only + if (isValueSpecListOf(this.spec, 'enum')) { + for (let val of this.spec.spec.values) { + this.options.push({ + value: val, + checked: (this.value as string[]).includes(val), + }) + } + } + this.updateCaches() + } + + async dismiss () { + return this.dismissModal(this.value) + } + + // enum only + toggleSelectAll () { + if (!isValueSpecListOf(this.spec, 'enum')) { throw new Error('unreachable') } + + this.value.length = 0 + if (this.selectAll) { + for (let v of this.spec.spec.values) { + (this.value as string[]).push(v) + } + for (let option of this.options) { + option.checked = true + } + } else { + for (let option of this.options) { + option.checked = false + } + } + this.updateCaches() + } + + // enum only + async toggleSelected (value: string) { + const index = (this.value as string[]).indexOf(value) + + // if present, delete + if (index > -1) { + (this.value as string[]).splice(index, 1) + // if not present, add + } else { + (this.value as string[]).push(value) + } + + this.updateCaches() + } + + async presentModalValueEdit (index?: number) { + const nextCursor = this.cursor.seekNext(index === undefined ? this.value.length : index) + nextCursor.createFirstEntryForList() + return this.presentModal(nextCursor, () => this.updateCaches()) + } + + async presentAlertDeleteEntry (key: number) { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: 'Caution', + message: `Are you sure you want to delete this entry?`, + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: 'Delete', + cssClass: 'alert-danger', + handler: () => { + if (typeof key === 'number') { + (this.value as any[]).splice(key, 1) + } else { + delete this.value[key] + } + this.updateCaches() + }, + }, + ], + }) + await alert.present() + } + + asIsOrder () { + return 0 + } + + private updateCaches () { + if (isValueSpecListOf(this.spec, 'enum')) { + this.selectAll = this.value.length !== this.spec.spec.values.length + } + this.error = this.cursor.checkInvalid() + this.annotations = this.cursor.getAnnotations() + this.valueString = (this.value as any[]).map((_, idx) => this.cursor.seekNext(idx).toString()) + } +} diff --git a/ui/src/app/modals/app-config-object/app-config-object.module.ts b/ui/src/app/modals/app-config-object/app-config-object.module.ts new file mode 100644 index 000000000..2cc678819 --- /dev/null +++ b/ui/src/app/modals/app-config-object/app-config-object.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { AppConfigObjectPage } from './app-config-object.page' +import { ObjectConfigComponentModule } from 'src/app/components/object-config/object-config.component.module' +import { ConfigHeaderComponentModule } from 'src/app/components/config-header/config-header.component.module' + +@NgModule({ + declarations: [AppConfigObjectPage], + imports: [ + CommonModule, + IonicModule, + ObjectConfigComponentModule, + ConfigHeaderComponentModule, + ], + entryComponents: [AppConfigObjectPage], + exports: [AppConfigObjectPage], +}) +export class AppConfigObjectPageModule { } \ No newline at end of file diff --git a/ui/src/app/modals/app-config-object/app-config-object.page.html b/ui/src/app/modals/app-config-object/app-config-object.page.html new file mode 100644 index 000000000..c1c8e18f5 --- /dev/null +++ b/ui/src/app/modals/app-config-object/app-config-object.page.html @@ -0,0 +1,27 @@ + + + + + + + + {{ spec.name }} + + + Delete + + + + + + + + + + + + + + + + diff --git a/ui/src/app/modals/app-config-object/app-config-object.page.scss b/ui/src/app/modals/app-config-object/app-config-object.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/modals/app-config-object/app-config-object.page.ts b/ui/src/app/modals/app-config-object/app-config-object.page.ts new file mode 100644 index 000000000..23909fb14 --- /dev/null +++ b/ui/src/app/modals/app-config-object/app-config-object.page.ts @@ -0,0 +1,57 @@ +import { Component, Input } from '@angular/core' +import { ModalController, AlertController } from '@ionic/angular' +import { ConfigCursor } from 'src/app/app-config/config-cursor' +import { ValueSpecObject } from 'src/app/app-config/config-types' + +@Component({ + selector: 'app-config-object', + templateUrl: './app-config-object.page.html', + styleUrls: ['./app-config-object.page.scss'], +}) +export class AppConfigObjectPage { + @Input() cursor: ConfigCursor<'object'> + spec: ValueSpecObject + value: object + error: string + + constructor ( + private readonly modalCtrl: ModalController, + private readonly alertCtrl: AlertController, + ) { } + + ngOnInit () { + this.spec = this.cursor.spec() + this.value = this.cursor.config() + this.error = this.cursor.checkInvalid() + } + + async dismiss (nullify = false) { + this.modalCtrl.dismiss(nullify ? null : this.value) + } + + async presentAlertDestroy () { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: 'Caution', + message: 'Are you sure you want to delete this record?', + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: 'Delete', + cssClass: 'alert-danger', + handler: () => { + this.dismiss(true) + }, + }, + ], + }) + await alert.present() + } + + handleObjectEdit () { + this.error = this.cursor.checkInvalid() + } +} diff --git a/ui/src/app/modals/app-config-union/app-config-union.module.ts b/ui/src/app/modals/app-config-union/app-config-union.module.ts new file mode 100644 index 000000000..14880d693 --- /dev/null +++ b/ui/src/app/modals/app-config-union/app-config-union.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { AppConfigUnionPage } from './app-config-union.page' +import { ObjectConfigComponentModule } from 'src/app/components/object-config/object-config.component.module' +import { FormsModule } from '@angular/forms' +import { ConfigHeaderComponentModule } from 'src/app/components/config-header/config-header.component.module' + + +@NgModule({ + declarations: [AppConfigUnionPage], + imports: [ + CommonModule, + IonicModule, + FormsModule, + ObjectConfigComponentModule, + ConfigHeaderComponentModule, + ], + entryComponents: [AppConfigUnionPage], + exports: [AppConfigUnionPage], +}) +export class AppConfigUnionPageModule { } \ No newline at end of file diff --git a/ui/src/app/modals/app-config-union/app-config-union.page.html b/ui/src/app/modals/app-config-union/app-config-union.page.html new file mode 100644 index 000000000..ba1de39f8 --- /dev/null +++ b/ui/src/app/modals/app-config-union/app-config-union.page.html @@ -0,0 +1,31 @@ + + + + + + + + {{ spec.name }} + + + + + + + + + + + + {{ spec.tag.name }} + + + {{ spec.tag.variantNames[option.key] }} + (default) + + + + + + + diff --git a/ui/src/app/modals/app-config-union/app-config-union.page.scss b/ui/src/app/modals/app-config-union/app-config-union.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/modals/app-config-union/app-config-union.page.ts b/ui/src/app/modals/app-config-union/app-config-union.page.ts new file mode 100644 index 000000000..2331ecaa2 --- /dev/null +++ b/ui/src/app/modals/app-config-union/app-config-union.page.ts @@ -0,0 +1,58 @@ +import { Component, Input, ViewChild } from '@angular/core' +import { ModalController } from '@ionic/angular' +import { ConfigCursor } from 'src/app/app-config/config-cursor' +import { ValueSpecUnion } from 'src/app/app-config/config-types' +import { ObjectConfigComponent } from 'src/app/components/object-config/object-config.component' +import { mapUnionSpec } from '../../app-config/config-utilities' + +@Component({ + selector: 'app-config-union', + templateUrl: './app-config-union.page.html', + styleUrls: ['./app-config-union.page.scss'], +}) +export class AppConfigUnionPage { + @Input() cursor: ConfigCursor<'union'> + + @ViewChild(ObjectConfigComponent) + objectConfig: ObjectConfigComponent + + spec: ValueSpecUnion + value: object + error: string + + constructor ( + private readonly modalCtrl: ModalController, + ) { } + + ngOnInit () { + this.spec = this.cursor.spec() + this.value = this.cursor.config() + this.error = this.cursor.checkInvalid() + } + + async dismiss () { + this.modalCtrl.dismiss(this.value) + } + + async handleUnionChange () { + this.value = mapUnionSpec(this.spec, this.value) + this.objectConfig.annotations = this.objectConfig.cursor.getAnnotations() + } + + setSelectOptions () { + return { + header: this.spec.tag.name, + subHeader: this.spec.changeWarning ? 'Warning!' : undefined, + message: this.spec.changeWarning ? `${this.spec.changeWarning}` : undefined, + cssClass: 'select-change-warning', + } + } + + handleObjectEdit () { + this.error = this.cursor.checkInvalid() + } + + asIsOrder () { + return 0 + } +} diff --git a/ui/src/app/modals/app-config-value/app-config-value.module.ts b/ui/src/app/modals/app-config-value/app-config-value.module.ts new file mode 100644 index 000000000..5d08de325 --- /dev/null +++ b/ui/src/app/modals/app-config-value/app-config-value.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { FormsModule } from '@angular/forms' +import { IonicModule } from '@ionic/angular' +import { AppConfigValuePage } from './app-config-value.page' +import { ConfigHeaderComponentModule } from 'src/app/components/config-header/config-header.component.module' + +@NgModule({ + declarations: [AppConfigValuePage], + imports: [ + CommonModule, + FormsModule, + IonicModule, + ConfigHeaderComponentModule, + ], + entryComponents: [AppConfigValuePage], + exports: [AppConfigValuePage], +}) +export class AppConfigValuePageModule { } diff --git a/ui/src/app/modals/app-config-value/app-config-value.page.html b/ui/src/app/modals/app-config-value/app-config-value.page.html new file mode 100644 index 000000000..b63517006 --- /dev/null +++ b/ui/src/app/modals/app-config-value/app-config-value.page.html @@ -0,0 +1,83 @@ + + + + + + + + + {{ spec.name }} + + + + {{ saveFn ? 'Save' : 'Done' }} + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+ + + + {{ spec.units }} + + + + + + + {{ spec.name }} + + + + + + + {{ spec.valueNames[option] }} + + + + + +
+

+ {{ spec.patternDescription }} +

+

+ {{ integralDescription }} +

+

+ {{ rangeDescription }} +

+

+ +

Default: {{ defaultDescription }}

+

Units: {{ spec.units }}

+ +

+
+
+ +
\ No newline at end of file diff --git a/ui/src/app/modals/app-config-value/app-config-value.page.scss b/ui/src/app/modals/app-config-value/app-config-value.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/modals/app-config-value/app-config-value.page.ts b/ui/src/app/modals/app-config-value/app-config-value.page.ts new file mode 100644 index 000000000..b6eacd782 --- /dev/null +++ b/ui/src/app/modals/app-config-value/app-config-value.page.ts @@ -0,0 +1,173 @@ +import { Component, Input } from '@angular/core' +import { getDefaultConfigValue, getDefaultDescription, Range } from 'src/app/app-config/config-utilities' +import { AlertController, ToastController } from '@ionic/angular' +import { LoaderService } from 'src/app/services/loader.service' +import { TrackingModalController } from 'src/app/services/tracking-modal-controller.service' +import { ConfigCursor } from 'src/app/app-config/config-cursor' +import { ValueSpecOf } from 'src/app/app-config/config-types' +import { copyToClipboard } from 'src/app/util/web.util' + +@Component({ + selector: 'app-config-value', + templateUrl: 'app-config-value.page.html', + styleUrls: ['app-config-value.page.scss'], +}) +export class AppConfigValuePage { + @Input() cursor: ConfigCursor<'string' | 'number' | 'boolean' | 'enum'> + @Input() saveFn?: (value: string | number | boolean) => Promise + + spec: ValueSpecOf<'string' | 'number' | 'boolean' | 'enum'> + value: string | number | boolean | null + + edited: boolean + error: string + unmasked = false + + defaultDescription: string + integralDescription = 'Value must be a whole number.' + + range: Range + rangeDescription: string + + constructor ( + private readonly loader: LoaderService, + private readonly trackingModalCtrl: TrackingModalController, + private readonly alertCtrl: AlertController, + private readonly toastCtrl: ToastController, + ) { } + + ngOnInit () { + this.spec = this.cursor.spec() + this.value = this.cursor.config() + this.error = this.cursor.checkInvalid() + + this.defaultDescription = getDefaultDescription(this.spec) + if (this.spec.type === 'number') { + this.range = Range.from(this.spec.range) + this.rangeDescription = this.range.description() + } + } + + async dismiss () { + if (this.edited) { + await this.presentAlertUnsaved() + } else { + await this.trackingModalCtrl.dismiss() + } + } + + async done () { + if (!this.validate()) { return } + + if (this.spec.type !== 'boolean') { + this.value = this.value || null + } + if (this.spec.type === 'number' && this.value) { + this.value = Number(this.value) + } + + if (this.saveFn) { + this.loader.displayDuringP( + this.saveFn(this.value).catch(e => { + console.error(e) + this.error = e.message + }), + ) + } + + await this.trackingModalCtrl.dismiss(this.value) + } + + refreshDefault () { + this.value = getDefaultConfigValue(this.spec) as any + this.handleInput() + } + + handleInput () { + this.error = '' + this.edited = true + } + + clear () { + this.value = null + this.edited = true + } + + toggleMask () { + this.unmasked = !this.unmasked + } + + async copy (): Promise { + let message = '' + await copyToClipboard(String(this.value)).then(success => { message = success ? 'copied to clipboard!' : 'failed to copy'}) + + const toast = await this.toastCtrl.create({ + header: message, + position: 'bottom', + duration: 1000, + cssClass: 'notification-toast', + }) + await toast.present() + } + + private validate (): boolean { + if (this.spec.type === 'boolean') return true + + // test blank + if (!this.value && !(this.spec as any).nullable) { + this.error = 'Value cannot be blank' + return false + } + // test pattern if string + if (this.spec.type === 'string' && this.value) { + const { pattern, patternDescription } = this.spec + if (pattern && !RegExp(pattern).test(this.value as string)) { + this.error = patternDescription || `Must match ${pattern}` + return false + } + } + // test range if number + if (this.spec.type === 'number' && this.value) { + if (this.spec.integral && !RegExp(/^[-+]?[0-9]+$/).test(String(this.value))) { + this.error = this.integralDescription + return false + } else if (!this.spec.integral && !RegExp(/^[0-9]*\.?[0-9]+$/).test(String(this.value))) { + this.error = 'Value must be a number.' + return false + } else { + try { + this.range.checkIncludes(Number(this.value)) + } catch (e) { + console.warn(e) //an invalid spec is not an error + this.error = e.message + return false + } + } + } + + return true + } + + private async presentAlertUnsaved () { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: 'Unsaved Changes', + message: 'You have unsaved changes. Are you sure you want to leave?', + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: `Leave`, + cssClass: 'alert-danger', + handler: () => { + this.trackingModalCtrl.dismiss() + }, + }, + ], + }) + await alert.present() + } +} + diff --git a/ui/src/app/modals/app-release-notes/app-release-notes.module.ts b/ui/src/app/modals/app-release-notes/app-release-notes.module.ts new file mode 100644 index 000000000..f6613d5b5 --- /dev/null +++ b/ui/src/app/modals/app-release-notes/app-release-notes.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { AppReleaseNotesPage } from './app-release-notes.page' +import { SharingModule } from 'src/app/modules/sharing.module' + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + SharingModule, + ], + declarations: [AppReleaseNotesPage], +}) +export class AppReleaseNotesPageModule { } diff --git a/ui/src/app/modals/app-release-notes/app-release-notes.page.html b/ui/src/app/modals/app-release-notes/app-release-notes.page.html new file mode 100644 index 000000000..58f75a2e0 --- /dev/null +++ b/ui/src/app/modals/app-release-notes/app-release-notes.page.html @@ -0,0 +1,14 @@ + + + + + + + + {{ version }} Release Notes + + + + +
+
\ No newline at end of file diff --git a/ui/src/app/modals/app-release-notes/app-release-notes.page.scss b/ui/src/app/modals/app-release-notes/app-release-notes.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/modals/app-release-notes/app-release-notes.page.ts b/ui/src/app/modals/app-release-notes/app-release-notes.page.ts new file mode 100644 index 000000000..1c4c47dfa --- /dev/null +++ b/ui/src/app/modals/app-release-notes/app-release-notes.page.ts @@ -0,0 +1,20 @@ +import { Component, Input } from '@angular/core' +import { ModalController } from '@ionic/angular' + +@Component({ + selector: 'app-release-notes', + templateUrl: './app-release-notes.page.html', + styleUrls: ['./app-release-notes.page.scss'], +}) +export class AppReleaseNotesPage { + @Input() releaseNotes: string + @Input() version: string + + constructor ( + private readonly modalCtrl: ModalController, + ) { } + + dismiss () { + this.modalCtrl.dismiss() + } +} diff --git a/ui/src/app/models/app-model.ts b/ui/src/app/models/app-model.ts new file mode 100644 index 000000000..5d17e2356 --- /dev/null +++ b/ui/src/app/models/app-model.ts @@ -0,0 +1,161 @@ +import { MapSubject, Delta, Update } from '../util/map-subject.util' +import { diff, partitionArray } from '../util/misc.util' +import { PropertySubject, complete } from '../util/property-subject.util' +import { Injectable } from '@angular/core' +import { merge, Observable, of } from 'rxjs' +import { filter, throttleTime, delay, pairwise, mapTo, take } from 'rxjs/operators' +import { Storage } from '@ionic/storage' +import { StorageKeys } from './storage-keys' +import { AppInstalledFull, AppInstalledPreview } from './app-types' + +@Injectable({ + providedIn: 'root', +}) +export class AppModel extends MapSubject { + // hasLoaded tells us if we've successfully queried apps from api or storage, even if there are none. + hasLoaded = false + lastUpdatedAt: { [id: string]: Date } = { } + constructor (private readonly storage: Storage) { + super() + // 500ms after first delta, will save to db. Subsequent deltas are ignored for those 500ms. + // Process continues as long as deltas fire. + this.watchDelta().pipe(throttleTime(200), delay(200)).subscribe(() => { + this.commitCache() + }) + } + + update (newValues: Update, timestamp: Date = new Date()): void { + this.lastUpdatedAt[newValues.id] = this.lastUpdatedAt[newValues.id] || timestamp + if (this.lastUpdatedAt[newValues.id] > timestamp) { + return + } else { + super.update(newValues) + this.lastUpdatedAt[newValues.id] = timestamp + } + } + + // client fxns + watchDelta (filterFor?: Delta['action']): Observable> { + return filterFor + ? this.$delta$.pipe(filter(d => d.action === filterFor)) + : this.$delta$.asObservable() + } + + watch (appId: string) : PropertySubject { + const toReturn = super.watch(appId) + if (!toReturn) throw new Error(`Expected Service ${appId} but not found.`) + return toReturn + } + + // when an app is installing + watchForInstallation (appId: string): Observable { + const toWatch = super.watch(appId) + if (!toWatch) return of(undefined) + + return toWatch.status.pipe( + pairwise(), + filter( ([old, _]) => old === AppStatus.INSTALLING ), + take(1), + mapTo(appId), + ) + } + + watchForInstallations (appIds: { id: string }[]): Observable { + return merge(...appIds.map(({ id }) => this.watchForInstallation(id))).pipe( + filter(t => !!t), + ) + } + + // cache mgmt + clear (): void { + this.ids.forEach(id => { + complete(this.contents[id] || { } as PropertySubject) + delete this.contents[id] + }) + this.hasLoaded = false + this.contents = { } + this.lastUpdatedAt = { } + } + + private commitCache (): Promise { + return this.storage.set(StorageKeys.APPS_CACHE_KEY, this.all || []) + } + + async restoreCache (): Promise { + const stored = await this.storage.get(StorageKeys.APPS_CACHE_KEY) + console.log(`restored app cache`, stored) + if (stored) this.hasLoaded = true + return (stored || []).map(c => this.add({ ...emptyAppInstalledFull(), ...c, status: AppStatus.UNKNOWN })) + } + + upsertAppFull (app: AppInstalledFull): void { + this.update(app) + } + + // synchronizers + upsertApps (apps: AppInstalledPreview[], timestamp: Date): void { + const [updates, creates] = partitionArray(apps, a => !!this.contents[a.id]) + updates.map(u => this.update(u, timestamp)) + creates.map(c => this.add({ ...emptyAppInstalledFull(), ...c })) + } + + syncCache (upToDateApps : AppInstalledPreview[], timestamp: Date) { + this.hasLoaded = true + this.deleteNonexistentApps(upToDateApps) + this.upsertApps(upToDateApps, timestamp) + } + + private deleteNonexistentApps (apps: AppInstalledPreview[]): void { + const currentAppIds = apps.map(a => a.id) + const previousAppIds = Object.keys(this.contents) + const appsToDelete = diff(previousAppIds, currentAppIds) + appsToDelete.map(appId => this.delete(appId)) + } + + // server state change + markAppsUnreachable (): void { + this.updateAllApps({ status: AppStatus.UNREACHABLE }) + } + + markAppsUnknown (): void { + this.updateAllApps({ status: AppStatus.UNKNOWN }) + } + + private updateAllApps (uniformUpdate: Partial) { + this.ids.map(id => { + this.update(Object.assign(uniformUpdate, { id })) + }) + } +} + +function emptyAppInstalledFull (): Omit { + return { + instructions: null, + lastBackup: null, + configuredRequirements: null, + hasFetchedFull: false, + } +} + +export interface Rules { + rule: string + description: string +} + +export enum AppStatus { + // shared + UNKNOWN = 'UNKNOWN', + UNREACHABLE = 'UNREACHABLE', + INSTALLING = 'INSTALLING', + NEEDS_CONFIG = 'NEEDS_CONFIG', + RUNNING = 'RUNNING', + STOPPED = 'STOPPED', + CREATING_BACKUP = 'CREATING_BACKUP', + RESTORING_BACKUP = 'RESTORING_BACKUP', + CRASHED = 'CRASHED', + REMOVING = 'REMOVING', + DEAD = 'DEAD', + BROKEN_DEPENDENCIES = 'BROKEN_DEPENDENCIES', + STOPPING = 'STOPPING', + RESTARTING = 'RESTARTING', +} diff --git a/ui/src/app/models/app-types.ts b/ui/src/app/models/app-types.ts new file mode 100644 index 000000000..7042d34d3 --- /dev/null +++ b/ui/src/app/models/app-types.ts @@ -0,0 +1,122 @@ +import { AppStatus } from './app-model' + +/** APPS **/ + +export interface BaseApp { + id: string + title: string + status: AppStatus | null + versionInstalled: string | null + iconURL: string +} + +// available +export interface AppAvailablePreview extends BaseApp { + versionLatest: string + descriptionShort: string +} + +export type AppAvailableFull = + AppAvailablePreview & + { descriptionLong: string + versions: string[] + } & + AppAvailableVersionSpecificInfo + + +export interface AppAvailableVersionSpecificInfo { + releaseNotes: string + serviceRequirements: AppDependency[] + versionViewing: string +} +// installed + +export interface AppInstalledPreview extends BaseApp { + torAddress: string + versionInstalled: string +} + +export interface AppInstalledFull extends AppInstalledPreview { + instructions: string | null + lastBackup: string | null + configuredRequirements: AppDependency[] | null // null if not yet configured + hasFetchedFull: boolean +} +// dependencies + +export interface AppDependency extends InstalledAppDependency { + // explanation of why it *is* optional. null represents it is required. + optional: string | null + // whether it comes as defualt in the config. This will not be present on an installed app, as we only care + default: boolean +} + +export interface InstalledAppDependency extends Omit { + // semver specification + versionSpec: string + + // an optional description of how this dependency is utlitized by the host app + description: string | null + + // how the requirement is failed, null means satisfied. If the dependency is optional, this should still be set as though it were required. + // This way I can say "it's optional, but also you would need to upgrade it to versionSpec" or "it's optional, but you don't even have it" + // Said another way, if violaion === null, then this thing as a requirement is straight up satisfied. + violation: DependencyViolation | null +} + +export enum DependencyViolationSeverity { + NONE = 0, + OPTIONAL = 1, + RECOMMENDED = 2, + REQUIRED = 3, +} +export function getViolationSeverity (r: AppDependency): DependencyViolationSeverity { + if (!r.optional && r.violation) return DependencyViolationSeverity.REQUIRED + if (r.optional && r.default && r.violation) return DependencyViolationSeverity.RECOMMENDED + if (isOptional(r) && r.violation) return DependencyViolationSeverity.OPTIONAL + return DependencyViolationSeverity.NONE +} + +// optional not recommended +export function isOptional (r: AppDependency): boolean { + return r.optional && !r.default +} + +export function isRecommended (r: AppDependency): boolean { + return r.optional && r.default +} + +export function isMissing (r: AppDependency) { + return r.violation && r.violation.name === 'missing' +} + +export function isMisconfigured (r: AppDependency) { + return r.violation && r.violation.name === 'incompatible-config' +} + +export function isNotRunning (r: AppDependency) { + return r.violation && r.violation.name === 'incompatible-status' +} + +export function isVersionMismatch (r: AppDependency) { + return r.violation && r.violation.name === 'incompatible-version' +} + +export function isInstalling (r: AppDependency) { + return r.violation && r.violation.name === 'incompatible-status' && r.violation.status === AppStatus.INSTALLING +} + + +// both or none +export function getInstalledViolationSeverity (r: InstalledAppDependency): DependencyViolationSeverity { + if (r.violation) return DependencyViolationSeverity.REQUIRED + return DependencyViolationSeverity.NONE +} +// e.g. of I try to uninstall a thing, and some installed apps break, those apps will be returned as instances of this type. +export type DependentBreakage = Omit + +export type DependencyViolation = + { name: 'missing' } | + { name: 'incompatible-version' } | + { name: 'incompatible-config'; ruleViolations: string[]; } | + { name: 'incompatible-status'; status: AppStatus; } diff --git a/ui/src/app/models/model-preload.ts b/ui/src/app/models/model-preload.ts new file mode 100644 index 000000000..ac1775933 --- /dev/null +++ b/ui/src/app/models/model-preload.ts @@ -0,0 +1,73 @@ +import { Injectable } from '@angular/core' +import { AppModel } from './app-model' +import { AppInstalledFull, AppInstalledPreview } from './app-types' +import { ApiService } from '../services/api/api.service' +import { PropertySubject, PropertySubjectId } from '../util/property-subject.util' +import { S9Server, ServerModel } from './server-model' +import { Observable, of, from } from 'rxjs' +import { map, concatMap } from 'rxjs/operators' +import { fromSync$ } from '../util/rxjs.util' + +@Injectable({ + providedIn: 'root', +}) +export class ModelPreload { + constructor ( + private readonly appModel: AppModel, + private readonly api: ApiService, + private readonly serverModel: ServerModel, + ) { } + + apps (): Observable[]> { + return fromSync$(() => this.appModel.getContents()).pipe(concatMap(apps => { + const now = new Date() + if (this.appModel.hasLoaded) { + return of(apps) + } else { + return from(this.api.getInstalledApps()).pipe( + map(appsRes => { + this.appModel.upsertApps(appsRes, now) + return this.appModel.getContents() + }), + ) + }}), + ) + } + + appFull (appId: string): Observable > { + return fromSync$(() => this.appModel.watch(appId)).pipe( + concatMap(app => { + // if we haven't fetched full, don't return till we do + // if we have fetched full, go ahead and return now, but fetch full again in the background + if (!app.hasFetchedFull.getValue()) { + return from(this.loadInstalledApp(appId)) + } else { + this.loadInstalledApp(appId) + return of(app) + } + }), + ) + } + + loadInstalledApp (appId: string): Promise> { + return this.api.getInstalledApp(appId).then(res => { + this.appModel.update({ id: appId, ...res, hasFetchedFull: true }) + return this.appModel.watch(appId) + }) + } + + server (): Observable> { + return fromSync$(() => this.serverModel.watch()).pipe(concatMap(sw => { + if (sw.versionInstalled.getValue()) { + return of(sw) + } else { + console.warn(`server not present, preloading`) + return from(this.api.getServer()).pipe( + map(res => { + this.serverModel.update(res) + return this.serverModel.watch() + })) + } + })) + } +} diff --git a/ui/src/app/models/server-model.ts b/ui/src/app/models/server-model.ts new file mode 100644 index 000000000..377389169 --- /dev/null +++ b/ui/src/app/models/server-model.ts @@ -0,0 +1,175 @@ +import { Injectable } from '@angular/core' +import { Subject, BehaviorSubject } from 'rxjs' +import { PropertySubject, peekProperties, initPropertySubject } from '../util/property-subject.util' +import { AppModel } from './app-model' +import { ConfigService } from 'src/app/services/config.service' +import { Storage } from '@ionic/storage' +import { throttleTime, delay } from 'rxjs/operators' +import { StorageKeys } from './storage-keys' + +@Injectable({ + providedIn: 'root', +}) +export class ServerModel { + lastUpdateTimestamp: Date + $delta$ = new Subject() + private embassy: PropertySubject + + constructor ( + private readonly storage: Storage, + private readonly appModel: AppModel, + private readonly config: ConfigService, + ) { + this.embassy = this.defaultEmbassy() + this.$delta$.pipe( + throttleTime(500), delay(500), + ).subscribe(() => { + this.commitCache() + }) + } + + // client fxns + watch (): PropertySubject { + return this.embassy + } + + peek (): S9Server { + return peekProperties(this.embassy) + } + + update (update: Partial, timestamp: Date = new Date()): void { + if (this.lastUpdateTimestamp > timestamp) return + + if (update.versionInstalled && (update.versionInstalled !== this.config.version) && this.embassy.status.getValue() === ServerStatus.RUNNING) { + console.log('update detected, force reload page') + this.clear() + this.nukeCache().then( + () => location.replace('?upd=' + new Date()), + ) + } + + Object.entries(update).forEach( + ([key, value]) => { + if (!this.embassy[key]) { + console.warn('Received an unexpected key: ', key) + this.embassy[key] = new BehaviorSubject(value) + } else if (JSON.stringify(this.embassy[key].getValue()) !== JSON.stringify(value)) { + this.embassy[key].next(value) + } + }, + ) + this.$delta$.next() + this.lastUpdateTimestamp = timestamp + } + + // cache mgmt + clear () { + this.update(peekProperties(this.defaultEmbassy())) + } + + private commitCache (): Promise { + return this.storage.set(StorageKeys.SERVER_CACHE_KEY, peekProperties(this.embassy)) + } + + private nukeCache (): Promise { + return this.storage.remove(StorageKeys.SERVER_CACHE_KEY) + } + + async restoreCache (): Promise { + const emb = await this.storage.get(StorageKeys.SERVER_CACHE_KEY) + if (emb && emb.versionInstalled === this.config.version) this.update(emb) + } + + // server state change + markUnreachable (): void { + this.update({ status: ServerStatus.UNREACHABLE }) + this.appModel.markAppsUnreachable() + } + + markUnknown (): void { + this.update({ status: ServerStatus.UNKNOWN }) + this.appModel.markAppsUnknown() + } + + defaultEmbassy (): PropertySubject { + return initPropertySubject({ + serverId: undefined, + name: undefined, + origin: this.config.origin, + versionInstalled: undefined, + versionLatest: undefined, + status: ServerStatus.UNKNOWN, + badge: 0, + alternativeRegistryUrl: undefined, + specs: { }, + wifi: { ssids: [], current: undefined }, + ssh: [], + notifications: [], + }) + } +} + +export interface S9Server { + serverId: string + name: string + origin: string + versionInstalled: string + versionLatest: string | undefined + status: ServerStatus + badge: number + alternativeRegistryUrl: string | null + specs: ServerSpecs + wifi: { ssids: string[], current: string } + ssh: SSHFingerprint[] + notifications: S9Notification[] +} + +export interface S9Notification { + id: string + appId: string + createdAt: string + code: string + title: string + message: string +} + +export interface ServerSpecs { + [key: string]: string | number +} + +export interface ServerMetrics { + [key: string]: { + [key: string]: { + value: string | number | null + unit?: string + } + } +} + +export interface SSHFingerprint { + alg: string + hash: string + hostname: string +} + +export interface DiskInfo { + logicalname: string, + size: string, + description: string | null, + partitions: DiskPartition[] +} + +export interface DiskPartition { + logicalname: string, + isMounted: boolean, // Do not let them back up to this if true + size: string | null, + label: string | null, +} + +export enum ServerStatus { + UNKNOWN = 'UNKNOWN', + UNREACHABLE = 'UNREACHABLE', + UPDATING = 'UPDATING', + NEEDS_CONFIG = 'NEEDS_CONFIG', + RUNNING = 'RUNNING', +} diff --git a/ui/src/app/models/storage-keys.ts b/ui/src/app/models/storage-keys.ts new file mode 100644 index 000000000..353f8b322 --- /dev/null +++ b/ui/src/app/models/storage-keys.ts @@ -0,0 +1,6 @@ +export class StorageKeys { + static APPS_CACHE_KEY = 'apps' + static SERVER_CACHE_KEY = 'embassy' + static LOGGED_IN_KEY = 'loggedInKey' + static VIEWED_INSTRUCTIONS_KEY = 'viewedInstructions' +} \ No newline at end of file diff --git a/ui/src/app/modules/sharing.module.ts b/ui/src/app/modules/sharing.module.ts new file mode 100644 index 000000000..d2bb82f24 --- /dev/null +++ b/ui/src/app/modules/sharing.module.ts @@ -0,0 +1,52 @@ +import { NgModule } from '@angular/core' +import { EmverComparesPipe, EmverSatisfiesPipe, EmverDisplayPipe, EmverIsValidPipe } from '../pipes/emver.pipe' +import { IncludesPipe } from '../pipes/includes.pipe' +import { IconPipe } from '../pipes/icon.pipe' +import { TypeofPipe } from '../pipes/typeof.pipe' +import { MarkdownPipe } from '../pipes/markdown.pipe' +import { PeekPropertiesPipe } from '../pipes/peek-properties.pipe' +import { InstalledLatestComparisonPipe, InstalledViewingComparisonPipe } from '../pipes/installed-latest-comparison.pipe' +import { AnnotationStatusPipe } from '../pipes/annotation-status.pipe' +import { TruncateCenterPipe, TruncateEndPipe } from '../pipes/truncate.pipe' +import { MaskPipe } from '../pipes/mask.pipe' +import { DisplayBulbPipe } from '../pipes/display-bulb.pipe' + +@NgModule({ + declarations: [ + EmverComparesPipe, + EmverSatisfiesPipe, + TypeofPipe, + IconPipe, + IncludesPipe, + MarkdownPipe, + PeekPropertiesPipe, + InstalledLatestComparisonPipe, + InstalledViewingComparisonPipe, + AnnotationStatusPipe, + TruncateCenterPipe, + TruncateEndPipe, + MaskPipe, + DisplayBulbPipe, + EmverDisplayPipe, + EmverIsValidPipe, + ], + exports: [ + EmverComparesPipe, + EmverSatisfiesPipe, + TypeofPipe, + IconPipe, + IncludesPipe, + MarkdownPipe, + PeekPropertiesPipe, + InstalledLatestComparisonPipe, + AnnotationStatusPipe, + InstalledViewingComparisonPipe, + TruncateEndPipe, + TruncateCenterPipe, + MaskPipe, + DisplayBulbPipe, + EmverDisplayPipe, + EmverIsValidPipe, + ], +}) +export class SharingModule { } \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.module.ts b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.module.ts new file mode 100644 index 000000000..abe1fa401 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.module.ts @@ -0,0 +1,31 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' +import { IonicModule } from '@ionic/angular' +import { AppAvailableListPage } from './app-available-list.page' +import { SharingModule } from '../../../modules/sharing.module' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { StatusComponentModule } from 'src/app/components/status/status.component.module' + + +const routes: Routes = [ + { + path: '', + component: AppAvailableListPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + StatusComponentModule, + SharingModule, + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [AppAvailableListPage], +}) +export class AppAvailableListPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.html b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.html new file mode 100644 index 000000000..ddc829024 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.html @@ -0,0 +1,54 @@ + + + Service Marketplace + + + + + + + + + + + + + + + + + + {{ error }} + + + + + + + + +

+ {{app.subject.title | async}} +

+
+ Installed +
+
+ Update Available +
+
+ Installing + +
+
+
+ + {{ app.subject.descriptionShort | async }} + +
+
+
diff --git a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.scss b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.scss new file mode 100644 index 000000000..c8043e139 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.scss @@ -0,0 +1,6 @@ +.beneath-title { + font-size: 12px; + font-style: italic; + font-family: 'Open Sans'; + padding: 1px 0px 1.5px 0px; +} \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts new file mode 100644 index 000000000..03f74a3ce --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts @@ -0,0 +1,82 @@ +import { Component, NgZone } from '@angular/core' +import { ApiService } from 'src/app/services/api/api.service' +import { AppModel } from 'src/app/models/app-model' +import { AppAvailablePreview, AppInstalledPreview } from 'src/app/models/app-types' +import { pauseFor } from 'src/app/util/misc.util' +import { PropertySubjectId, initPropertySubject } from 'src/app/util/property-subject.util' +import { Subscription, BehaviorSubject, combineLatest } from 'rxjs' +import { take } from 'rxjs/operators' +import { markAsLoadingDuringP } from 'src/app/services/loader.service' + +@Component({ + selector: 'app-available-list', + templateUrl: './app-available-list.page.html', + styleUrls: ['./app-available-list.page.scss'], +}) +export class AppAvailableListPage { + $loading$ = new BehaviorSubject(true) + error = '' + installedAppDeltaSubscription: Subscription + apps: PropertySubjectId[] = [] + appsInstalled: PropertySubjectId[] = [] + + constructor ( + private readonly apiService: ApiService, + private readonly appModel: AppModel, + private readonly zone: NgZone, + ) { } + + async ngOnInit () { + this.installedAppDeltaSubscription = this.appModel + .watchDelta('update') + .subscribe(({ id }) => this.mergeInstalledProps(id)) + + markAsLoadingDuringP(this.$loading$, Promise.all([ + this.getApps(), + pauseFor(600), + ])) + } + + ionViewDidEnter () { + this.appModel.getContents().forEach(appInstalled => this.mergeInstalledProps(appInstalled.id)) + } + + mergeInstalledProps (appInstalledId: string) { + const appAvailable = this.apps.find(app => app.id === appInstalledId) + if (!appAvailable) return + + const app = this.appModel.watch(appInstalledId) + combineLatest([app.status, app.versionInstalled]) + .pipe(take(1)) + .subscribe(([status, versionInstalled]) => { + this.zone.run(() => { + appAvailable.subject.status.next(status) + appAvailable.subject.versionInstalled.next(versionInstalled) + }) + }) + } + + ngOnDestroy () { + this.installedAppDeltaSubscription.unsubscribe() + } + + async doRefresh (e: any) { + await Promise.all([ + this.getApps(), + pauseFor(600), + ]) + e.target.complete() + } + + async getApps (): Promise { + try { + this.apps = await this.apiService.getAvailableApps().then(apps => + apps.map(a => ({ id: a.id, subject: initPropertySubject(a) })), + ) + this.appModel.getContents().forEach(appInstalled => this.mergeInstalledProps(appInstalled.id)) + } catch (e) { + console.error(e) + this.error = e.message + } + } +} diff --git a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.module.ts b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.module.ts new file mode 100644 index 000000000..3bede4774 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.module.ts @@ -0,0 +1,42 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' +import { IonicModule } from '@ionic/angular' +import { DependencyListComponentModule } from '../../../components/dependency-list/dependency-list.component.module' +import { AppAvailableShowPage } from './app-available-show.page' +import { SharingModule } from 'src/app/modules/sharing.module' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { StatusComponentModule } from 'src/app/components/status/status.component.module' +import { RecommendationButtonComponentModule } from 'src/app/components/recommendation-button/recommendation-button.component.module' +import { InstallWizardComponentModule } from 'src/app/components/install-wizard/install-wizard.component.module' +import { ErrorMessageComponentModule } from 'src/app/components/error-message/error-message.component.module' +import { InformationPopoverComponentModule } from 'src/app/components/information-popover/information-popover.component.module' +import { AppReleaseNotesPageModule } from 'src/app/modals/app-release-notes/app-release-notes.module' + +const routes: Routes = [ + { + path: '', + component: AppAvailableShowPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + StatusComponentModule, + DependencyListComponentModule, + RouterModule.forChild(routes), + SharingModule, + PwaBackComponentModule, + RecommendationButtonComponentModule, + BadgeMenuComponentModule, + InstallWizardComponentModule, + ErrorMessageComponentModule, + InformationPopoverComponentModule, + AppReleaseNotesPageModule, + ], + declarations: [AppAvailableShowPage], +}) +export class AppAvailableShowPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html new file mode 100644 index 000000000..b4fd34aa8 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html @@ -0,0 +1,115 @@ + + + + + + Marketplace Details + + + + + + + + + + + + + + + + + + +

{{ vars.title }}

+

{{ vars.versionViewing | displayEmver }}

+ +

Installed

+

Installed at {{vars.versionInstalled | displayEmver}}

+
+ +

+ +

+
+
+ +
+
+ + + Install + + +
+ + Update to {{ vars.versionViewing | displayEmver }} + + + Downgrade to {{ vars.versionViewing | displayEmver }} + +
+ + + + + +

+ + + + {{recommendation.title}} +

+
+

{{recommendation.description}}

+

{{vars.title}} version {{vars.versionViewing | displayEmver}} is compatible.

+

{{vars.title}} version {{vars.versionViewing | displayEmver}} is NOT compatible.

+
+
+
+
+ + Description + + + +
{{ vars.descriptionLong }}
+
+
+
+ + Release Notes + + + New in {{ vars.versionViewing | displayEmver }} + + + + + Service Dependencies + + + + + + + + + + Other versions + +
+
+
\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.scss b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.scss new file mode 100644 index 000000000..fa9c4aab5 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.scss @@ -0,0 +1,34 @@ +// .recommendation-container { +// margin-top: 3px; +// display: grid; +// grid-template-columns: auto auto; +// justify-content: start; +// grid-column-gap: 5px; +// align-items: center; +// } + +.recommendation-text { + font-style: italic; +} + +// @media (min-width:1000px) { +// .recommendation-text { +// font-size: small; +// } +// } + +.recommendation-error { + color: var(--ion-color-danger); +} + +.main-action-button { + margin: 20px 5px 20px 5px; +} + +.divider { + margin-top: 15px; + color: var(--ion-color-medium); + font-size: medium; + padding-left: 10px; + font-weight: unset; +} \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts new file mode 100644 index 000000000..0fc5f9147 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts @@ -0,0 +1,249 @@ +import { Component, HostListener, NgZone } from '@angular/core' +import { ActivatedRoute } from '@angular/router' +import { AppAvailableFull, AppAvailableVersionSpecificInfo, AppDependency } from 'src/app/models/app-types' +import { ApiService } from 'src/app/services/api/api.service' +import { AlertController, ModalController, NavController, PopoverController } from '@ionic/angular' +import { markAsLoadingDuring$ } from 'src/app/services/loader.service' +import { BehaviorSubject, from, merge, Observable, of, Subscription } from 'rxjs' +import { catchError, concatMap, filter, switchMap, tap } from 'rxjs/operators' +import { Recommendation } from 'src/app/components/recommendation-button/recommendation-button.component' +import { wizardModal } from 'src/app/components/install-wizard/install-wizard.component' +import { WizardBaker } from 'src/app/components/install-wizard/prebaked-wizards' +import { AppModel } from 'src/app/models/app-model' +import { initPropertySubject, peekProperties, PropertySubject } from 'src/app/util/property-subject.util' +import { Cleanup } from 'src/app/util/cleanup' +import { InformationPopoverComponent } from 'src/app/components/information-popover/information-popover.component' +import { pauseFor } from 'src/app/util/misc.util' +import { AppReleaseNotesPage } from 'src/app/modals/app-release-notes/app-release-notes.page' +import { Emver } from 'src/app/services/emver.service' +import { displayEmver } from 'src/app/pipes/emver.pipe' + +@Component({ + selector: 'app-available-show', + templateUrl: './app-available-show.page.html', + styleUrls: ['./app-available-show.page.scss'], +}) +export class AppAvailableShowPage extends Cleanup { + $loading$ = new BehaviorSubject(true) + $versionSpecificLoading$ = new BehaviorSubject(false) + $error$ = new BehaviorSubject(undefined) + app$: PropertySubject = { } as any + appId: string + + openRecommendation = false + recommendation: Recommendation | null = null + + serviceDependencyDefintion = 'Service Dependencies are other services that this service recommends or requires in order to run.' + + showMoreReleaseNotes = false + + constructor ( + private readonly route: ActivatedRoute, + private readonly apiService: ApiService, + private readonly alertCtrl: AlertController, + private readonly zone: NgZone, + private readonly modalCtrl: ModalController, + private readonly wizardBaker: WizardBaker, + private readonly navCtrl: NavController, + private readonly appModel: AppModel, + private readonly popoverController: PopoverController, + private readonly emver: Emver, + ) { + super() + } + + async ngOnInit () { + this.appId = this.route.snapshot.paramMap.get('appId') as string + + this.cleanup( + markAsLoadingDuring$(this.$loading$, + from(this.apiService.getAvailableApp(this.appId)).pipe( + tap(app => this.app$ = initPropertySubject(app)), + concatMap(() => this.fetchRecommendation()), + ), + ).pipe( + concatMap(() => this.syncWhenDependencyInstalls()), //must be final in stack + catchError(e => of(this.setError(e))), + ).subscribe(), + merge(this.$loading$, this.$versionSpecificLoading$).pipe(concatMap(l => { + if (l) { + this.showMoreReleaseNotes = false + } + return pauseFor(125) + })).subscribe( + () => this.setMoreReleaseNotes(), + ), + ) + } + + ionViewDidEnter () { + markAsLoadingDuring$(this.$versionSpecificLoading$, this.fetchAppVersionInfo()).subscribe({ + error: e => this.setError(e), + }) + } + + async presentPopover (information: string, ev: any) { + const popover = await this.popoverController.create({ + component: InformationPopoverComponent, + event: ev, + translucent: false, + showBackdrop: true, + backdropDismiss: true, + componentProps: { + information, + }, + }) + return await popover.present() + } + + fetchAppVersionInfo (versionSpec?: string): Observable { + if (!this.app$.versionViewing) return of({ }) + const specToFetch = versionSpec || `=${this.app$.versionViewing.getValue()}` + return from(this.apiService.getAvailableAppVersionSpecificInfo(this.appId, specToFetch)).pipe( + tap(versionInfo => this.syncVersionSpecificInfo(versionInfo)), + ) + } + + private syncVersionSpecificInfo (versionSpecificInfo: AppAvailableVersionSpecificInfo) { + this.zone.run(() => { + Object.entries(versionSpecificInfo).forEach( ([k, v]) => { + if (!this.app$[k]) this.app$[k] = new BehaviorSubject(undefined) + if (v !== this.app$[k].getValue()) this.app$[k].next(v) + }) + }) + } + + async presentAlertVersions () { + const app = peekProperties(this.app$) + const alert = await this.alertCtrl.create({ + header: 'Versions', + backdropDismiss: false, + inputs: app.versions.sort((a, b) => -1 * this.emver.compare(a, b)).map(v => { + return { name: v, // for CSS + type: 'radio', + label: displayEmver(v), // appearance on screen + value: v, // literal SEM version value + checked: app.versionViewing === v, + } + }), + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, { + text: 'Ok', + handler: (version: string) => { + const previousVersion = this.app$.versionViewing.getValue() + this.app$.versionViewing.next(version) + markAsLoadingDuring$(this.$versionSpecificLoading$, this.fetchAppVersionInfo(`=${version}`)) + .subscribe({ + error: e => { + this.setError(e) + this.app$.versionViewing.next(previousVersion) + }, + }) + }, + }, + ], + }) + + await alert.present() + } + + async install () { + const app = peekProperties(this.app$) + const { cancelled } = await wizardModal( + this.modalCtrl, + this.wizardBaker.install({ + id: app.id, + title: app.title, + version: app.versionViewing, + serviceRequirements: app.serviceRequirements, + }), + ) + if (cancelled) return + this.navCtrl.back() + } + + async update (action: 'update' | 'downgrade') { + const app = peekProperties(this.app$) + + const value = { + id: app.id, + title: app.title, + version: app.versionViewing, + serviceRequirements: app.serviceRequirements, + } + + switch (action) { + case 'update': + return wizardModal( + this.modalCtrl, + this.wizardBaker.update(value), + ).then(({ cancelled }) => cancelled || this.navCtrl.back()) + case 'downgrade': + return wizardModal( + this.modalCtrl, + this.wizardBaker.downgrade(value), + ).then(({ cancelled }) => cancelled || this.navCtrl.back()) + } + } + + async presentModalReleaseNotes () { + const { releaseNotes, versionViewing } = peekProperties(this.app$) + + const modal = await this.modalCtrl.create({ + component: AppReleaseNotesPage, + componentProps: { + releaseNotes, + version: versionViewing, + }, + }) + + await modal.present() + } + + private fetchRecommendation (): Observable { + this.recommendation = history.state && history.state.installationRecommendation + + if (this.recommendation) { + return from(this.fetchAppVersionInfo(this.recommendation.versionSpec)) + } else { + return of({ }) + } + } + + private syncWhenDependencyInstalls (): Observable { + return this.app$.serviceRequirements.pipe( + filter(deps => !!deps), + switchMap(deps => this.appModel.watchForInstallations(deps)), + concatMap(() => markAsLoadingDuring$(this.$versionSpecificLoading$, this.fetchAppVersionInfo())), + catchError(e => of(console.error(e))), + ) + } + + private setError (e: Error) { + console.error(e) + this.$error$.next(e.message) + } + + private setMoreReleaseNotes () { + const releaseNotes = document.getElementById(`release-notes-${this.appId}`) + if (releaseNotes) { + this.showMoreReleaseNotes = isTextOverflow(releaseNotes) + } + } + + @HostListener('window:resize', ['$event']) + onResize () { + this.setMoreReleaseNotes() + } +} + +function isTextOverflow (elem: any): boolean { + if (elem) { + return (elem.offsetWidth < elem.scrollWidth) + } + + return false +} \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-config/app-config.module.ts b/ui/src/app/pages/apps-routes/app-config/app-config.module.ts new file mode 100644 index 000000000..9252d3203 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-config/app-config.module.ts @@ -0,0 +1,45 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { FormsModule } from '@angular/forms' +import { Routes, RouterModule } from '@angular/router' +import { IonicModule } from '@ionic/angular' +import { AppConfigPage } from './app-config.page' +import { ObjectConfigComponentModule } from 'src/app/components/object-config/object-config.component.module' +import { AppConfigListPageModule } from 'src/app/modals/app-config-list/app-config-list.module' +import { AppConfigObjectPageModule } from 'src/app/modals/app-config-object/app-config-object.module' +import { AppConfigUnionPageModule } from 'src/app/modals/app-config-union/app-config-union.module' +import { AppConfigValuePageModule } from 'src/app/modals/app-config-value/app-config-value.module' +import { SharingModule } from 'src/app/modules/sharing.module' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { RecommendationButtonComponentModule } from 'src/app/components/recommendation-button/recommendation-button.component.module' +import { InformationPopoverComponentModule } from 'src/app/components/information-popover/information-popover.component.module' + +const routes: Routes = [ + { + path: '', + component: AppConfigPage, + // canDeactivate: [CanDeactivateGuard], + }, +] + +@NgModule({ + imports: [ + ObjectConfigComponentModule, + AppConfigListPageModule, + AppConfigObjectPageModule, + AppConfigUnionPageModule, + AppConfigValuePageModule, + SharingModule, + CommonModule, + FormsModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + RecommendationButtonComponentModule, + InformationPopoverComponentModule, + ], + declarations: [AppConfigPage], +}) +export class AppConfigPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-config/app-config.page.html b/ui/src/app/pages/apps-routes/app-config/app-config.page.html new file mode 100644 index 000000000..a2168d8e4 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-config/app-config.page.html @@ -0,0 +1,119 @@ + + + + + + + + {{ app['title'] | async }} + + + + + + +
+ + + {{$loadingText$ | async}} + +
+ + + + + +

{{error.text}}.

+
+ + + +

+

+ Hide +
+ + + + + + + + + + + +

+ + Initial Config +

+

To use the default config for {{ app.title | async }}, click "Save" below.

+
+
+
+ + + + +

+ + + + + {{recommendation.title}} +

+
+

{{app.title | async}} config has been modified to satisfy {{recommendation.title}}. + To accept the changes, click “Save” below. +

+ More Info + +

+ hide +
+ + + +
+
+
+ +
+ + + + +

{{invalid}}

+
+
+ + + + +

No config options for {{ app.title | async }} {{ app.versionInstalled | async }}.

+
+
+ + + + + + Save + + + + + Config Options + + + +
+ + diff --git a/ui/src/app/pages/apps-routes/app-config/app-config.page.scss b/ui/src/app/pages/apps-routes/app-config/app-config.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/apps-routes/app-config/app-config.page.ts b/ui/src/app/pages/apps-routes/app-config/app-config.page.ts new file mode 100644 index 000000000..2b43fb273 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-config/app-config.page.ts @@ -0,0 +1,244 @@ +import { Component } from '@angular/core' +import { NavController, AlertController, ModalController, PopoverController } from '@ionic/angular' +import { ActivatedRoute } from '@angular/router' +import { AppStatus } from 'src/app/models/app-model' +import { AppInstalledFull } from 'src/app/models/app-types' +import { ApiService } from 'src/app/services/api/api.service' +import { pauseFor, isEmptyObject } from 'src/app/util/misc.util' +import { PropertySubject, peekProperties } from 'src/app/util/property-subject.util' +import { LoaderService, markAsLoadingDuring$ } from 'src/app/services/loader.service' +import { TrackingModalController } from 'src/app/services/tracking-modal-controller.service' +import { ModelPreload } from 'src/app/models/model-preload' +import { BehaviorSubject, forkJoin, from, fromEvent, of } from 'rxjs' +import { catchError, concatMap, map, take, tap } from 'rxjs/operators' +import { Recommendation } from 'src/app/components/recommendation-button/recommendation-button.component' +import { wizardModal } from 'src/app/components/install-wizard/install-wizard.component' +import { WizardBaker } from 'src/app/components/install-wizard/prebaked-wizards' +import { Cleanup } from 'src/app/util/cleanup' +import { InformationPopoverComponent } from 'src/app/components/information-popover/information-popover.component' +import { ConfigSpec } from 'src/app/app-config/config-types' +import { ConfigCursor } from 'src/app/app-config/config-cursor' + +@Component({ + selector: 'app-config', + templateUrl: './app-config.page.html', + styleUrls: ['./app-config.page.scss'], +}) +export class AppConfigPage extends Cleanup { + error: { text: string, moreInfo?: + { title: string, description: string, buttonText: string } + } + + invalid: string + $loading$ = new BehaviorSubject(true) + $loadingText$ = new BehaviorSubject(undefined) + + app: PropertySubject = { } as any + appId: string + hasConfig = false + + recommendation: Recommendation | null = null + showRecommendation = true + openRecommendation = false + + edited: boolean + added: boolean + rootCursor: ConfigCursor<'object'> + spec: ConfigSpec + config: object + + AppStatus = AppStatus + + constructor ( + private readonly navCtrl: NavController, + private readonly route: ActivatedRoute, + private readonly wizardBaker: WizardBaker, + private readonly preload: ModelPreload, + private readonly apiService: ApiService, + private readonly loader: LoaderService, + private readonly alertCtrl: AlertController, + private readonly modalController: ModalController, + private readonly trackingModalCtrl: TrackingModalController, + private readonly popoverController: PopoverController, + ) { super() } + + backButtonDefense = false + + async ngOnInit () { + this.appId = this.route.snapshot.paramMap.get('appId') as string + + this.route.params.pipe(take(1)).subscribe(params => { + if (params.edit) { + window.history.back() + } + }) + + this.cleanup( + fromEvent(window, 'popstate').subscribe(() => { + this.backButtonDefense = false + this.trackingModalCtrl.dismissAll() + }), + this.trackingModalCtrl.onCreateAny$().subscribe(() => { + if (!this.backButtonDefense) { + window.history.pushState(null, null, window.location.href + '/edit') + this.backButtonDefense = true + } + }), + this.trackingModalCtrl.onDismissAny$().subscribe(() => { + if (!this.trackingModalCtrl.anyModals && this.backButtonDefense === true) { + this.navCtrl.back() + } + }), + ) + + markAsLoadingDuring$(this.$loading$, + from(this.preload.appFull(this.appId)) + .pipe( + tap(app => this.app = app), + tap(() => this.$loadingText$.next(`Fetching config spec...`)), + concatMap(() => forkJoin([this.apiService.getAppConfig(this.appId), pauseFor(600)])), + concatMap(([{ spec, config }]) => { + const rec = history.state && history.state.configRecommendation as Recommendation + if (rec) { + this.$loadingText$.next(`Setting properties to accomodate ${rec.title}...`) + return from(this.apiService.postConfigureDependency(this.appId, rec.appId, true)) + .pipe( + map(res => ({ + spec, + config, + dependencyConfig: res.config, + })), + tap(() => this.recommendation = rec), + catchError(e => { + this.error = { text: `Could not set properties to accomodate ${rec.title}: ${e.message}`, moreInfo: { + title: `${rec.title} requires the following:`, + description: rec.description, + buttonText: 'Configure Manually', + } } + return of({ spec, config, dependencyConfig: null }) + }), + ) + } else { + return of({ spec, config, dependencyConfig: null }) + } + }), + map(({ spec, config, dependencyConfig }) => this.setConfig(spec, config, dependencyConfig)), + tap(() => this.$loadingText$.next(undefined)), + ), + ).subscribe({ + error: e => { + console.error(e) + this.error = { text: e.message } + }, + }, + ) + } + + async presentPopover (title: string, description: string, ev: any) { + const information = ` +
+ ${title} +
+
+ ${description} +
+ ` + const popover = await this.popoverController.create({ + component: InformationPopoverComponent, + event: ev, + translucent: false, + showBackdrop: true, + backdropDismiss: true, + componentProps: { + information, + }, + }) + return await popover.present() + } + + setConfig (spec: ConfigSpec, config: object, dependencyConfig?: object) { + this.rootCursor = dependencyConfig ? new ConfigCursor(spec, config, null, dependencyConfig) : new ConfigCursor(spec, config) + this.spec = this.rootCursor.spec().spec + this.config = this.rootCursor.config() + this.handleObjectEdit() + this.hasConfig = !isEmptyObject(this.spec) + } + + dismissRecommendation () { + this.showRecommendation = false + } + + dismissError () { + this.error = undefined + } + + async cancel () { + if (this.edited) { + await this.presentAlertUnsaved() + } else { + this.navCtrl.back() + } + } + + async save () { + const app = peekProperties(this.app) + + return this.loader.of({ + message: `Saving config...`, + spinner: 'lines', + cssClass: 'loader', + }).displayDuringAsync(async () => { + const config = this.config + const { breakages } = await this.apiService.patchAppConfig(app, config, true) + + if (breakages.length) { + const { cancelled } = await wizardModal( + this.modalController, + this.wizardBaker.configure({ + app, + breakages, + }), + ) + if (cancelled) return { skip: true } + } + + return this.apiService.patchAppConfig(app, config).then( + () => this.preload.loadInstalledApp(this.appId).then(() => ({ skip: false})), + ) + }) + .then(({ skip }) => { + if (skip) return + this.navCtrl.back() + }) + .catch(e => this.error = { text: e.message }) + } + + handleObjectEdit () { + this.edited = this.rootCursor.isEdited() + this.added = this.rootCursor.isNew() + this.invalid = this.rootCursor.checkInvalid() + } + + private async presentAlertUnsaved () { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: 'Unsaved Changes', + message: 'You have unsaved changes. Are you sure you want to leave?', + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: `Leave`, + cssClass: 'alert-danger', + handler: () => { + this.navCtrl.back() + }, + }, + ], + }) + await alert.present() + } +} + diff --git a/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.module.ts b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.module.ts new file mode 100644 index 000000000..5d881d79d --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.module.ts @@ -0,0 +1,36 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' + +import { IonicModule } from '@ionic/angular' + +import { DependencyListComponentModule } from 'src/app/components/dependency-list/dependency-list.component.module' +import { AppInstalledListPage } from './app-installed-list.page' +import { StatusComponentModule } from 'src/app/components/status/status.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' +import { AppBackupPageModule } from 'src/app/modals/app-backup/app-backup.module' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' + +const routes: Routes = [ + { + path: '', + component: AppInstalledListPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + StatusComponentModule, + DependencyListComponentModule, + AppBackupPageModule, + SharingModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [AppInstalledListPage], +}) +export class AppInstalledListPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.html b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.html new file mode 100644 index 000000000..8a26bbf91 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.html @@ -0,0 +1,53 @@ + + + Installed Services + + + + + + + + + + + + + + + + {{ error }} + + + + + + + + + + + + + + +

{{ app.subject.title | async }}

+
+
+
+
+
+ +
+
+

Welcome to your Embassy

+

Get started by installing your first service.

+
+ + + Marketplace + +
+ +
+
diff --git a/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.scss b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.scss new file mode 100644 index 000000000..2fc83eaed --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.scss @@ -0,0 +1,53 @@ +.installed-card { + margin: 0; + background: linear-gradient(37deg, #333333, #131313); + border-radius: 10px; + text-align: center; + + ion-card-header { + padding: 0; + + status { + font-size: 9px; + font-weight: bold; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + p { + font-family: 'Montserrat'; + font-size: 11px; + color: white; + margin: 0px 12px 8px 12px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } +} + +.main-img { + width: 50%; + margin: 9px; + color: white; + border-radius: var(--icon-border-radius); +} + +.bulb-on { + position: absolute !important; + left: -7px !important; + top: -7px !important; + height: 25px !important; + width: 25px !important; + margin: 9px; +} + +.bulb-off { + position: absolute !important; + left: -1px !important; + top: -1px !important; + height: 13px !important; + width: 13px !important; + margin: 9px; +} diff --git a/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.ts b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.ts new file mode 100644 index 000000000..d44870ffd --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.ts @@ -0,0 +1,106 @@ +import { Component } from '@angular/core' +import { AppModel } from 'src/app/models/app-model' +import { AppInstalledPreview } from 'src/app/models/app-types' +import { ModelPreload } from 'src/app/models/model-preload' +import { doForAtLeast } from 'src/app/util/misc.util' +import { PropertySubject, PropertySubjectId, toObservable } from 'src/app/util/property-subject.util' +import { markAsLoadingDuring$ } from 'src/app/services/loader.service' +import { BehaviorSubject, Observable, Subscription } from 'rxjs' +import { S9Server, ServerModel, ServerStatus } from 'src/app/models/server-model' +import { SyncDaemon } from 'src/app/services/sync.service' +import { Cleanup } from 'src/app/util/cleanup' + +@Component({ + selector: 'app-installed-list', + templateUrl: './app-installed-list.page.html', + styleUrls: ['./app-installed-list.page.scss'], +}) +export class AppInstalledListPage extends Cleanup { + error = '' + initError = '' + $loading$ = new BehaviorSubject(true) + s9Host$: Observable + + server: PropertySubject + currentServer: S9Server + apps: PropertySubjectId[] = [] + + subsToTearDown: Subscription[] = [] + + updatingFreeze = false + updating = false + segmentValue: 'services' | 'embassy' = 'services' + + showCertDownload : boolean + + constructor ( + private readonly serverModel: ServerModel, + private readonly appModel: AppModel, + private readonly preload: ModelPreload, + private readonly syncDaemon: SyncDaemon, + ) { + super() + } + + ngOnDestroy () { + this.subsToTearDown.forEach(s => s.unsubscribe()) + } + + async ngOnInit () { + this.server = this.serverModel.watch() + this.apps = [] + this.cleanup( + // serverUpdateSubscription + this.server.status.subscribe(status => { + if (status === ServerStatus.UPDATING) { + this.updating = true + } else { + if (!this.updatingFreeze) { this.updating = false } + } + }), + + // newAppsSubscription + this.appModel.watchDelta('add').subscribe(({ id }) => { + if (this.apps.find(a => a.id === id)) return + this.apps.push({ id, subject: this.appModel.watch(id) }) + }, + ), + + // appsDeletedSubscription + this.appModel.watchDelta('delete').subscribe(({ id }) => { + const i = this.apps.findIndex(a => a.id === id) + this.apps.splice(i, 1) + }), + + // currentServerSubscription + toObservable(this.server).subscribe(currentServerProperties => { + this.currentServer = currentServerProperties + }), + ) + + markAsLoadingDuring$(this.$loading$, this.preload.apps()).subscribe({ + next: apps => { + this.apps = apps + }, + error: e => { + console.error(e) + this.error = e.message + }, + }) + } + + async doRefresh (event: any) { + await doForAtLeast([this.getServerAndApps()], 600) + event.target.complete() + } + + async getServerAndApps (): Promise { + try { + await this.syncDaemon.sync() + this.error = '' + } catch (e) { + console.error(e) + this.error = e.message + } + } +} diff --git a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.module.ts b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.module.ts new file mode 100644 index 000000000..c49ec7883 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.module.ts @@ -0,0 +1,42 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' + +import { IonicModule } from '@ionic/angular' + +import { DependencyListComponentModule } from 'src/app/components/dependency-list/dependency-list.component.module' +import { AppInstalledShowPage } from './app-installed-show.page' +import { StatusComponentModule } from 'src/app/components/status/status.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' +import { AppBackupPageModule } from 'src/app/modals/app-backup/app-backup.module' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { InstallWizardComponentModule } from 'src/app/components/install-wizard/install-wizard.component.module' +import { ErrorMessageComponentModule } from 'src/app/components/error-message/error-message.component.module' +import { InformationPopoverComponentModule } from 'src/app/components/information-popover/information-popover.component.module' + +const routes: Routes = [ + { + path: '', + component: AppInstalledShowPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + StatusComponentModule, + DependencyListComponentModule, + AppBackupPageModule, + SharingModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + InstallWizardComponentModule, + ErrorMessageComponentModule, + InformationPopoverComponentModule, + ], + declarations: [AppInstalledShowPage], +}) +export class AppInstalledShowPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.html b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.html new file mode 100644 index 000000000..a8d317229 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.html @@ -0,0 +1,163 @@ + + + + + + Service Details + + + + + + + + + + + + + + + + +
+ + + + + +
+ + {{ vars.title }} + + + {{ vars.versionInstalled | displayEmver }} + +
+
+
+ + + + + + Configure + + + Stop + + + Stop Backup + + + Force Uninstall + + + Fix + + + Start + + + +
+ + + + Tor Address + + +

{{ vars.torAddress | truncateCenter:18:18:true }}

+ + + +
+
+ + Backups + + + + + Create new Backup + + Last Backup: {{vars.lastBackup ? (vars.lastBackup | date: 'short') : 'never'}} + + + + + + + Restore from Backup + + + General + + + + Check for Updates + + + + + Instructions + + + + + Config + + + + + Properties + + + + + Logs + + + + + Marketplace Details + + + + + Dependencies + + + + + + + + + + + + + + Uninstall + + +
+
+
+
diff --git a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.scss b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.scss new file mode 100644 index 000000000..ff5e97c0d --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.scss @@ -0,0 +1,41 @@ +.full-width { + margin: 10px; +} + +.about-attribute { + font-size: small; +} + +.about-attribute-value { + font-size: small; +} + +.less-large { + font-size: 20px !important; +} + +.top-plate { + // margin-top: 20px; + background: var(--ion-item-background); + margin: 20px 10px; + border-radius: 10px; + border-style: solid; + border-color: #373737; +} + +.status-readout { + display: flex; + justify-content: space-between; + padding: 4px 10px; + border-radius: 10px; + align-items: center; + background: var(--ion-background-color); + margin: 10px 10px 15px 10px; + border-style: solid; + border-width: 1px; + border-color: #404040; +} + +.no-cushion-item { + --background: transparent; --padding-start: 0px; --inner-padding-end: 0px; --padding-end: 0px; +} diff --git a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.ts b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.ts new file mode 100644 index 000000000..596447f53 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.ts @@ -0,0 +1,300 @@ +import { Component, ViewChild } from '@angular/core' +import { AlertController, NavController, ToastController, ModalController, IonContent, PopoverController } from '@ionic/angular' +import { ApiService } from 'src/app/services/api/api.service' +import { ActivatedRoute } from '@angular/router' +import { copyToClipboard } from 'src/app/util/web.util' +import { AppModel, AppStatus } from 'src/app/models/app-model' +import { AppInstalledFull } from 'src/app/models/app-types' +import { ModelPreload } from 'src/app/models/model-preload' +import { chill, pauseFor } from 'src/app/util/misc.util' +import { PropertySubject, peekProperties } from 'src/app/util/property-subject.util' +import { AppBackupPage } from 'src/app/modals/app-backup/app-backup.page' +import { LoaderService, markAsLoadingDuring$, markAsLoadingDuringP } from 'src/app/services/loader.service' +import { BehaviorSubject, Observable, of } from 'rxjs' +import { wizardModal } from 'src/app/components/install-wizard/install-wizard.component' +import { WizardBaker } from 'src/app/components/install-wizard/prebaked-wizards' +import { catchError, concatMap, filter, switchMap, tap } from 'rxjs/operators' +import { Cleanup } from 'src/app/util/cleanup' +import { InformationPopoverComponent } from 'src/app/components/information-popover/information-popover.component' +import { Emver } from 'src/app/services/emver.service' + +@Component({ + selector: 'app-installed-show', + templateUrl: './app-installed-show.page.html', + styleUrls: ['./app-installed-show.page.scss'], +}) +export class AppInstalledShowPage extends Cleanup { + $loading$ = new BehaviorSubject(true) + $loadingDependencies$ = new BehaviorSubject(false) // when true, dependencies will render with spinners. + + $error$ = new BehaviorSubject('') + app: PropertySubject = { } as any + appId: string + AppStatus = AppStatus + showInstructions = false + + dependencyDefintion = () => `Dependencies are other services which must be installed, configured appropriately, and started in order to start ${this.app.title.getValue()}` + + @ViewChild(IonContent) content: IonContent + + constructor ( + private readonly alertCtrl: AlertController, + private readonly route: ActivatedRoute, + private readonly navCtrl: NavController, + private readonly loader: LoaderService, + private readonly toastCtrl: ToastController, + private readonly modalCtrl: ModalController, + private readonly apiService: ApiService, + private readonly preload: ModelPreload, + private readonly wizardBaker: WizardBaker, + private readonly appModel: AppModel, + private readonly popoverController: PopoverController, + private readonly emver: Emver, + ) { + super() + } + + async ngOnInit () { + this.appId = this.route.snapshot.paramMap.get('appId') as string + + this.cleanup( + markAsLoadingDuring$(this.$loading$, this.preload.appFull(this.appId)) + .pipe( + tap(app => this.app = app), + concatMap(() => this.syncWhenDependencyInstalls()), //must be final in stack + catchError(e => of(this.setError(e))), + ).subscribe(), + ) + } + + ionViewDidEnter () { + markAsLoadingDuringP(this.$loadingDependencies$, this.getApp()) + } + + async doRefresh (event: any) { + await Promise.all([ + this.getApp(), + pauseFor(600), + ]) + event.target.complete() + } + + async scrollToRequirements () { + return this.scrollToElement('service-requirements-' + this.appId) + } + + async getApp (): Promise { + try { + await this.preload.loadInstalledApp(this.appId) + this.clearError() + } catch (e) { + this.setError(e) + } + } + + async checkForUpdates () { + const app = peekProperties(this.app) + + this.loader.of({ + message: `Checking for updates...`, + spinner: 'lines', + cssClass: 'loader', + }).displayDuringAsync( + async () => { + const { versionLatest } = await this.apiService.getAvailableApp(this.appId) + if (this.emver.compare(versionLatest, app.versionInstalled) === 1) { + this.presentAlertUpdate(app, versionLatest) + } else { + this.presentAlertUpToDate() + } + }, + ).catch(e => this.setError(e)) + } + + async presentAlertUpdate (app: AppInstalledFull, versionLatest: string) { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: 'Update Available', + message: `New version ${versionLatest} found for ${app.title}.`, + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: 'View in Store', + cssClass: 'alert-success', + handler: () => { + this.navCtrl.navigateForward(['/services', 'marketplace', this.appId]) + }, + }, + ], + }) + await alert.present() + } + + async presentAlertUpToDate () { + const alert = await this.alertCtrl.create({ + header: 'Up To Date', + message: `You are running the latest version of ${this.app.title.getValue()}!`, + buttons: ['OK'], + }) + await alert.present() + } + + async copyTor () { + const app = peekProperties(this.app) + let message = '' + await copyToClipboard(app.torAddress || '').then(success => { message = success ? 'copied to clipboard!' : 'failed to copy'}) + + const toast = await this.toastCtrl.create({ + header: message, + position: 'bottom', + duration: 1000, + cssClass: 'notification-toast', + }) + await toast.present() + } + + async stop (): Promise { + const app = peekProperties(this.app) + + await this.loader.of({ + message: `Stopping ${app.title}...`, + spinner: 'lines', + cssClass: 'loader', + }).displayDuringAsync(async () => { + const { breakages } = await this.apiService.stopApp(this.appId, true) + + if (breakages.length) { + const { cancelled } = await wizardModal( + this.modalCtrl, + this.wizardBaker.stop({ + id: app.id, + title: app.title, + version: app.versionInstalled, + breakages, + }), + ) + + if (cancelled) return { } + } + + return this.apiService.stopApp(this.appId).then(chill) + }).catch(e => this.setError(e)) + } + + async start (): Promise { + const app = peekProperties(this.app) + this.loader.of({ + message: `Starting ${app.title}...`, + spinner: 'lines', + cssClass: 'loader', + }).displayDuringP( + this.apiService.startApp(this.appId), + ).catch(e => this.setError(e)) + } + + async presentModalBackup (type: 'create' | 'restore') { + const modal = await this.modalCtrl.create({ + backdropDismiss: false, + component: AppBackupPage, + presentingElement: await this.modalCtrl.getTop(), + componentProps: { + app: peekProperties(this.app), + type, + }, + }) + + await modal.present() + } + + async presentAlertStopBackup (): Promise { + const app = peekProperties(this.app) + + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: 'Warning', + message: `${app.title} is not finished backing up. Are you sure you want stop the process?`, + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: 'Stop', + cssClass: 'alert-danger', + handler: () => { + this.stopBackup() + }, + }, + ], + }) + await alert.present() + } + + async stopBackup (): Promise { + await this.loader.of({ + message: `Stopping backup...`, + spinner: 'lines', + cssClass: 'loader', + }).displayDuringP(this.apiService.stopAppBackup(this.appId)) + .catch (e => this.setError(e)) + } + + async uninstall () { + const app = peekProperties(this.app) + + const data = await wizardModal( + this.modalCtrl, + this.wizardBaker.uninstall({ + id: app.id, + title: app.title, + version: app.versionInstalled, + }), + ) + + if (data.cancelled) return + return this.navCtrl.navigateRoot('/services/installed') + } + + async presentPopover (information: string, ev: any) { + const popover = await this.popoverController.create({ + component: InformationPopoverComponent, + event: ev, + translucent: false, + showBackdrop: true, + backdropDismiss: true, + componentProps: { + information, + }, + }) + return await popover.present() + } + + private setError (e: Error) { + this.$error$.next(e.message) + } + + private clearError () { + this.$error$.next('') + } + + private async scrollToElement (elementId: string) { + const el = document.getElementById(elementId) + + if (!el) return + + let y = el.offsetTop + return this.content.scrollToPoint(0, y, 1000) + } + + private syncWhenDependencyInstalls (): Observable { + return this.app.configuredRequirements.pipe( + filter(deps => !!deps), + switchMap(reqs => this.appModel.watchForInstallations(reqs)), + concatMap(() => markAsLoadingDuringP(this.$loadingDependencies$, this.getApp())), + catchError(e => of(console.error(e))), + ) + } +} diff --git a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.module.ts b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.module.ts new file mode 100644 index 000000000..c6e0276fa --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.module.ts @@ -0,0 +1,29 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' +import { IonicModule } from '@ionic/angular' + +import { AppInstructionsPage } from './app-instructions.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' + +const routes: Routes = [ + { + path: '', + component: AppInstructionsPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + SharingModule, + ], + declarations: [AppInstructionsPage], +}) +export class AppInstructionsPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.html b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.html new file mode 100644 index 000000000..4929bd390 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.html @@ -0,0 +1,31 @@ + + + + + + Instructions + + + + + + + + + + + + + + +

No instructions for {{ app.title }} {{ app.versionInstalled }}.

+
+
+ +
+
+
\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.scss b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.ts b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.ts new file mode 100644 index 000000000..b1049a649 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.ts @@ -0,0 +1,37 @@ +import { Component } from '@angular/core' +import { ActivatedRoute } from '@angular/router' +import { BehaviorSubject } from 'rxjs' +import { AppInstalledFull } from 'src/app/models/app-types' +import { ModelPreload } from 'src/app/models/model-preload' +import { markAsLoadingDuring$ } from 'src/app/services/loader.service' +import { peekProperties } from 'src/app/util/property-subject.util' + +@Component({ + selector: 'app-instructions', + templateUrl: './app-instructions.page.html', + styleUrls: ['./app-instructions.page.scss'], +}) +export class AppInstructionsPage { + $loading$ = new BehaviorSubject(true) + error = '' + app: AppInstalledFull = { } as any + appId: string + instructions: any + + constructor ( + private readonly route: ActivatedRoute, + private readonly preload: ModelPreload, + ) { } + + async ngOnInit () { + this.appId = this.route.snapshot.paramMap.get('appId') as string + + markAsLoadingDuring$(this.$loading$, this.preload.appFull(this.appId)).subscribe({ + next: app => this.app = peekProperties(app), + error: e => { + console.error(e) + this.error = e.message + }, + }) + } +} diff --git a/ui/src/app/pages/apps-routes/app-logs/app-logs.module.ts b/ui/src/app/pages/apps-routes/app-logs/app-logs.module.ts new file mode 100644 index 000000000..0dcc71571 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-logs/app-logs.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' + +import { IonicModule } from '@ionic/angular' + +import { AppLogsPage } from './app-logs.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' + +const routes: Routes = [ + { + path: '', + component: AppLogsPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [AppLogsPage], +}) +export class AppLogsPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-logs/app-logs.page.html b/ui/src/app/pages/apps-routes/app-logs/app-logs.page.html new file mode 100644 index 000000000..629d8c2ec --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-logs/app-logs.page.html @@ -0,0 +1,22 @@ + + + + + + Logs + + + + + + + + + + + + {{ error }} + + +

{{ logs }}

+
\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-logs/app-logs.page.scss b/ui/src/app/pages/apps-routes/app-logs/app-logs.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/apps-routes/app-logs/app-logs.page.ts b/ui/src/app/pages/apps-routes/app-logs/app-logs.page.ts new file mode 100644 index 000000000..883ee65ee --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-logs/app-logs.page.ts @@ -0,0 +1,50 @@ +import { Component, ViewChild } from '@angular/core' +import { ActivatedRoute } from '@angular/router' +import { ApiService } from 'src/app/services/api/api.service' +import { IonContent } from '@ionic/angular' +import { pauseFor } from 'src/app/util/misc.util' +import { markAsLoadingDuringP } from 'src/app/services/loader.service' +import { BehaviorSubject } from 'rxjs' + +@Component({ + selector: 'app-logs', + templateUrl: './app-logs.page.html', + styleUrls: ['./app-logs.page.scss'], +}) +export class AppLogsPage { + @ViewChild(IonContent, { static: false }) private content: IonContent + $loading$ = new BehaviorSubject(true) + error = '' + appId: string + logs: string + + constructor ( + private readonly route: ActivatedRoute, + private readonly apiService: ApiService, + ) { } + + async ngOnInit () { + this.appId = this.route.snapshot.paramMap.get('appId') as string + + markAsLoadingDuringP(this.$loading$, Promise.all([ + this.getLogs(), + pauseFor(600), + ])) + } + + async getLogs () { + this.logs = '' + this.$loading$.next(true) + try { + const logs = await this.apiService.getAppLogs(this.appId) + this.logs = logs.join('\n\n') + this.error = '' + setTimeout(async () => await this.content.scrollToBottom(100), 200) + } catch (e) { + console.error(e) + this.error = e.message + } finally { + this.$loading$.next(false) + } + } +} diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts new file mode 100644 index 000000000..9ea5ca66f --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts @@ -0,0 +1,32 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' + +import { IonicModule } from '@ionic/angular' + +import { AppMetricsPage } from './app-metrics.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { QRComponentModule } from 'src/app/components/qr/qr.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' + +const routes: Routes = [ + { + path: '', + component: AppMetricsPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + QRComponentModule, + SharingModule, + ], + declarations: [AppMetricsPage], +}) +export class AppMetricsPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html new file mode 100644 index 000000000..ddb625d60 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html @@ -0,0 +1,69 @@ + + + + + + Properties + + + + + + + + + + + + + + + + {{ error }} + + + + + +

No properties for {{ app.title }} {{ app.versionInstalled }}.

+
+
+ + +
+ + + + + + +

{{ keyval.key }}

+
+ +
+ + + + + + +

{{ keyval.key }}

+

{{ keyval.value.masked && !unmasked[keyval.key] ? (keyval.value.value | mask ) : (keyval.value.value | truncateEnd : 100) }}

+
+
+ + + + + + + + + +
+
+
+
+ +
+
\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.scss b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.scss new file mode 100644 index 000000000..eea898305 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.scss @@ -0,0 +1,3 @@ +.metric-note { + font-size: 16px; +} \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.ts b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.ts new file mode 100644 index 000000000..86cfb7137 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.ts @@ -0,0 +1,139 @@ +import { Component } from '@angular/core' +import { ActivatedRoute } from '@angular/router' +import { ApiService } from 'src/app/services/api/api.service' +import { pauseFor } from 'src/app/util/misc.util' +import { BehaviorSubject } from 'rxjs' +import { copyToClipboard } from 'src/app/util/web.util' +import { AlertController, NavController, PopoverController, ToastController } from '@ionic/angular' +import { AppMetrics } from 'src/app/util/metrics.util' +import { QRComponent } from 'src/app/components/qr/qr.component' +import { AppMetricStore } from './metric-store' +import * as JSONpointer from 'json-pointer' +import { ModelPreload } from 'src/app/models/model-preload' +import { markAsLoadingDuringP } from 'src/app/services/loader.service' +import { AppInstalledFull } from 'src/app/models/app-types' +import { peekProperties } from 'src/app/util/property-subject.util' + +@Component({ + selector: 'app-metrics', + templateUrl: './app-metrics.page.html', + styleUrls: ['./app-metrics.page.scss'], +}) +export class AppMetricsPage { + error = '' + $loading$ = new BehaviorSubject(true) + appId: string + pointer: string + qrCode: string + app: AppInstalledFull + $metrics$ = new BehaviorSubject({ }) + $hasMetrics$ = new BehaviorSubject(null) + unmasked: { [key: string]: boolean } = { } + + constructor ( + private readonly route: ActivatedRoute, + private readonly apiService: ApiService, + private readonly alertCtrl: AlertController, + private readonly toastCtrl: ToastController, + private readonly popoverCtrl: PopoverController, + private readonly metricStore: AppMetricStore, + private readonly navCtrl: NavController, + private readonly preload: ModelPreload, + ) { } + + ngOnInit () { + this.appId = this.route.snapshot.paramMap.get('appId') + this.pointer = this.route.queryParams['pointer'] + + markAsLoadingDuringP(this.$loading$, Promise.all([ + this.preload.appFull(this.appId).toPromise(), + this.getMetrics(), + pauseFor(600), + ])).then(([app]) => { + this.app = peekProperties(app) + this.metricStore.watch().subscribe(m => { + const metrics = JSONpointer.get(m, this.pointer || '') + this.$metrics$.next(metrics) + }) + this.$metrics$.subscribe(m => { + this.$hasMetrics$.next(!!Object.keys(m || { }).length) + }) + this.route.queryParams.subscribe(queryParams => { + if (queryParams['pointer'] === this.pointer) return + this.pointer = queryParams['pointer'] + const metrics = JSONpointer.get(this.metricStore.$metrics$.getValue(), this.pointer || '') + this.$metrics$.next(metrics) + }) + }) + } + + async doRefresh (event: any) { + await Promise.all([ + this.getMetrics(), + pauseFor(600), + ]) + event.target.complete() + } + + async getMetrics (): Promise { + try { + const metrics = await this.apiService.getAppMetrics(this.appId) + this.metricStore.update(metrics) + } catch (e) { + console.error(e) + this.error = e.message + } + } + + async presentDescription (metric: { key: string, value: AppMetrics[''] }, e: Event) { + e.stopPropagation() + + const alert = await this.alertCtrl.create({ + header: metric.key, + message: metric.value.description, + }) + await alert.present() + } + + async goToNested (key: string): Promise { + this.navCtrl.navigateForward(`/services/installed/${this.appId}/metrics`, { + queryParams: { + pointer: `${this.pointer || ''}/${key}/value`, + }, + }) + } + + async copy (text: string): Promise { + let message = '' + await copyToClipboard(text).then(success => { message = success ? 'copied to clipboard!' : 'failed to copy'}) + + const toast = await this.toastCtrl.create({ + header: message, + position: 'bottom', + duration: 1000, + cssClass: 'notification-toast', + }) + await toast.present() + } + + async showQR (text: string, ev: any): Promise { + const popover = await this.popoverCtrl.create({ + component: QRComponent, + cssClass: 'qr-popover', + event: ev, + componentProps: { + text, + }, + }) + return await popover.present() + } + + toggleMask (key: string) { + this.unmasked[key] = !this.unmasked[key] + console.log(this.unmasked) + } + + asIsOrder (a: any, b: any) { + return 0 + } +} diff --git a/ui/src/app/pages/apps-routes/app-metrics/metric-store.ts b/ui/src/app/pages/apps-routes/app-metrics/metric-store.ts new file mode 100644 index 000000000..c33841b57 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-metrics/metric-store.ts @@ -0,0 +1,15 @@ +import { Injectable } from '@angular/core' +import { BehaviorSubject } from 'rxjs' +import { AppMetrics } from '../../../util/metrics.util' + +@Injectable({ + providedIn: 'root', +}) +export class AppMetricStore { + $metrics$: BehaviorSubject = new BehaviorSubject({ }) + watch () { return this.$metrics$.asObservable() } + + update (metrics: AppMetrics): void { + this.$metrics$.next(metrics) + } +} \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/apps-routing.module.ts b/ui/src/app/pages/apps-routes/apps-routing.module.ts new file mode 100644 index 000000000..952909371 --- /dev/null +++ b/ui/src/app/pages/apps-routes/apps-routing.module.ts @@ -0,0 +1,52 @@ +import { NgModule } from '@angular/core' +import { Routes, RouterModule } from '@angular/router' + +const routes: Routes = [ + { + path: '', + redirectTo: 'installed', + pathMatch: 'full', + }, + { + path: 'marketplace', + loadChildren: () => import('./app-available-list/app-available-list.module').then(m => m.AppAvailableListPageModule), + }, + { + path: 'installed', + loadChildren: () => import('./app-installed-list/app-installed-list.module').then(m => m.AppInstalledListPageModule), + }, + { + path: 'marketplace/:appId', + loadChildren: () => import('./app-available-show/app-available-show.module').then(m => m.AppAvailableShowPageModule), + }, + { + path: 'installed/:appId', + loadChildren: () => import('./app-installed-show/app-installed-show.module').then(m => m.AppInstalledShowPageModule), + }, + { + path: 'installed/:appId/instructions', + loadChildren: () => import('./app-instructions/app-instructions.module').then(m => m.AppInstructionsPageModule), + }, + { + path: 'installed/:appId/config', + loadChildren: () => import('./app-config/app-config.module').then(m => m.AppConfigPageModule), + }, + { + path: 'installed/:appId/config/:edit', + loadChildren: () => import('./app-config/app-config.module').then(m => m.AppConfigPageModule), + }, + { + path: 'installed/:appId/logs', + loadChildren: () => import('./app-logs/app-logs.module').then(m => m.AppLogsPageModule), + }, + { + path: 'installed/:appId/metrics', + loadChildren: () => import('./app-metrics/app-metrics.module').then(m => m.AppMetricsPageModule), + }, +] + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class AppsRoutingModule { } \ No newline at end of file diff --git a/ui/src/app/pages/authenticate/authenticate-routing.module.ts b/ui/src/app/pages/authenticate/authenticate-routing.module.ts new file mode 100644 index 000000000..eebaff215 --- /dev/null +++ b/ui/src/app/pages/authenticate/authenticate-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { AuthenticatePage } from './authenticate.page'; + +const routes: Routes = [ + { + path: '', + component: AuthenticatePage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class AuthenticatePageRoutingModule {} diff --git a/ui/src/app/pages/authenticate/authenticate.module.ts b/ui/src/app/pages/authenticate/authenticate.module.ts new file mode 100644 index 000000000..12bf60358 --- /dev/null +++ b/ui/src/app/pages/authenticate/authenticate.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { IonicModule } from '@ionic/angular'; +import { AuthenticatePageRoutingModule } from './authenticate-routing.module'; +import { AuthenticatePage } from './authenticate.page'; +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module'; +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + AuthenticatePageRoutingModule, + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [AuthenticatePage], +}) +export class AuthenticatePageModule { } diff --git a/ui/src/app/pages/authenticate/authenticate.page.html b/ui/src/app/pages/authenticate/authenticate.page.html new file mode 100644 index 000000000..cdadc1a04 --- /dev/null +++ b/ui/src/app/pages/authenticate/authenticate.page.html @@ -0,0 +1,27 @@ + + + Login + + + + + + + +
+ + + + + + + + + {{ e }} + + + + Login + +
+
\ No newline at end of file diff --git a/ui/src/app/pages/authenticate/authenticate.page.scss b/ui/src/app/pages/authenticate/authenticate.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/authenticate/authenticate.page.ts b/ui/src/app/pages/authenticate/authenticate.page.ts new file mode 100644 index 000000000..7e9ec6123 --- /dev/null +++ b/ui/src/app/pages/authenticate/authenticate.page.ts @@ -0,0 +1,44 @@ +import { Component, OnInit } from '@angular/core' +import { AuthService } from '../../services/auth.service' +import { LoaderService } from '../../services/loader.service' +import { BehaviorSubject } from 'rxjs' +import { Router } from '@angular/router' + +@Component({ + selector: 'app-authenticate', + templateUrl: './authenticate.page.html', + styleUrls: ['./authenticate.page.scss'], +}) +export class AuthenticatePage implements OnInit { + password: string = '' + unmasked = false + $error$ = new BehaviorSubject(undefined) + + constructor ( + private readonly authStore: AuthService, + private readonly loader: LoaderService, + private readonly router: Router, + ) { } + + ngOnInit () { } + + ionViewDidEnter () { + this.$error$.next(undefined) + } + + toggleMask () { + this.unmasked = !this.unmasked + } + + async submitPassword () { + try { + await this.loader.displayDuringP( + this.authStore.login(this.password), + ) + this.password = '' + return this.router.navigate(['']) + } catch (e) { + this.$error$.next(e.message) + } + } +} diff --git a/ui/src/app/pages/notifications/notifications.module.ts b/ui/src/app/pages/notifications/notifications.module.ts new file mode 100644 index 000000000..79251f051 --- /dev/null +++ b/ui/src/app/pages/notifications/notifications.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { RouterModule, Routes } from '@angular/router' +import { NotificationsPage } from './notifications.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' + +const routes: Routes = [ + { + path: '', + component: NotificationsPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [NotificationsPage], +}) +export class NotificationsPageModule { } diff --git a/ui/src/app/pages/notifications/notifications.page.html b/ui/src/app/pages/notifications/notifications.page.html new file mode 100644 index 000000000..3952950bd --- /dev/null +++ b/ui/src/app/pages/notifications/notifications.page.html @@ -0,0 +1,64 @@ + + + + + + Notifications + + + + + + + + + + + + + + {{ error }} + + + + + + + +

+ Notifications about Embassy and services will appear here. +

+
+
+
+ + + + + + + + + + +

+ {{ not.title }} +

+

{{ not.message }}

+

{{ not.createdAt | date: 'short' }}

+

+ {{ not.appId }} + - + Code: {{ not.code }} +

+
+
+
+
+ + + + + +
\ No newline at end of file diff --git a/ui/src/app/pages/notifications/notifications.page.scss b/ui/src/app/pages/notifications/notifications.page.scss new file mode 100644 index 000000000..d472cbe22 --- /dev/null +++ b/ui/src/app/pages/notifications/notifications.page.scss @@ -0,0 +1,3 @@ +.notification-message { + margin: 10px 0 12px 0; +} \ No newline at end of file diff --git a/ui/src/app/pages/notifications/notifications.page.ts b/ui/src/app/pages/notifications/notifications.page.ts new file mode 100644 index 000000000..fb52a5590 --- /dev/null +++ b/ui/src/app/pages/notifications/notifications.page.ts @@ -0,0 +1,98 @@ +import { Component } from '@angular/core' +import { ServerModel, S9Notification } from 'src/app/models/server-model' +import { ApiService } from 'src/app/services/api/api.service' +import { pauseFor } from 'src/app/util/misc.util' +import { LoaderService } from 'src/app/services/loader.service' + +@Component({ + selector: 'notifications', + templateUrl: 'notifications.page.html', + styleUrls: ['notifications.page.scss'], +}) +export class NotificationsPage { + error = '' + loading = true + notifications: S9Notification[] = [] + page = 1 + needInfinite = false + readonly perPage = 20 + + constructor ( + private readonly serverModel: ServerModel, + private readonly apiService: ApiService, + private readonly loader: LoaderService, + ) { } + + async ngOnInit () { + const [notifications] = await Promise.all([ + this.getNotifications(), + pauseFor(600), + ]) + this.notifications = notifications + this.serverModel.update({ badge: 0 }) + this.loading = false + } + + async doRefresh (e: any) { + this.page = 1 + await Promise.all([ + this.getNotifications(), + pauseFor(600), + ]) + e.target.complete() + } + + async doInfinite (e: any) { + const notifications = await this.getNotifications() + this.notifications = this.notifications.concat(notifications) + e.target.complete() + } + + async getNotifications (): Promise { + let notifications: S9Notification[] = [] + try { + notifications = await this.apiService.getNotifications(this.page, this.perPage) + this.needInfinite = notifications.length >= this.perPage + this.page++ + this.error = '' + } catch (e) { + console.error(e) + this.error = e.message + } finally { + return notifications + } + } + + getColor (notification: S9Notification): string { + const char = notification.code.charAt(0) + switch (char) { + case '0': + return 'primary' + case '1': + return 'success' + case '2': + return 'warning' + case '3': + return 'danger' + default: + return '' + } + } + + async remove (notificationId: string, index: number): Promise { + this.loader.of({ + message: 'Deleting...', + spinner: 'lines', + cssClass: 'loader', + }).displayDuringP( + this.apiService.deleteNotification(notificationId).then(() => { + this.notifications.splice(index, 1) + this.error = '' + }), + ).catch(e => { + console.error(e) + this.error = e.message + }) + } +} + diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.module.ts b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.module.ts new file mode 100644 index 000000000..92529432c --- /dev/null +++ b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { DevOptionsPage } from './dev-options.page' +import { Routes, RouterModule } from '@angular/router' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { ObjectConfigComponentModule } from 'src/app/components/object-config/object-config.component.module' + +const routes: Routes = [ + { + path: '', + component: DevOptionsPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + ObjectConfigComponentModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [DevOptionsPage], +}) +export class DevOptionsPageModule { } diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.html b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.html new file mode 100644 index 000000000..f273221c5 --- /dev/null +++ b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.html @@ -0,0 +1,29 @@ + + + + + + Developer Options + + + + + + + + + + + + + + + SSH Keys + + + + + \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.scss b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.ts b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.ts new file mode 100644 index 000000000..39ae0287b --- /dev/null +++ b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.ts @@ -0,0 +1,42 @@ +import { Component } from '@angular/core' +import { PropertySubject } from 'src/app/util/property-subject.util' +import { S9Server } from 'src/app/models/server-model' +import { ServerConfigService } from 'src/app/services/server-config.service' +import { ApiService } from 'src/app/services/api/api.service' +import { pauseFor } from 'src/app/util/misc.util' +import { LoaderService } from 'src/app/services/loader.service' +import { ModelPreload } from 'src/app/models/model-preload' + +@Component({ + selector: 'dev-options', + templateUrl: './dev-options.page.html', + styleUrls: ['./dev-options.page.scss'], +}) +export class DevOptionsPage { + server: PropertySubject = { } as any + + constructor ( + private readonly serverConfigService: ServerConfigService, + private readonly apiService: ApiService, + private readonly loader: LoaderService, + private readonly preload: ModelPreload, + ) { } + + ngOnInit () { + this.loader.displayDuring$( + this.preload.server(), + ).subscribe(s => this.server = s) + } + + async doRefresh (event: any) { + await Promise.all([ + this.apiService.getServer(), + pauseFor(600), + ]) + event.target.complete() + } + + async presentModalValueEdit (key: string): Promise { + await this.serverConfigService.presentModalValueEdit(key) + } +} diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.module.ts b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.module.ts new file mode 100644 index 000000000..a629bffe8 --- /dev/null +++ b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { RouterModule, Routes } from '@angular/router' +import { DevSSHKeysPage } from './dev-ssh-keys.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' + +const routes: Routes = [ + { + path: '', + component: DevSSHKeysPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [DevSSHKeysPage], +}) +export class DevSSHKeysPageModule { } diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.html b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.html new file mode 100644 index 000000000..9a8975c7f --- /dev/null +++ b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.html @@ -0,0 +1,51 @@ + + + + + + SSH Keys + + + + + + + + + + + + + + {{ error }} + + + + Description + + +

Add SSH keys to your Embassy to gain root access from the command line.

+
+
+ + Saved Keys + + + + + + + + {{ fingerprint.alg }} {{ fingerprint.hash }} {{ fingerprint.hostname }} + + + +
+ + + + + + + +
\ No newline at end of file diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.scss b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.ts b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.ts new file mode 100644 index 000000000..9c75484be --- /dev/null +++ b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.ts @@ -0,0 +1,56 @@ +import { Component } from '@angular/core' +import { SSHFingerprint, S9Server } from 'src/app/models/server-model' +import { ApiService } from 'src/app/services/api/api.service' +import { pauseFor } from 'src/app/util/misc.util' +import { PropertySubject } from 'src/app/util/property-subject.util' +import { ServerConfigService } from 'src/app/services/server-config.service' +import { LoaderService } from 'src/app/services/loader.service' +import { ModelPreload } from 'src/app/models/model-preload' + +@Component({ + selector: 'dev-ssh-keys', + templateUrl: 'dev-ssh-keys.page.html', + styleUrls: ['dev-ssh-keys.page.scss'], +}) +export class DevSSHKeysPage { + server: PropertySubject = { } as any + error = '' + + constructor ( + private readonly apiService: ApiService, + private readonly loader: LoaderService, + private readonly preload: ModelPreload, + private readonly serverConfigService: ServerConfigService, + ) { } + + ngOnInit () { + this.loader.displayDuring$( + this.preload.server(), + ).subscribe(s => this.server = s) + } + + async doRefresh (event: any) { + await Promise.all([ + this.apiService.getServer(), + pauseFor(600), + ]) + event.target.complete() + } + + async presentModalAdd () { + await this.serverConfigService.presentModalValueEdit('ssh', true) + } + + async delete (fingerprint: SSHFingerprint) { + this.loader.of({ + message: 'Deleting...', + spinner: 'lines', + cssClass: 'loader', + }).displayDuringP( + this.apiService.deleteSSHKey(fingerprint).then(() => this.error = ''), + ).catch(e => { + console.error(e) + this.error = e.message + }) + } +} diff --git a/ui/src/app/pages/server-routes/developer-routes/developer-routing.module.ts b/ui/src/app/pages/server-routes/developer-routes/developer-routing.module.ts new file mode 100644 index 000000000..5ec809ba2 --- /dev/null +++ b/ui/src/app/pages/server-routes/developer-routes/developer-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core' +import { Routes, RouterModule } from '@angular/router' + +const routes: Routes = [ + { + path: '', + loadChildren: () => import('./dev-options/dev-options.module').then(m => m.DevOptionsPageModule), + }, + { + path: 'ssh-keys', + loadChildren: () => import('./dev-ssh-keys/dev-ssh-keys.module').then(m => m.DevSSHKeysPageModule), + }, +] + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class DeveloperRoutingModule { } \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/lan/lan.module.ts b/ui/src/app/pages/server-routes/lan/lan.module.ts new file mode 100644 index 000000000..f93ff781a --- /dev/null +++ b/ui/src/app/pages/server-routes/lan/lan.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' +import { IonicModule } from '@ionic/angular' +import { LANPage } from './lan.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' + +const routes: Routes = [ + { + path: '', + component: LANPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + SharingModule, + ], + declarations: [LANPage], +}) +export class LANPageModule { } diff --git a/ui/src/app/pages/server-routes/lan/lan.page.html b/ui/src/app/pages/server-routes/lan/lan.page.html new file mode 100644 index 000000000..ed3532f30 --- /dev/null +++ b/ui/src/app/pages/server-routes/lan/lan.page.html @@ -0,0 +1,67 @@ + + + + + + Secure LAN Setup + + + + + + + + + + + For a faster experience, you can also securely communicate with your Embassy by visiting its Local Area Network (LAN) address. + + + + + +

Instructions

+ +
    +
  • Download your Embassy's SSL Certificate Authority by clicking the download button below.
  • +
  • Install and trust the CA.
  • +
  • Connect this device to the same network as the Embassy. This should be your private home network.
  • +
  • Navigate to your Embassy LAN address, indicated below.
  • +
+
+
+

+
+ full documentation + full documentation + +
+
+ + + + + +

SSL Certificate

+

Embassy Local CA

+
+ + + +
+ + + +

LAN Address

+ {{ lanAddress }} +
+ + + +
+
+ + + + +
\ No newline at end of file diff --git a/ui/src/app/pages/server-routes/lan/lan.page.scss b/ui/src/app/pages/server-routes/lan/lan.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/server-routes/lan/lan.page.ts b/ui/src/app/pages/server-routes/lan/lan.page.ts new file mode 100644 index 000000000..93eaf4318 --- /dev/null +++ b/ui/src/app/pages/server-routes/lan/lan.page.ts @@ -0,0 +1,82 @@ +import { Component } from '@angular/core' +import { isPlatform, ToastController } from '@ionic/angular' +import { ServerModel } from 'src/app/models/server-model' +import { copyToClipboard } from 'src/app/util/web.util' +import { ConfigService } from 'src/app/services/config.service' + +@Component({ + selector: 'lan', + templateUrl: './lan.page.html', + styleUrls: ['./lan.page.scss'], +}) +export class LANPage { + torDocs = 'docs.privacy34kn4ez3y3nijweec6w4g54i3g54sdv7r5mr6soma3w4begyd.onion/user-manuals/embassyos/general/secure-lan' + lanDocs = 'docs.start9labs.com/user-manuals/embassyos/general/secure-lan' + + lanAddress: string + isTor: boolean + fullDocumentationLink: string + isConsulate: boolean + lanDisabled: LanSetupIssue = undefined + readonly lanDisabledExplanation: { [k in LanSetupIssue]: string } = { + NotDesktop: `We have detected you are on a mobile device. To setup LAN on a mobile device, use the Start9 Setup App.`, + NotTor: `We have detected you are not using a Tor connection. For security reasons, you must setup LAN over a Tor connection.

Navigate to your Embassy Tor Address and try again.`, + } + + constructor ( + private readonly serverModel: ServerModel, + private readonly toastCtrl: ToastController, + private readonly config: ConfigService, + ) { } + + ngOnInit () { + if (isPlatform('ios') || isPlatform('android')) { + this.lanDisabled = 'NotDesktop' + } else if (!this.config.isTor()) { + this.lanDisabled = 'NotTor' + } + + this.isConsulate = this.config.isConsulateIos || this.config.isConsulateAndroid + + if (this.config.isTor()) { + this.fullDocumentationLink = `http://${this.torDocs}` + } else { + this.fullDocumentationLink = `https://${this.lanDocs}` + } + + const server = this.serverModel.peek() + this.lanAddress = `https://${server.serverId}.local` + } + + async copyLAN (): Promise < void > { + const message = await copyToClipboard(this.lanAddress).then(success => success ? 'copied to clipboard!' : 'failed to copy') + + const toast = await this.toastCtrl.create({ + header: message, + position: 'bottom', + duration: 1000, + cssClass: 'notification-toast', + }) + await toast.present() + } + + async copyDocumentation (): Promise < void > { + const message = await copyToClipboard(this.fullDocumentationLink).then( + success => success ? 'copied documentation link to clipboard!' : 'failed to copy', + ) + + const toast = await this.toastCtrl.create({ + header: message, + position: 'bottom', + duration: 1000, + cssClass: 'notification-toast', + }) + await toast.present() + } + + installCert (): void { + document.getElementById('install-cert').click() + } +} + +type LanSetupIssue = 'NotTor' | 'NotDesktop' \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-config/server-config.module.ts b/ui/src/app/pages/server-routes/server-config/server-config.module.ts new file mode 100644 index 000000000..3847521a3 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-config/server-config.module.ts @@ -0,0 +1,30 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { ServerConfigPage } from './server-config.page' +import { Routes, RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { ObjectConfigComponentModule } from 'src/app/components/object-config/object-config.component.module' + +const routes: Routes = [ + { + path: '', + component: ServerConfigPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + SharingModule, + ObjectConfigComponentModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [ServerConfigPage], +}) +export class ServerConfigPageModule { } diff --git a/ui/src/app/pages/server-routes/server-config/server-config.page.html b/ui/src/app/pages/server-routes/server-config/server-config.page.html new file mode 100644 index 000000000..ae0f75bdd --- /dev/null +++ b/ui/src/app/pages/server-routes/server-config/server-config.page.html @@ -0,0 +1,29 @@ + + + + + + Config + + + + + + + + + + + + + + Device Name + {{ server.name | async }} + + + + + diff --git a/ui/src/app/pages/server-routes/server-config/server-config.page.scss b/ui/src/app/pages/server-routes/server-config/server-config.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/server-routes/server-config/server-config.page.ts b/ui/src/app/pages/server-routes/server-config/server-config.page.ts new file mode 100644 index 000000000..6d711519c --- /dev/null +++ b/ui/src/app/pages/server-routes/server-config/server-config.page.ts @@ -0,0 +1,43 @@ +import { Component } from '@angular/core' +import { ServerConfigService } from 'src/app/services/server-config.service' +import { pauseFor } from 'src/app/util/misc.util' +import { NavController } from '@ionic/angular' +import { PropertySubject } from 'src/app/util/property-subject.util' +import { S9Server, ServerModel } from 'src/app/models/server-model' +import { ApiService } from 'src/app/services/api/api.service' + +@Component({ + selector: 'server-config', + templateUrl: './server-config.page.html', + styleUrls: ['./server-config.page.scss'], +}) +export class ServerConfigPage { + server: PropertySubject + + constructor ( + private readonly serverModel: ServerModel, + private readonly serverConfigService: ServerConfigService, + private readonly apiService: ApiService, + private readonly navController: NavController, + ) { } + + ngOnInit () { + this.server = this.serverModel.watch() + } + + async doRefresh (event: any) { + await Promise.all([ + this.apiService.getServer(), + pauseFor(600), + ]) + event.target.complete() + } + + async presentModalValueEdit (key: string, add = false): Promise { + await this.serverConfigService.presentModalValueEdit(key, add) + } + + navigateBack () { + this.navController.back() + } +} diff --git a/ui/src/app/pages/server-routes/server-metrics/server-metrics.module.ts b/ui/src/app/pages/server-routes/server-metrics/server-metrics.module.ts new file mode 100644 index 000000000..d73633272 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-metrics/server-metrics.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' + +import { IonicModule } from '@ionic/angular' + +import { ServerMetricsPage } from './server-metrics.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' + +const routes: Routes = [ + { + path: '', + component: ServerMetricsPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [ServerMetricsPage], +}) +export class ServerMetricsPageModule { } diff --git a/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html new file mode 100644 index 000000000..63f6fbbc1 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html @@ -0,0 +1,32 @@ + + + + + + Metrics + + + + + + + + + {{ error }} + + + + + + {{ metricGroup.key }} + + + {{ metric.key }} + + + {{ metric.value.value }} {{ metric.value.unit }} + + + + + \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.scss b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.scss new file mode 100644 index 000000000..eea898305 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.scss @@ -0,0 +1,3 @@ +.metric-note { + font-size: 16px; +} \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.ts b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.ts new file mode 100644 index 000000000..8b2e6660c --- /dev/null +++ b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.ts @@ -0,0 +1,70 @@ +import { Component } from '@angular/core' +import { ServerMetrics } from 'src/app/models/server-model' +import { ApiService } from 'src/app/services/api/api.service' +import { pauseFor } from 'src/app/util/misc.util' + +@Component({ + selector: 'server-metrics', + templateUrl: './server-metrics.page.html', + styleUrls: ['./server-metrics.page.scss'], +}) +export class ServerMetricsPage { + error = '' + loading = true + going = false + metrics: ServerMetrics = { } + + constructor ( + private readonly apiService: ApiService, + ) { } + + async ngOnInit () { + await Promise.all([ + this.getMetrics(), + pauseFor(600), + ]) + + this.loading = false + + this.startDaemon() + } + + ngOnDestroy () { + this.stopDaemon() + } + + async startDaemon (): Promise { + this.going = true + while (this.going) { + await pauseFor(250) + await this.getMetrics() + } + } + + stopDaemon () { + this.going = false + } + + async getMetrics (): Promise { + try { + const metrics = await this.apiService.getServerMetrics() + Object.keys(metrics).forEach(outerKey => { + if (!this.metrics[outerKey]) { + this.metrics[outerKey] = metrics[outerKey] + } else { + Object.entries(metrics[outerKey]).forEach(([key, value]) => { + this.metrics[outerKey][key] = value + }) + } + }) + } catch (e) { + console.error(e) + this.error = e.message + this.stopDaemon() + } + } + + asIsOrder (a: any, b: any) { + return 0 + } +} diff --git a/ui/src/app/pages/server-routes/server-routing.module.ts b/ui/src/app/pages/server-routes/server-routing.module.ts new file mode 100644 index 000000000..c4cd29ec2 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-routing.module.ts @@ -0,0 +1,47 @@ +import { NgModule } from '@angular/core' +import { Routes, RouterModule } from '@angular/router' +import { AuthGuard } from '../../guards/auth.guard' + +const routes: Routes = [ + { + path: '', + canActivate: [AuthGuard], + loadChildren: () => import('./server-show/server-show.module').then(m => m.ServerShowPageModule), + }, + { + path: 'specs', + canActivate: [AuthGuard], + loadChildren: () => import('./server-specs/server-specs.module').then(m => m.ServerSpecsPageModule), + }, + { + path: 'metrics', + canActivate: [AuthGuard], + loadChildren: () => import('./server-metrics/server-metrics.module').then(m => m.ServerMetricsPageModule), + }, + { + path: 'config', + canActivate: [AuthGuard], + loadChildren: () => import('./server-config/server-config.module').then(m => m.ServerConfigPageModule), + }, + { + path: 'wifi', + canActivate: [AuthGuard], + loadChildren: () => import('./wifi/wifi.module').then(m => m.WifiListPageModule), + }, + { + path: 'lan', + canActivate: [AuthGuard], + loadChildren: () => import('./lan/lan.module').then(m => m.LANPageModule), + }, + { + path: 'developer', + canActivate: [AuthGuard], + loadChildren: () => import('./developer-routes/developer-routing.module').then( m => m.DeveloperRoutingModule), + }, +] + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class ServerRoutingModule { } \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-show/server-show.module.ts b/ui/src/app/pages/server-routes/server-show/server-show.module.ts new file mode 100644 index 000000000..79cc2be2b --- /dev/null +++ b/ui/src/app/pages/server-routes/server-show/server-show.module.ts @@ -0,0 +1,32 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { RouterModule, Routes } from '@angular/router' +import { ServerShowPage } from './server-show.page' +import { StatusComponentModule } from 'src/app/components/status/status.component.module' +import { FormsModule } from '@angular/forms' +import { SharingModule } from 'src/app/modules/sharing.module' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' + +const routes: Routes = [ + { + path: '', + component: ServerShowPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + StatusComponentModule, + IonicModule, + RouterModule.forChild(routes), + SharingModule, + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [ServerShowPage], +}) +export class ServerShowPageModule { } diff --git a/ui/src/app/pages/server-routes/server-show/server-show.page.html b/ui/src/app/pages/server-routes/server-show/server-show.page.html new file mode 100644 index 000000000..7a93cb72c --- /dev/null +++ b/ui/src/app/pages/server-routes/server-show/server-show.page.html @@ -0,0 +1,86 @@ + + + {{ server.name | async }} + + + + + + + + + +
+ Server Updating + +
+
+
+ + + + + + + + + {{ error }} + + + + + + + + About + + + + + Monitor + + + + + Config + + + + + + + Check for Updates + + + + + + + Secure LAN Setup + + + + + WiFi + + + + + Developer Options + + + + + + + Restart + + + + + Shutdown + + + + +
\ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-show/server-show.page.scss b/ui/src/app/pages/server-routes/server-show/server-show.page.scss new file mode 100644 index 000000000..272d5c3dc --- /dev/null +++ b/ui/src/app/pages/server-routes/server-show/server-show.page.scss @@ -0,0 +1,12 @@ +.notification-button { + ion-badge { + position: absolute; + font-size: 8px; + bottom: .7rem; + left: .8rem; + } +} + +ion-item-divider { + margin-top: 0px; +} \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-show/server-show.page.ts b/ui/src/app/pages/server-routes/server-show/server-show.page.ts new file mode 100644 index 000000000..978f6002f --- /dev/null +++ b/ui/src/app/pages/server-routes/server-show/server-show.page.ts @@ -0,0 +1,222 @@ +import { Component } from '@angular/core' +import { LoadingOptions } from '@ionic/core' +import { ServerModel, ServerStatus } from 'src/app/models/server-model' +import { AlertController } from '@ionic/angular' +import { S9Server } from 'src/app/models/server-model' +import { ApiService } from 'src/app/services/api/api.service' +import { SyncDaemon } from 'src/app/services/sync.service' +import { Subscription, Observable } from 'rxjs' +import { PropertySubject, toObservable } from 'src/app/util/property-subject.util' +import { doForAtLeast } from 'src/app/util/misc.util' +import { LoaderService } from 'src/app/services/loader.service' +import { Emver } from 'src/app/services/emver.service' + +@Component({ + selector: 'server-show', + templateUrl: 'server-show.page.html', + styleUrls: ['server-show.page.scss'], +}) +export class ServerShowPage { + error = '' + s9Host$: Observable + + server: PropertySubject + currentServer: S9Server + + subsToTearDown: Subscription[] = [] + + updatingFreeze = false + updating = false + + constructor ( + private readonly serverModel: ServerModel, + private readonly alertCtrl: AlertController, + private readonly loader: LoaderService, + private readonly apiService: ApiService, + private readonly syncDaemon: SyncDaemon, + private readonly emver: Emver, + ) { } + + async ngOnInit () { + this.server = this.serverModel.watch() + this.subsToTearDown.push( + // serverUpdateSubscription + this.server.status.subscribe(status => { + if (status === ServerStatus.UPDATING) { + this.updating = true + } else { + if (!this.updatingFreeze) { this.updating = false } + } + }), + // currentServerSubscription + toObservable(this.server).subscribe(currentServerProperties => { + this.currentServer = currentServerProperties + }), + ) + } + + ionViewDidEnter () { + this.error = '' + } + + ngOnDestroy () { + this.subsToTearDown.forEach(s => s.unsubscribe()) + } + + async doRefresh (event: any) { + await doForAtLeast([this.getServerAndApps()], 600) + event.target.complete() + } + + async getServerAndApps (): Promise { + try { + this.syncDaemon.sync() + this.error = '' + } catch (e) { + console.error(e) + this.error = e.message + } + } + + async checkForUpdates (): Promise { + const loader = await this.loader.ctrl.create(LoadingSpinner('Checking for updates...')) + await loader.present() + + try { + const { versionLatest } = await this.apiService.getVersionLatest() + if (this.emver.compare(this.server.versionInstalled.getValue(), versionLatest) === -1) { + this.presentAlertUpdate(versionLatest) + } else { + this.presentAlertUpToDate() + } + } catch (e) { + console.error(e) + this.error = e.message + } finally { + await loader.dismiss() + } + } + + async presentAlertUpToDate () { + const alert = await this.alertCtrl.create({ + header: 'Up To Date', + message: `You are running the latest version of EmbassyOS!`, + buttons: ['OK'], + }) + await alert.present() + } + + async presentAlertUpdate (versionLatest: string) { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: 'Confirm', + message: `Update EmbassyOS to ${versionLatest}?`, + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: 'Update', + handler: () => { + this.updateEmbassyOS(versionLatest) + }, + }, + ], + }) + await alert.present() + } + + async presentAlertRestart () { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: 'Confirm', + message: `Are you sure you want to restart your Embassy?`, + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: 'Restart', + cssClass: 'alert-danger', + handler: () => { + this.restart() + }, + }, + ]}, + ) + await alert.present() + } + + async presentAlertShutdown () { + const alert = await this.alertCtrl.create({ + backdropDismiss: false, + header: 'Confirm', + message: `Are you sure you shut down your Embassy? To turn it back on, you will need to physically unplug the device and plug it back in.`, + buttons: [ + { + text: 'Cancel', + role: 'cancel', + }, + { + text: 'Shutdown', + cssClass: 'alert-danger', + handler: () => { + this.shutdown() + }, + }, + ], + }) + await alert.present() + } + + private async updateEmbassyOS (versionLatest: string) { + this.loader + .displayDuringAsync(async () => { + await this.apiService.updateAgent(versionLatest) + this.serverModel.update({ status: ServerStatus.UPDATING }) + // hides the "Update Embassy to..." button for this intance of the component + this.updatingFreeze = true + this.updating = true + setTimeout(() => this.updatingFreeze = false, 8000) + }) + .catch(e => this.setError(e)) + } + + private async restart () { + this.loader + .of(LoadingSpinner(`Restarting ${this.currentServer.name}...`)) + .displayDuringAsync( async () => { + this.serverModel.markUnreachable() + await this.apiService.restartServer() + }) + .catch(e => this.setError(e)) + } + + private async shutdown () { + this.loader + .of(LoadingSpinner(`Shutting down ${this.currentServer.name}...`)) + .displayDuringAsync( async () => { + this.serverModel.markUnreachable() + await this.apiService.shutdownServer() + }) + .catch(e => this.setError(e)) + } + + setError (e: Error) { + console.error(e) + this.error = e.message + } +} + +const LoadingSpinner: (m?: string) => LoadingOptions = (m) => { + const toMergeIn = m ? { message: m } : { } + return { + spinner: 'lines', + cssClass: 'loader', + ...toMergeIn, + } as LoadingOptions +} + + diff --git a/ui/src/app/pages/server-routes/server-specs/server-specs.module.ts b/ui/src/app/pages/server-routes/server-specs/server-specs.module.ts new file mode 100644 index 000000000..82b2c8d59 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-specs/server-specs.module.ts @@ -0,0 +1,30 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' + +import { IonicModule } from '@ionic/angular' + +import { ServerSpecsPage } from './server-specs.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' + +const routes: Routes = [ + { + path: '', + component: ServerSpecsPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + SharingModule, + ], + declarations: [ServerSpecsPage], +}) +export class ServerSpecsPageModule { } diff --git a/ui/src/app/pages/server-routes/server-specs/server-specs.page.html b/ui/src/app/pages/server-routes/server-specs/server-specs.page.html new file mode 100644 index 000000000..b41271e84 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-specs/server-specs.page.html @@ -0,0 +1,33 @@ + + + + + + About + + + + + + + + + + + + {{ error }} + + + + + + +

{{ spec.key }}

+

{{ spec.value | displayEmver }}

+

{{ spec.value }}

+
+
+
+
+ +
\ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-specs/server-specs.page.scss b/ui/src/app/pages/server-routes/server-specs/server-specs.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/server-routes/server-specs/server-specs.page.ts b/ui/src/app/pages/server-routes/server-specs/server-specs.page.ts new file mode 100644 index 000000000..22f262f90 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-specs/server-specs.page.ts @@ -0,0 +1,53 @@ +import { Component } from '@angular/core' +import { S9Server } from 'src/app/models/server-model' + +import { ToastController } from '@ionic/angular' +import { copyToClipboard } from 'src/app/util/web.util' +import { PropertySubject } from 'src/app/util/property-subject.util' +import { ModelPreload } from 'src/app/models/model-preload' +import { LoaderService, markAsLoadingDuring$ } from 'src/app/services/loader.service' +import { BehaviorSubject } from 'rxjs' + +@Component({ + selector: 'server-specs', + templateUrl: './server-specs.page.html', + styleUrls: ['./server-specs.page.scss'], +}) +export class ServerSpecsPage { + server: PropertySubject = { } as any + error = '' + $loading$ = new BehaviorSubject(true) + + constructor ( + private readonly toastCtrl: ToastController, + private readonly preload: ModelPreload, + ) { } + + async ngOnInit () { + markAsLoadingDuring$(this.$loading$, this.preload.server()).subscribe({ + next: s => this.server = s, + error: e => { + console.error(e) + this.error = e.message + }, + }) + } + + async copyTor () { + let message = '' + await copyToClipboard((this.server.specs.getValue()['Tor Address'] as string).trim() || '') + .then(success => { message = success ? 'copied to clipboard!' : 'failed to copy'}) + + const toast = await this.toastCtrl.create({ + header: message, + position: 'bottom', + duration: 1000, + cssClass: 'notification-toast', + }) + await toast.present() + } + + asIsOrder (a: any, b: any) { + return 0 + } +} diff --git a/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.module.ts b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.module.ts new file mode 100644 index 000000000..5e89b88fb --- /dev/null +++ b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { FormsModule } from '@angular/forms' +import { IonicModule } from '@ionic/angular' +import { RouterModule, Routes } from '@angular/router' +import { WifiAddPage } from './wifi-add.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' + +const routes: Routes = [ + { + path: '', + component: WifiAddPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [WifiAddPage], +}) +export class WifiAddPageModule { } diff --git a/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.html b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.html new file mode 100644 index 000000000..724789978 --- /dev/null +++ b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.html @@ -0,0 +1,52 @@ + + + + + + Add Network + + + + + + + + + + {{ error }} + + + + + Select Country + + + {{ country.key }} - {{ country.value }} + + + + Network and Password + + + + + + + + + + + + + Add + + + + + Add and Connect + + + + + + \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.scss b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.ts b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.ts new file mode 100644 index 000000000..47819424d --- /dev/null +++ b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.ts @@ -0,0 +1,67 @@ +import { Component } from '@angular/core' +import { NavController } from '@ionic/angular' +import { ApiService } from 'src/app/services/api/api.service' +import { WifiService } from '../wifi.service' +import { LoaderService } from 'src/app/services/loader.service' + +@Component({ + selector: 'wifi-add', + templateUrl: 'wifi-add.page.html', + styleUrls: ['wifi-add.page.scss'], +}) +export class WifiAddPage { + countries = require('../../../../util/countries.json') + countryCode = 'US' + ssid = '' + password = '' + error = '' + + constructor ( + private readonly navCtrl: NavController, + private readonly apiService: ApiService, + private readonly loader: LoaderService, + private readonly wifiService: WifiService, + ) { } + + async add (): Promise { + this.loader.of({ + message: 'Saving...', + spinner: 'lines', + cssClass: 'loader', + }).displayDuringAsync( async () => { + await this.apiService.addWifi(this.ssid, this.password, this.countryCode, false) + this.wifiService.addWifi(this.ssid) + this.ssid = '' + this.password = '' + this.error = '' + this.navCtrl.back() + }).catch(e => { + console.error(e) + this.error = e.message + }) + } + + async addAndConnect (): Promise { + this.loader.of({ + message: 'Connecting. This could take while...', + spinner: 'lines', + cssClass: 'loader', + }).displayDuringAsync( async () => { + await this.apiService.addWifi(this.ssid, this.password, this.countryCode, true) + const success = await this.wifiService.confirmWifi(this.ssid) + if (!success) { return } + this.wifiService.addWifi(this.ssid) + this.ssid = '' + this.password = '' + this.error = '' + this.navCtrl.back() + }).catch (e => { + console.error(e) + this.error = e.message + }) + } + + asIsOrder (a: any, b: any) { + return 0 + } +} diff --git a/ui/src/app/pages/server-routes/wifi/wifi.module.ts b/ui/src/app/pages/server-routes/wifi/wifi.module.ts new file mode 100644 index 000000000..ffd503c52 --- /dev/null +++ b/ui/src/app/pages/server-routes/wifi/wifi.module.ts @@ -0,0 +1,30 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { RouterModule, Routes } from '@angular/router' +import { WifiListPage } from './wifi.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' + +const routes: Routes = [ + { + path: '', + component: WifiListPage, + }, + { + path: 'add', + loadChildren: () => import('./wifi-add/wifi-add.module').then(m => m.WifiAddPageModule), + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + BadgeMenuComponentModule, + ], + declarations: [WifiListPage], +}) +export class WifiListPageModule { } diff --git a/ui/src/app/pages/server-routes/wifi/wifi.page.html b/ui/src/app/pages/server-routes/wifi/wifi.page.html new file mode 100644 index 000000000..283ea0889 --- /dev/null +++ b/ui/src/app/pages/server-routes/wifi/wifi.page.html @@ -0,0 +1,47 @@ + + + + + + Wifi + + + + + + + + + + + + + + {{ error }} + + + + + +

+ Add WiFi credentials to your Embassy so it can connect to the Internet without an ethernet cable. +

+
+
+ + + + Saved Networks + + {{ ssid }} + + +
+ + + + + + + +
\ No newline at end of file diff --git a/ui/src/app/pages/server-routes/wifi/wifi.page.scss b/ui/src/app/pages/server-routes/wifi/wifi.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/pages/server-routes/wifi/wifi.page.ts b/ui/src/app/pages/server-routes/wifi/wifi.page.ts new file mode 100644 index 000000000..7369d3991 --- /dev/null +++ b/ui/src/app/pages/server-routes/wifi/wifi.page.ts @@ -0,0 +1,102 @@ +import { Component } from '@angular/core' +import { ActionSheetController } from '@ionic/angular' +import { ApiService } from 'src/app/services/api/api.service' +import { ActionSheetButton } from '@ionic/core' +import { pauseFor } from 'src/app/util/misc.util' +import { WifiService } from './wifi.service' +import { PropertySubject } from 'src/app/util/property-subject.util' +import { S9Server } from 'src/app/models/server-model' +import { LoaderService } from 'src/app/services/loader.service' +import { ModelPreload } from 'src/app/models/model-preload' + +@Component({ + selector: 'wifi', + templateUrl: 'wifi.page.html', + styleUrls: ['wifi.page.scss'], +}) +export class WifiListPage { + server: PropertySubject = { } as any + error: string + + constructor ( + private readonly apiService: ApiService, + private readonly loader: LoaderService, + private readonly actionCtrl: ActionSheetController, + private readonly wifiService: WifiService, + private readonly preload: ModelPreload, + ) { } + + async ngOnInit () { + this.loader.displayDuring$( + this.preload.server(), + ).subscribe(s => this.server = s) + } + + async doRefresh (event: any) { + await Promise.all([ + this.apiService.getServer(), + pauseFor(600), + ]) + event.target.complete() + } + + async presentAction (ssid: string) { + const buttons: ActionSheetButton[] = [ + { + text: 'Forget', + cssClass: 'alert-danger', + handler: () => { + this.delete(ssid) + }, + }, + ] + + if (ssid !== this.server.wifi.getValue().current) { + buttons.unshift( + { + text: 'Connect', + handler: () => { + this.connect(ssid) + }, + }, + ) + } + + const action = await this.actionCtrl.create({ + buttons, + }) + + await action.present() + } + + // Let's add country code here. + async connect (ssid: string): Promise { + this.loader.of({ + message: 'Connecting. This could take while...', + spinner: 'lines', + cssClass: 'loader', + }).displayDuringAsync(async () => { + await this.apiService.connectWifi(ssid) + await this.wifiService.confirmWifi(ssid) + this.error = '' + }).catch(e => { + console.error(e) + this.error = e.message + }) + } + + async delete (ssid: string): Promise { + this.loader.of({ + message: 'Deleting...', + spinner: 'lines', + cssClass: 'loader', + }).displayDuringAsync( async () => { + await this.apiService.deleteWifi(ssid) + this.wifiService.removeWifi(ssid) + this.error = '' + }).catch(e => { + console.error(e) + this.error = e.message + }) + } +} diff --git a/ui/src/app/pages/server-routes/wifi/wifi.service.ts b/ui/src/app/pages/server-routes/wifi/wifi.service.ts new file mode 100644 index 000000000..bba95503c --- /dev/null +++ b/ui/src/app/pages/server-routes/wifi/wifi.service.ts @@ -0,0 +1,80 @@ +import { Injectable } from '@angular/core' +import { ToastController } from '@ionic/angular' +import { ApiService } from 'src/app/services/api/api.service' +import { pauseFor } from 'src/app/util/misc.util' +import { ServerModel } from 'src/app/models/server-model' + +@Injectable({ + providedIn: 'root', +}) +export class WifiService { + + constructor ( + private readonly apiService: ApiService, + private readonly toastCtrl: ToastController, + private readonly serverModel: ServerModel, + ) { } + + addWifi (ssid: string): void { + const wifi = this.serverModel.peek().wifi + this.serverModel.update({ wifi: { ...wifi, ssids: [...new Set([ssid, ...wifi.ssids])] } }) + } + + removeWifi (ssid: string): void { + const wifi = this.serverModel.peek().wifi + this.serverModel.update({ wifi: { ...wifi, ssids: wifi.ssids.filter(s => s !== ssid) } }) + } + + async confirmWifi (ssid: string): Promise { + const timeout = 4000 + const maxAttempts = 5 + let attempts = 0 + + while (attempts < maxAttempts) { + try { + const start = new Date().valueOf() + const { current, ssids } = (await this.apiService.getServer(timeout)).wifi + const end = new Date().valueOf() + if (current === ssid) { + this.serverModel.update({ wifi: { current, ssids } }) + break + } else { + attempts++ + const diff = end - start + await pauseFor(Math.max(0, timeout - diff)) + if (attempts === maxAttempts) { + this.serverModel.update({ wifi: { current, ssids } }) + } + } + } catch (e) { + attempts++ + console.error(e) + } + } + + if (this.serverModel.peek().wifi.current === ssid) { + return true + } else { + const toast = await this.toastCtrl.create({ + header: 'Failed to connect:', + message: `Check credentials and try again`, + position: 'bottom', + duration: 4000, + buttons: [ + { + side: 'start', + icon: 'close', + handler: () => { + return true + }, + }, + ], + cssClass: 'notification-toast', + }) + + setTimeout(() => toast.present(), 300) + + return false + } + } +} diff --git a/ui/src/app/pipes/annotation-status.pipe.ts b/ui/src/app/pipes/annotation-status.pipe.ts new file mode 100644 index 000000000..016c6ed05 --- /dev/null +++ b/ui/src/app/pipes/annotation-status.pipe.ts @@ -0,0 +1,33 @@ +import { Pipe, PipeTransform } from '@angular/core' +import { Annotation } from '../app-config/config-utilities' + +@Pipe({ + name: 'annotationStatus', +}) +export class AnnotationStatusPipe implements PipeTransform { + transform (a: Annotation, target: FieldStatus): boolean { + return target === getStatus(a) + } +} + +function getStatus (a: Annotation): FieldStatus { + if (isInvalid(a)) return 'Invalid' + if (isEdited(a)) return 'Edited' + if (isAdded(a)) return 'Added' + return 'NoChange' +} + +function isInvalid (a: Annotation): boolean { + return !!a.invalid +} + +// edited only registers if its a valid edit +function isEdited (a: Annotation): boolean { + return a.edited && !a.invalid +} + +function isAdded (a: Annotation): boolean { + return a.added && !a.edited && !a.invalid +} + +type FieldStatus = 'Edited' | 'Added' | 'Invalid' | 'NoChange' diff --git a/ui/src/app/pipes/display-bulb.pipe.ts b/ui/src/app/pipes/display-bulb.pipe.ts new file mode 100644 index 000000000..2e6dbbe69 --- /dev/null +++ b/ui/src/app/pipes/display-bulb.pipe.ts @@ -0,0 +1,21 @@ +import { Pipe, PipeTransform } from '@angular/core' +import { AppStatus } from '../models/app-model' +import { AppStatusRendering } from '../util/status-rendering' + +@Pipe({ + name: 'displayBulb', +}) +export class DisplayBulbPipe implements PipeTransform { + + transform (status: AppStatus, d: DisplayBulb): boolean { + switch (AppStatusRendering[status].color) { + case 'danger': return d === 'red' + case 'success': return d === 'green' + case 'warning': return d === 'yellow' + default: return d === 'off' + } + } + +} + +type DisplayBulb = 'off' | 'red' | 'green' | 'yellow' diff --git a/ui/src/app/pipes/emver.pipe.ts b/ui/src/app/pipes/emver.pipe.ts new file mode 100644 index 000000000..cbff391de --- /dev/null +++ b/ui/src/app/pipes/emver.pipe.ts @@ -0,0 +1,64 @@ +import { Pipe, PipeTransform } from '@angular/core' +import { Emver } from '../services/emver.service' +@Pipe({ + name: 'satisfiesEmver', +}) +export class EmverSatisfiesPipe implements PipeTransform { + constructor (private readonly emver: Emver) { } + + transform (versionUnderTest: string, range: string): boolean { + return this.emver.satisfies(versionUnderTest, range) + } +} + +@Pipe({ + name: 'compareEmver', +}) +export class EmverComparesPipe implements PipeTransform { + constructor (private readonly emver: Emver) { } + + transform (first: string, second: string): SemverResult { + try { + return this.emver.compare(first, second) as SemverResult + } catch (e) { + console.warn(`emver comparison failed`, e, first, second) + return 'comparison-impossible' + } + } +} +type SemverResult = 0 | 1 | -1 | 'comparison-impossible' + +@Pipe({ + name: 'displayEmver', +}) +export class EmverDisplayPipe implements PipeTransform { + constructor () { } + + transform (version: string): string { + return displayEmver(version) + } +} + +@Pipe({ + name: 'isValidEmver', +}) +export class EmverIsValidPipe implements PipeTransform { + constructor () { } + + transform (version: string): boolean { + return isValidEmver(version) + } +} + +export function isValidEmver (version: string): boolean { + const vs = version.split('.') + if (vs.length < 3 || vs.length > 5) return false + if (!vs.every(v => !isNaN(parseFloat(v)))) return false + return true +} + +export function displayEmver (version: string): string { + const vs = version.split('.') + if (vs.length === 4) return `${vs[0]}.${vs[1]}.${vs[2]}~${vs[3]}` + return version +} \ No newline at end of file diff --git a/ui/src/app/pipes/icon.pipe.ts b/ui/src/app/pipes/icon.pipe.ts new file mode 100644 index 000000000..dba6711cd --- /dev/null +++ b/ui/src/app/pipes/icon.pipe.ts @@ -0,0 +1,11 @@ +import { Pipe, PipeTransform } from '@angular/core' + +@Pipe({ + name: 'iconParse', +}) +export class IconPipe implements PipeTransform { + transform (iconUrl: string): string { + if (iconUrl.startsWith('/')) return '/api' + iconUrl + return iconUrl + } +} diff --git a/ui/src/app/pipes/includes.pipe.ts b/ui/src/app/pipes/includes.pipe.ts new file mode 100644 index 000000000..95cd109b4 --- /dev/null +++ b/ui/src/app/pipes/includes.pipe.ts @@ -0,0 +1,10 @@ +import { Pipe, PipeTransform } from '@angular/core' + +@Pipe({ + name: 'includes', +}) +export class IncludesPipe implements PipeTransform { + transform (set: T[], val: T): boolean { + return set.includes(val) + } +} \ No newline at end of file diff --git a/ui/src/app/pipes/installed-latest-comparison.pipe.ts b/ui/src/app/pipes/installed-latest-comparison.pipe.ts new file mode 100644 index 000000000..7e1fda7ab --- /dev/null +++ b/ui/src/app/pipes/installed-latest-comparison.pipe.ts @@ -0,0 +1,46 @@ +import { Pipe, PipeTransform } from '@angular/core' +import { combineLatest, Observable } from 'rxjs' +import { map } from 'rxjs/operators' +import { AppAvailableFull, AppAvailablePreview } from 'src/app/models/app-types' +import { Emver } from '../services/emver.service' +import { PropertySubject } from '../util/property-subject.util' + +@Pipe({ + name: 'compareInstalledAndLatest', +}) +export class InstalledLatestComparisonPipe implements PipeTransform { + constructor (private readonly emver: Emver) { } + + transform (app: PropertySubject): Observable<'not-installed' | 'installed-below' | 'installed-above' | 'installed-equal'> { + return combineLatest([app.versionInstalled, app.versionLatest]).pipe( + map(([i, l]) => { + if (!i) return 'not-installed' + switch (this.emver.compare(i, l)){ + case 0: return 'installed-equal' + case 1: return 'installed-above' + case -1: return 'installed-below' + } + }), + ) + } +} + +@Pipe({ + name: 'compareInstalledAndViewing', +}) +export class InstalledViewingComparisonPipe implements PipeTransform { + constructor (private readonly emver: Emver) { } + + transform (app: PropertySubject): Observable<'not-installed' | 'installed-below' | 'installed-above' | 'installed-equal'> { + return combineLatest([app.versionInstalled, app.versionViewing]).pipe( + map(([i, l]) => { + if (!i) return 'not-installed' + switch (this.emver.compare(i, l)){ + case 0: return 'installed-equal' + case 1: return 'installed-above' + case -1: return 'installed-below' + } + }), + ) + } +} diff --git a/ui/src/app/pipes/markdown.pipe.ts b/ui/src/app/pipes/markdown.pipe.ts new file mode 100644 index 000000000..3b4805b19 --- /dev/null +++ b/ui/src/app/pipes/markdown.pipe.ts @@ -0,0 +1,14 @@ +import { Pipe, PipeTransform } from '@angular/core' +import * as marked from 'marked' + +@Pipe({ + name: 'markdown', +}) +export class MarkdownPipe implements PipeTransform { + transform (value: any): any { + if (value && value.length > 0) { + return marked(value) + } + return value + } +} diff --git a/ui/src/app/pipes/mask.pipe.ts b/ui/src/app/pipes/mask.pipe.ts new file mode 100644 index 000000000..143017beb --- /dev/null +++ b/ui/src/app/pipes/mask.pipe.ts @@ -0,0 +1,12 @@ +import { Pipe, PipeTransform } from '@angular/core' + +@Pipe({ + name: 'mask', +}) +export class MaskPipe implements PipeTransform { + transform (val: string, max = 16): string { + if (!val) return val + const times = val.length <= max ? val.length : max + return '●'.repeat(times) + } +} \ No newline at end of file diff --git a/ui/src/app/pipes/peek-properties.pipe.ts b/ui/src/app/pipes/peek-properties.pipe.ts new file mode 100644 index 000000000..901fff628 --- /dev/null +++ b/ui/src/app/pipes/peek-properties.pipe.ts @@ -0,0 +1,11 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { peekProperties, PropertySubject } from '../util/property-subject.util' + +@Pipe({ + name: 'peekProperties', +}) +export class PeekPropertiesPipe implements PipeTransform { + transform (value: PropertySubject): T { + return peekProperties(value) + } +} diff --git a/ui/src/app/pipes/truncate.pipe.ts b/ui/src/app/pipes/truncate.pipe.ts new file mode 100644 index 000000000..9a76a428f --- /dev/null +++ b/ui/src/app/pipes/truncate.pipe.ts @@ -0,0 +1,32 @@ +import { Pipe, PipeTransform } from '@angular/core' + +@Pipe({ + name: 'truncateCenter', +}) +export class TruncateCenterPipe implements PipeTransform { + transform (value: string, front: number, back: number, fullOnDesktop: boolean = false): unknown { + if (value.length <= front + back + 3) return value + if (fullOnDesktop && screen.width > 500) return value + return value.slice(0, front) + '...' + value.slice(value.length - back, value.length) + } +} + +@Pipe({ + name: 'truncateEnd', +}) +export class TruncateEndPipe implements PipeTransform { + transform (val: string, length: number): unknown { + if (val.length <= length) return val + return val.slice(0, length) + '...' + } +} + + +// 4 and 4 + +// 12345678 => 12345678 +// 123456789 => 123456789 +// 1234567890 => 1234567890 +// 12345678901 => 12345678901 +// 1234...9012 => 1234...9012 +// 1234...0123 => 1234...0123 \ No newline at end of file diff --git a/ui/src/app/pipes/typeof.pipe.ts b/ui/src/app/pipes/typeof.pipe.ts new file mode 100644 index 000000000..6881690bf --- /dev/null +++ b/ui/src/app/pipes/typeof.pipe.ts @@ -0,0 +1,10 @@ +import { Pipe, PipeTransform } from '@angular/core' + +@Pipe({ + name: 'typeof', +}) +export class TypeofPipe implements PipeTransform { + transform (value: any): any { + return typeof value + } +} \ No newline at end of file diff --git a/ui/src/app/services/api/API.def b/ui/src/app/services/api/API.def new file mode 100644 index 000000000..eeb0ca4cd --- /dev/null +++ b/ui/src/app/services/api/API.def @@ -0,0 +1,107 @@ + +//////////////// Install/Uninstall //////////////////////////////////////////////// + +type AppDependentBreakage = { + // id of the dependent app which will or did break (Stopped) given the action. + id: string + title: string + iconUrl: string +} + +POST /apps/:appId/install(?dryrun) + +body: { + version: string, //semver +} +response : ApiAppInstalledFull & { breakages: AppDependentBreakage[] } + + + +POST /apps/:appId/uninstall(?dryrun) + +response : { breakages: AppDependentBreakage[] } + +/////////////////////////////// Store/Show ///////////////////////////////////////////////// + + +type ApiAppAvailableFull = ... { + // app base data + id: string + title: string + status: AppStatus | null + versionInstalled: string | null + iconURL: string + + // preview data + versionLatest: string + descriptionShort: string + + // version specific data + releaseNotes: string + serviceRequirements: AppDependencyRequirement[] + + // other data + descriptionLong: string, + version: string[], +} + +type AppDependencyRequirement = ... { + //app base data (minus status + version installed) + id: string + title: string + iconURL: string + + // dependency data + optional: string | null + default: boolean + versionSpec: string + description: string | null + violation: AppDependencyRequirementViolation | null +} + +type AppDependencyRequirementViolation = + { name: 'missing'; suggestedVersion: string; } | + { name: 'incompatible-version'; suggestedVersion: string; } | + { name: 'incompatible-config'; ruleViolations: string; auto-configurable: boolean } | // (auto-configurable for if/when we do that) + { name: 'incompatible-status'; status: AppStatus; } + + +// Get App Available Full +GET /apps/:appId/store + +response: ApiAppAvailableFull + + +// Get Version Specific Data for an App Available +GET /apps/:appId/store/:version + +response: { + // version specific data + releaseNotes: string + serviceRequirements: AppDependencyRequirement[] +} + +///////////////////////////// Installed/Show /////////////////////////////////////////// + + +type ApiAppInstalledFull { + // app base data + id: string + title: string + status: AppStatus | null + versionInstalled: string | null + iconURL: string + + // preview data + + // other data + instructions: string | null + lastBackup: string | null + configuredRequirements: AppDependencyRequirement[] | null // null if not yet configured +} + + +// Get App Installed Full +GET /apps/:appId/installed + +reseponse: AppInstalledFull \ No newline at end of file diff --git a/ui/src/app/services/api/api-types.ts b/ui/src/app/services/api/api-types.ts new file mode 100644 index 000000000..daef2f32a --- /dev/null +++ b/ui/src/app/services/api/api-types.ts @@ -0,0 +1,32 @@ +import { ConfigSpec } from 'src/app/app-config/config-types' +import { AppAvailableFull, AppInstalledFull } from 'src/app/models/app-types' +import { Rules } from '../../models/app-model' +import { SSHFingerprint, ServerStatus, ServerSpecs } from '../../models/server-model' + +/** SERVER **/ + +export interface ApiServer { + name: string + status: ServerStatus + versionInstalled: string + alternativeRegistryUrl: string | null + specs: ServerSpecs + wifi: { ssids: string[]; current: string; } + ssh: SSHFingerprint[] + serverId: string +} + +/** APPS **/ +export type ApiAppAvailableFull = Omit +export type ApiAppInstalledFull = Omit + +export interface ApiAppConfig { + spec: ConfigSpec + config: object | null + rules: Rules[] +} + +/** MISC **/ + +export type Unit = { never?: never; } // hack for the unit typ + diff --git a/ui/src/app/services/api/api.service.factory.ts b/ui/src/app/services/api/api.service.factory.ts new file mode 100644 index 000000000..d0db9a798 --- /dev/null +++ b/ui/src/app/services/api/api.service.factory.ts @@ -0,0 +1,14 @@ +import { HttpService } from '../http.service' +import { AppModel } from '../../models/app-model' +import { MockApiService } from './mock-api.service' +import { LiveApiService } from './live-api.service' +import { ServerModel } from 'src/app/models/server-model' +import { ConfigService } from '../config.service' + +export function ApiServiceFactory (config: ConfigService, http: HttpService, appModel: AppModel, serverModel: ServerModel) { + if (config.api.useMocks) { + return new MockApiService(appModel, serverModel) + } else { + return new LiveApiService(http, appModel, serverModel) + } +} diff --git a/ui/src/app/services/api/api.service.ts b/ui/src/app/services/api/api.service.ts new file mode 100644 index 000000000..c0df7176e --- /dev/null +++ b/ui/src/app/services/api/api.service.ts @@ -0,0 +1,97 @@ +import { Rules } from '../../models/app-model' +import { AppAvailablePreview, AppAvailableFull, AppInstalledPreview, AppInstalledFull, DependentBreakage, AppAvailableVersionSpecificInfo } from '../../models/app-types' +import { S9Notification, SSHFingerprint, ServerMetrics, DiskInfo } from '../../models/server-model' +import { Subject, Observable } from 'rxjs' +import { Unit, ApiServer, ApiAppInstalledFull, ApiAppConfig, ApiAppAvailableFull } from './api-types' +import { AppMetrics, AppMetricsVersioned } from 'src/app/util/metrics.util' +import { ConfigSpec } from 'src/app/app-config/config-types' + +export abstract class ApiService { + private $unauthorizedApiResponse$: Subject<{ }> = new Subject() + + watch401$ (): Observable<{ }> { + return this.$unauthorizedApiResponse$.asObservable() + } + + authenticatedRequestsEnabled: boolean = false + + protected received401 () { + this.authenticatedRequestsEnabled = false + this.$unauthorizedApiResponse$.next() + } + + abstract getCheckAuth (): Promise // Throws an error on failed auth. + abstract postLogin (password: string): Promise // Throws an error on failed auth. + abstract postLogout (): Promise // Throws an error on failed auth. + abstract getServer (timeout?: number): Promise + abstract getVersionLatest (): Promise + abstract getServerMetrics (): Promise + abstract getNotifications (page: number, perPage: number): Promise + abstract deleteNotification (id: string): Promise + abstract updateAgent (thing: any): Promise + abstract getAvailableApps (): Promise + abstract getAvailableApp (appId: string): Promise + abstract getAvailableAppVersionSpecificInfo (appId: string, versionSpec: string): Promise + abstract getInstalledApp (appId: string): Promise + abstract getAppMetrics (appId: string): Promise + abstract getInstalledApps (): Promise + abstract getExternalDisks (): Promise + abstract getAppConfig (appId: string): Promise<{ spec: ConfigSpec, config: object, rules: Rules[]}> + abstract getAppLogs (appId: string, params?: ReqRes.GetAppLogsReq): Promise + abstract installApp (appId: string, version: string, dryRun?: boolean): Promise + abstract uninstallApp (appId: string, dryRun?: boolean): Promise<{ breakages: DependentBreakage[] }> + abstract startApp (appId: string): Promise + abstract stopApp (appId: string, dryRun?: boolean): Promise<{ breakages: DependentBreakage[] }> + abstract restartApp (appId: string): Promise + abstract createAppBackup (appId: string, logicalname: string, password?: string): Promise + abstract restoreAppBackup (appId: string, logicalname: string, password?: string): Promise + abstract stopAppBackup (appId: string): Promise + abstract patchAppConfig (app: AppInstalledPreview, config: object, dryRun?: boolean): Promise<{ breakages: DependentBreakage[] }> + abstract postConfigureDependency(dependencyId: string, dependentId: string, dryRun?: boolean): Promise<{config: object, breakages: DependentBreakage[] }> + abstract patchServerConfig (attr: string, value: any): Promise + abstract wipeAppData (app: AppInstalledPreview): Promise + abstract addSSHKey (sshKey: string): Promise + abstract deleteSSHKey (sshKey: SSHFingerprint): Promise + abstract addWifi (ssid: string, password: string, country: string, connect: boolean): Promise + abstract connectWifi (ssid: string): Promise + abstract deleteWifi (ssid: string): Promise + abstract restartServer (): Promise + abstract shutdownServer (): Promise +} + +export module ReqRes { + export type GetVersionRes = { version: string } + export type PostLoginReq = { password: string } + export type PostLoginRes = Unit + export type GetCheckAuthRes = { } + export type GetServerRes = ApiServer + export type GetVersionLatestRes = { versionLatest: string, canUpdate: boolean } + export type GetServerMetricsRes = ServerMetrics + export type GetAppAvailableRes = ApiAppAvailableFull + export type GetAppAvailableVersionInfoRes = AppAvailableVersionSpecificInfo + export type GetAppsAvailableRes = AppAvailablePreview[] + export type GetExternalDisksRes = DiskInfo[] + export type GetAppInstalledRes = ApiAppInstalledFull + export type GetAppConfigRes = ApiAppConfig + export type GetAppLogsReq = { after?: string, before?: string, page?: string, perPage?: string } + export type GetAppLogsRes = string[] + export type GetAppMetricsRes = AppMetricsVersioned + export type GetAppsInstalledRes = AppInstalledPreview[] + export type PostInstallAppReq = { version: string } + export type PostInstallAppRes = ApiAppInstalledFull & { breakages: DependentBreakage[] } + export type PostUpdateAgentReq = { version: string } + export type PostAppBackupCreateReq = { logicalname: string, password: string } + export type PostAppBackupCreateRes = Unit + export type PostAppBackupRestoreReq = { logicalname: string, password: string } + export type PostAppBackupRestoreRes = Unit + export type PostAppBackupStopRes = Unit + export type PatchAppConfigReq = { config: object } + export type PatchServerConfigReq = { value: string } + export type GetNotificationsReq = { page: string, perPage: string } + export type GetNotificationsRes = S9Notification[] + export type PostAddWifiReq = { ssid: string, password: string, country: string, skipConnect: boolean } + export type PostConnectWifiReq = { country: string } + export type PostAddSSHKeyReq = { sshKey: string } + export type PostAddSSHKeyRes = SSHFingerprint +} + diff --git a/ui/src/app/services/api/live-api.service.ts b/ui/src/app/services/api/live-api.service.ts new file mode 100644 index 000000000..f1887a1f9 --- /dev/null +++ b/ui/src/app/services/api/live-api.service.ts @@ -0,0 +1,257 @@ +import { Injectable } from '@angular/core' +import { HttpService, Method, HttpOptions } from '../http.service' +import { AppModel, AppStatus } from '../../models/app-model' +import { AppAvailablePreview, AppAvailableFull, AppInstalledFull, AppInstalledPreview, DependentBreakage, AppAvailableVersionSpecificInfo } from '../../models/app-types' +import { S9Notification, SSHFingerprint, ServerModel, DiskInfo } from '../../models/server-model' +import { ApiService, ReqRes } from './api.service' +import { ApiServer, Unit } from './api-types' +import { HttpErrorResponse } from '@angular/common/http' +import { isUnauthorized } from 'src/app/util/web.util' +import { Replace } from 'src/app/util/types.util' +import { AppMetrics, parseMetricsPermissive } from 'src/app/util/metrics.util' + +@Injectable() +export class LiveApiService extends ApiService { + constructor ( + private readonly http: HttpService, + // TODO remove app + server model from here. updates to state should be done in a separate class wrapping ApiService + App/ServerModel + private readonly appModel: AppModel, + private readonly serverModel: ServerModel, + ) { super() } + + // Used to check whether password or key is valid. If so, it will be used implicitly by all other calls. + async getCheckAuth (): Promise { + return this.http.serverRequest({ method: Method.GET, url: '/authenticate' }, { version: '' }) + } + + async postLogin (password: string): Promise { + return this.http.serverRequest({ method: Method.POST, url: '/auth/login', data: { password } }, { version: '' }) + } + + async postLogout (): Promise { + return this.http.serverRequest({ method: Method.POST, url: '/auth/logout' }, { version: '' }).then(() => { this.authenticatedRequestsEnabled = false; return { } }) + } + + async getServer (timeout?: number): Promise { + return this.authRequest({ method: Method.GET, url: '/', readTimeout: timeout }) + } + + async getVersionLatest (): Promise { + return this.authRequest({ method: Method.GET, url: '/versionLatest' }, { version: '' }) + } + + async getServerMetrics (): Promise { + return this.authRequest({ method: Method.GET, url: `/metrics` }) + } + + async getNotifications (page: number, perPage: number): Promise { + const params: ReqRes.GetNotificationsReq = { + page: String(page), + perPage: String(perPage), + } + return this.authRequest({ method: Method.GET, url: `/notifications`, params }) + } + + async deleteNotification (id: string): Promise { + return this.authRequest({ method: Method.DELETE, url: `/notifications/${id}` }) + } + + async getExternalDisks (): Promise { + return this.authRequest({ method: Method.GET, url: `/disks` }) + } + + async updateAgent (version: string): Promise { + const data: ReqRes.PostUpdateAgentReq = { + version: `=${version}`, + } + return this.authRequest({ method: Method.POST, url: '/update', data }) + } + + async getAvailableAppVersionSpecificInfo (appId: string, versionSpec: string): Promise { + return this + .authRequest>( { method: Method.GET, url: `/apps/${appId}/store/${versionSpec}` }) + .then( res => ({ ...res, versionViewing: res.version })) + .then( res => { + delete res['version'] + return res + }) + } + + async getAvailableApps (): Promise { + return this.authRequest({ method: Method.GET, url: '/apps/store' }) + } + + async getAvailableApp (appId: string): Promise { + return this.authRequest({ method: Method.GET, url: `/apps/${appId}/store` }) + .then(res => { + return { + ...res, + versionViewing: res.versionLatest, + } + }) + } + + async getInstalledApp (appId: string): Promise { + return this.authRequest({ method: Method.GET, url: `/apps/${appId}/installed` }) + .then(app => ({ ...app, hasFetchedFull: true })) + } + + async getInstalledApps (): Promise { + return this.authRequest({ method: Method.GET, url: `/apps/installed` }) + } + + async getAppConfig ( appId: string): Promise { + return this.authRequest({ method: Method.GET, url: `/apps/${appId}/config` }) + } + + async getAppLogs (appId: string, params: ReqRes.GetAppLogsReq = { }): Promise { + return this.authRequest( { method: Method.GET, url: `/apps/${appId}/logs`, params: params as any }) + } + + async getAppMetrics (appId: string): Promise { + return this.authRequest( { method: Method.GET, url: `/apps/${appId}/metrics` }) + .then(parseMetricsPermissive) + } + + async installApp (appId: string, version: string, dryRun: boolean = false): Promise { + const data: ReqRes.PostInstallAppReq = { + version, + } + return this.authRequest({ method: Method.POST, url: `/apps/${appId}/install${dryRunParam(dryRun, true)}`, data }) + .then(res => ({ ...res, hasFetchedFull: false })) + } + + async uninstallApp (appId: string, dryRun: boolean = false): Promise<{ breakages: DependentBreakage[] }> { + return this.authRequest({ method: Method.POST, url: `/apps/${appId}/uninstall${dryRunParam(dryRun, true)}`, readTimeout: 30000 }) + } + + async startApp (appId: string): Promise { + return this.authRequest({ method: Method.POST, url: `/apps/${appId}/start`, readTimeout: 30000 }) + .then(() => this.appModel.update({ id: appId, status: AppStatus.RUNNING })) + .then(() => ({ })) + } + + async stopApp (appId: string, dryRun: boolean = false): Promise<{ breakages: DependentBreakage[] }> { + const res = await this.authRequest<{ breakages: DependentBreakage[] }>({ method: Method.POST, url: `/apps/${appId}/stop${dryRunParam(dryRun, true)}`, readTimeout: 30000 }) + if (!dryRun) this.appModel.update({ id: appId, status: AppStatus.STOPPING }) + return res + } + + async restartApp (appId: string): Promise { + return this.authRequest({ method: Method.POST, url: `/apps/${appId}/restart`, readTimeout: 30000 }) + .then(() => ({ } as any)) + } + + async createAppBackup (appId: string, logicalname: string, password?: string): Promise { + const data: ReqRes.PostAppBackupCreateReq = { + password: password || undefined, + logicalname, + } + return this.authRequest({ method: Method.POST, url: `/apps/${appId}/backup`, data, readTimeout: 30000 }) + .then(() => this.appModel.update({ id: appId, status: AppStatus.CREATING_BACKUP })) + .then(() => ({ })) + } + + async stopAppBackup (appId: string): Promise { + return this.authRequest({ method: Method.POST, url: `/apps/${appId}/backup/stop`, readTimeout: 30000 }) + .then(() => this.appModel.update({ id: appId, status: AppStatus.STOPPED })) + .then(() => ({ })) + } + + async restoreAppBackup (appId: string, logicalname: string, password?: string): Promise { + const data: ReqRes.PostAppBackupRestoreReq = { + password: password || undefined, + logicalname, + } + return this.authRequest({ method: Method.POST, url: `/apps/${appId}/backup/restore`, data, readTimeout: 30000 }) + .then(() => this.appModel.update({ id: appId, status: AppStatus.RESTORING_BACKUP })) + .then(() => ({ })) + } + + async patchAppConfig (app: AppInstalledPreview, config: object, dryRun = false): Promise<{ breakages: DependentBreakage[] }> { + const data: ReqRes.PatchAppConfigReq = { + config, + } + return this.authRequest({ method: Method.PATCH, url: `/apps/${app.id}/config${dryRunParam(dryRun, true)}`, data, readTimeout: 30000 }) + } + + async postConfigureDependency (dependencyId: string, dependentId: string, dryRun?: boolean): Promise<{ config: object, breakages: DependentBreakage[] }> { + return this.authRequest({ method: Method.POST, url: `/apps/${dependencyId}/autoconfig/${dependentId}${dryRunParam(dryRun, true)}`, readTimeout: 30000 }) + } + + async patchServerConfig (attr: string, value: any): Promise { + const data: ReqRes.PatchServerConfigReq = { + value, + } + return this.authRequest({ method: Method.PATCH, url: `/${attr}`, data, readTimeout: 30000 }) + .then(() => this.serverModel.update({ [attr]: value })) + .then(() => ({ })) + } + + async wipeAppData (app: AppInstalledPreview): Promise { + return this.authRequest({ method: Method.POST, url: `/apps/${app.id}/wipe`, readTimeout: 30000 }).then((res) => { + this.appModel.update({ id: app.id, status: AppStatus.NEEDS_CONFIG }) + return res + }) + } + + async addSSHKey (sshKey: string): Promise { + const data: ReqRes.PostAddSSHKeyReq = { + sshKey, + } + const fingerprint = await this.authRequest({ method: Method.POST, url: `/sshKeys`, data }) + this.serverModel.update({ ssh: [...this.serverModel.peek().ssh, fingerprint] }) + return { } + } + + async addWifi (ssid: string, password: string, country: string, connect: boolean): Promise { + const data: ReqRes.PostAddWifiReq = { + ssid, + password, + country, + skipConnect: !connect, + } + return this.authRequest({ method: Method.POST, url: `/wifi`, data }) + } + + async connectWifi (ssid: string): Promise { + return this.authRequest({ method: Method.POST, url: encodeURI(`/wifi/${ssid}`) }) + } + + async deleteWifi (ssid: string): Promise { + return this.authRequest({ method: Method.DELETE, url: encodeURI(`/wifi/${ssid}`) }) + } + + async deleteSSHKey (fingerprint: SSHFingerprint): Promise { + await this.authRequest({ method: Method.DELETE, url: `/sshKeys/${fingerprint.hash}` }) + const ssh = this.serverModel.peek().ssh + this.serverModel.update({ ssh: ssh.filter(s => s !== fingerprint) }) + return { } + } + + async restartServer (): Promise { + return this.authRequest({ method: Method.POST, url: '/restart', readTimeout: 30000 }) + } + + async shutdownServer (): Promise { + return this.authRequest({ method: Method.POST, url: '/shutdown', readTimeout: 30000 }) + } + + private async authRequest (opts: HttpOptions, overrides: Partial<{ version: string }> = { }): Promise { + if (!this.authenticatedRequestsEnabled) throw new Error(`Authenticated requests are not enabled. Do you need to login?`) + + opts.withCredentials = true + return this.http.serverRequest(opts, overrides).catch((e: HttpError) => { + console.log(`Got a server error!`, e) + if (isUnauthorized(e)) this.received401() + throw e + }) + } +} + +type HttpError = HttpErrorResponse & { error: { code: string, message: string } } + +const dryRunParam = (dryRun: boolean, first: boolean) => { + if (!dryRun) return '' + return first ? `?dryrun` : `&dryrun` +} \ No newline at end of file diff --git a/ui/src/app/services/api/md-sample.md b/ui/src/app/services/api/md-sample.md new file mode 100644 index 000000000..7417c4444 --- /dev/null +++ b/ui/src/app/services/api/md-sample.md @@ -0,0 +1,477 @@ +# Size Limit [![Cult Of Martians][cult-img]][cult] + +Size Limit logo by Anton Lovchikov + +Size Limit is a performance budget tool for JavaScript. It checks every commit +on CI, calculates the real cost of your JS for end-users and throws an error +if the cost exceeds the limit. + +* **ES modules** and **tree-shaking** support. +* Add Size Limit to **Travis CI**, **Circle CI**, **GitHub Actions** + or another CI system to know if a pull request adds a massive dependency. +* **Modular** to fit different use cases: big JS applications + that use their own bundler or small npm libraries with many files. +* Can calculate **the time** it would take a browser + to download and **execute** your JS. Time is a much more accurate + and understandable metric compared to the size in bytes. +* Calculations include **all dependencies and polyfills** + used in your JS. + +

+ Size Limit CLI +

+ +With **[GitHub action]** Size Limit will post bundle size changes as a comment +in pull request discussion. + +

+Size Limit comment in pull request about bundle size changes +

+ +With `--why`, Size Limit can tell you *why* your library is of this size +and show the real cost of all your internal dependencies. + +

+ Bundle Analyzer example +

+ +

+ + Sponsored by Evil Martians + +

+ +[GitHub action]: https://github.com/andresz1/size-limit-action +[cult-img]: http://cultofmartians.com/assets/badges/badge.svg +[cult]: http://cultofmartians.com/tasks/size-limit-config.html + +## Who Uses Size Limit + +* [MobX](https://github.com/mobxjs/mobx) +* [Material-UI](https://github.com/callemall/material-ui) +* [Autoprefixer](https://github.com/postcss/autoprefixer) +* [PostCSS](https://github.com/postcss/postcss) reduced + [25% of the size](https://github.com/postcss/postcss/commit/150edaa42f6d7ede73d8c72be9909f0a0f87a70f). +* [Browserslist](https://github.com/ai/browserslist) reduced + [25% of the size](https://github.com/ai/browserslist/commit/640b62fa83a20897cae75298a9f2715642531623). +* [EmojiMart](https://github.com/missive/emoji-mart) reduced + [20% of the size](https://github.com/missive/emoji-mart/pull/111) +* [nanoid](https://github.com/ai/nanoid) reduced + [33% of the size](https://github.com/ai/nanoid/commit/036612e7d6cc5760313a8850a2751a5e95184eab). +* [React Focus Lock](https://github.com/theKashey/react-focus-lock) reduced + [32% of the size](https://github.com/theKashey/react-focus-lock/pull/48). +* [Logux](https://github.com/logux) reduced + [90% of the size](https://github.com/logux/logux-client/commit/62b258e20e1818b23ae39b9c4cd49e2495781e91). + + +## How It Works + +1. Size Limit contains a CLI tool, 3 plugins (`file`, `webpack`, `time`) + and 3 plugin presets for popular use cases (`app`, `big-lib`, `small-lib`). + A CLI tool finds plugins in `package.json` and loads the config. +2. If you use the `webpack` plugin, Size Limit will bundle your JS files into + a single file. It is important to track dependencies and webpack polyfills. + It is also useful for small libraries with many small files and without + a bundler. +3. The `webpack` plugin creates an empty webpack project, adds your library + and looks for the bundle size difference. +4. The `time` plugin compares the current machine performance with that of + a low-priced Android devices to calculate the CPU throttling rate. +5. Then the `time` plugin runs headless Chrome (or desktop Chrome if it’s + available) to track the time a browser takes to compile and execute your JS. + Note that these measurements depend on available resources and might + be unstable. [See here](https://github.com/mbalabash/estimo/issues/5) + for more details. + + +## Usage + +### JS Applications + +Suitable for applications that have their own bundler and send the JS bundle +directly to a client (without publishing it to npm). Think of a user-facing app +or website, like an email client, a CRM, a landing page or a blog with +interactive elements, using React/Vue/Svelte lib or vanilla JS. + +
Show instructions + +1. Install the preset: + + ```sh + $ npm install --save-dev size-limit @size-limit/preset-app + ``` + +2. Add the `size-limit` section and the `size` script to your `package.json`: + + ```diff + + "size-limit": [ + + { + + "path": "dist/app-*.js" + + } + + ], + "scripts": { + "build": "webpack ./webpack.config.js", + + "size": "npm run build && size-limit", + "test": "jest && eslint ." + } + ``` + +3. Here’s how you can get the size for your current project: + + ```sh + $ npm run size + + Package size: 30.08 KB with all dependencies, minified and gzipped + Loading time: 602 ms on slow 3G + Running time: 214 ms on Snapdragon 410 + Total time: 815 ms + ``` + +4. Now, let’s set the limit. Add 25% to the current total time and use that as + the limit in your `package.json`: + + ```diff + "size-limit": [ + { + + "limit": "1 s", + "path": "dist/app-*.js" + } + ], + ``` + +5. Add the `size` script to your test suite: + + ```diff + "scripts": { + "build": "webpack ./webpack.config.js", + "size": "npm run build && size-limit", + - "test": "jest && eslint ." + + "test": "jest && eslint . && npm run size" + } + ``` + +6. If you don’t have a continuous integration service running, don’t forget + to add one — start with [Travis CI]. + +
+ + +### Big Libraries + +JS libraries > 10 KB in size. + +This preset includes headless Chrome, and will measure your lib’s execution +time. You likely don’t need this overhead for a small 2 KB lib, but for larger +ones the execution time is a more accurate and understandable metric that +the size in bytes. Library like [React] is a good example for this preset. + +
Show instructions + +1. Install preset: + + ```sh + $ npm install --save-dev size-limit @size-limit/preset-big-lib + ``` + +2. Add the `size-limit` section and the `size` script to your `package.json`: + + ```diff + + "size-limit": [ + + { + + "path": "dist/react.production-*.js" + + } + + ], + "scripts": { + "build": "webpack ./scripts/rollup/build.js", + + "size": "npm run build && size-limit", + "test": "jest && eslint ." + } + ``` + +3. If you use ES modules you can test the size after tree-shaking with `import` + option: + + ```diff + "size-limit": [ + { + "path": "dist/react.production-*.js", + + "import": "{ createComponent }" + } + ], + ``` + +4. Here’s how you can get the size for your current project: + + ```sh + $ npm run size + + Package size: 30.08 KB with all dependencies, minified and gzipped + Loading time: 602 ms on slow 3G + Running time: 214 ms on Snapdragon 410 + Total time: 815 ms + ``` + +5. Now, let’s set the limit. Add 25% to the current total time and use that + as the limit in your `package.json`: + + ```diff + "size-limit": [ + { + + "limit": "1 s", + "path": "dist/react.production-*.js" + } + ], + ``` + +6. Add a `size` script to your test suite: + + ```diff + "scripts": { + "build": "rollup ./scripts/rollup/build.js", + "size": "npm run build && size-limit", + - "test": "jest && eslint ." + + "test": "jest && eslint . && npm run size" + } + ``` + +7. If you don’t have a continuous integration service running, don’t forget + to add one — start with [Travis CI]. +8. Add the library size to docs, it will help users to choose your project: + + ```diff + # Project Name + + Short project description + + * **Fast.** 10% faster than competitor. + + * **Small.** 15 KB (minified and gzipped). + + [Size Limit](https://github.com/ai/size-limit) controls the size. + ``` + +
+ + +### Small Libraries + +JS libraries < 10 KB in size. + +This preset will only measure the size, without the execution time, so it’s +suitable for small libraries. If your library is larger, you likely want +the Big Libraries preset above. [Nano ID] or [Storeon] are good examples +for this preset. + +
Show instructions + +1. First, install `size-limit`: + + ```sh + $ npm install --save-dev size-limit @size-limit/preset-small-lib + ``` + +2. Add the `size-limit` section and the `size` script to your `package.json`: + + ```diff + + "size-limit": [ + + { + + "path": "index.js" + + } + + ], + "scripts": { + + "size": "size-limit", + "test": "jest && eslint ." + } + ``` + +3. Here’s how you can get the size for your current project: + + ```sh + $ npm run size + + Package size: 177 B with all dependencies, minified and gzipped + ``` + +4. If your project size starts to look bloated, run `--why` for analysis: + + ```sh + $ npm run size -- --why + ``` + +5. Now, let’s set the limit. Determine the current size of your library, + add just a little bit (a kilobyte, maybe) and use that as the limit + in your `package.json`: + + ```diff + "size-limit": [ + { + + "limit": "9 KB", + "path": "index.js" + } + ], + ``` + +6. Add the `size` script to your test suite: + + ```diff + "scripts": { + "size": "size-limit", + - "test": "jest && eslint ." + + "test": "jest && eslint . && npm run size" + } + ``` + +7. If you don’t have a continuous integration service running, don’t forget + to add one — start with [Travis CI]. +8. Add the library size to docs, it will help users to choose your project: + + ```diff + # Project Name + + Short project description + + * **Fast.** 10% faster than competitor. + + * **Small.** 500 bytes (minified and gzipped). No dependencies. + + [Size Limit](https://github.com/ai/size-limit) controls the size. + ``` + +
+ +[Travis CI]: https://github.com/dwyl/learn-travis +[Storeon]: https://github.com/ai/storeon/ +[Nano ID]: https://github.com/ai/nanoid/ +[React]: https://github.com/facebook/react/ + + +## Reports + +Size Limit has a [GitHub action] that comments and rejects pull requests based +on Size Limit output. + +1. Install and configure Size Limit as shown above. +2. Add the following action inside `.github/workflows/size-limit.yml` + +```yaml +name: "size" +on: + pull_request: + branches: + - master +jobs: + size: + runs-on: ubuntu-latest + env: + CI_JOB_NUMBER: 1 + steps: + - uses: actions/checkout@v1 + - uses: andresz1/size-limit-action@v1.0.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} +``` + + +## Config + +Size Limits supports three ways to define config. + +1. `size-limit` section in `package.json`: + + ```json + "size-limit": [ + { + "path": "index.js", + "import": "{ createStore }", + "limit": "500 ms" + } + ] + ``` + +2. or a separate `.size-limit.json` config file: + + ```js + [ + { + "path": "index.js", + "import": "{ createStore }", + "limit": "500 ms" + } + ] + ``` + +3. or a more flexible `.size-limit.js` config file: + + ```js + module.exports = [ + { + path: "index.js", + import: "{ createStore }", + limit: "500 ms" + } + ] + ``` + +Each section in the config can have these options: + +* **path**: relative paths to files. The only mandatory option. + It could be a path `"index.js"`, a [pattern] `"dist/app-*.js"` + or an array `["index.js", "dist/app-*.js", "!dist/app-exclude.js"]`. +* **import**: partial import to test tree-shaking. It could be `"{ lib }"` + to test `import { lib } from 'lib'` or `{ "a.js": "{ a }", "b.js": "{ b }" }` + to test multiple files. +* **limit**: size or time limit for files from the `path` option. It should be + a string with a number and unit, separated by a space. + Format: `100 B`, `10 KB`, `500 ms`, `1 s`. +* **name**: the name of the current section. It will only be useful + if you have multiple sections. +* **entry**: when using a custom webpack config, a webpack entry could be given. + It could be a string or an array of strings. + By default, the total size of all entry points will be checked. +* **webpack**: with `false` it will disable webpack. +* **running**: with `false` it will disable calculating running time. +* **gzip**: with `false` it will disable gzip compression. +* **brotli**: with `true` it will use brotli compression and disable gzip compression. +* **config**: a path to a custom webpack config. +* **ignore**: an array of files and dependencies to exclude from + the project size calculation. + +If you use Size Limit to track the size of CSS files, make sure to set +`webpack: false`. Otherwise, you will get wrong numbers, because webpack +inserts `style-loader` runtime (≈2 KB) into the bundle. + +[pattern]: https://github.com/sindresorhus/globby#globbing-patterns + + +## Plugins and Presets + +Plugins: + +* `@size-limit/file` checks the size of files with Gzip, Brotli + or without compression. +* `@size-limit/webpack` adds your library to empty webpack project + and prepares bundle file for `file` plugin. +* `@size-limit/time` uses headless Chrome to track time to execute JS. +* `@size-limit/dual-publish` compiles files to ES modules with [`dual-publish`] + to check size after tree-shaking. + +Plugin presets: + +* `@size-limit/preset-app` contains `file` and `time` plugins. +* `@size-limit/preset-big-lib` contains `webpack`, `file`, and `time` plugins. +* `@size-limit/preset-small-lib` contains `webpack` and `file` plugins. + +[`dual-publish`]: https://github.com/ai/dual-publish + + +## JS API + +```js +const sizeLimit = require('size-limit') +const filePlugin = require('@size-limit/file') +const webpackPlugin = require('@size-limit/webpack') + +sizeLimit([filePlugin, webpackPlugin], [filePath]).then(result => { + result //=> { size: 12480 } +}) +``` \ No newline at end of file diff --git a/ui/src/app/services/api/mock-api.service.ts b/ui/src/app/services/api/mock-api.service.ts new file mode 100644 index 000000000..f25c5b2bd --- /dev/null +++ b/ui/src/app/services/api/mock-api.service.ts @@ -0,0 +1,1086 @@ +import { Injectable } from '@angular/core' +import { AppStatus, AppModel } from '../../models/app-model' +import { AppAvailablePreview, AppAvailableFull, AppInstalledPreview, AppInstalledFull, DependentBreakage, AppAvailableVersionSpecificInfo } from '../../models/app-types' +import { S9Notification, SSHFingerprint, ServerStatus, ServerModel, DiskInfo } from '../../models/server-model' +import { pauseFor } from '../../util/misc.util' +import { ApiService, ReqRes } from './api.service' +import { ApiServer, Unit as EmptyResponse, Unit } from './api-types' +import { AppMetrics, AppMetricsVersioned, parseMetricsPermissive } from 'src/app/util/metrics.util' +import { mockApiAppAvailableFull, mockApiAppAvailableVersionInfo, mockApiAppInstalledFull, mockAppDependentBreakages, toInstalledPreview } from './mock-app-fixures' + +//@TODO consider moving to test folders. +@Injectable() +export class MockApiService extends ApiService { + constructor ( + private readonly appModel: AppModel, + private readonly serverModel: ServerModel, + ) { + super() + } + + async postLogin () : Promise { + return { } + } + + async postLogout () : Promise { + return { } + } + + async postConfigureDependency (dependencyId: string, dependentId: string, dryRun?: boolean): Promise<{ config: object, breakages: DependentBreakage[] }> { + await pauseFor(2000) + throw new Error ('some misc backend error ohh we forgot to make this endpoint or something') + // return { config: mockCupsDependentConfig, breakages: [ ] } + } + + async getServer (): Promise { + return mockGetServer() + } + + async getCheckAuth (): Promise { + return { } + } + + async getVersionLatest (): Promise { + return mockGetVersionLatest() + } + + async getServerMetrics (): Promise { + return mockGetServerMetrics() + } + + async getNotifications (page: number, perPage: number): Promise { + return mockGetNotifications() + } + + async deleteNotification (id: string): Promise { + return mockDeleteNotification() + } + + async getExternalDisks (): Promise { + return mockGetExternalDisks() + } + + async updateAgent (thing: any): Promise { + return mockPostUpdateAgent() + } + + async getAvailableApps (): Promise { + return mockGetAvailableApps() + } + + async getAvailableApp (appId: string): Promise { + // throw new Error('Some horrible horrible error message gosh its awful') + return mockGetAvailableApp(appId) + .then(res => { + return { + ...res, + versionViewing: res.versionLatest, + } + }) + } + + async getAvailableAppVersionSpecificInfo (appId: string, versionSpec: string): Promise { + return mockGetAvailableAppVersionInfo() + } + + async getInstalledApp (appId: string): Promise { + return mockGetInstalledApp(appId) + } + + async getAppMetrics (appId: string): Promise { + return mockGetAppMetrics().then(parseMetricsPermissive) + } + + async getInstalledApps (): Promise { + return mockGetInstalledApps() + } + + async getAppConfig (appId: string): Promise { + return mockGetAppConfig() + } + + async getAppLogs (appId: string, params: ReqRes.GetAppLogsReq = { }): Promise { + return mockGetAppLogs() + } + + async installApp (appId: string, version: string, dryRun: boolean): Promise { + return mockInstallApp(appId) + } + + async uninstallApp (appId: string, dryRun: boolean): Promise<{ breakages: DependentBreakage[] }> { + return mockUninstallApp() + } + + async startApp (appId: string): Promise { + console.log('start app mock') + await mockStartApp() + this.appModel.update({ id: appId, status: AppStatus.RUNNING }) + return { } + } + + async stopApp (appId: string, dryRun = false): Promise<{ breakages: DependentBreakage[] }> { + await mockStopApp() + if (!dryRun) this.appModel.update({ id: appId, status: AppStatus.STOPPED }) + return mockAppDependentBreakages + } + + async restartApp (appId: string): Promise { + return { } + } + + async createAppBackup (appId: string, logicalname: string, password = ''): Promise { + await mockCreateAppBackup() + this.appModel.update({ id: appId, status: AppStatus.CREATING_BACKUP }) + return { } + } + + async stopAppBackup (appId: string): Promise { + await mockStopAppBackup() + this.appModel.update({ id: appId, status: AppStatus.STOPPED }) + return { } + } + + async restoreAppBackup (appId: string, logicalname: string, password?: string): Promise { + await mockCreateAppBackup() + this.appModel.update({ id: appId, status: AppStatus.RESTORING_BACKUP }) + return { } + } + + async patchAppConfig (app: AppInstalledPreview, config: object, dryRun?: boolean): Promise<{ breakages: DependentBreakage[] }> { + return mockPatchAppConfig() + } + + async patchServerConfig (attr: string, value: any): Promise { + await mockPatchServerConfig() + this.serverModel.update({ [attr]: value }) + return { } + } + + async wipeAppData (app: AppInstalledPreview): Promise { + return mockWipeAppData() + } + + async addSSHKey (sshKey: string): Promise { + const fingerprint = await mockAddSSHKey() + this.serverModel.update({ ssh: [...this.serverModel.peek().ssh, fingerprint] }) + return { } + } + + async deleteSSHKey (fingerprint: SSHFingerprint): Promise { + await mockDeleteSSHKey() + const ssh = this.serverModel.peek().ssh + this.serverModel.update({ ssh: ssh.filter(s => s !== fingerprint) }) + return { } + } + + async addWifi (ssid: string, password: string, country: string, connect: boolean): Promise { + return mockAddWifi() + } + + async connectWifi (ssid: string): Promise { + return mockConnectWifi() + } + + async deleteWifi (ssid: string): Promise { + return mockDeleteWifi() + } + + async restartServer (): Promise { + return mockRestartServer() + } + + async shutdownServer (): Promise { + return mockShutdownServer() + } +} + +async function mockGetServer (): Promise { + await pauseFor(1000) + return mockApiServer() +} + +async function mockGetVersionLatest (): Promise { + await pauseFor(1000) + return mockVersionLatest +} + +async function mockGetServerMetrics (): Promise { + await pauseFor(1000) + return mockApiServerMetrics +} + +async function mockGetNotifications (): Promise { + await pauseFor(1000) + function cloneAndChange (arr: S9Notification[], letter: string) { return JSON.parse(JSON.stringify(arr)).map(a => { a.id = a.id + letter; return a }) } + return mockApiNotifications.concat(cloneAndChange(mockApiNotifications, 'a')).concat(cloneAndChange(mockApiNotifications, 'b')) +} + +async function mockDeleteNotification (): Promise { + await pauseFor(1000) + return { } +} + +async function mockGetExternalDisks (): Promise { + await pauseFor(1000) + return mockApiExternalDisks +} + +async function mockPostUpdateAgent (): Promise { + await pauseFor(1000) + return { } +} + +async function mockGetAvailableApp (appId: string): Promise { + await pauseFor(1000) + return mockApiAppAvailableFull[appId] +} + +async function mockGetAvailableApps (): Promise { + await pauseFor(1000) + return Object.values(mockApiAppAvailableFull) +} + +async function mockGetInstalledApp (appId: string): Promise { + await pauseFor(1000) + return { ...mockApiAppInstalledFull[appId], hasFetchedFull: true } +} + +async function mockGetInstalledApps (): Promise { + await pauseFor(1000) + return Object.values(mockApiAppInstalledFull).map(toInstalledPreview).filter(({ versionInstalled}) => !!versionInstalled) +} + +async function mockGetAppLogs (): Promise { + await pauseFor(1000) + return mockApiAppLogs +} + +async function mockGetAppMetrics (): Promise { + await pauseFor(1000) + return mockApiAppMetricsV1 +} + +async function mockGetAvailableAppVersionInfo (): Promise { + await pauseFor(1000) + return mockApiAppAvailableVersionInfo +} + +async function mockGetAppConfig (): Promise { + await pauseFor(1000) + return mockApiAppConfig +} + +async function mockInstallApp (appId: string): Promise { + await pauseFor(1000) + return { ...mockApiAppInstalledFull[appId], hasFetchedFull: true, ...mockAppDependentBreakages } +} + +async function mockUninstallApp (): Promise< { breakages: DependentBreakage[] } > { + await pauseFor(1000) + return mockAppDependentBreakages +} + +async function mockStartApp (): Promise { + await pauseFor(1000) + return { } +} + +async function mockStopApp (): Promise { + await pauseFor(1000) + return { } +} + +async function mockCreateAppBackup (): Promise { + await pauseFor(1000) + return { } +} + +async function mockStopAppBackup (): Promise { + await pauseFor(1000) + return { } +} + + +async function mockPatchAppConfig (): Promise<{ breakages: DependentBreakage[] }> { + await pauseFor(1000) + return mockAppDependentBreakages +} + +async function mockPatchServerConfig (): Promise { + await pauseFor(1000) + return { } +} + +async function mockWipeAppData (): Promise { + await pauseFor(1000) + return { } +} + +async function mockAddSSHKey (): Promise { + await pauseFor(1000) + return mockApiServer().ssh[0] +} + +async function mockDeleteSSHKey (): Promise { + await pauseFor(1000) + return { } +} + +async function mockAddWifi (): Promise { + await pauseFor(1000) + return { } +} + +async function mockConnectWifi (): Promise { + await pauseFor(1000) + return { } +} + +async function mockDeleteWifi (): Promise { + await pauseFor(1000) + return { } +} + +async function mockRestartServer (): Promise { + await pauseFor(1000) + return { } +} + +async function mockShutdownServer (): Promise { + await pauseFor(1000) + return { } +} + +const mockApiNotifications: ReqRes.GetNotificationsRes = [ + { + id: '123e4567-e89b-12d3-a456-426655440000', + appId: 'bitcoind', + createdAt: '2019-12-26T14:20:30.872Z', + code: '101', + title: 'Install Complete', + message: 'Installation of bitcoind has completed successfully.', + }, + { + id: '123e4567-e89b-12d3-a456-426655440001', + appId: 'bitcoind', + createdAt: '2019-12-26T14:20:30.872Z', + code: '201', + title: 'SSH Key Added', + message: 'A new SSH key was added. If you did not do this, shit is bad.', + }, + { + id: '123e4567-e89b-12d3-a456-426655440002', + appId: 'bitcoind', + createdAt: '2019-12-26T14:20:30.872Z', + code: '002', + title: 'SSH Key Removed', + message: 'A SSH key was removed.', + }, + { + id: '123e4567-e89b-12d3-a456-426655440003', + appId: 'bitcoind', + createdAt: '2019-12-26T14:20:30.872Z', + code: '310', + title: 'App Crashed', + message: 'Bitcoind has crashed', + }, +] + +const mockApiServer: () => ReqRes.GetServerRes = () => ({ + serverId: 'start9-mockxyzab', + name: 'Embassy:12345678', + versionInstalled: '0.2.5', + status: ServerStatus.RUNNING, + alternativeRegistryUrl: 'beta-registry.start9labs.com', + specs: { + 'Tor Address': 'nfsnjkcnaskjnlkasnfahj7dh23fdnieqwjdnhjewbfijendiueqwbd.onion', + 'CPU': 'Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz', + 'RAM': '4GB LPDDR4-2400 SDRAM', + 'WiFI': '2.4 GHz and 5.0 GHz IEEE 802.11ac wireless, Bluetooth 5.0, BLE', + 'Ethernet': 'Gigabit', + 'Disk': '512 GB Flash (280 GB available)', + 'Embassy OS Version': '0.1.0.1', + }, + wifi: { + ssids: ['Goosers', 'Atlantic City'], + current: 'Goosers', + }, + ssh: [ + { + alg: 'ed25519', + hash: '28:d2:7e:78:61:b4:bf:g2:de:24:15:96:4e:d4:15:53', + hostname: 'aaron key', + }, + { + alg: 'ed25519', + hash: '12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53', + hostname: 'matt macbook pro', + }, + ], +}) + +const mockVersionLatest: ReqRes.GetVersionLatestRes = { + versionLatest: '0.2.5', + canUpdate: true, +} + +const mockApiServerMetrics: ReqRes.GetServerMetricsRes = { + 'Group1': { + 'Metric1': { + value: 22.2, + unit: 'mi/b', + }, + 'Metric2': { + value: 50, + unit: '%', + }, + 'Metric3': { + value: 10.1, + unit: '%', + }, + }, + 'Group2': { + 'Hmmmm1': { + value: 22.2, + unit: 'mi/b', + }, + 'Hmmmm2': { + value: 50, + unit: '%', + }, + 'Hmmmm3': { + value: 10.1, + unit: '%', + }, + }, +} + +const mockApiExternalDisks: DiskInfo[] = [ + { + logicalname: '/dev/sda', + size: '32GB', + description: 'Samsung', + partitions: [ + { + logicalname: 'sdba2', + size: null, + isMounted: false, + label: 'Matt Stuff', + }, + ], + }, + { + logicalname: '/dev/sba', + size: '64GB', + description: 'small USB stick', + partitions: [ + { + logicalname: 'sdba2', + size: '16GB', + isMounted: true, + label: null, + }, + ], + }, + { + logicalname: '/dev/sbd', + size: '128GBGB', + description: 'large USB stick', + partitions: [ + { + logicalname: 'sdba1', + size: '32GB', + isMounted: true, + label: 'Partition 1', + }, + { + logicalname: 'sdba2', + size: null, + isMounted: true, + label: 'Partition 2', + }, + ], + }, +] + +const mockApiAppLogs: string[] = [ + '****** START *****', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', + '[ng] 114 unchanged chunks', + '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', + '[ng] Time: 1244ms', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', + '[ng] 114 unchanged chunks', + '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', + '[ng] Time: 1185ms', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', + '[ng] 114 unchanged chunks', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', + '[ng] 114 unchanged chunks', + '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', + '[ng] Time: 1244ms', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', + '[ng] 114 unchanged chunks', + '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', + '[ng] Time: 1185ms', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', + '[ng] 114 unchanged chunks', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', + '[ng] 114 unchanged chunks', + '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', + '[ng] Time: 1244ms', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', + '[ng] 114 unchanged chunks', + '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', + '[ng] Time: 1185ms', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', + '[ng] 114 unchanged chunks', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', + '[ng] 114 unchanged chunks', + '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', + '[ng] Time: 1244ms', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', + '[ng] 114 unchanged chunks', + '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', + '[ng] Time: 1185ms', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', + '[ng] 114 unchanged chunks', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', + '[ng] 114 unchanged chunks', + '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', + '[ng] Time: 1244ms', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', + '[ng] 114 unchanged chunks', + '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', + '[ng] Time: 1185ms', + '[ng] ℹ 「wdm」: Compiled successfully.', + '[ng] ℹ 「wdm」: Compiling...', + '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', + '[ng] 114 unchanged chunks', + '****** FINISH *****', +] + +const mockApiAppMetricsV1: AppMetricsVersioned<2> = { + version: 2, + data: { + 'Test': { + type: 'string', + description: 'This is some information about the thing.', + copyable: true, + qr: true, + masked: false, + value: 'lndconnect://udlyfq2mxa4355pt7cqlrdipnvk2tsl4jtsdw7zaeekenufwcev2wlad.onion:10009?cert=MIICJTCCAcugAwIBAgIRAOyq85fqAiA3U3xOnwhH678wCgYIKoZIzj0EAwIwODEfMB0GAkUEChMWbG5kIGF1dG9nZW5lcmF0ZWQgY2VydDEVMBMGA1UEAxMMNTc0OTkwMzIyYzZlMB4XDTIwMTAyNjA3MzEyN1oXDTIxMTIyMTA3MzEyN1owODEfMB0GA1UEChMWbG5kIGF1dG9nZW5lcmF0ZWQgY2VydDEVMBMGA1UEAxMMNTc0OTkwMzIyYzZlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKqfhAMMZdY-eFnU5P4bGrQTSx0lo7m8u4V0yYkzUM6jlql_u31_mU2ovLTj56wnZApkEjoPl6fL2yasZA2wiy6OBtTCBsjAOBgNVHQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH_BAUwAwEB_zAdBgNVHQ4EFgQUYQ9uIO6spltnVCx4rLFL5BvBF9IwWwYDVR0RBFQwUoIMNTc0OTkwMzIyYzZlgglsb2NhbGhvc3SCBHVuaXiCCnVuaXhwYWNrZXSCB2J1ZmNvbm6HBH8AAAGHEAAAAAAAAAAAAAAAAAAAAAGHBKwSAAswCgYIKoZIzj0EAwIDSAAwRQIgVZH2Z2KlyAVY2Q2aIQl0nsvN-OEN49wreFwiBqlxNj4CIQD5_JbpuBFJuf81I5J0FQPtXY-4RppWOPZBb-y6-rkIUQ&macaroon=AgEDbG5kAusBAwoQuA8OUMeQ8Fr2h-f65OdXdRIBMBoWCgdhZGRyZXNzEgRyZWFkEgV3cml0ZRoTCgRpbmZvEgRyZWFkEgV3cml0ZRoXCghpbnZvaWNlcxIEcmVhZBIFd3JpdGUaFAoIbWFjYXJvb24SCGdlbmVyYXRlGhYKB21lc3NhZ2USBHJlYWQSBXdyaXRlGhcKCG9mZmNoYWluEgRyZWFkEgV3cml0ZRoWCgdvbmNoYWluEgRyZWFkEgV3cml0ZRoUCgVwZWVycxIEcmVhZBIFd3JpdGUaGAoGc2lnbmVyEghnZW5lcmF0ZRIEcmVhZAAABiCYsRUoUWuAHAiCSLbBR7b_qULDSl64R8LIU2aqNIyQfA', + }, + 'Nested': { + type: 'object', + description: 'This is a nested thing metric', + value: { + 'Last Name': { + type: 'string', + description: 'The last name of the user', + copyable: true, + qr: true, + masked: false, + value: 'Hill', + }, + 'Age': { + type: 'string', + description: 'The age of the user', + copyable: false, + qr: false, + masked: false, + value: '35', + }, + 'Password': { + type: 'string', + description: 'A secret password', + copyable: true, + qr: false, + masked: true, + value: 'password123', + }, + }, + }, + 'Another Property': { + type: 'string', + description: 'Some more information about the service.', + copyable: false, + qr: true, + masked: false, + value: 'https://guessagain.com', + }, + }, +} + +const mockApiAppConfig: ReqRes.GetAppConfigRes = { + // config spec + spec: { + 'testnet': { + 'name': 'Testnet', + 'type': 'boolean', + 'description': 'determines whether your node is running ontestnet or mainnet', + 'changeWarning': 'Chain will have to resync!', + 'default': false, + }, + 'objectList': { + 'name': 'Object List', + 'type': 'list', + 'subtype': 'object', + 'description': 'This is a list of objects, like users or something', + 'range': '[0,4]', + 'default': [ + { + 'firstName': 'Admin', + 'lastName': 'User', + 'age': 40, + }, + { + 'firstName': 'Admin2', + 'lastName': 'User2', + 'age': 40, + }, + ], + // the outer spec here, at the list level, says that what's inside (the inner spec) pertains to its inner elements. + // it just so happens that ValueSpecObject's have the field { spec: ConfigSpec } + // see 'unionList' below for a different example. + 'spec': { + 'uniqueBy': 'lastName', + 'displayAs': `I'm {{lastName}}, {{firstName}} {{lastName}}`, + 'spec': { + 'firstName': { + 'name': 'First Name', + 'type': 'string', + 'description': 'User first name', + 'nullable': true, + 'default': null, + 'masked': false, + 'copyable': false, + }, + 'lastName': { + 'name': 'Last Name', + 'type': 'string', + 'description': 'User first name', + 'nullable': true, + 'default': { + 'charset': 'a-g,2-9', + 'len': 12, + }, + 'pattern': '^[a-zA-Z]+$', + 'patternDescription': 'must contain only letters.', + 'masked': false, + 'copyable': true, + }, + 'age': { + 'name': 'Age', + 'type': 'number', + 'description': 'The age of the user', + 'nullable': true, + 'default': null, + 'integral': false, + 'changeWarning': 'User must be at least 18.', + 'range': '[18,*)', + }, + }, + }, + }, + 'unionList': { + 'name': 'Union List', + 'type': 'list', + 'subtype': 'union', + 'description': 'This is a sample list of unions', + 'changeWarning': 'If you change this, things may work.', + // a list of union selections. e.g. 'summer', 'winter',... + 'default': [ + 'summer', + ], + 'range': '[0, 2]', + 'spec': { + 'tag': { + 'id': 'preference', + 'name': 'Preferences', + 'variantNames': { + 'summer': 'Summer', + 'winter': 'Winter', + 'other': 'Other', + }, + }, + // this default is used to make a union selection when a new list element is first created + 'default': 'summer', + 'variants': { + 'summer': { + 'favorite-tree': { + 'name': 'Favorite Tree', + 'type': 'string', + 'nullable': false, + 'description': 'What is your favorite tree?', + 'default': 'Maple', + 'masked': false, + 'copyable': false, + }, + 'favorite-flower': { + 'name': 'Favorite Flower', + 'type': 'enum', + 'description': 'Select your favorite flower', + 'valueNames': { + 'none': 'Hate Flowers', + 'red': 'Red', + 'blue': 'Blue', + 'purple': 'Purple', + }, + 'values': [ + 'none', + 'red', + 'blue', + 'purple', + ], + 'default': 'none', + }, + }, + 'winter': { + 'like-snow': { + 'name': 'Like Snow?', + 'type': 'boolean', + 'description': 'Do you like snow or not?', + 'default': true, + }, + }, + }, + 'uniqueBy': 'preference', + }, + }, + 'randomEnum': { + 'name': 'Random Enum', + 'type': 'enum', + 'valueNames': { + 'null': 'Null', + 'option1': 'One 1', + 'option2': 'Two 2', + 'option3': 'Three 3', + }, + 'default': 'null', + 'description': 'This is not even real.', + 'changeWarning': 'Be careful chnaging this!', + 'values': [ + 'null', + 'option1', + 'option2', + 'option3', + ], + }, + 'favoriteNumber': { + 'name': 'Favorite Number', + 'type': 'number', + 'integral': false, + 'description': 'Your favorite number of all time', + 'changeWarning': 'Once you set this number, it can never be changed without severe consequences.', + 'nullable': false, + 'default': 7, + 'range': '(-100,100]', + 'units': 'BTC', + }, + 'secondaryNumbers': { + 'name': 'Unlucky Numbers', + 'type': 'list', + 'subtype': 'number', + 'description': 'Numbers that you like but are not your top favorite.', + 'spec': { + 'integral': false, + 'range': '[-100,200)', + }, + 'range': '[0,10]', + 'default': [ + 2, + 3, + ], + }, + 'rpcsettings': { + 'name': 'RPC Settings', + 'type': 'object', + 'uniqueBy': null, + 'description': 'rpc username and password', + 'changeWarning': 'Adding RPC users gives them special permissions on your node.', + 'nullable': false, + 'nullByDefault': false, + 'spec': { + 'laws': { + 'name': 'Laws', + 'type': 'object', + 'uniqueBy': 'law1', + 'description': 'the law of the realm', + 'nullable': true, + 'nullByDefault': true, + 'spec': { + 'law1': { + 'name': 'First Law', + 'type': 'string', + 'description': 'the first law', + 'nullable': true, + 'masked': false, + 'copyable': true, + }, + 'law2': { + 'name': 'Second Law', + 'type': 'string', + 'description': 'the second law', + 'nullable': true, + 'masked': false, + 'copyable': true, + }, + }, + }, + 'rulemakers': { + 'name': 'Rule Makers', + 'type': 'list', + 'subtype': 'object', + 'description': 'the people who make the rules', + 'range': '[0,2]', + 'default': [], + 'spec': { + 'uniqueBy': null, + 'spec': { + 'rulemakername': { + 'name': 'Rulemaker Name', + 'type': 'string', + 'description': 'the name of the rule maker', + 'nullable': false, + 'default': { + 'charset': 'a-g,2-9', + 'len': 12, + }, + 'masked': false, + 'copyable': false, + }, + 'rulemakerip': { + 'name': 'Rulemaker IP', + 'type': 'string', + 'description': 'the ip of the rule maker', + 'nullable': false, + 'default': '192.168.1.0', + 'pattern': '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$', + 'patternDescription': 'may only contain numbers and periods', + 'masked': false, + 'copyable': true, + }, + }, + }, + }, + 'rpcuser': { + 'name': 'RPC Username', + 'type': 'string', + 'description': 'rpc username', + 'nullable': false, + 'default': 'defaultrpcusername', + 'pattern': '^[a-zA-Z]+$', + 'patternDescription': 'must contain only letters.', + 'masked': false, + 'copyable': true, + }, + 'rpcpass': { + 'name': 'RPC User Password', + 'type': 'string', + 'description': 'rpc password', + 'nullable': false, + 'default': { + 'charset': 'a-z,A-Z,2-9', + 'len': 20, + }, + 'masked': true, + 'copyable': true, + }, + }, + }, + 'advanced': { + 'name': 'Advanced', + 'type': 'object', + 'uniqueBy': null, + 'description': 'Advanced settings', + 'nullable': false, + 'nullByDefault': false, + 'spec': { + 'notifications': { + 'name': 'Notification Preferences', + 'type': 'list', + 'subtype': 'enum', + 'description': 'how you want to be notified', + 'range': '[1,3]', + 'default': [ + 'email', + ], + 'spec': { + 'valueNames': { + 'email': 'EEEEmail', + 'text': 'Texxxt', + 'call': 'Ccccall', + 'push': 'PuuuusH', + 'webhook': 'WebHooookkeee', + }, + 'values': [ + 'email', + 'text', + 'call', + 'push', + 'webhook', + ], + }, + }, + }, + }, + 'bitcoinNode': { + 'name': 'Bitcoin Node Settings', + 'type': 'union', + 'uniqueBy': null, + 'description': 'The node settings', + 'default': 'internal', + 'changeWarning': 'Careful changing this', + 'tag': { + 'id': 'type', + 'name': 'Type', + 'variantNames': { + 'internal': 'Internal', + 'external': 'External', + }, + }, + 'variants': { + 'internal': { + 'lan-address': { + 'name': 'LAN Address', + 'type': 'pointer', + 'subtype': 'app', + 'target': 'lan-address', + 'app-id': 'bitcoind', + 'description': 'the lan address', + }, + }, + 'external': { + 'public-domain': { + 'name': 'Public Domain', + 'type': 'string', + 'description': 'the public address of the node', + 'nullable': false, + 'default': 'bitcoinnode.com', + 'pattern': '.*', + 'patternDescription': 'anything', + 'masked': false, + 'copyable': true, + }, + }, + }, + }, + 'port': { + 'name': 'Port', + 'type': 'number', + 'integral': true, + 'description': 'the default port for your Bitcoin node. default: 8333, testnet: 18333, regtest: 18444', + 'nullable': false, + 'default': 8333, + 'range': '[0, 9999]', + }, + 'favoriteSlogan': { + 'name': 'Favorite Slogan', + 'type': 'string', + 'description': 'You most favorite slogan in the whole world, used for paying you.', + 'nullable': true, + 'masked': true, + 'copyable': true, + }, + 'rpcallowip': { + 'name': 'RPC Allowed IPs', + 'type': 'list', + 'subtype': 'string', + 'description': 'external ip addresses that are authorized to access your Bitcoin node', + 'changeWarning': 'Any IP you allow here will have RPC access to your Bitcoin node.', + 'range': '[1,10]', + 'default': [ + '192.168.1.1', + ], + 'spec': { + 'pattern': '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))', + 'patternDescription': 'must be a valid ipv4, ipv6, or domain name', + }, + }, + 'rpcauth': { + 'name': 'RPC Auth', + 'type': 'list', + 'subtype': 'string', + 'description': 'api keys that are authorized to access your Bitcoin node.', + 'range': '[0,*)', + 'default': [], + 'spec': { }, + }, + }, + // actual config + config: { + testnet: undefined, + objectList: undefined, + unionList: undefined, + randomEnum: 'option1', + favoriteNumber: 8, + secondaryNumbers: undefined, + rpcsettings: { + laws: null, + rpcpass: null, + rpcuser: '123', + rulemakers: [], + }, + advanced: { + notifications: ['call'], + }, + bitcoinNode: undefined, + port: 5959, + maxconnections: null, + rpcallowip: undefined, + rpcauth: ['matt: 8273gr8qwoidm1uid91jeh8y23gdio1kskmwejkdnm'], + }, + rules: [], +} + +export const mockCupsDependentConfig = { + randomEnum: 'option1', + testnet: false, + favoriteNumber: 8, + secondaryNumbers: [13, 58, 20], + objectList: [], + unionList: [], + rpcsettings: { + laws: null, + rpcpass: null, + rpcuser: '123', + rulemakers: [], + }, + advanced: { + notifications: [], + }, + bitcoinNode: { type: 'internal' }, + port: 5959, + maxconnections: null, + rpcallowip: [], + rpcauth: ['matt: 8273gr8qwoidm1uid91jeh8y23gdio1kskmwejkdnm'], +} \ No newline at end of file diff --git a/ui/src/app/services/api/mock-app-fixures.ts b/ui/src/app/services/api/mock-app-fixures.ts new file mode 100644 index 000000000..a65644e91 --- /dev/null +++ b/ui/src/app/services/api/mock-app-fixures.ts @@ -0,0 +1,289 @@ +import { AppStatus } from '../../models/app-model' +import { AppAvailablePreview, AppAvailableFull, AppInstalledPreview, AppDependency, BaseApp, AppInstalledFull, DependentBreakage, AppAvailableVersionSpecificInfo } from '../../models/app-types' +export function toAvailablePreview (f: AppAvailableFull): AppAvailablePreview { + return { + id: f.id, + versionInstalled: f.versionInstalled, + status: f.status, + title: f.title, + descriptionShort: f.descriptionShort, + iconURL: f.iconURL, + versionLatest: f.versionLatest, + } +} + +export function toInstalledPreview (f: AppInstalledFull): AppInstalledPreview { + return { + id: f.id, + versionInstalled: f.versionInstalled, + status: f.status, + title: f.title, + iconURL: f.iconURL, + torAddress: f.torAddress, + } +} + +export function toServiceRequirement (f: BaseApp, o: Omit): AppDependency { + return { + id: f.id, + title: f.title, + iconURL: f.iconURL, + ...o, + } +} + +export function toServiceBreakage (f: BaseApp): DependentBreakage { + return { + id: f.id, + title: f.title, + iconURL: f.iconURL, + } +} + +export const bitcoinI: AppInstalledFull = { + id: 'bitcoind', + versionInstalled: '0.18.1', + title: 'Bitcoin Core', + torAddress: 'sample-bitcoin-tor-address-and-some-more-tor-address.onion', + status: AppStatus.STOPPED, + iconURL: 'assets/img/service-icons/bitcoind.png', + instructions: 'some instructions', + lastBackup: new Date().toISOString(), + configuredRequirements: [], + hasFetchedFull: true, +} + +export const lightningI: AppInstalledFull = { + id: 'c-lightning', + status: AppStatus.RUNNING, + title: 'C Lightning', + versionInstalled: '1.0.0', + torAddress: 'sample-bitcoin-tor-address-and-some-more-tor-address.onion', + iconURL: 'assets/img/service-icons/bitwarden.png', + instructions: 'some instructions', + lastBackup: new Date().toISOString(), + configuredRequirements: [ + toServiceRequirement(bitcoinI, + { + optional: 'you don\'t reeeeelly need this', + default: true, + versionSpec: '>= 0.1.2', + description: 'lightning needs bitcoin', + violation: null, + }), + ], + hasFetchedFull: true, +} + +export const cupsI: AppInstalledFull = { + id: 'cups', + versionInstalled: '2.1.0', + title: 'Cups Messenger', + torAddress: 'sample-cups-tor-address.onion', + status: AppStatus.BROKEN_DEPENDENCIES, + iconURL: 'assets/img/service-icons/cups.png', + + instructions: 'some instructions', + lastBackup: new Date().toISOString(), + configuredRequirements: [ + toServiceRequirement(lightningI, + { + optional: 'you don\'t reeeeelly need this', + default: true, + + versionSpec: '>= 0.1.2', + description: 'lightning needs bitcoin', + violation: { name: 'incompatible-version' }, + }), + toServiceRequirement(lightningI, + { + optional: 'you don\'t reeeeelly need this', + default: true, + + versionSpec: '>= 0.1.2', + description: 'lightning needs bitcoin', + violation: { name: 'incompatible-status', status: AppStatus.INSTALLING }, + }), + toServiceRequirement(lightningI, + { + optional: 'you don\'t reeeeelly need this', + default: true, + + versionSpec: '>= 0.1.2', + description: 'lightning needs bitcoin', + violation: { name: 'incompatible-config', ruleViolations: ['bro', 'seriously', 'fix this'] }, + }), + ], + hasFetchedFull: true, +} + +export const bitcoinA: AppAvailableFull = { + id: 'bitcoind', + versionLatest: '0.19.1.1', + versionInstalled: '0.19.0', + status: AppStatus.UNKNOWN, + title: 'Bitcoin Core', + descriptionShort: 'Bitcoin is an innovative payment network and new kind of money.', + iconURL: 'assets/img/service-icons/bitcoind.png', + releaseNotes: 'Bitcoin is an innovative payment network and new kind of money. Bitcoin utilizes a robust p2p network to garner decentralized consensus. Bitcoin is an innovative payment network and new kind of money. Bitcoin utilizes a robust p2p network to garner decentralized consensus. Bitcoin is an innovative payment network and new kind of money. Bitcoin utilizes a robust p2p network to garner decentralized consensus. Segit and more cool things!', + descriptionLong: 'Bitcoin is an innovative payment network and new kind of money. Bitcoin utilizes a robust p2p network to garner decentralized consensus.', + versions: ['0.19.1.1', '0.19.1', '0.19.0', '0.18.1', '0.17.0'], + versionViewing: '0.19.1', + serviceRequirements: [], +} + +export const lightningA: AppAvailableFull = { + id: 'c-lightning', + versionLatest: '1.0.1', + versionInstalled: null, + status: AppStatus.UNKNOWN, + title: 'C Lightning', + descriptionShort: 'Lightning is quick money things.', + iconURL: 'assets/img/service-icons/bitcoind.png', + releaseNotes: 'Finally it works', + descriptionLong: 'Lightning is an innovative payment network and new kind of money. Lightning utilizes a robust p2p network to garner decentralized consensus.', + versions: ['0.0.1', '0.8.0', '0.8.1', '1.0.0', '1.0.1'], + versionViewing: '1.0.1', + serviceRequirements: [ + toServiceRequirement(bitcoinA, { + optional: null, + default: true, + versionSpec: '>=0.19.0', + description: 'Lightning uses bitcoin under the hood', + violation: null, + }), + ], +} + +export const btcPayA: AppAvailableFull = { + id: 'btcPay', + versionLatest: '1.0.1', + versionInstalled: '1.0.1', + status: AppStatus.INSTALLING, + title: 'BTC Pay', + descriptionShort: 'BTC Pay is quick payment money things', + iconURL: 'assets/img/service-icons/bitcoind.png', + releaseNotes: 'Finally pay us Finally pay us Finally pay us Finally pay us Finally pay usFinally pay us', + descriptionLong: 'Btc Pay is an innovative payment network and new kind of money. Btc Pay utilizes a robust p2p network to garner decentralized consensus.', + versions: ['0.8.0', '0.8.1', '1.0.0', '1.0.1'], + versionViewing: '1.0.1', + serviceRequirements: [ + toServiceRequirement(bitcoinA, { + optional: null, + default: true, + versionSpec: '>0.19.0', + description: 'Lightning uses bitcoin under the hood', + violation: { name: 'incompatible-version' }, + }), + ], +} + +export const thunderA: AppAvailableFull = { + id: 'thunder', + versionLatest: '1.0.1', + versionInstalled: null, + status: AppStatus.UNKNOWN, + title: 'Thunder', + descriptionShort: 'Thunder is quick payment money things', + iconURL: 'assets/img/service-icons/bitcoind.png', + releaseNotes: 'Finally pay us', + descriptionLong: 'Thunder is an innovative payment network and new kind of money. Thunder utilizes a robust p2p network to garner decentralized consensus.', + versions: ['0.8.0', '0.8.1', '1.0.0', '1.0.1'], + versionViewing: '1.0.1', + serviceRequirements: [ + toServiceRequirement(bitcoinA, { + optional: null, + default: true, + versionSpec: '>0.19.0', + description: 'Thunder uses bitcoin under the hood', + violation: { name: 'incompatible-version' }, + }), + toServiceRequirement(lightningA, { + optional: null, + default: true, + versionSpec: '>=1.0.1', + description: 'Thunder uses lightning under the hood', + violation: { name: 'incompatible-version' }, + }), + toServiceRequirement(btcPayA, { + optional: 'Can be configured to use chase bank instead', + default: true, + versionSpec: '>=1.0.1', + description: 'Thunder can use btcpay under the hood', + violation: { name: 'missing' }, + }), + toServiceRequirement(btcPayA, { + optional: 'Can be configured to use chase bank instead', + default: true, + versionSpec: '>=1.0.1', + description: 'Thunder can use btcpay under the hood', + violation: { name: 'incompatible-status', status: AppStatus.INSTALLING }, + }), + ], +} + +export const cupsA: AppAvailableFull = { + id: 'cups', + versionLatest: '2.1.0', + versionInstalled: '2.1.0', + status: AppStatus.RUNNING, + title: 'Cups Messenger', + descriptionShort: 'P2P encrypted messaging over Tor.', + iconURL: 'assets/img/service-icons/cups.png', + releaseNotes: 'Segit and more cool things!', + descriptionLong: 'Bitcoin is an innovative payment network and new kind of money. Bitcoin utilizes a robust p2p network to garner decentralized consensus.', + versions: ['0.1.0', '0.1.1', '0.1.2', '1.0.0', '2.0.0', '2.1.0'], + versionViewing: '2.1.0', + serviceRequirements: [], +} + +export const bitwardenA: AppAvailableFull = { + id: 'bitwarden', + versionLatest: '0.1.1', + versionInstalled: null, + status: null, + title: 'Bitwarden', + descriptionShort: `Self-hosted password manager`, + iconURL: 'assets/img/service-icons/bitwarden.png', + releaseNotes: 'Passwords and shite!', + descriptionLong: 'Bitwarden is fun.', + versions: ['0.19.0', '0.18.1', '0.17.0'], + versionViewing: '0.1.1', + serviceRequirements: [ + toServiceRequirement(cupsA, { + optional: 'Can be configured to use chase bank instead', + default: true, + versionSpec: '>=1.0.0', + description: 'cups does great stuff for bitwarden', + violation: { name: 'incompatible-config', ruleViolations: ['change this value to that value', 'change this second value to something better']}, + }), + ], +} + +export const mockApiAppAvailableFull: { [appId: string]: AppAvailableFull; } = { + bitcoind: bitcoinA, + lightning: lightningA, + btcPay: btcPayA, + thunder: thunderA, + cups: cupsA, + bitwarden: bitwardenA, +} + +export const mockApiAppInstalledFull: { [appId: string]: AppInstalledFull; } = { + bitcoind: bitcoinI, + cups: cupsI, + lightning: lightningI, +} + +export const mockApiAppAvailableVersionInfo: AppAvailableVersionSpecificInfo = { + releaseNotes: 'Some older release notes that are not super important anymore.', + serviceRequirements: [], + versionViewing: '0.2.0', +} + +export const mockAppDependentBreakages: { breakages: DependentBreakage[] } = { + breakages: [ + toServiceBreakage(bitcoinI), + toServiceBreakage(cupsA), + ], +} \ No newline at end of file diff --git a/ui/src/app/services/auth.service.ts b/ui/src/app/services/auth.service.ts new file mode 100644 index 000000000..31aed59c1 --- /dev/null +++ b/ui/src/app/services/auth.service.ts @@ -0,0 +1,62 @@ +import { Injectable } from '@angular/core' +import { BehaviorSubject, Subscription } from 'rxjs' +import { distinctUntilChanged } from 'rxjs/operators' +import { ApiService } from './api/api.service' +import { chill } from '../util/misc.util' +import { isUnauthorized } from '../util/web.util' +import { Storage } from '@ionic/storage' +import { StorageKeys } from '../models/storage-keys' + +export enum AuthState { + UNVERIFIED, + VERIFIED, + INITIALIZING, +} +@Injectable({ + providedIn: 'root', +}) +export class AuthService { + private readonly $authState$: BehaviorSubject = new BehaviorSubject(AuthState.INITIALIZING) + + constructor ( + private readonly api: ApiService, + private readonly storage: Storage, + ) { } + + peek (): AuthState { return this.$authState$.getValue() } + listen (callback: Partial<{ [k in AuthState]: () => any }>): Subscription { + return this.$authState$.pipe(distinctUntilChanged()).subscribe(s => { + return (callback[s] || chill)() + }) + } + + async login (password: string) { + try { + await this.api.postLogin(password) + await this.storage.set(StorageKeys.LOGGED_IN_KEY, true) + this.$authState$.next(AuthState.VERIFIED) + } catch (e) { + if (isUnauthorized(e)) { + this.$authState$.next(AuthState.UNVERIFIED) + throw { name: 'invalid', message: 'invalid credentials' } + } + console.error(`Failed login attempt`, e) + throw e + } + } + + async restoreCache (): Promise { + const loggedIn = await this.storage.get(StorageKeys.LOGGED_IN_KEY) + if (loggedIn) { + this.$authState$.next(AuthState.VERIFIED) + return AuthState.VERIFIED + } else { + this.$authState$.next(AuthState.UNVERIFIED) + return AuthState.UNVERIFIED + } + } + + async setAuthStateUnverified (): Promise { + this.$authState$.next(AuthState.UNVERIFIED) + } +} diff --git a/ui/src/app/services/config.service.ts b/ui/src/app/services/config.service.ts new file mode 100644 index 000000000..46d14c46b --- /dev/null +++ b/ui/src/app/services/config.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@angular/core' + +@Injectable({ + providedIn: 'root', +}) +export class ConfigService { + origin = removePort(removeProtocol(window.origin)) + version = require('../../../package.json').version + + api = { + useMocks: require('../../../use-mocks.json').useMocks, + url: '/api', + version: '/v0', + root: '', // empty will default to same origin + } + + isConsulateIos = window['platform'] === 'ios' + isConsulateAndroid = window['platform'] === 'android' + + isTor () : boolean { + return this.api.useMocks || this.origin.endsWith('.onion') + } +} + +function removeProtocol (str: string): string { + if (str.startsWith('http://')) return str.slice(7) + if (str.startsWith('https://')) return str.slice(8) + return str +} + +function removePort (str: string): string { + return str.split(':')[0] +} diff --git a/ui/src/app/services/emver.service.ts b/ui/src/app/services/emver.service.ts new file mode 100644 index 000000000..45d2f88a6 --- /dev/null +++ b/ui/src/app/services/emver.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@angular/core' + +@Injectable({ + providedIn: 'root', +}) +export class Emver { + private e: typeof import('@start9labs/emver') + constructor () { } + + async init () { + this.e = await import('@start9labs/emver') + } + + compare (lhs: string, rhs: string): number { + return this.e.compare(lhs, rhs) + } + + satisfies (version: string, range: string): boolean { + return this.e.satisfies(version, range) + } +} \ No newline at end of file diff --git a/ui/src/app/services/http.service.ts b/ui/src/app/services/http.service.ts new file mode 100644 index 000000000..3928a5eb4 --- /dev/null +++ b/ui/src/app/services/http.service.ts @@ -0,0 +1,118 @@ +import { Injectable } from '@angular/core' +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http' +import { Observable, from, interval, race } from 'rxjs' +import { map, take } from 'rxjs/operators' +import { ConfigService } from './config.service' + +@Injectable({ + providedIn: 'root', +}) +export class HttpService { + constructor ( + private readonly http: HttpClient, + private readonly config: ConfigService, + ) { } + + async serverRequest (options: HttpOptions, overrides: Partial<{ version: string }> = { }): Promise { + options.url = leadingSlash(`${this.config.api.url}${exists(overrides.version) ? overrides.version : this.config.api.version}${options.url}`) + if ( this.config.api.root && this.config.api.root !== '' ) { + options.url = `${this.config.api.root}${options.url}` + } + return this.request(options) + } + + async request (httpOpts: HttpOptions): Promise { + const { url, body, timeout, ...rest} = translateOptions(httpOpts) + let req: Observable<{ body: T }> + switch (httpOpts.method){ + case Method.GET: req = this.http.get(url, rest) as any; break + case Method.POST: req = this.http.post(url, body, rest) as any; break + case Method.PUT: req = this.http.put(url, body, rest) as any; break + case Method.PATCH: req = this.http.patch(url, body, rest) as any; break + case Method.DELETE: req = this.http.delete(url, rest) as any; break + } + + return (timeout ? withTimeout(req, timeout) : req) + .toPromise() + .then(res => res.body) + .catch(e => { console.error(e); throw humanReadableErrorMessage(e)}) + } +} + +function humanReadableErrorMessage (e: any): Error { + // server up, custom backend error + if (e.error && e.error.message) return { ...e, message: e.error.message } + if (e.message) return { ...e, message: e.message } + if (e.status && e.statusText) return { ...e, message: `${e.status} ${e.statusText}` } + return { ...e, message: `Unidentifiable HTTP exception` } +} + +function leadingSlash (url: string): string { + let toReturn = url + toReturn = toReturn.startsWith('/') ? toReturn : '/' + toReturn + toReturn = !toReturn.endsWith('/') ? toReturn : toReturn.slice(0, -1) + return toReturn +} + +export enum Method { + GET = 'GET', + POST = 'POST', + PUT = 'PUT', + PATCH = 'PATCH', + DELETE = 'DELETE', +} + +export interface HttpOptions { + withCredentials?: boolean + url: string + method: Method + params?: { + [param: string]: string | string[]; + } + data?: any + headers?: { + [key: string]: string; + } + readTimeout?: number +} + +export interface HttpJsonOptions { + headers?: HttpHeaders | { + [header: string]: string | string[]; + } + observe: 'events' + params?: HttpParams | { + [param: string]: string | string[]; + } + reportProgress?: boolean + responseType?: 'json' + withCredentials?: boolean + body?: any + url: string + timeout: number +} + +function translateOptions (httpOpts: HttpOptions): HttpJsonOptions { + return { + observe: 'events', + responseType: 'json', + reportProgress: false, + withCredentials: true, + headers: httpOpts.headers, + params: httpOpts.params, + body: httpOpts.data || { }, + url: httpOpts.url, + timeout: httpOpts.readTimeout, + } +} + +function withTimeout (req: Observable, timeout: number): Observable { + return race( + from(req.toPromise()), // this guarantees it only emits on completion, intermediary emissions are suppressed. + interval(timeout).pipe(take(1), map(() => { throw new Error('timeout') })), + ) +} + +function exists (str?: string): boolean { + return !!str || str === '' +} \ No newline at end of file diff --git a/ui/src/app/services/loader.service.ts b/ui/src/app/services/loader.service.ts new file mode 100644 index 000000000..11dd2559b --- /dev/null +++ b/ui/src/app/services/loader.service.ts @@ -0,0 +1,86 @@ +import { Injectable } from '@angular/core' +import { concatMap, finalize } from 'rxjs/operators' +import { Observable, from, Subject } from 'rxjs' +import { fromAsync$, fromAsyncP, emitAfter$, fromSync$ } from '../util/rxjs.util' +import { LoadingController } from '@ionic/angular' +import { LoadingOptions } from '@ionic/core' + +@Injectable({ + providedIn: 'root', +}) +export class LoaderService { + private loadingOptions: LoadingOptions = defaultOptions() + constructor (private readonly loadingCtrl: LoadingController) { } + + private loader: HTMLIonLoadingElement + + public get ionLoader (): HTMLIonLoadingElement { + return this.loader + } + + public get ctrl () { + return this.loadingCtrl + } + + private setOptions (l: LoadingOptions): LoaderService { + this.loadingOptions = l + return this + } + + of (overrideOptions: LoadingOptions): LoaderService { + return new LoaderService(this.loadingCtrl).setOptions(Object.assign(defaultOptions(), overrideOptions)) + } + + displayDuring$ (o: Observable): Observable { + let shouldDisplay = true + const displayIfItsBeenAtLeast = 10 // ms + return fromAsync$( + async () => { + this.loader = await this.loadingCtrl.create(this.loadingOptions) + emitAfter$(displayIfItsBeenAtLeast).subscribe(() => { if (shouldDisplay) this.loader.present() }) + }, + ).pipe( + concatMap(() => o), + finalize(() => { + this.loader.dismiss(); shouldDisplay = false; this.loader = undefined + }), + ) + } + + displayDuringP (p: Promise): Promise { + return this.displayDuring$(from(p)).toPromise() + } + + displayDuringAsync (thunk: () => Promise): Promise { + return this.displayDuringP(fromAsyncP(thunk)) + } +} + +export function markAsLoadingDuring$ ($trigger$: Subject, o: Observable): Observable { + let shouldBeOn = true + const displayIfItsBeenAtLeast = 5 // ms + return fromSync$(() => { + emitAfter$(displayIfItsBeenAtLeast).subscribe(() => { if (shouldBeOn) $trigger$.next(true) }) + }).pipe( + concatMap(() => o), + finalize(() => { + $trigger$.next(false) + shouldBeOn = false + }), + ) +} + +export function markAsLoadingDuringP ($trigger$: Subject, p: Promise): Promise { + return markAsLoadingDuring$($trigger$, from(p)).toPromise() +} + +export function markAsLoadingDuringAsync ($trigger$: Subject, thunk: () => Promise): Promise { + return markAsLoadingDuringP($trigger$, fromAsyncP(thunk)) +} + + +const defaultOptions: () => LoadingOptions = () => ({ + spinner: 'lines', + cssClass: 'loader', + backdropDismiss: true, +}) diff --git a/ui/src/app/services/pwa-back.service.ts b/ui/src/app/services/pwa-back.service.ts new file mode 100644 index 000000000..d4681a0ac --- /dev/null +++ b/ui/src/app/services/pwa-back.service.ts @@ -0,0 +1,23 @@ +import { Router } from '@angular/router' +import { Injectable } from '@angular/core' +import { NavController } from '@ionic/angular' + +@Injectable({ + providedIn: 'root', +}) +export class PwaBackService { + constructor ( + private readonly router: Router, + private readonly nav: NavController, + ) { } + + // this will strip an entry from the path on navigation + back () { + return this.nav.back() + // this.router.navigate() + // const path = this.router.url.split('/').filter(a => a !== '') + // path.pop() + // this.router.navigate(['/', ...path], { replaceUrl: false }) + } +} + diff --git a/ui/src/app/services/server-config.service.ts b/ui/src/app/services/server-config.service.ts new file mode 100644 index 000000000..f9067dd36 --- /dev/null +++ b/ui/src/app/services/server-config.service.ts @@ -0,0 +1,114 @@ +import { Injectable } from '@angular/core' +import { ModalController } from '@ionic/angular' +import { AppConfigValuePage } from '../modals/app-config-value/app-config-value.page' +import { ApiService } from './api/api.service' +import { PropertySubject } from '../util/property-subject.util' +import { S9Server, ServerModel } from '../models/server-model' +import { ValueSpec } from '../app-config/config-types' + +@Injectable({ + providedIn: 'root', +}) +export class ServerConfigService { + server: PropertySubject + + constructor ( + private readonly modalCtrl: ModalController, + private readonly apiService: ApiService, + private readonly serverModel: ServerModel, + ) { + this.server = this.serverModel.watch() + } + + async presentModalValueEdit (key: string, add = false) { + const modal = await this.modalCtrl.create({ + backdropDismiss: false, + component: AppConfigValuePage, + presentingElement: await this.modalCtrl.getTop(), + componentProps: { + ...this.getConfigSpec(key), + value: add ? '' : this.server[key].getValue(), + }, + }) + + await modal.present() + } + + private getConfigSpec (key: string): SpecAndSaveFn { + const configSpec: { [key: string]: SpecAndSaveFn } = { + name: { + spec: { + type: 'string', + name: 'Device Name', + description: 'A unique label for this device.', + nullable: false, + // @TODO determine regex + // pattern: '', + patternDescription: 'Must be less than 40 characters', + masked: false, + copyable: true, + }, + saveFn: (val: string) => { + return this.apiService.patchServerConfig('name', val).then(() => this.serverModel.update({ name: val })) + }, + }, + // password: { + // spec: { + // type: 'string', + // name: 'Change Password', + // description: 'The master password for your Embassy. Must contain at least 128 bits of entropy.', + // nullable: false, + // // @TODO figure out how to confirm min entropy + // // pattern: '^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[*.!@#$%^&*\]).{12,32}$', + // patternDescription: 'Password too simple. Password must contain at least 128 bits of entroy.', + // changeWarning: 'Changing your password will have no affect on old backups. In order to restore old backups, you must provide the password that was used to create them.', + // masked: true, + // copyable: true, + // }, + // saveFn: (val: string) => { + // return this.apiService.patchServerConfig('password', val) + // }, + // }, + // alternativeRegistryUrl: { + // spec: { + // type: 'string', + // name: 'Marketplace URL', + // description: 'Used for connecting to an alternative service marketplace.', + // nullable: true, + // // @TODO regex for URL + // // pattern: '', + // patternDescription: 'Must be a valid URL', + // changeWarning: 'Downloading services from an alternative marketplace could result in malicious or harmful code being installed on your device.', + // masked: false, + // copyable: true, + // }, + // saveFn: (val: string) => { + // return this.apiService.patchServerConfig('alternativeRegistryUrl', val).then(() => this.serverModel.update({ alternativeRegistryUrl: val })) + // }, + // }, + ssh: { + spec: { + type: 'string', + name: 'SSH Key', + description: 'Add SSH keys to your Embassy to gain root access from the command line.', + nullable: false, + // @TODO regex for SSH Key + // pattern: '', + patternDescription: 'Must be a valid SSH key', + masked: true, + copyable: true, + }, + saveFn: (val: string) => { + return this.apiService.addSSHKey(val) + }, + }, + } + + return configSpec[key] + } +} + +interface SpecAndSaveFn { + spec: ValueSpec + saveFn: (val: string) => Promise +} diff --git a/ui/src/app/services/split-pane.service.ts b/ui/src/app/services/split-pane.service.ts new file mode 100644 index 000000000..bdc317c3f --- /dev/null +++ b/ui/src/app/services/split-pane.service.ts @@ -0,0 +1,10 @@ +import { BehaviorSubject } from 'rxjs' +import { Injectable } from '@angular/core' + +@Injectable({ + providedIn: 'root', +}) +export class SplitPaneTracker { + $menuFixedOpenOnLeft$: BehaviorSubject = new BehaviorSubject(false) + constructor () { } +} \ No newline at end of file diff --git a/ui/src/app/services/sync.notifier.ts b/ui/src/app/services/sync.notifier.ts new file mode 100644 index 000000000..0cd75fd7b --- /dev/null +++ b/ui/src/app/services/sync.notifier.ts @@ -0,0 +1,50 @@ +import { Injectable } from '@angular/core' +import { ToastController, NavController } from '@ionic/angular' +import { ServerModel, S9Server } from '../models/server-model' + +@Injectable({ + providedIn: 'root', +}) +export class SyncNotifier { + constructor ( + private readonly toastCtrl: ToastController, + private readonly navCtrl: NavController, + private readonly serverModel: ServerModel, + ) { } + + async handleNotifications (server: Readonly): Promise { + const count = server.notifications.length + + if (!count) { return } + + let updates = { } as Partial + updates.badge = server.badge + count + updates.notifications = [] + + const toast = await this.toastCtrl.create({ + header: 'Embassy', + message: `${count} new notification${count === 1 ? '' : 's'}`, + position: 'bottom', + duration: 4000, + cssClass: 'notification-toast', + buttons: [ + { + side: 'start', + icon: 'close', + handler: () => { + return true + }, + }, + { + side: 'end', + text: 'View', + handler: () => { + this.navCtrl.navigateForward(['/notifications']) + }, + }, + ], + }) + await toast.present() + this.serverModel.update(updates) + } +} diff --git a/ui/src/app/services/sync.service.ts b/ui/src/app/services/sync.service.ts new file mode 100644 index 000000000..59dbd2d30 --- /dev/null +++ b/ui/src/app/services/sync.service.ts @@ -0,0 +1,79 @@ +import { Injectable } from '@angular/core' +import { ServerModel } from '../models/server-model' +import { ApiService } from './api/api.service' +import { tryAll, pauseFor } from '../util/misc.util' +import { AppModel } from '../models/app-model' +import { SyncNotifier } from './sync.notifier' +import { BehaviorSubject, Observable, of, from, Subject, EMPTY } from 'rxjs' +import { switchMap, concatMap, catchError, delay, tap } from 'rxjs/operators' + +@Injectable({ + providedIn: 'root', +}) +export class SyncDaemon { + private readonly syncInterval = 5000 + private readonly $sync$ = new BehaviorSubject(false) + + // emits on every successful sync + private readonly $synced$ = new Subject() + + constructor ( + private readonly apiService: ApiService, + private readonly serverModel: ServerModel, + private readonly appModel: AppModel, + private readonly syncNotifier: SyncNotifier, + ) { + this.$sync$.pipe( + switchMap(go => go + ? this.sync().pipe(delay(this.syncInterval), tap(() => this.$sync$.next(true))) + : EMPTY, + ), + ).subscribe() + } + + start () { this.$sync$.next(true) } + stop () { this.$sync$.next(false) } + sync (): Observable { + return from(this.getServerAndApps()).pipe( + concatMap(() => this.syncNotifier.handleNotifications(this.serverModel.peek())), + tap(() => this.$synced$.next()), + catchError(e => of(console.error(`Exception in sync service`, e))), + ) + } + + watchSynced (): Observable { + return this.$synced$.asObservable() + } + + private async getServerAndApps (): Promise { + const now = new Date() + const [serverRes, appsRes] = await tryAll([ + this.apiService.getServer(), + pauseFor(250).then(() => this.apiService.getInstalledApps()), + ]) + + switch (serverRes.result) { + case 'resolve': { + this.serverModel.update(serverRes.value, now) + break + } + case 'reject': { + console.error(`get server request rejected with`, serverRes.value) + this.serverModel.markUnreachable() + break + } + } + + switch (appsRes.result) { + case 'resolve': { + this.appModel.syncCache(appsRes.value, now) + break + } + case 'reject': { + console.error(`get apps request rejected with`, appsRes.value) + this.appModel.markAppsUnreachable() + break + } + } + } +} \ No newline at end of file diff --git a/ui/src/app/services/tracking-modal-controller.service.ts b/ui/src/app/services/tracking-modal-controller.service.ts new file mode 100644 index 000000000..51feab9c5 --- /dev/null +++ b/ui/src/app/services/tracking-modal-controller.service.ts @@ -0,0 +1,70 @@ +import { Inject, Injectable } from '@angular/core' +import { Observable, Subject } from 'rxjs' +import { ModalController } from '@ionic/angular' +import { ModalOptions } from '@ionic/core' +import { APP_CONFIG_COMPONENT_MAPPING } from '../modals/app-config-injectable/modal-injectable-token' +import { AppConfigComponentMapping } from '../modals/app-config-injectable/modal-injectable-type' +import { ValueSpec } from '../app-config/config-types' + +@Injectable({ + providedIn: 'root', +}) +export class TrackingModalController { + private modals: { [modalId: string] : HTMLIonModalElement} = { } + + private readonly $onDismiss$ = new Subject() + private readonly $onCreate$ = new Subject() + + constructor ( + private readonly modalCtrl: ModalController, + @Inject(APP_CONFIG_COMPONENT_MAPPING) private readonly appConfigComponentMapping: AppConfigComponentMapping, + ) { } + + async createConfigModal (o: Omit, type: ValueSpec['type']) { + const component = this.appConfigComponentMapping[type] + return this.create({ ...o, component }) + } + + async create (a: ModalOptions): Promise { + const modal = await this.modalCtrl.create(a) + this.modals[modal.id] = modal + this.$onCreate$.next(modal.id) + + modal.onWillDismiss().then(() => { + delete this.modals[modal.id] + this.$onDismiss$.next(modal.id) + }) + return modal + } + + dismissAll (): Promise { + return Promise.all( + Object.values(this.modals).map(m => m.dismiss()), + ) + } + + + dismiss (val?: any): Promise { + return this.modalCtrl.dismiss(val) + } + + onCreateAny$ (): Observable { + return this.$onCreate$.asObservable() + } + + onDismissAny$ (): Observable { + return this.$onDismiss$.asObservable() + } + + async getTop (): Promise { + return this.modalCtrl.getTop() + } + + get anyModals (): boolean { + return Object.keys(this.modals).length !== 0 + } + + get modalCount (): number { + return Object.keys(this.modals).length + } +} diff --git a/ui/src/app/util/cleanup.ts b/ui/src/app/util/cleanup.ts new file mode 100644 index 000000000..254b7a82d --- /dev/null +++ b/ui/src/app/util/cleanup.ts @@ -0,0 +1,15 @@ +import { Injectable, OnDestroy } from '@angular/core' +import { Subscription } from 'rxjs' + +@Injectable() +export abstract class Cleanup implements OnDestroy { + private toCleanup: Subscription[] = [] + + ngOnDestroy () { + this.toCleanup.forEach(s => s.unsubscribe()) + } + + cleanup (...s: Subscription[]) { + this.toCleanup.push(...s) + } +} diff --git a/ui/src/app/util/countries.json b/ui/src/app/util/countries.json new file mode 100644 index 000000000..e2c91e3d7 --- /dev/null +++ b/ui/src/app/util/countries.json @@ -0,0 +1,252 @@ +{ + "AD": "Andorra", + "AE": "United Arab Emirates", + "AF": "Afghanistan", + "AG": "Antigua and Barbuda", + "AI": "Anguilla", + "AL": "Albania", + "AM": "Armenia", + "AO": "Angola", + "AQ": "Antarctica", + "AR": "Argentina", + "AS": "American Samoa", + "AT": "Austria", + "AU": "Australia", + "AW": "Aruba", + "AX": "Aland Islands", + "AZ": "Azerbaijan", + "BA": "Bosnia and Herzegovina", + "BB": "Barbados", + "BD": "Bangladesh", + "BE": "Belgium", + "BF": "Burkina Faso", + "BG": "Bulgaria", + "BH": "Bahrain", + "BI": "Burundi", + "BJ": "Benin", + "BL": "Saint Barthelemy", + "BM": "Bermuda", + "BN": "Brunei", + "BO": "Bolivia", + "BQ": "Bonaire, Saint Eustatius and Saba ", + "BR": "Brazil", + "BS": "Bahamas", + "BT": "Bhutan", + "BV": "Bouvet Island", + "BW": "Botswana", + "BY": "Belarus", + "BZ": "Belize", + "CA": "Canada", + "CC": "Cocos Islands", + "CD": "Democratic Republic of the Congo", + "CF": "Central African Republic", + "CG": "Republic of the Congo", + "CH": "Switzerland", + "CI": "Ivory Coast", + "CK": "Cook Islands", + "CL": "Chile", + "CM": "Cameroon", + "CN": "China", + "CO": "Colombia", + "CR": "Costa Rica", + "CU": "Cuba", + "CV": "Cape Verde", + "CW": "Curacao", + "CX": "Christmas Island", + "CY": "Cyprus", + "CZ": "Czech Republic", + "DE": "Germany", + "DJ": "Djibouti", + "DK": "Denmark", + "DM": "Dominica", + "DO": "Dominican Republic", + "DZ": "Algeria", + "EC": "Ecuador", + "EE": "Estonia", + "EG": "Egypt", + "EH": "Western Sahara", + "ER": "Eritrea", + "ES": "Spain", + "ET": "Ethiopia", + "FI": "Finland", + "FJ": "Fiji", + "FK": "Falkland Islands", + "FM": "Micronesia", + "FO": "Faroe Islands", + "FR": "France", + "GA": "Gabon", + "GB": "United Kingdom", + "GD": "Grenada", + "GE": "Georgia", + "GF": "French Guiana", + "GG": "Guernsey", + "GH": "Ghana", + "GI": "Gibraltar", + "GL": "Greenland", + "GM": "Gambia", + "GN": "Guinea", + "GP": "Guadeloupe", + "GQ": "Equatorial Guinea", + "GR": "Greece", + "GS": "South Georgia and the South Sandwich Islands", + "GT": "Guatemala", + "GU": "Guam", + "GW": "Guinea-Bissau", + "GY": "Guyana", + "HK": "Hong Kong", + "HM": "Heard Island and McDonald Islands", + "HN": "Honduras", + "HR": "Croatia", + "HT": "Haiti", + "HU": "Hungary", + "ID": "Indonesia", + "IE": "Ireland", + "IL": "Israel", + "IM": "Isle of Man", + "IN": "India", + "IO": "British Indian Ocean Territory", + "IQ": "Iraq", + "IR": "Iran", + "IS": "Iceland", + "IT": "Italy", + "JE": "Jersey", + "JM": "Jamaica", + "JO": "Jordan", + "JP": "Japan", + "KE": "Kenya", + "KG": "Kyrgyzstan", + "KH": "Cambodia", + "KI": "Kiribati", + "KM": "Comoros", + "KN": "Saint Kitts and Nevis", + "KP": "North Korea", + "KR": "South Korea", + "KW": "Kuwait", + "KY": "Cayman Islands", + "KZ": "Kazakhstan", + "LA": "Laos", + "LB": "Lebanon", + "LC": "Saint Lucia", + "LI": "Liechtenstein", + "LK": "Sri Lanka", + "LR": "Liberia", + "LS": "Lesotho", + "LT": "Lithuania", + "LU": "Luxembourg", + "LV": "Latvia", + "LY": "Libya", + "MA": "Morocco", + "MC": "Monaco", + "MD": "Moldova", + "ME": "Montenegro", + "MF": "Saint Martin", + "MG": "Madagascar", + "MH": "Marshall Islands", + "MK": "Macedonia", + "ML": "Mali", + "MM": "Myanmar", + "MN": "Mongolia", + "MO": "Macao", + "MP": "Northern Mariana Islands", + "MQ": "Martinique", + "MR": "Mauritania", + "MS": "Montserrat", + "MT": "Malta", + "MU": "Mauritius", + "MV": "Maldives", + "MW": "Malawi", + "MX": "Mexico", + "MY": "Malaysia", + "MZ": "Mozambique", + "NA": "Namibia", + "NC": "New Caledonia", + "NE": "Niger", + "NF": "Norfolk Island", + "NG": "Nigeria", + "NI": "Nicaragua", + "NL": "Netherlands", + "NO": "Norway", + "NP": "Nepal", + "NR": "Nauru", + "NU": "Niue", + "NZ": "New Zealand", + "OM": "Oman", + "PA": "Panama", + "PE": "Peru", + "PF": "French Polynesia", + "PG": "Papua New Guinea", + "PH": "Philippines", + "PK": "Pakistan", + "PL": "Poland", + "PM": "Saint Pierre and Miquelon", + "PN": "Pitcairn", + "PR": "Puerto Rico", + "PS": "Palestinian Territory", + "PT": "Portugal", + "PW": "Palau", + "PY": "Paraguay", + "QA": "Qatar", + "RE": "Reunion", + "RO": "Romania", + "RS": "Serbia", + "RU": "Russia", + "RW": "Rwanda", + "SA": "Saudi Arabia", + "SB": "Solomon Islands", + "SC": "Seychelles", + "SD": "Sudan", + "SE": "Sweden", + "SG": "Singapore", + "SH": "Saint Helena", + "SI": "Slovenia", + "SJ": "Svalbard and Jan Mayen", + "SK": "Slovakia", + "SL": "Sierra Leone", + "SM": "San Marino", + "SN": "Senegal", + "SO": "Somalia", + "SR": "Suriname", + "SS": "South Sudan", + "ST": "Sao Tome and Principe", + "SV": "El Salvador", + "SX": "Sint Maarten", + "SY": "Syria", + "SZ": "Swaziland", + "TC": "Turks and Caicos Islands", + "TD": "Chad", + "TF": "French Southern Territories", + "TG": "Togo", + "TH": "Thailand", + "TJ": "Tajikistan", + "TK": "Tokelau", + "TL": "East Timor", + "TM": "Turkmenistan", + "TN": "Tunisia", + "TO": "Tonga", + "TR": "Turkey", + "TT": "Trinidad and Tobago", + "TV": "Tuvalu", + "TW": "Taiwan", + "TZ": "Tanzania", + "UA": "Ukraine", + "UG": "Uganda", + "UM": "United States Minor Outlying Islands", + "US": "United States", + "UY": "Uruguay", + "UZ": "Uzbekistan", + "VA": "Vatican", + "VC": "Saint Vincent and the Grenadines", + "VE": "Venezuela", + "VG": "British Virgin Islands", + "VI": "U.S. Virgin Islands", + "VN": "Vietnam", + "VU": "Vanuatu", + "WF": "Wallis and Futuna", + "WS": "Samoa", + "XK": "Kosovo", + "YE": "Yemen", + "YT": "Mayotte", + "ZA": "South Africa", + "ZM": "Zambia", + "ZW": "Zimbabwe" +} \ No newline at end of file diff --git a/ui/src/app/util/map-subject.util.ts b/ui/src/app/util/map-subject.util.ts new file mode 100644 index 000000000..ae449fb87 --- /dev/null +++ b/ui/src/app/util/map-subject.util.ts @@ -0,0 +1,82 @@ +import { Subject, BehaviorSubject } from 'rxjs' +import { PropertySubject, initPropertySubject, complete, peekProperties, PropertySubjectId } from './property-subject.util' +import { NgZone } from '@angular/core' +import { both, diff } from './misc.util' + +export type Update = Partial & { + id: string +} +export type Delta = { action: 'add' | 'delete', id: string } | { action: 'update', id: string, effectedFields: Partial } + +export class MapSubject { + contents: { [id: string]: PropertySubject } = { } + $delta$ = new Subject>() + + constructor ( + private readonly zone: NgZone = new NgZone({ shouldCoalesceEventChangeDetection: true }), + ) { } + + get ids () : string[] { return Object.keys(this.contents) } + get all () : T[] { return this.ids.map(id => this.peek(id) as T) } + + getContents () : PropertySubjectId[] { + return Object.entries(this.contents).map( ([k, v]) => ({ id: k, subject: v })) + } + + add (t: T): void { + this.contents[t.id] = initPropertySubject(t) + this.$delta$.next({ action: 'add', id: t.id }) + } + + delete (id: string): void { + const t$ = this.contents[id] + if (!t$) return + complete(t$) + delete this.contents[id] + this.$delta$.next({ action: 'delete', id }) + } + + update (newValues: Update): void { + const t$ = this.contents[newValues.id] as PropertySubject + + if (!t$) { + this.contents[newValues.id] = initPropertySubject(newValues) as PropertySubject + return + } + + const effectedFields = { } + const oldKeys = Object.keys(t$) + const newKeys = Object.keys(newValues) + + const newKeysInUpdate = diff(newKeys, oldKeys) + newKeysInUpdate.forEach(keyToAdd => { + t$[keyToAdd] = new BehaviorSubject(newValues[keyToAdd]) + effectedFields[keyToAdd] = newValues[keyToAdd] + }) + + const keysToUpdate = both(newKeys, oldKeys) + keysToUpdate.forEach(keyToUpdate => { + const valueToUpdate = newValues[keyToUpdate] + if (JSON.stringify(t$[keyToUpdate].getValue()) !== JSON.stringify(valueToUpdate)) { + this.zone.run(() => t$[keyToUpdate].next(valueToUpdate)) + effectedFields[keyToUpdate] = newValues[keyToUpdate] + } + }) + + if (Object.keys(effectedFields).length) { + this.$delta$.next({ + action: 'update', + id: newValues.id, + effectedFields, + }) + } + } + + watch (id: string): undefined | PropertySubject { + return this.contents[id] + } + + peek (id: string): T | undefined { + return this.contents[id] && peekProperties(this.contents[id]) + } +} diff --git a/ui/src/app/util/metrics.util.ts b/ui/src/app/util/metrics.util.ts new file mode 100644 index 000000000..d93023428 --- /dev/null +++ b/ui/src/app/util/metrics.util.ts @@ -0,0 +1,192 @@ +import * as Ajv from 'ajv' +import { JsonPointer } from 'jsonpointerx' + +const ajv = new Ajv({ jsonPointers: true, allErrors: true, nullable: true }) +const ajvWithDefaults = new Ajv({ jsonPointers: true, allErrors: true, useDefaults: true, nullable: true, removeAdditional: 'failing' }) +const schemaV1 = { + 'type': 'object', + 'properties': { + 'name': { 'type': 'string' }, + 'value': { 'type': 'string' }, + 'description': { 'type': 'string', 'nullable': true, 'default': null }, + 'copyable': { 'type': 'boolean', 'default': false }, + 'qr': { 'type': 'boolean', 'default': false }, + }, + 'required': ['name', 'value', 'copyable', 'qr'], + 'additionalProperties': false, +} +const schemaV1Compiled = ajv.compile(schemaV1) +const schemaV1CompiledWithDefaults = ajvWithDefaults.compile(schemaV1) +const schemaV2 = { + 'anyOf': [ + { + 'type': 'object', + 'properties': { + 'type': { 'type': 'string', 'const': 'string' }, + 'value': { 'type': 'string' }, + 'description': { 'type': 'string', 'nullable': true, 'default': null }, + 'copyable': { 'type': 'boolean', 'default': false }, + 'qr': { 'type': 'boolean', 'default': false }, + 'masked': { 'type': 'boolean', 'default': false }, + }, + 'required': ['type', 'value', 'description', 'copyable', 'qr', 'masked'], + 'additionalProperties': false, + }, + { + 'type': 'object', + 'properties': { + 'type': { 'type': 'string', 'const': 'object' }, + 'value': { + 'type': 'object', + 'patternProperties': { + '^.*$': { + '$ref': '#', + }, + }, + }, + 'description': { 'type': 'string', 'nullable': true, 'default': null }, + + }, + 'required': ['type', 'value', 'description'], + 'additionalProperties': false, + }, + ], +} +const schemaV2Compiled = ajv.compile(schemaV2) +const schemaV2CompiledWithDefaults = ajvWithDefaults.compile(schemaV2) + +export function parseMetricsPermissive (metrics: any, errorCallback: (err: Error) => any = console.warn): AppMetrics { + if (typeof metrics !== 'object' || metrics === null) { + errorCallback(new TypeError(`${metrics} is not an object`)) + return { } + } + if (typeof metrics.version !== 'number' || !metrics.data) { + return Object.entries(metrics) + .filter(([_, value]) => { + if (typeof value === 'string') { + return true + } else { + errorCallback(new TypeError(`${value} is not a string`)) + return false + } + }) + .map(([name, value]) => ({ + name, + value: { + value: String(value), + description: null, + copyable: false, + qr: false, + masked: false, + }, + })) + .reduce((acc, { name, value }) => { + acc[name] = value + return acc + }, { }) + } + const typedMetrics = metrics as AppMetricsVersioned + switch (typedMetrics.version) { + case 1: + return parseMetricsV1Permissive(typedMetrics.data, errorCallback) + case 2: + return parseMetricsV2Permissive(typedMetrics.data, errorCallback) + default: + errorCallback(new Error(`unknown metrics version ${metrics.version}, attempting to parse as v2`)) + return parseMetricsV2Permissive(typedMetrics.data, errorCallback) + } +} + +function parseMetricsV1Permissive (metrics: AppMetricsV1, errorCallback: (err: Error) => any): AppMetrics { + return metrics.reduce((prev: AppMetricsV2, cur: AppMetricV1, idx: number) => { + schemaV1Compiled(cur) + if (schemaV1Compiled.errors) { + for (let err of schemaV1Compiled.errors) { + errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) + if (err.dataPath) { + JsonPointer.set(cur, err.dataPath, undefined) + } + } + if (!schemaV1CompiledWithDefaults(cur)) { + for (let err of schemaV1CompiledWithDefaults.errors) { + errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) + } + return prev + } + } + prev[cur.name] = { + type: 'string', + value: cur.value, + description: cur.description, + copyable: cur.copyable, + qr: cur.qr, + masked: false, + } + return prev + }, { }) +} + +function parseMetricsV2Permissive (metrics: AppMetricsV2, errorCallback: (err: Error) => any): AppMetrics { + return Object.entries(metrics).reduce((prev, [name, value], idx) => { + schemaV2Compiled(value) + if (schemaV2Compiled.errors) { + for (let err of schemaV2Compiled.errors) { + errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) + if (err.dataPath) { + JsonPointer.set(value, err.dataPath, undefined) + } + } + if (!schemaV2CompiledWithDefaults(value)) { + for (let err of schemaV2CompiledWithDefaults.errors) { + errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) + } + return prev + } + } + prev[name] = value + return prev + }, { }) +} + +export type AppMetrics = AppMetricsV2 // chnage this type when updating versions + +export type AppMetricsVersioned = { + version: T, + data: AppMetricsVersionedData +} + +export type AppMetricsVersionedData = T extends 1 ? AppMetricsV1 : + T extends 2 ? AppMetricsV2 : + never + +interface AppMetricV1 { + name: string + value: string + description: string | null + copyable: boolean + qr: boolean +} + +type AppMetricsV1 = AppMetricV1[] + +interface AppMetricsV2 { + [name: string]: AppMetricString | AppMetricObject +} + +interface AppMetricBase { + type: 'string' | 'object' + description: string | null +} + +interface AppMetricString extends AppMetricBase { + type: 'string' + value: string + copyable: boolean + qr: boolean + masked: boolean +} + +interface AppMetricObject extends AppMetricBase { + type: 'object' + value: AppMetricsV2 +} \ No newline at end of file diff --git a/ui/src/app/util/misc.util.ts b/ui/src/app/util/misc.util.ts new file mode 100644 index 000000000..6ac3dcc18 --- /dev/null +++ b/ui/src/app/util/misc.util.ts @@ -0,0 +1,161 @@ +export type Omit = Pick> +export type PromiseRes = { result: 'resolve', value: T } | { result: 'reject', value: Error } + +import { OperatorFunction } from 'rxjs' +import { map } from 'rxjs/operators' + +export function trace (t: T): T { + console.log(`TRACE`, t) + return t +} + +// curried description. This allows e.g somePromise.thentraceDesc('my result')) +export function traceDesc (description: string): (t: T) => T { + return t => { + console.log(`TRACE`, description, t) + return t + } +} + +// for use in observables. This allows e.g. someObservable.pipe(traceM('my result')) +// the practical equivalent of `tap(t => console.log(t, description))` +export function traceWheel (description?: string): OperatorFunction { + return description ? map(traceDesc(description)) : map(trace) +} + +export function traceThrowDesc (description: string, t: T | undefined): T { + if (!t) throw new Error(description) + return t +} + +export function thenReturn (act1 : () => Promise, t: T): Promise { + return act1().then(() => t) +} + +export function modulateTime (ts: Date, count: number, unit: 'days' | 'hours' | 'minutes' | 'seconds' ) { + const ms = inMs(count, unit) + const toReturn = new Date(ts) + toReturn.setMilliseconds( toReturn.getMilliseconds() + ms) + return toReturn +} + +export function inMs ( count: number, unit: 'days' | 'hours' | 'minutes' | 'seconds' ) { + switch (unit){ + case 'seconds' : return count * 1000 + case 'minutes' : return inMs(count * 60, 'seconds') + case 'hours' : return inMs(count * 60, 'minutes') + case 'days' : return inMs(count * 24, 'hours') + } +} + +export async function tryAll ( promises: [Promise, Promise]): Promise<[PromiseRes, PromiseRes]> +export async function tryAll ( promises: Promise[] ): Promise[]> { + return Promise.all(promises.map( + p => p + .then (r => ({ result: 'resolve' as 'resolve', value: r })) + .catch(e => ({ result: 'reject' as 'reject', value: e })), + )) +} + +// arr1 - arr2 +export function diff (arr1: T[], arr2: T[]): T[] { + return arr1.filter(x => !arr2.includes(x)) +} + +// arr1 & arr2 +export function both (arr1: T[], arr2: T[]): T[] { + return arr1.filter(x => arr2.includes(x)) +} + +export async function doForAtLeast (promises: Promise[], minTime: number): Promise { + const returned = await Promise.all(promises.concat(pauseFor(minTime))) + returned.pop() + return returned +} + +export function isEmptyObject (obj: object): boolean { + if (!obj) return true + return Object.keys(obj).length === 0 && obj.constructor === Object +} + +export function pauseFor (ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +export type Valued = { [s: string]: T } + +export function toObject (t: T[], map: (t0: T) => string): Valued { + return t.reduce( (acc, next) => { + acc[map(next)] = next + return acc + }, { } as Valued) +} + +export function toDedupObject (t: T[], t2: T[], map: (t0: T) => string): Valued { + return toObject(t.concat(t2), map) +} + +export function update (t: Valued, u: Valued): Valued { + return { ...t, ...u} +} + +export function fromObject (o : Valued): T[] { + return Object.values(o) +} + +export function deepCloneUnknown (value: T): T { + if (typeof value !== 'object' || value === null) { + return value + } + if (Array.isArray(value)) { + return deepCloneArray(value) + } + return deepCloneObject(value) +} + +export function deepCloneObject (source: T) { + const result = { } + Object.keys(source).forEach(key => { + const value = source[key] + result[key] = deepCloneUnknown(value) + }, { }) + return result as T +} + +export function deepCloneArray (collection: any) { + return collection.map(value => { + return deepCloneUnknown(value) + }) +} + +export function partitionArray (ts: T[], condition: (t: T) => boolean): [T[], T[]] { + const yes = [] as T[] + const no = [] as T[] + ts.forEach(t => { + if (condition(t)) { + yes.push(t) + } else { + no.push(t) + } + }) + return [yes, no] +} + +export const chill = () => { } +export const chillAsync = async () => { } + +export function uniqueBy (ts: T[], uniqueBy: (t: T) => string, prioritize: (t1: T, t2: T) => T) { + return Object.values(ts.reduce((acc, next) => { + const previousValue = acc[uniqueBy(next)] + if (previousValue) { + acc[uniqueBy(next)] = prioritize(acc[uniqueBy(next)], previousValue) + } else { + acc[uniqueBy(next)] = previousValue + } + return acc + }, { })) +} + +export function capitalizeFirstLetter (string: string): string { + return string.charAt(0).toUpperCase() + string.slice(1) +} \ No newline at end of file diff --git a/ui/src/app/util/property-subject.util.ts b/ui/src/app/util/property-subject.util.ts new file mode 100644 index 000000000..51f8431b4 --- /dev/null +++ b/ui/src/app/util/property-subject.util.ts @@ -0,0 +1,49 @@ +import { BehaviorSubject, Observable, combineLatest, of } from 'rxjs' +import { map } from 'rxjs/operators' + +export type PropertySubjectId = { + id: string + subject: PropertySubject +} + +export type PropertySubject = { + [k in keyof T]: BehaviorSubject +} + +// better type information than Object.entries without the return type cast +export function asLabelledList (p : PropertySubject): [string, BehaviorSubject][] { + return Object.entries(p) +} + +export function peekProperties (ps: PropertySubject) : T { + return asLabelledList(ps).reduce( (acc, [key, value]) => { + acc[key] = value.getValue() + return acc + }, { } as T) +} + +export function initPropertySubject (t: T): PropertySubject { + return Object.entries(t).reduce( (acc, [k, v]) => { + acc[k] = new BehaviorSubject(v) + return acc + }, { } as PropertySubject ) +} + +export function withKey (k: string, v: BehaviorSubject): Observable<[string, V]> { + return combineLatest([of(k), v]) +} + +export function toObservable (t: PropertySubject): Observable { + return combineLatest( + asLabelledList(t as any).map(([k, p]) => withKey(k, p)), + ).pipe(map( kvPairs => { + return kvPairs.reduce( (acc, [k, v]) => { + acc[k] = v + return acc + }, { }) as T + })) +} + +export function complete (t: PropertySubject): void { + asLabelledList(t as any).forEach(p => p[1].complete() ) +} diff --git a/ui/src/app/util/rxjs.util.ts b/ui/src/app/util/rxjs.util.ts new file mode 100644 index 000000000..e4e2a9288 --- /dev/null +++ b/ui/src/app/util/rxjs.util.ts @@ -0,0 +1,53 @@ +import { Observable, from, interval, race, OperatorFunction, Observer, BehaviorSubject } from 'rxjs' +import { take, map, switchMap, delay, tap } from 'rxjs/operators' + +export function fromAsync$ (async: (s: S) => Promise, s: S): Observable +export function fromAsync$ (async: () => Promise): Observable +export function fromAsync$ (async: (s: S) => Promise, s?: S): Observable { + return from(async(s as S)) +} + +export function fromAsyncP (async: () => Promise): Promise +export function fromAsyncP (async: (s: S) => Promise, s?: S): Promise { + return async(s as S) +} + +// emits + completes after ms +export function emitAfter$ (ms: number): Observable { + return interval(ms).pipe(take(1)) +} + +export function throwIn (timeout: number): OperatorFunction { + return o => race( + o, + emitAfter$(timeout).pipe(map(() => { throw new Error('timeout') } ))) +} + +export const squash = map(() => { }) + +export function fromSync$ (sync: (s: S) => T, s: S): Observable +export function fromSync$ (sync: () => T): Observable +export function fromSync$ (sync: (s: S) => T, s?: S): Observable { + return new Observable( (subscriber: Observer) => { + try { + subscriber.next(sync(s as S)) + subscriber.complete() + } catch (e) { + subscriber.error(e) + } + }) +} + +export function onCooldown (cooldown: number, o: () => Observable): Observable { + + const $trigger$ = new BehaviorSubject(true) + $trigger$.subscribe(t => console.log('triggering', t)) + return $trigger$.pipe( + switchMap(_ => + o().pipe( + delay(cooldown), + tap(() => $trigger$.next(true)), + ), + ), + ) +} diff --git a/ui/src/app/util/status-rendering.ts b/ui/src/app/util/status-rendering.ts new file mode 100644 index 000000000..fe00a0bf6 --- /dev/null +++ b/ui/src/app/util/status-rendering.ts @@ -0,0 +1,31 @@ +import { AppStatus } from 'src/app/models/app-model' +import { ServerStatus } from 'src/app/models/server-model' + +export const ServerStatusRendering: { + [k in ServerStatus]: { display: string; color: string; showDots: boolean; } +} = { + [ServerStatus.UNKNOWN]: { display: 'Connecting', color: 'dark', showDots: true }, + [ServerStatus.UNREACHABLE]: { display: 'Unreachable', color: 'danger', showDots: false }, + [ServerStatus.NEEDS_CONFIG]: { display: 'Needs Config', color: 'warning', showDots: false }, + [ServerStatus.RUNNING]: { display: 'Connected', color: 'success', showDots: false }, + [ServerStatus.UPDATING]: { display: 'Updating', color: 'primary', showDots: true }, +} + +export const AppStatusRendering: { + [k in AppStatus]: { display: string; color: string; showDots: boolean; style?: string; } +} = { + [AppStatus.UNKNOWN]: { display: 'Connecting', color: 'dark', showDots: true }, + [AppStatus.REMOVING]: { display: 'Removing', color: 'dark', showDots: true }, + [AppStatus.CRASHED]: { display: 'Crashing', color: 'danger', showDots: true }, + [AppStatus.NEEDS_CONFIG]: { display: 'Needs Config', color: 'warning', showDots: false }, + [AppStatus.RUNNING]: { display: 'Running', color: 'success', showDots: false }, + [AppStatus.UNREACHABLE]: { display: 'Unreachable', color: 'danger', showDots: false }, + [AppStatus.STOPPED]: { display: 'Not Running', color: 'medium', showDots: false }, + [AppStatus.CREATING_BACKUP]: { display: 'Backing Up', color: 'dark', showDots: true }, + [AppStatus.RESTORING_BACKUP]: { display: 'Restoring', color: 'dark', showDots: true }, + [AppStatus.INSTALLING]: { display: 'Installing', color: 'primary', showDots: true }, + [AppStatus.DEAD]: { display: 'Dead', color: 'danger', showDots: false }, + [AppStatus.BROKEN_DEPENDENCIES]: { display: 'Dependency Issue', color: 'warning', showDots: false }, + [AppStatus.STOPPING]: { display: 'Stopping', color: 'dark', showDots: true }, + [AppStatus.RESTARTING]: { display: 'Restarting', color: 'dark', showDots: true }, +} diff --git a/ui/src/app/util/types.util.ts b/ui/src/app/util/types.util.ts new file mode 100644 index 000000000..745ec5f6e --- /dev/null +++ b/ui/src/app/util/types.util.ts @@ -0,0 +1 @@ +export type Replace = Omit & { [k in withKey]: T[key] } diff --git a/ui/src/app/util/web.util.ts b/ui/src/app/util/web.util.ts new file mode 100644 index 000000000..c98d72a69 --- /dev/null +++ b/ui/src/app/util/web.util.ts @@ -0,0 +1,32 @@ +import { HttpErrorResponse } from '@angular/common/http' + +export async function copyToClipboard (str: string): Promise { + if (window.isSecureContext) { + return navigator.clipboard.writeText(str) + .then(() => { + return true + }) + .catch(err => { + return false + }) + } else { + const el = document.createElement('textarea') + el.value = str + el.setAttribute('readonly', '') + el.style.position = 'absolute' + el.style.left = '-9999px' + document.body.appendChild(el) + el.select() + const copy = document.execCommand('copy') + document.body.removeChild(el) + return copy + } +} + +export function isUnauthorized (e: HttpErrorResponse): boolean { + return !!e.status && 401 === e.status +} + +export function isBadRequest (e: HttpErrorResponse): boolean { + return !!e.status && 400 === e.status +} diff --git a/ui/src/app/util/webview.context.ts b/ui/src/app/util/webview.context.ts new file mode 100644 index 000000000..bb4987dc1 --- /dev/null +++ b/ui/src/app/util/webview.context.ts @@ -0,0 +1,8 @@ +import WebviewContext from '@start9labs/ambassador-sdk/dist/webview-context' + +export const webviewContext = new WebviewContext(async (method: string, data: any) => { + throw new Error (`${method} UNIMPLEMENTED`) + // switch(method){ + // case 'getConfigValue': throw new Error ('getConfigValue UNIMPLEMENTED') + // } +}) \ No newline at end of file diff --git a/ui/src/assets/favicon.ico b/ui/src/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..db0b75111292ac7101994ec7cd855df54dd15a02 GIT binary patch literal 7406 zcmeI0*;CZn7016#?>kL*15G!*(cQFk)6LRs&7z=!vWYN)j>9T5Y$kDrXrePi)L|en z5P~oaW(+EX491u#tI#B6s^Wtcw`eL>)cE3ql{f!`JmuWm2n@I(v8&A zRM-;s;`;ULIC0_xN=iy7|1o&*-~lElCt)&~u(Y&9?>+-cr4kBh5}rJHg0O!UmHD^O z($WH_(}{wD0^GTC2V-MnSXfv+3@>7{uw*r%_&B4uwKN&zQ#J$B)t6+>GMD1>C-U8zsR7>?!;ko#XU|ZSK8N=9cBDIx zVtIKPMMXtxKjNqq%|J8*(G2|e85rxTgSmCG@%Y*n5+8j^Hygd(LRIZYXB|Z!u137K zcVFJBvQao$dG3elM@+>Z)EBS1b|%)OtSTFXlY(jwGu8b%X3g`{?;l%JzAK&FzZ5Z4 zv|m{B1P`2AQ@$gaN6trde^d6FL-Y$)HoR$c4sU1X3-A8s^N2fs_rBR&Z(G^cH$_Km z*@_=D?dXWq9R;79&RlSoTpnNCEPnbYy85%<^sJob4oDi%7~T|2w%-23pZ(~Y-wDJv z9$>Kl@_Uz@TlNfX5>8wH_{=+MYx!?~6^YQxGQJE?G;A6kbwo1|%|J8*|H}+8PPNmu zjjmNr6_N642wn*wE-2(Y=JWZ8??yN))E52~7UOQ5KYt#lPO(p&fOD1C+RM3BBGRJ1 zz8=}cY>Zz*p%B8pS-9P9#K*^T?rd#sK~PR^l>(em>0kmdf2nDz_K?Ov~! z&f}$fWyF^$^h_b~)UB}(;GylEJy{VT=~gA}U*}_@QT7ha*1m{2 z92=>KBO051AE;^WYhm)irj(NQ-Ar0H+&J8k|1LE#;Yzga*q5eT=VRhwzpPw)n1uc5 zMNrg8q#OLs{AM?{wgHxEh7qC-9U^s^lB~r9X_f;alHv<#S~t2(3CUfK464Jc>OAi$ z>h-njoJ?%U%{BGz5t7upv)z`u?(4J?s5Vr*?`vdAxN;XYW~1Z(A_J^Wp%y!@RaWbi z^>2Tj%<2i&GiQC+;^JcJed~Cy+@Q_owMuVqFYo2DzH@SNG9;on-fLxjRMtCZ-*49U zj8g|;v)OpRn)R?*jUf=kAW6T2_q81kJLv-Ws6Wd3v8?y1Re7P;>*l?PfEUnTvQ(Gkr+Gy`u*24ajNqX#;D{K|Qf z2(Jk79fCJW4BAmBx F{0D>6d!qmV literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Montserrat/Montserrat-Black.ttf b/ui/src/assets/fonts/Montserrat/Montserrat-Black.ttf new file mode 100644 index 0000000000000000000000000000000000000000..437b1157cb4c32560095c6d40accde2956070c1c GIT binary patch literal 257552 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

5-|C$&pEsM5H#-7?~285t$R2 z9hn=MrMKw!^(Xr8`WyYZen-El|E0gsAL&nJhwPN+V#GgHo+3||XUH?%Zuo^pW~leV9I6AEQsz8}(88XuV#aqEFJt>Ercp)V=B+eXG7vZ_+pGKkD1{ zZ91uM(zoc#_0{@XeU3f@^V7xpxB3D7h<;E%svpvi>4){>;#PM8hR0}9%xg-_k4C56 zE^_vmmeg|=G$rFhlOyLZToT$3KsPT=jzp04MUyyLtRPuRkoV1Mih`Pr%~851Z6QLU6qiY^N^(^$ z9J&y^S&WqN2HLkkP$k180G>|4CabrZ?O%?)FcImIYI zG@9&NKb6V_M`7LkWDfae!QP3D4WW0HBr)8;m9 zl8YPW4^Q@OEnGJy*{^uo9!=Bcn82Y02p_=V{fjq=y!v@foAUDNlTLG8GIun!aaACA0>Fi4#WK42YC~|NRd7z0L9f}+g zM0T0T{9=*pJNj3YZ%33bA9O`gKKd4*eDocL^3k^t<)iO#l#jkeC?9=CpnUY*3FV{j zNR*Gh#l_L_+2PK)Ly$`VRLmM zjiJ8?fo3=+S?X8qrtH26YH7)_qc$mLP@)OrAJt-6h&?|C6Dy8ZFy-aIX7D7o9vm>{ z^hzy-i@~?h>P0k6EUexXa|Tga*$0D2G}>4=nKGqX9Ph_*VGO5}Vs2AObUfy6qTV%uKpIpQ5)Ncp8j*Rp+ZZN zB_Oe$i%iXUgyDR1GPAJG6rGxLA$nQ~dY&mz0|q9{G1U6G<^Ok0dU9_K?ANqn;x~xk_oxqZl;5!g= zEt~|?Wt;@FieV^%U{)jXE&4XH#*s;HR%nXwa%Z$ai9hEC~g;z&4&EwoPtTtEUQ*-5|O$| z8Dja~)9B7IF^c_pE8T^CX7!oWC$5WSek9Vz26y2EvnDJM$H`I`SNu|NPF-!r_LH`q zG;mVhq`s4~CPnVU=0pY}1|dRBO8esoPc&>A?wqg()(a;zZSod3Y#KqnJNq1gGbJXS z&;p?uAXrY#pOn`n7C{+Urz>TN8)QMWtY$0p^;n7|uuR*SW0XrOZa+TRvvGn3FR zVb2AcCec07eF~PVW4gcTj*AcQcMDekjfk7q{bkBeAqZ=vP=tqZyqCh_RaiVW-r1%5 zBG<+{iS9FO{KO#rd(LD(-u=Rv5TxH0`(5;hLr%q=v=byV;7;N(ZbwAnGj3Ppi07=^ z6P4l(>n07a4+DE~hj)~KM`M4##KQD}{&I$OXN25Y&|R*y;rO40z}?r0LW^he&A}e< z1J<1f8-j1FyB}=0GDW@U6f2=i?hxMndA?q-DcmgmmBhDJplr)d$(p&@TYE`+ZcR8%1sDov@_1$d{6T2Qr1uQ!k3_sRFkG~c)Zs0fr;q#@0OE8w} zppE(2$n;PR&4FtPxV4sHsD=y#aj^x|cL2T>mJv~Kq61&5wJ39*VCP^jVLHAuQ8NS^ z6)DWq(=Zext|vFjKrcO}b@Z06PfasQ-3)wG7mM(wyw}1{Eg*_8%C}bR!S2;)A<-V( zS%tDtyIhGBtB@nrNISmNzLuhe%tZR>zbZ{{^_Xfy7(md2@$0@7t*4hCc9>z92`CS{ z8jm|3ZYEdQ`HeVzoDA`(lj&qR*-l?4$H^6ooILRdr=Qc`8GxSM;tUcuh|`?GqDYJo zKjPHw#kkLPTW1LNCAJeEIzyf9ogJ`0wj=sZEBbJOGfX_@6gtD5B4>oNlQU90;q2^; z5>Gm#onmKGvzOE4%y$+zdpr9$`=SlT#BOS?Dx7i<}nN#x8YQoh8`wf6-ay zwBbmR6bF}#0ImS8GInFuWIl(#6*$D0HZ=92ylbutrt9+WM7B4xcV^8DH z&Y5Bvbi03X&UVgm&UMan&d2W2h1f~@EsmS`opT9xk}h*D$G-eH>?mDHdt(?6#^aWW zYs8+(sfV3MoJXC|%=gt?-m)NcQ2kk9k&+ebj zx6XIYznt%#ADkbZpRk7~u#4xq9(IZ;?-rWH^?>o9tx4<0+yN2Oz5%!jM!VcQb*h?Gj7Q;HB1iOQ!ygyj( z#@!0H61()(ZVh$|cX7wN6WodJuI?na)~$2v-3B*-nYTf-xs$P%IK`dnPIITjx@);R z!<~t}#Xa2F*llWe=ZXW|dDx#Li=z(czgNJ1WPwPaAJYL?o$lW5KG23whQ5A3$HA>4 z3*Bb1n^@^Ca$B&^)#bLjOWdWrQ+WU^mzG1bf1ta9cP&@C2fAJEDtEQJ26}VaEB(%0 z>#lRxyBn|w$?qyJr@5Tw8lN&J;6N@b|SxV zPZGPkC&Mm!hI^`e8f?dA!bamv_bm5p_Z;_J*fG5$X1V9X>g59WLiZx~x9-L6@7zn= zOJQBU4)f1?Sgs!IUg2KpUgcixUgKVioxkhc>)qdr4elS@8{8Y+q`S$z$-UXV#l6+N z&HbZ$J8V}kh27|(?w?=_ayK-2bHryD_vgVL;$HVY_kQ;Q_d)j|v8Vem>?0l(TinOQ z5ANgc6Yi6+8+jVL49~!Z>sj|X_j&gP_eJ+5oJ!w>eU!i8|5}cK{o0YR$vxbC#eLO% z&3)Z{!+q2JoBNjgw)>9zuDb<1Ps3bq>&uaB4EWqMh# zXX)$Zz?LHq)*Su40p37wkT=-d#@p5#;%x`}j_ti2ynJs*FX|O|!(i<(+$(~`$4;<* z+1VTAjrNMYF|hv_>y^S5CgzoUaj(Lw^r~PNQ{#>EcJao06TFGuuHGcC)~oaCy#_Dg zHF}eAH`f$zsyEG>?(Oc)@Me0mygj_x-W=?c-|x-!=6QR1dwEUXd~bobx3`an`?kIP zy@g&gY!O<##a^qo#9Qhu^V+-vyyafIx5Df2I=z+NfnJxl%3JNNfyKgF*etB~Hh2en zhj@p2hk1v4M|ekiM|nqk$9TuWn&EiZGo0vc^nT-=`49$Ym%2?U-4I1SiB1BlGnXAyf?kSd2e}d!`kFsZwu@$ z-uFK6KJ-5FK86j-r`~7Y=di^1()+vj5AQ4QYwsKHpWe6Lciz9e@4X+qA3a>|E`@ZY zD?KTtl3GS&ADJODWtPmAePxc!m3gwC>@Nq%fpU->EVq%{$|1078Y;J!JIH*wqm0S| zISf`#!)1{iA$O7^<<4@H94(9G7+E66%2HV-W3pVvWreJiRkB*vz#?iFIbKeX6XmXQ zlB|_=u#jqy3E3zo!zyHooGPcu>2h~DL(Y`58s_N`B|`_^aC4m9?%&y(lN3*?3JBKcc+vHYF9L|!T{ zlb6dYzmQ+bzsrBf zujJSA8~IQ9t^7{@OMWkZkUz?wV38)2qg>@FsZ_AXo~g2UpFIb==>A^&Ks5;a?c1nr z)ezWj4OQF2k}Y5DsG_Ps4O4~KgD+Ae)J|$7_TWchC%zc_?IqZMFSYycao(4&Qq`(P zjZ?d*@oIvasCHG8RIRF0^{PQ7RHK@#c2iT-R5eXaSG%hjYNnc{_E59c95q+XQ+v{$ zxtgyQsJ*dQzOUL(?XMQ9X0=GQsKu&PEm2F=GS#LIP|H=jS^>+VPPI}UsJhfD*ch!* z2dTAcomvlTql48U>QHr0H<*oe%4z3t^x1TUaRl4mL`c!b<6Kb%nZ8U8Sy8*QjgNb?SQcd-Vr( zgSrv+OPkb9>SlF|x>en#{-|zOcc?qnpVVFIZdf+m3)`mq)dT85^^kg4J)#~}kEzGi z6Y5FzlzLh{qn=gIspr)T>P7XE`ZKJcURImcU)3w>RoFwluHH~@s=ukXU>Ws}dRJ{x z@2U6I2kJxhk@^_6QlF~N)aU98^`-i|`iJ^TeXYJx|5V?q@6^B4_v#1rqxwm8<6c)s zyV}!IE3I`z_t6U%+nGG8yyd+UAlzIs2szh0=D^&;J(7wcBNL@(9LbeldvFW2pQh3?RudZj*4 zcVVA?HFoL`!e0G4?7?r)2g7daP~MwA0=x7_>7&J6;w$XaA1l5V-|+tY3Hn6XN9_vR z+v8y+l`F1?wb$iX_xBUSU=gK6Cak9Vi#qJ<{{}nyCu3j#R9H9fVn;wJ3ppNorD&V%jP1+X5wh;75}5%-FRp)0vn+=iR19>QM##jx7C1lC=b z!3y9CeWkt%wgA__8sIuuas3`PX*a-LAPI|sn_x3=3#p^i0HfY z-Qp_oPkoQRSKp`ahxNdNupD?8HUy9A$HcMvas7mTQk(;uu&4Di(0Y6>z7V%#b$6;L z5Ic&q#aZG^SgtjTEA+GC3~`ZuPCqX$5a)|4^$X%Wm=in#YqOWwzTsuP8Fp;1=vVb? z`gQ#V?1BEK-_mc3J7631E^LL~gSF5H`a@UF$V#I1xAEMPx)pbR-h# z6Um5VMzSK=k-m|fNNyxA(l63KG9WTAGAJ@QvQ1>$$dJf(k)e_8BRfR$BRfW-k%Gvu zNMU4nq$n~XvQuPaWar4J$mmFMWK5(aGB#2gDT~A+<&k)#B2pQtid08xBI6>vM8?A^ zY9g$oCczr24%Sf(u#0MhebjESjG7vm25YI^VIeg$GAptNtfc0^PHJ9c&&XbprpWxr zg2>*HeIomclf|p}Z;v;`W^sym4O*Qy#VfD}d|muCvR`EX$ihf-WKpCgvN+NjSrS%JhQf|tz&6(%bL}#k=lg$GHIpNS@kV#T`g-?ENO3Dms!8Kb9Hk|OKS&8 z!xY7JLrXId;nUUG%%Nq8QcG7UmkV@P=mZy6Cm7gJS!SW?Z0YN5De5h?^|ti&ru4DW zcxECk`?5rxEpVM*;L1qC7L2Jcvnb2rk%TFz$-0iSE-kC8GQ~(F^kk+iYjUcv*^^s3 zSFC6@#m$`DBkLGbSz4Be%iR_=cNx4fOGjBEYqu048y9z{z{)77c2t9g;JDYE7x?tMqiPN5$V2{m(BXIF>Gq`}gh@UdB_2Fu$-Y2TU4)}V=Z zty$6DyoO5-4kscr!|kQQrmpZSw>E3$s`lnp%R)UOZZXGAT zR%S`Buth2Jvq|VVAijSI!G_y{a}c&$MqfkA@*Vk6XFPxT;$3#XQQ|E5(b9y%x8%cD1f*Tc!6}+SPne zYu5Z!q)At8E50$V=QD^2ZnUkd+_J2(S}$PqnG1S!@S0fO6pq<{YDs%%OZ$xJ4Z5~u z)vD66tXdAYZe|+0vzb%1iIAtRGVCc0dtzZvJn+yc&z`*6RFQ&MjQJ^0ngGHv;k;_A z!!d?#q7QA}P?1yXvoH*3;<9R)W8sJtwZLFKb`CLMb|PVqnN8T4o0?eIpH<6s%Wljx z{LQvAj`0wYW%a32()7VG+CXQS>4}4~%(PXArNYi(q4Z^8`pPU7c1jC@)tM6O zMh?@H`I9v{)kHDB(QM7(d7-(E1Nwz0JPyfC&3f!NEj*Uu56yoZqo?pEGG!`%vrN}v z_n@BL$U>y3%A3+l4WXSGrsYgYW3Z*c)L!nCpw}{16IpNj>6D(_u21y}ptr2IbF4{k zCt6Els;z2MuDsC98)S$UTE!l{dk_Y`n1-Wg1Yv-)gqi7-BeKk#%I<#Qi8V+DRH$T2p+s>KSOP$-MmNlOzWlxsnr^zSNi+c}ipD zspbHNTJjf|{LM6K-KkL~H#M(@u-4el(Hw{zn9Lf@6m5iZ2=`^y&!PzY734=#w=;V! z`;pFH6|pc6e~n33%VHGzxy4iKf30X!S{`Y(Vo0-H1vRHuLCvkqPlKwoCaWdYTr*pO zK}RnRL@O+NEFq;_5D;3aTe*C?H3U^=q3UdL>n+*!mb`jf+A2@V>K)UVGM87OPRu~rKwV8FAd3?nM-?+5MyeQ zv_dXREq^RMWsOn)L`b#B`Mkv3bt zHoFjN3q(Y;%Brjb(z63yHQCEU^k*+$+SS_H(cav#xUEIEbJgm0E^~H!2u`-6oQ95a zyEZg*lqJe7UGZ|=!RfO)npbwNTHV#Ta#^eHFt|EGxD1-OZKd%luQga1`Adiz-5Kx% zDWp|`V~pfa z9vb%+00P}fthNon;UqL4oe}s zrflt%cXi>av9hcwUwyc0>QjZqQYgi5l-zi7TGM!!o0_*mq|})j$ZGA$%eu7Mu$5-# zwNU!9aCMehD(o~D0;@|k0h;hQMlUg+cK&3UX~4Qu9P1aJ5I8o2W(9T`u9T-pK(h?D zsB%+=tact7IZ33`RF*avGH3)cd75D;z)NFM%7XzZ@L)De<%q#8RWx|4EWg&^G-Cq0 z^Fjjy2jm2!gN04ifL?Ec)~9-KUTEkr$=9dVu3<%^semjqmN1-+NKuR#I#nh=_ydd| z=+k5dmzK<6Xo1sA4M^3;4l6Bv!-EQt*&(Gx(SU*!{&3ME7r`%ED909C<8WE#w?NiK zM{aK?h8m8QQc-e3A~3vtQ&KQ|axq@Ib@eiQGK^4cT(m0ym&KD}RHEhA^KlgM)^$mYlSK%wnfu%sOch^PQ5_)01-;%M^Z`K(`WJg#| zNNR^SH!Qfr-!~<@!)KTn^O-^tJVGVaTZAO}6iBLUWkf?xNTg2zabk4DmMjdB?X9a; zkvqc(2yhMPDJpQRUxb{t@N{I$&TTEbEj8BoBoh(Ygx+5-n4*y813B8U%mUM(?Bk<& z)ph^{*i{5OgYJ`I))EMm1e6n6OHkNyg67FLK}d7M%L?{~Ru%-0(WoWEpIYGZTW@aq zw9*nWlZqvnrWBh^Ks&8D7@3_+TI31~1Qic8WeG)IONLpEuq((bybejF@!LF-Q+65) z5*vw52qlQ6CC*K~!yi3lCt@->gK@$vSrC@fxmESiA|}Ao;8y}dQ$4RCMMXnUXsl_F zEW5KuteEsB5`GiRDI~@Qhk!eT?!k?G67P4^| zBN)uCh=LRqDU=mHap+K7X=Zf<(45dZ3EqrOpRXp@c#4*|PYa4op^7Aj7P%6yKC5YQ zLB0d&MZGk`tgYA;)O&b^g&1zPSY%lz`nt~#tYAXKQ^s-?p)#wk0KU?%ELwYUyq}e! zzLIJXYq4Oy$O)~>5S1HVn!#^Vr3fOC#}B3E(syZV*9xrC7qt^PlBSM`k(gRCe0j+f zi=`#MgnqG%q~s$^v6iHy7P$tmj5R?+HtRZsF`KZogEME%R&AOVdx*(i)1z^sNl|#l zn)GIvAeQvu#ULD}z&vsoXJe}D+)yk)ic}u(^U{`w77qw99mXsY1MF3%^ud7EhgXY; z&M*tc6d-X}9z?IT6zvO(EjekTVoP>NPz01;KDmxkuBVi~oY<0+CMC9Hhh#)sc2YK5 zCkcy4>*KQwF=fIEkHthElu3n%*plH3h;aFhuWwj5v?)k5gv^5%i-kFXBxt?83$^ZfwgHq%K;$=8Gtx#6bH1R2E)B1xZ#(pDi`sDOa6FwOrCy+qd3jx#z&P~ap z26eEyHD${PAaeqd(4Y+DLhJRLM1aODb`6>V>0)9ChGoT&p9RLSKVX_^Dl9sNrLbQfOHv@K?e2^L^-g3nl#EmhQln927W7-vL6~^OG92r$mFP; zK+l{>J9 zI2lHkYGXX4vS7*aSw^}HV6BK5_(4cOVoo4za&*RlK3y3k0B~5gl>*q46NmxQ1|mZ!UzQu#KOkLrNWmBhg8lu%VnhI8 zWeN7@1Oi1kIv^gJVEUFmnfxN=rjP(JwKxi@8(j^yz zEiArph~X#8Fd;t+GVIR@q?vGZP+6wWllm*%(ntel{23(S7({`XW4&oTuz#As6UvIE z9`^HgM%GL}X6cQYeT#U^(iyY##eDjF{FWYTO&GU(XK}L+33@I4r9L10d@Q}C z7JsSD&)9Avoh_fS;Vg~EY<@7YWjjvAY;#?o(1 z`{Kr=w=`aB@fnj~_)Yo>pHIdl7~vL=F&T#6^1sg3cb&ykXX!Ae$fa>(VT-RxU*YrF zTF}Og@os6{813R~_6Or;7aM-dFT0x?H@mwCw|q6$prvtR1&XiD-&%pjjg=_EE&UCa z55}&uG@h{Z8@o^VZTf`eqp?s#xJ{q1=@Yj6#&WSV-e}9;XwzFe!FZ#shen&e(WY-S z=__o1tFZm7!nXekzrC9s%hI?pM=Y(d?Xx15;GqHikF{BKlV@9hUAjNkBOaPTGDfVM zvzvjhsZRIT*7oYJ-)$bL<1_&^a1!<~l zLmtxS1Tmql4D^sN1u-Z(1F#r|$-q;Z2zkJTR7|Ws>xiL;4qF zYK9eK3|$>mSgl=4-ZZOXFs{9>cs3Z<}?w9p0>gbKGv{$E^u?+!{T^%WbnSx5H?K z?XJc&8Tr}nP+_}+F^)jE@3-*fwwsmPVKHvIYuwUhP0ZtQJIq&Dcw;@0RpZcQBG z#$dcOZmkI7l{UXBTb?SLPmMqA`hJVQ#?oJ7)74lyYHWFo%@T%do8H(wVHmM^YAqgP z^8`4H$Jj){Z}AvgDh%TmkF}+W+kb$F*I7EOMNx%6t=3t3jIk1iZHv$RZwCC9f98KT z;J5s$xBRcS^OJ(Er&6Ef!~(H7^}c<^G(?F#+U`ey5&Q{rZ=9qp!*7TG0AEddd__aLzuZm_0ep|?ro1P7 zV|scRwWiUFCW&Q8hV1? zeOiO%e;NDd%&xP36QA-M{-^w={DI$=AAU2Cmxt$w^6<1!9-dAs!eF#j5X>Is;pwzI zJY`jfCo|MzDos3$&6*h-a%fj5KwS}@LBZ%$OgucV#MAN#Q&15G3)?238;7u2gI+@c z?d}8=(Ed)!6Glz@GC>UO%%nVF1hg&Y zXf`g!OmK{w;4F4>TKts6#a|P4P4x*VHmS%DqnvIKSW;mjm;S9~}G&D0H)66dBbH|z$U7QCyC=YVj zJjiMCFfPi2;V2J=GkLJnq9yD%#?Gk2`iEFAH*e5ta0sj_^j zvV5uHnFop|!_Tsccm`^e^IewB?ZdcNWl`I(?rbK}dU6&uw=6eX&n?ZXS_iCb?P}{> zO#l0df4y2jUJnHx-?^q;2UM(2alQGmJJG519Q~hSxS^wXUFO zQ?k~MlzZ8FnD};Zc>kqqU>Vc8f{Yz3DFcF_RBjB04!RVuVK5F#fn~I=YiVyL{cK<3 zTHLvobh3E?N>0A2rC$(W5?hc|4i+SYADdx@)xei^;F{J|tJ~-we_C>Vx6KQ2ovT~1 z;cDWHdl7gZ_FFRYd|01~Y!0xoec9tj^LI^omLzP*e$Eu9vhW}2p?bs+} z;5QOwsZn^qZ`yUKQM|-T>ni%Tbi%fG1zPv&=C1W}G3dgJph~^6brtZ~Xgf9;DHvcjZ=)0eIImXlHQ_O%6oWOS8OzZ5`n0ZC zxq3Y?GQu*WJ&DDvHVMQ>n!CC>*REM<;%lm4A__nA&<0g!a1hm&4XH69#C01|X+jot zu3lzbYgR7q$hN4t-NN3~$IJel0BOj}^+?@~(N-9tK2}j*m9c~x{o+NP>r4!mC9AvI znwMI-E1)f6|6)U8h0zAZD(s+DVU`*2vv>@QhOuR3J@Drup-v0 zT3b3h7Dr$`MikN94nqdJ)^1*bro9Sg0=5~ImgE1_X>E@$p3;!JEac`UfcPpKRt0xF zgEwtpLB7a_mU1Xt34}t+Lg~ouR8VK`b`_eCsXFdP+?t#Mdk_%S&r* zTrI-NGT164lwUbQs|N(3`}d@W;(Z$878A6)0UyZi^MTxDeV281E^l7cc@X%zVv(iA zENjZ`vZmZ>vC7Npva!>)sI|RwZ3@_`6w9p&u-vW@%dJYQ+^Rs!txlrc>Ke+eZlT=j z7Rt-3Sx^J1T(fzhdg~cb)-xa;GzJu@Djdso$pJY*g@)s~R!w}s%5Xf_Z_j|V?CLny z(jE(Y>ci={s>89B?8ynLG7QYM%mLd5@u{lr37JNY@mTJ0&432AE2Wmvr#B!eJREtg58VxMI~MZGL6*Ds0awiMckw zEF&qPf2#IKg5aQ3h511?nOTj7@R;RfD8Q^o8B4(6o|&69AHfVxXN{j*j%}j0bk-Y7 z_f}eOUMe5M3=8h_#(2SA6FVSn_$XP0&AruzUtqc!PGVNs9`pa-%RlbI{}(B%RF7Gi zF=n+jF{_-9S#3Te5h+oH~EYdI(=w<`_5EY}Vpd zn0$3CZtX&3$jy<1dj^;?^$Q1cDea(DNrO|!?GIWMUK0v0w{HBKMF3B3AD-MkJh{tl z8)5uRSty{iXFyHQfbwtv=h-tL4F~7m6T;x=e^6`J>b92Vc39W8tY?_MX+Z*qoYPH) zx%di^O^2eod*TGtW}I2H8^WfF!|^^6=K?u6cjy+pZ^KzZ4o)9>1@G5zGL3`tXx_#9 zJ@FOZ-{2He2WOa8;$7{`!h1H(7GY6Sq1!IM)$}tK&4qzvBI-SBM+Xi@XZFtGvDO-q$+{?_<5w@IJ#kAMXos zQ?7#(^zOtPw`=14fK)iWIU@VvJwSpsoI8iRMsey~3*JlQ61feuDRB@(aAblHj5Ir}BhDC#~V#M`hyO zR~6um^V9Gip?1Q1XSFllI6)2X5*5dLoEnGscm+=4%(O{(*QrLlr>NcWo~ic0dyd)@ z?od8j~v=I*AGI z%*b%zG8~=DOYJXH%)kj*UPI&bxnf|;`Yzlz+}^yp182xeYME%K9zGt<(n|RqxFaFI zixal`h>Yc}T^*u2{9e)AwOmX}doN$HTufaNdIP&p3(@W|UJn>G^5`S_k2>L&({7cI z9`WdDkLkyk0iq8ea>RK3#x`f51h_307!=O=8fpI=p>TQ`oinyrF9nAVL%gF`qNJ`| zNYFS}@HOf7AVq$i(}T?zi#W*}WO=$N6o-z7Ycv@+CrWSLT26 z>%OyhDCGGza<*9PH@|n-|1xwS!J{0#{<^;h2L|H#cfavr0Ni{|zZg#T6(S#HLLS}E zPzm75?|ugFkraa(7zzJFcz%gLNCRj}oBG9qlc7_gM5%wZFi{+iF>$H%zKiOgeq2V& zg?wAyRCQp_lm1AqJjt#<+ap@&;KMOz?7S3U2_A=14DZI4Z@3 zQ0ULKE1%vFXqq#Xj$A(7rX~q66>mzLmY7m-ISdr;lczpR@19^GOffN%>kci|@D$~- z{f}@V%=B@z6Zi?A{TVJJEFUcml+tKHZ#-|)2!hcl4<{8KhLZ`8(NtHIM(q>y2?*b)H{yMgK1uXJ`qSV(U7s$p z=sZE382Ge)T4Vs%b0QP?p2yh#2CzE7I}K-6-Y1H2Zsq+V3ujk8Aco@n$_K@^IK%QG z(Ff;PJ}gGzEXzj#^Qd}M491z3kBOaeuI1w*inA@B5Cu5j@=1}6GcKPJ`8enDX)y$6 zT|Ogr#Cey`iZM9z@;Rh^UOg{%z}c5CAnl9lMVuB{q>C`Z;*?1-8s|)o1Wh<=Qsm;a z$RM5VvnT7tFq}S_zX5&(`Mv{ycpi-Z&K!@9Xq+cvH>g;0(v7 zL|?AC?YQP7oyG_bQ2mX>sf82KrrhikXokxEBxknR9%rkg{dXrZK4SdE*g6vJnp*hV zXqlL&;BG{#o5iCp+AOtO%w;rE(YS&63@!a3yfei~z4lqZVfXyn-axsBqNrE-{nP(a zwC|=bC9+K7<$2CIqsK>TCd45h3~(2{bCtyjy^wV zHu1~Y3wg5-L4$VM->eir*S*P>)1uik5JidqW=IIk5YEjDGlGO#3G2VW#a6ZG??RLXyypbmXT*3QqS8 z`Z<>ZFg?m@Ac6$8W^mJy{gJHiyVJjB?C6<39i~^GkJ4v5T8P`ssWOoUtps__vRuxjl^BKD@ZMUyEg|=oP-!s}e&2m5kCy((Vo0Q1?9bE$ zt!7A)^F!^I+bg#p#>(^SFZbh~?IuKxkK5!(K8p|S9CY?N-XZT>F%Q!E)2u0hkJ=_m zb}3^Zj;7}_ z&vi(su?kMf6e;>BYO7y*nYN1VHGo^GKQe9&5vClmmfy7Qq~Fh#kyfl!0$O#Lwv>q) zpj8aj;#Oru81)tN`yVZ%;Rs_VX)xfb%?lsIjknZt&S)Dn?i$(&Y#?L=9uvreA79vq zZ$8eRr@A7%hD+%4kZ&L2GSYZJJR(luM|1$M;o85Igtn?jKOLdk>SxPnxY~OesZZpi zjeUtaz`TVXKzbyS$Ej^%l%!D*eb)FP9g@qZ!n9$eIfF|7j=KGs*vyv(L?e+)LmCCXA^jW#~=3BDron_jmX>N17=+@Nf&UR2fKs+i(}Fv?8qA z1lDcUSclSTYyfTnK;7aVfQeYOOwyCYU|d;PhjmYbZV=nzK7d9sgjZwR;TC|EVh5~> z&Jh!MJv0gHp-XXYJgs=@c&*cb73(g%X3W}Z%_x6y&A4r7&A1(}8HdtM1vtf@sN9aJ zbeKwqsqD*Cx=f|ZROT?1S)g(cq@tB$2JS4FgEcm-A2V=w!92Kot|AAAR*{44Dsmsa z54b~X$!y$jupivCqRi$Mr3$SmGkHas#Vg88UQuTCvZ8F$ZQ!6;S1#Af!R2<{4*sst zE8yjj3fUSLPo3+%*t zfj+DkC}O?94y+fbV7)*U>jf%VFEEnz0)?y>h_YTFll1}_tQRO^y+A(e1u9rCkj;7l zm+N>e*Rf)~0B%i(USI^*afI~({aG(Cfb{|cSuZez>sYZ~U}vu5;j9;Mxu&zYrgvuT zfXCVakF^82tR0Z79gwUY$m5zG%QcySoqi`ki5%vf$QV_8ozmh}{4Sx?bVKZzSB98KDa z9M(2%&pL|&)>&w7TSHi9QOzxEkZ`lkBb`OoWmzxaj*ZzEL%t_zjiedK1@B`N`iUgfKIKrY}Jcxzbh;2qldk#nT@k_)XHo|MMS@+FxQu;JMF? z+bJSIWv=y^cpAfV!R2pgR_O_yO7}nKf)xKa@1a~pa~SwU`YDo0F(ab(KOxDL<{_SI zGP_^roHH@s6TRjk2$pe>#>}~_kKoor_!O`L&#x>EwEDmV8bRH?pb=6A)Al(0G|#?n zsT+fElECdchiMw${UXUDc+-!l8fa!@rjr9vM*IPWb^%DXR)8`)31%fj_s{&>AEm~h zk*EzeaEaU;MuSW2{mXIj>|CKtlM5@C~ zv=h4RIJ5gh_%qSMa?y6E-%>4ce}NyeGC|Y21+Le*j;RN6O`0}C{U31{&+w4kN>Vb( zp4gkCb`BSQoRTn6+cKjYwdHTnBWMlxCE+rV3{86=+}~(DjJR(RO0AI|zu$req}@#Y zBlY95ac(AOrpVVKPzyEdYr;)bQeVVK<)G?&D!3rI{I#ka*&rtdCLpW)M zn0N4USWiq8YN+LSU#CE|LQn8BFcvZh{ZAd#qnS^<60&n)kQk-0To0hW$87Vn^GvGj z0SdniseoVUVhYd>Y;s@Uo5Du*PCv^{z+%AuY*q{H}wWeu}494@t zRtfw$!l%^-_}P3zv=J<&qZQVF_cQR!4O64kpDea?J`$u|#hU)X8JW_BX%5dB0X0mk z@lmh&6+h60F#_-RA*0cL(YJOyp!F;Nh=i+|62yAJx zA-}r_%RrbCdBSzZAY@0t6^Na1pWam5EWQJ72X6zGV_=uI1MJeS#rq~$r`51^S`Dnz z?nTIb;t}9~6V_=;Y{8#~joRnP;|o}-jf16HuBdnN99V`q1D#P~IPTsajgVs8xxEAK z+m4GpaN~9Z-U+7>RLpbsMEG8~9b4iq>tjR_?yWu%_f2nvWm`Th+n&Nb+s`>K{lVJTeQ^awz z@=`G!_aUzk{csC%hv*M`xOH%^hgDo1tm4i?+VkBDL_TgRz8UU&+2ls&V7&b7B^5oBc>Mc%MlrM&U+SCC1`bSS=>Q#x4hL-1aIm zajWZCxJzY~sK5=ZEn*hkzACn{_I4}fN}+MX>cL_M*xMb3_u=wz;n7X22tP_5g^;7= z(Qt2+8xekrJVn&trqxpsekLsN2FbJJSqMKzo&y-%xC;0A@_e|-CT|Day?UWgu*tg^ zA(zX`5sN!l5q_P#4sP7MDk8Xh^$&=>LEeCn+hDP$ao_4au)Vua-VewJ`(W!BHuk>gV-N;wC)8M z+|r8o-fC}z@1ypCdtbFbO1e-jLfRJ90>~w5DZ-bj0}#@#I)JTHbpn2+>Owf~Yz53( zwHC4KV87T8_qJ|8_`&L6P=2U76yb-d!%!}=Xe_}^u15g=D0K`l9Is9UotM3UNczhwL5FQqOA2Ajk{KdLqk`ji=YQ2YnWozdhNto zuWZ(O?ZR5G@vQaAX02CW)_Ucz)(f^Uu!h-*wO$3R^{Qg6S0C1TO=YcD0c*Vyto2H; zzN?Y-U5%{iDrQaBRMvDAv!-hzYr2YA(>0MbUD>SZ%4JPgj5S@ktm%rerYoB@T~k@p zHH9@@Q(4nBg|%D7tk)`LjaD}6ud-QBm5qB^*F)pGL2nQxxUUuC4C|~$;@;LnMGf0J zm9YM5q&`9)A$DXf)=1ptijjwPStD7OHHLLrBUzUwOAuri#3q7SOu)b zDrPNKF>A4kar-K)fmxSTj2l?dLRh1fg*#NAKrW=$8o_$4GS+M5>1Xt_2q#;rO4e@e ztY6kIBZRcn<+vyHHL(NhxNtVy>7X&cY0S zpSWKEJI+VWr%0*v_!5%CI%d9wTek;UC==gCP zG4>&L#WNX}S!a>Ok@J>_Id6;c&O3PCg>F@Uae-s}F-c^`2fh#^Qh#`zfTPw@Q|-_P*<9D>xBA_gplZZ+iM%rs2z z0>cMEsw$hRic;Vz=eGcjy-VaZ5;#X%ieM=RtohCtc)rAHK+46Kw_C+5j3cvPDTjE3 zj6}#tgcx5weEIO@GjB4%8`w32l6!#Z7Ln!dCK}x-c&6f+hG#mS-SN!8GZW9NcwWQv zhG^v6W5}Jj6BEV2GSYby&)@L8g@-792M?N8*9Ku&ePz@btlxfd@NTklIE5b%N3n&#d1Lox@SAaB^(+B33;1R+9zdZql*>C}0qD&~pCuU`4G)E>;=2arta@y^{Dg$d>0{XF`l#WoP*~)JeT6R z49|7l&!DF%;SO0yc??}0Jp?(nBez0mbuU6Wa%okAb*Q#=}jzjBfx>c06o7&gnNJ^nJiRjxg-=v(=cQJyh27evh41S~qP* zj<4fOy9NH521NZ&{6PN}fAt0WXdOmtx3{~$@K;#DdMwDU``y6V!x4t<{wNh`SAwCH z8m*?&f8AfBbRmfJ*k9}8H9feG(h&bSS3_klyTmq=a49&5SE7bH#GiCp2(KT~o6C>; zpZF4f)DP7SX(p&t6k_tH7KifTKQ>4Y^-cFzHXIqlhdptwS=!}6JpQcq3Rs}yLmcTd zxOEY3N&^Vmt*2H&(4=R9?E(3LgZ8iRV;{8`^9OAzh5k?cfH6(`=WAswZr1*DT?86R zLlNS+zJ3i20ft|b_?Oa9efT_OIOZ;EfYImivwl;*uLGL3)y!3HUrZU-nQ4EB;Tol} z27Dr`2h$2n9g-CV{undWE5UGmappER>)zU0!bJSSoAdsP$ELS|S5Z6h%YczQv-@j2 zq(!6FLe_224%v93m)jFUzZbb=>jFQ4|D;Wu)2nck}YeHilwQPV6XgxrW$~ zpi~$|ff;|)&xtoQo-#J1;=W<>B}#wpXZNm(O*xtfYvB)FfgbfW!7l!Hu&O|db>h^!-XSn&lg1R@P|4XIl zEh|4P+;9D`p5Igr{U^{pQ~!M3r0{N)=KnI_*VNmur{>qE{LhL>qlK~aMbD-Eb))}& zkz9lUeScv0S=2*l6u_6P**<}shn^1Z#}H2A073C?3CGj;NhxS=-oQV^b44ztfP9FZ z3;J&hd}$wpb}%S!vkz$YEeNB*L8BFoM%0si%YO3F%-^$jQxgAY`Y!osB)=Dbr0qvp zk=vbYgG&$td9Tu>F+GGvfBG*-iyM@^4okp%vSA0c)`}l4jAFn@c74FZ7Vaj;ku=UR zW?1U>ps}|-DVjTa{z5WN&!}Ja`&9ojR5p}E<|XK(zDTY0GlFJUAf1q(LweZ4RCwbo}Xwdhl872)?i z-`P8N69Q_L_jW&-oIP{q%-p$i&&)mN%o)>ab4QZ*6*Q)Q&CV9-ZQ;f~X1U-!#jFX* zTgu=oWBF5lOe;POF;}IK#-u$_7^!g^=yhX_Kk3JJlLWdT}^PcQiVEKWRAVz-p zy@Xak9vFFn67*5S@06=HWrGrEampBC>!p2|VSP&TA2o2~3Ps0yg@Y-XT1MLBx7x=C zB@LI%v0dfRjLYqrl=l7au!1^iN2EU!_>h?e1a|;hPg$`*L(5)}eF!rC9X~xowal($ZIDjl^f{708X>7|B3x;vI&&f>N@ElJy_gkbtol z1JAt3Uy+#7JCsjJ3}!80Wc0`yPTra2`owcXC`C4vf`5jrTty}!S5$UdScFc#%%g)hInkkrK2 zrX+EE9?dv3Jwce6J|zEr7|#<&pDAtRf$w3KW}rp{M04>_X+)-iJjD(+P}$rBE1>hOTUa@%*xBh znE%u!rgCYY{W*U*Y9{O}A|ofkQa4ULgos_+5V32L9;7GhZ|bpnJHFRQlrH^sSXJMK zpVJ|HZxPQW{UdlNovCki<~Zl+yWy2|lfECGNI%doI*&S!>fbm!ot=8Ocp~ZFiqDVU zix^uA^zRX4YpH(OyWG20zviv-R_XuoR(q@UyNIs!E&ZNE*V6BM-}P?Phv3h1vpx(T zp4%PAyVJYVNkd$%pE~K@HgB7g?LFW<;^cTcyd6$g`0ea+;@%71e>r`<-+6nTLGa1> zlQS3|IBz?{C8CxyQ9Ny&N!~w0j&qWD)HtV!M~yQ*6b(h4)8RkU)tM3M7AkUP!E>g> zIU61_RnBbjjdA9|6K1e8AKov+ob%w>((Ifcnh=`kEDTKzwK$6qORLqnNPJYBrQ(<3 zTpqe4bcu5XVrgCBEQ1%yRnC>-dE#6pJ}1uCLaRcnoE7jnxz4#79wt9CCHZ^7#C&uI`p@Lg%sZ$)feAl)emv1auj^K;9WNmqeo)IO#wvFSKSu4F@%7Z5_~xoD_;#iLUyiz4-3Jds@dAv|3oxc0$Je1RV2%=B zz%J@P)eGSKYkUjTi)tTW@eb^!#5=H%-hoB*4lGvh;Txxqpr((Yr(-&%igg#=1zv#p zx*zQD;x8DXzhIgcf58kr1lHM1cnuB(To2#D4EPRC1ZI++q_Xi`O-6dMJ{g!P`c%Nv zG$O0$)AV$};$N6U|H6FuZlK@bzp+3S==1eufG>x~VVoX^#qwmL4H7@EM4n8fcrsN9 zeF{tD$pnli6RG$Mc6XM;U$8`;Pr!IS0ps~ZDxQMf<;jE>+J)Xlu=tB-UZHo1cL^{{ zyrn7~&*~MxEc31eEFOC~-c^W`m+pPd`qhUr98bLW3cYK+Ye9+U z94Vf2qt&RYkb-|^N1FTQ9ZaH*c4> z3z!$Y7m)rM(f+#7U$Bt=f+6p>-fw}I_Er7*0IYQagM%gr(vS~79(?ZIo2xU_mWYa#Z4n!VhQXWMqkFqF_ z=2ITEQ68O^^jVHU617nhO{63`jglxrNi>g=sEz*1^XR`E))OIv+8~3bBNbT_p{z-V ztho|$N<5mgDPQK(qxp2bS#MV7)33Q)??S}Rne=Wh*L(CUz>AM_D}9{L((mYZfe}yV zR{g#{3|Rb~Tj}pyPJicCXP`4solgl>POs-ydOg?D>$%pM;7mZS_&yJ&?{lLgzRx4+ z`#hSy&m$?zn(6yoPT%L#>HA#nYIbqI(Wt@sh4^zwTZOSbU`` z+*R&%fUkGgscDQsI*s1b3HNryAZ?-#^(gvKkD(9sSo%=Ur4RKC_iygsP*yytPoXDu z1wE-}dE!Z3;pHG^=^QWS#nd^7Tv`km{&Rr4dp!V`!OyzP>xEdR=g`}_g5K5%uil%k zn!MA!+3+S7&+EDLyv|8_UZ3Y(pxV4e@Er0e@!Kfzqm=k3LE>M5+-2S}D}Q<2yp>pGN7QMd=@<$9I}{FXjNpyU)8Hlrj^zoC(@E6GSl+{0w-R0~|zf zeH5_q4SxdjK^y0T2Ytk3Q^7qj`uv~gEr0wQO*YwIUjhO z4! zlNOq6&KalE8$CjA^j6Lv1@uWTr%(FmP+llc&7@~~D`u2#s(}9Kt@KYXr+<1Y{nN`s zJwiRy5PGSPq?bB;)ZwK*nqKOS^ippP^$Ya_jm$%>p&G=zEuhDGD?Qe0>9JlO8WZ_9_|xeHUrsOh(V_XFFQX+gzqZmB zzC3h6=mKEGBYq@j+(vrDx6&hibm%g8<(-Pz_j2@=c*mF1JAP#7E1|Eb0rZh?rH}ks zjQ3kWPx*3s%GYw9E~lsb=+M=nt5J*i%QuErA{y}doVg3=JKsv*`Nq(J8bf!7?#5O8B=i%M6)*d8dfA^&FZ*(?4;n*13;hh&mFjCRD~2|D+>fWneQ$c) zpG}YZq4c;fq{sbKdfbnv$NfNh+{Z%_g|a98?kCXizLI|T!|8WFjDGh;^t=BO{qD!p z?|u;d?&FL$(Tm>qIrP5IrT2Yzdf(^M`@V|a_h-`kz8k&otLS~-m)`gN=zZUx-uL}gKgO67U#2I1cY5NN(i6WsJ@H%U ziQk=`_$~Cruc9Y@H9hfb=!suVPy8Bs;#biVzm%T%#q`84r6+zdJ@LEK6Tdq>@vG>G zUqw&+Dth8a=!sv>bz6k%w#oFtFXxKQtkv2WLAs6J^mX*6?@n*}?)0Ybp7f@dHC!8g z>br9#*UFV#gx>U1xSs1nZ~Ak&s*BK@zMkInUBkZ(zoce!ofm;W_a5*O&-(sc^F`=c zUyX>D^lXjRX5FKTR3kK4H$%_29_uoGp^XtORPwEOqTL^zs zY8b_zN_4@9|AepTMXlZJ_}Uv#rs&ez)A|}AaD=AM*Y^2XV60BHeYsEb%l8U6nl{PR zc$9U>ZeOF=KaIY$1KF{Dif$H~G2w!e#!poA;KnjZeHrwuqB|1{V~YMvr~{@3Mh}Zl zmwH{lZvvWB$Y>~2F)46oIyu3m)Q(@DNjpmJa;@qHKbmL-wMGc@$Kuezi^dC zFU?+P-y1#`{ukR}Qu_-k*fW5I?+W_!BV2>TqrkXMrv83?@f-2&!MN(6HByi0&cQ>T z33COV`F?b2+iTY@*b&khp$$f|XM;z%FNK{I;;Yd~SoXpiSCt zg3*N1=vAQshvai8Fz>U>FaC#;nON3D{(%n%`wpB$F2bVb7c&3--?V%AElARsymk~F z?t-63UNWZ42ui6!DEuo+K@&uKj(%Q)s}dSsHF>18`{>{1u8?W_@jxFQhGu zy(zv1;#(n-P`u_~4aO*y=sY4JjjxD2ZRW|LO&M2eW@%|5W1*lHk)vXxG!{y!!G2JK z^@{)nM-b$&v6P9mQJz4Fn?j5fGgKHo@>KJ_Nh`tMA5HeZ;B7@o!0(avJ$y8sA#aaA z`d3hc&$nZJ?S9XK?!N^ZGwCm}jmy&_BS-Fym=zx>sYm|AUM;qEuCS6dfDj)e-Tm=}-cPw!cpgZtQVLweQY0MZ4l$-H zu1)SgaJ&YI9B;T`1j{u@J&^0tBB|$XtfXb7SICx0k5JM|CdP17{&)OPuJ~7LdjnJg zr~ZlUoX=B74#)iMKu!J!w@;%^HcYJmG3?Pon;s5EaTK!7Eou| zjXKLh>MS*NmW9+=ib^P?vZ%8RQ)d~W&N7`k%P!Perc-B`MxA9kbe6rKg(~-|p|`8? zY5@0#{xVAaWft|9dC*^u0e-AER^@x+ya|Z)FvUFc(U)k)bdiGR3`=~p0xxLsg z73`PZ?3YURO9Oi$o4qicy^zi8$>#NRr#`k9+ueulZlFF^Q?r_&PBlS2YJz&v1ofN= zYA+MiG$yE5Oi){xpsgrDePDw6y#)1g3F_h!)OA!**O5bAM;Ub;r70(FM5ybiN{KE| zLtV#U>N@&T*O5zIM^EZHYN_i;PdRa;in@+s>N;wu>&T+6LsQpb;%k~1szX!aYnm9U zp`+q!niDsMQp-_7Ek}7WvZh2&Euns62=yC7sNWbyZH9@RnMpmy0O~O^smB&OK6 ztP|YPR9_s%yh9z6AJ<^V%>7gu@}yZpGiGG;m{o}MMd}sH-Tgdw7-s@Pek@1yl2sB_ z1TsXo{G1{~> z=hYbJ)fg?SNU8u z#8Tp3<)_5GilxN83eyUjpAz>fpSI0Bt~Fw`YUXpr5u*(=pLWZ9u0CQZ5wG&N5{Ypo z5=+LnlE_xEP9j@LOshPuQ)09nB8nB_SjA{9ETFY8n^wUB+5-z{35?PbSU^i)Hm!Vx zwDJ|uj+af_T{dlZ1+?8oX|KzsMXrFhxF~IL*|fH0)1DTgJ*|NDv~1eY3TQox(qfiP zD_H@pWKmkf3TO>0q&2L7*05|^vdh5aIag9?TuGJCYSf2TqaIvI)zE5G#x+z8?M3}*FRG=zXb|m1 zJ-Ct@%$3v-uB1w6DH_a`RClhVx^pGfkCviRT8c_(DXQk$st;{MeYmRX!}U}RS5gDH zh8oBd_v9L?7uQgIxQ42v6{ru_P?fX=)o}GRfUBn(u99kK5sJ|wRKT@Tj259T zlvxE_H^sPa8q9T5A6kL>&a+$?Y8kjSFl5&eur3XwTp-i75o)vTA~-P*vC*8(i4No90E@(z#KA)N92a>4;` z@<+Zd-0?;#>jeCvl+-4gAoJd<;mKuU5FwrrS}13Y{x<1pB>qDV<*Q5i>Qb_L^al#l zA1Fe}nnr)1^rR1vL?aB*YbTx3w3O1cl-@bT^vEfuFHSM#YbkwkiYaAF>4j6A^tlml zn?}ml5tOfu^tKsIDQjX3mQuc!(yL}PrL1?9S4{?`Y!6D=9+a{@C|`R}zV@Je9YFbN zVhkoIUz;djM^e6yqGZjaWbHx8+J%y}2mM`&C|`RdJzXTCU{*>*LF1d^(Kp3-r9>!4 zJ^G!vl%NhJs7L>j2qmaT{}SU_V*Cmtl${=>rbpkAG)m0~rKU$8kx0@bMB)TSC@CY9 zl*XSUob=(4xPKu^M2|ieA>&;^pNV41zf#J-5%iNNriTRL_aTB`DLo{LDG^I45gREH zODPdY&?};t{t(6VgeazTET#8DF+CoNDJe%#QjVacETyDuq<=#(<>d%^HWbsFp_sC> zl(MstvU3Dw=LmW#6w^ncnBED+l%u7Tqa)~%P)uoBN@;4m5Q-^NM^L7gQl>W2=b)I9 zwUjcolrnV$Jqe2GH&9IZT1tHVThI62 zA(XrMNxQyS^h+px$M7w;C#7!#-*Sgi26s(b@#PfB?v%t?l);6Rz7>?dxs<*Yl)k+w zefuP>^>SvUvD4$t74NRbHlIz2Yfktmq+~7RTWbO3Ya!oS3n*nPXnpTXSzFDw*1nXu z)s(muw7bV?agS5_=27~_D18eleY;Wm7E=0lqx7xdDG!yD!Bsrvp_Y=kf~P$6<9lok z-(&mnJ=RF*3ZC*%O9@>{+3Zp_m!{a}3n`TgDU}OTBHb0zDqqY&ZR*}=$J90%6Is!6LG^W_o#johXW#wE7*?JB3p5>d}m?C54jS~{~ zi~g9Exvbk|PLMau4Cs{S^S8fdXU>s>Xdxns;CtZ6-w>bc^L$Kw!e8n)T2tXS;qx&4 z;>(IYR`kzF&K-6$ea8A^_QZ#?tLVN{>>ehEePJn5xJ$Xuckj)+m+5WME0`HvsxW*_ zzOO$P{E7S|Tf=@0YBtapRWEh_^4=})p~>Es>qCq`UcK}IKGFtze}lR|-<=Nl_>i#A2PutrV_14B=Ihek&KR+*k z`V2>7p(2cW*|yKiJ18#}9q#TFYrl*zMjzm{%BYiFs4}+1T10zzJADYo0LzOV$(Jqx z>ra3vg=M!W_h?nRk{4T&rRtIvgIa32C`>OerBi#m@DfaoMHW7X< z_Su4#Ql1O@JC&{@j1eVwE;%xB_qcc1P$jYQyh|(O-LL&8x&It3OBvY$o0+dY@u&Ia z>oTQ0_?RnfuV4H$Y(9xbt^?&s zL{DMnC3&V&+bFQHZ2*#Mw)cA&TPUXnah~-Vr;c=s6R9uSmE(RoT(fzWWKDL=_8*7c zG0RY9NWpf};n-`+l>3|&2Czj#Zmj0LbtK>LN#&i%n;U4jHGrky| z-6NsEeTR2nYF~&9Wt0kdK;ys6!F(bBKMh{LN%nIcBu4V=WJ)Z#tBALTwdXQC&k`F) zWTDtkI?7HEvcvqtdDIewQcjc1 zqpl!EU4c1GvWS{m#CL|qz}URI)2Ba+dV`X7Cx(tfTydA@hGtW1n|svhp*d`Kl>Yr$ z)G%aF!w{v0A%hx*C^Zau)G!>&E}lpK{&eaYvgqHRPHjULwGClv8`4tj%dDhb z%;mn!Chp5@qOXca8(En9G9%oV*_RsLe%zN?O+9Y~cVw1O+gm|xZ-RR8iquni&o>2|d3+Hj4WdpUtdGv;AppH0?`z#x1kIUgc%LZzV z^SIBlfx6>7dNDOngFJ{Dq(`TuHK1&0sS8JWgqUdY)a99hq%wODY?sDPS6Qa51vj-qDM<& z8u!`{FL~U*~HzJy|~-5DP^~16YY{7?UL!-ZP|yrEt_bg^tjuy5B2Zq+-=#5yDgij zi%;in%UbTXETjd~qXjdKyDgiz+p;iax24D3mQA#2dfaVU!`+q=N#ws(Eq7Zsaku3V z?zXI<-80PHmVN1s<#D%Vgc|=4cUwld+p>_mEt|O8(xoLJ%-xnXDZ4Fex!badyDj_D zTIzAPWrQ}#rkK1`$qk2Zh`T4_C60?KI# zsNktNS+v!9jI_|i-Fr(NT<(Ms!a?_CqEv^eK2bGc~$qnmPa5uN1} ztmxh{D?zL$WlbvY=y)4J9DQSzm7OTEZ%MRC5^+6*H-1?e7Ge!3F*dP_L{^yizALF& z5Pnf9S|sm-o4M|k-8Qno6f{Dv`-}L14^HABCwZStzGKP?9#<~5 za(OEdov^$Im|VH1u%4UR(L)mR&g^LtD+zbKfLh*Qu$KwCY=imqjrH%B+*z^a@FW1h zCbFa4Ewh)(yaA`BFyCM4 z?iE|+^EtY_UqlSkr| ziabk7TGWxe4m@M89{D|_2JcJqewe2Yg;27y*wVZL-c6$^wWBBXj`*X9#B%q|jFdu~ zykjC;zp#&J8;zDoSSEFkoJIZdk6y6#CEIAUL&>?8<;)l~bmr+x$!*`*fLnWfC%+~b z{W5wvANmCHMIXotV*}cKc}i|C919;r}Y|*{lPfG*15YYcw)ZE*+9i zq=u|%-^R=!s{o94;VgZPyXntBlunWxbQme*zME0+=g9amHf35w> z95oO+r3Y}3+k<+i>Ia?D^J*;Pdo?4b*GFoy{uoiarbBDgq*g;;G(p`!ebLR%Eax0` z2lPeD)ZNqzJ?h--Jfwc^JmTz7dvHGFW9s+N5&crVOuf*X&dWIE@2}Jg9e}Q2i~1Yh zXVcVM@PW%y2SahZx4y@B)qjM#q9q(ZqZE=dq$7KThe`cw7m7`aq>o^o1x`B4}FBVQu+?~tZPO^OV?ZV zR`^}ss}VC(PSk`i`+exg5c=_#pxKGuOs9q}7bj9akJIxcW?CBh6p@z@A?+Wa{6K$z zQvXCRhxEsYnHHkXE)6=nVwLWcI5E-kXTW|yjn3g6(zrwSgUrx`^p3);P3 z;>2k=M>>u7FU0#7;{8jfJ|Z3Zh%}W;Pex5mM2wn)hbm|V$s5?lfzQCL?oKAf~4mAZaY6^0xDTpx^lSh3)45MKZ_)8R~Olk^p zs40js@=_Xg1e%eTLeLbP0l)LJL$g&{=$z0ToLqQrXfDc{bA~0tQZ7c)1;9vDr5uc> zCE#gJ7?!hzbNHTbP8H7OyM2^z^)bHH=Q2K$$M^X(Mng*HJA5wR-ZL2iDP2Yz>Xk@G z=@@O>0N;nRg46l_9K~pAq;7kBQmZY|1}7vn*%DRIOKPm;eDhTObeQ_-2=&udNk3sZ z-`vD59Zx;9PU@k@>j`RNil%uIHO*mam-}*jH&e$P=Ln8b#~e>e1&R9CKuvQ!qy9Bh z-`v2cf6W}h4b(cvsda8()W2rxp5q+54II1vS?3bB6n$#+4QYR#JsB$`as`k|Q z8&{=hPn~3xI*C+Tm5fX$G3myq=trxlADxh*8J$4QXjL)}ot$7^MQvzPiZ(PtJ!lj4 zpyRo#!%NYCYHC0yQ{Snn@0^sP=?tf6I>Xd-8Xf0E>NqE*#2+1>qR~X;tPBw3#MsozcqZ=qw;?!t1P@@^AMzbg7OK-}TIOR(vHJW3n(QKeb zvnMs04b*6kpx1N*Wso`XJWfdzqeioV8qIo2rE!!>4b*5>GJae$^_o2?rz)w}j8jha zre3pw(yEfu%AAMZKxx%XY1Nb3%?4^Wr$V*^}DMF_d4;lwVntU(M8X zR#Ma1KuzZedSy3I(>aEk&IW2a`%=>xr(CO~rqi6F-at)foSM!UWn6D+I>%7c*+5BG zNloV{YC4VocAT2d-YJ^S25LI%sp%X+kM207p*dqcPMKIqnP^U0A4AF5Ons;E_imuR za}4#JJt-@jsr782#Eenv8K>NApxlg7_t`+*XPmmvG1Ps=srwv5-RBs_j5{eLv17+j z13H2l&<1Ki~U&9$E0XL$8*2VcZ+SQRmJgzDc{zQ{`*DBINJfhrOF#1-+(Dhk9n@W^bIsts zpG?}6^J!DgrcJqsHsvAoJTIa(xtP}E{`5Srr8PO5*5pR+`@sp-;i1?aC|>A|-1n29 z7kYvg`g*h-*BX5@EyyLx z!CDGhXXh#x@d#8eSy6L6E*_$CvV*)YQGYU6IElVS{@_m` zRQOLl2_VL~fR;l}pFE~N?U5%zDe>g^v3@G%?I0Ny&d2)y4XvLZS&9=Xe&YWEx7s7C zMQ45V2RUPrzw5|yM7ZnlVSk9GTXa=BjBZADJpum;P6_6_ir-35v2WN@@`lO}e#zOK z+rWR> zJG>uzn=xbGD|SxrXRu^G4?80wx?%=>2lM26umOI6=&6n>2B!-UaaN-6YH+&@=}K=U z(rmy8JPRL`vBkX z-4FVoA&RZ0MOC9Mcnd*$aKakrdo!;)(lTJsHl!bTcq1`3N3`-kxDM4^hZfSWqJ-Crpbl7133dN9tmm(^$)SEGgWdkAqg zTFMn@5m%s@T!9vGU0KAnWD(biF|HH4aGeKY1 zT=BWIyBE^pUPz0(m)t#ejdu+q!b=qU2v>ah$(>}f;&W+V@6L5!A?@oWw5<0y=H4=i zUtdU@y1&Crq868M_2=Pz>MrEo?cI$#_Y?0P#5(z@_fyon)!Pb;L@Lhb>d#5;Jd?P@ zX4kIf>aUR2@d#IcC0zX#(k@<-+?OV?>CHag2v>hDSAT`Hg@-vB+!QN#AyS*0lPjYPu7>is0?OnHsEF&G zBCd3bxVq`abxj6WG(}v?6mb=ko4ON@D~LGP4h38_6mZoL<$589D}t_E5p?BRAkMWw zoU4F1=l=rE|5=>>vpN4~asJQd{9nNNKhBvy&N;t;bAAEm`~uGTg|r+Oan3KK<+wX7 z$3>j^3pwYmWW2PC`r z9Iog5?eEIkg*o??BY#IKXEh)9V{~emeRwvPB{e!WSp6{Pyox;0ksA+wM7^+71d_g# zfRFqMbaHauYn(69221Jd?1bvzk!Mif``De_C6tcQ-xnjj2Ja>Hh(kRhG#=yTdW?uW zao_L8I`$sKH+G;iz!y3LiJ7fA>K#U{)_nJHP-;Bz664uHiF=SrTx18|+bPfUD9Q6F zpH0*Tk2-@8bp~Pju@zH3=TT=+OgUUYIh;;8+&)r63r-m+P0={zQX1z_8W&I+`*9g0 zCVweqvP+qq$N8@dWpaozIiE7QOG-?H5G8Pk5?E6LyYzGFLaCcidF%3RJH)qbmp)7( zN?MQa*&)7X`_T|Y#=4ZTCJsV~GS;Px)hRMI#5Zi6jEo?Ad_$D3`IM{ql&c}WRcm@0 znG-&`P@;O2s9h*g^XNrX%y;M*-=T{sMP16zE_^>OrVmga$R6C^HrI^|?8M~sP{kV`pfq9+&)TQ22fI_0Dv zNkOz~*(qAJT*}F8zM+;0srINvEtDMhm>Mbjxo3-|`vm9n&e z?~Z0aaRJ{QOZo0tO6h9O9Vw-ZjZ?-JP{tPUeX*3!QdVkw2g=w&%Gg56*bK_p?v$|+ z%Ge0sy1G%W7E-QeQm#fRS2HPBqm-+Kl%<7~r6!`3k)j33$Ow0a?^Jn|gxx6vGb#Tx z-e9y^p`y?r%XvmxxpIsbm)Qpu}3v`1wKn!WOK~jB# z`(H>`5MBZOy$J&g&_4M)Bqp(hHq~kS=cc58*fAXMG^jM@1vE zBNy^isG)q)6;2phh|(A0+#nBYt*fyb`MP&4PR&_`^==W?yWhlG=v!D>b;ru;2GxTr z-QLuhRniBs51!>)p}X3IlO3vYuFpei5LdUOu)6(sH5wj)zs8vha=y+Cu5r)6Gx&Qo z6aIXEQfI<@?|_<(^~^z>cOa{m^SytBT(uCZl(4!28te@96+Cx6)m2z;RH*NSDnotL z4Uoot)pwyWs!=yWOO#MI@p<_XrR}X)SBzG-L9a7G-4Qw|bc(tQPsFKeE1rlM>OMXT z4~AxiW~qmum6@*|#xD6w)RP$D%hXPe=jS<+U%=>HseTQO@pbCA7_l4F%g}RdR)3%l z;~+-hBkFCOrsd@S-~4%~SLL;}`_n1ET|F1JjRp9-5`T-)&e_SoX(_Oe`(ppQdTFxW z6`!Jij$gMvyj$O=^x-JeCv*((ZatsrcaUDJXRD7hz08b^!#T@ymZ!glzc&SvZ{{OD zlzx!EOEP<9R{2o+`xZLn(`D=>?s1fT+TzkWft*fotrnN9ZLlGjbfaR+dBXKXXLpsxZbm0IA8 z$ME-52k6<1U8XmP=O_v8WpICkktk4RE_qKyFU1AQwBwJzYMCqegoTDP=W*ahTigT- z;rfsxBWJ#hoL~$EI8t10OI&54Yb>4zAfcemXjOC)@N8dn79rFYZ6lpP zi!8KEApT1JCyf5fT9LIX>q`DwgA(fu6~=Eb3-KOh-IR4p)*XTqD0-uXZuaT276_Dm zG5+j5hsSQRz7%MS#clPW>}fs}-R?u?f7W8uxKv z^hwfToMm4lP*xfKDzj?v8>2t^40A0MlqD_upgk`2S9Y!W72WAW;P@i`_TX=y^D09lOfmt-qvgY%56`mB*z&44BgT?*8~+}5nQ#B)UW zoKo8t+|^+G36x#Ja%;h5J)vOKZOeKn>u%x%dd%mV^^`y|>aw1-xLp?7Es%_ttk?bV z67+M{2bS)zKr%|QJqu-6DDKml_7UI9;;MoX!JGuR@Lpz*24p3sPY>K9geT=p&3+Eh ztep0c$e~$6k^L4^JMOb*12>@pjGXm7m#bNoY$NEGHQBNN@NGu zwg|u22RQ*G6z`IA&=x>BQR0xB6C)I~YGBULoPNX!)IlSY?>|?|`;Q*!UXS#wWO^mwjf6KccMaj?0z1V_uXdV2GmRXkk>+cJ zXArIwSlvrZZv(r+vyr)L$RSJcPE26eBmQ*KpKf6IhG_k7#QYmEU(tvIs^<|tn{W$r zTZm~P{bd3>8_0Q$^90(koizO;IZD;@C%Ww_0OI@gIPfR}ga@uVoeSq8ZfsI+j|> z+||roP0U@)T`lc#3IwBGWg8|EKT+Py^*HAPrmrDAo0zkSIoo*)n0bV!5Pu=l@l1ay zsZ*?<22BCE6%Zd6Sl#Y`o7(J_ApH+Vo{Q%|>63(|_9^g9 z*6Mf83cwAdgq{}l_7oW2Oj6fo=oFCZC7?N5V11ArZX-9txt^GwEIWbtUo+iJ{5azI zOrbZVPo|nw@M=*KBmHwwu1oi3dN%ypq(;F^A-DfzI>lh*9Z=uHveSs^!*o1LjTabx zdf>0evxn=MTS@v~3asvB-|~9(G~)kB`hOChM|hrr^>g6UMob$qA2IDhOmD)CgohHY zlp3MWmDhTA}fX;u6U9er9_%^%y-v|5%G3>sGx19@@L~&9Gj*q#xCLoQQtPNq3s`JK{m@RAQZRA$+Va za=zwFhu!J{XCC~bf9KqUvtP=cpCdxS5ZA#OEoZr1aOTQ2Zav}=ti!o0>)r3W3lW3h zA$N)Uh`R%k2_AEwbid<1<%QfE5m_M5-HT`f{oFs}q?20rV?+&@2cZQ$u3rCt^5>ym z1$}MmpHBI0^tg+mQ(c9>rD)?#$-gU8U?2Cz{&)3?WW8%YMc*91Zj3~XBBV!abj_IW zpw|VZ{}gzMe$)ER>^Grtf8%~a2@B1(P%fcb&~?N~*^CZ!f(z&ZDBcMdgOd^^mP;=S z1#PLaWjkx>a9bj%ZM4M&C8k(h0GSdCarN_=E6~LP4SX8V<-}bN=qd|cW1-a+I)3g3 z(%lc96Kb2lYa{+{CA7J5f6caj_u#kW)(Wn^62Bhl_c&6tAX(x$AF3VLxW9I&&<(Gs zj#h_-vq1gc@}cV3r-S;vAaui~gNrR;aOC%r&!ykX7P58pd)4CJuv|K6OTTx0x|BLT zv^doXWVx6U)uoO5tGfvup$bCM2U{()?wC-&c62vex=j`$mzpBnh5YKNsADMpnySYl zo#f+~TPC?FkmKi8FRNZ&{iN`dZ|!z+7TgvKUE2v1ld?6oM4g2Ke)Sf&*g_)-3BS%- zFxk+d%`@2M1%O%!HFtuO+{u=1u7QqmMJ=`kL0bs1RI;{Xv?{pr4rSSY2DbujStY#4 zZ!ObXfZJxF^%lB=&`q7>w#ON|yDi-=K)YF1poc8SZJDsm^%#ep#R1F zug5GT(B&3dZK3%VT1aT?F-lxz>8`O5x%9skCGKav0&TF+Mhk5wbdOJmmw|BqcLhi2 zRUfL2`cVJJS>ol|a7P?VJkp*{Z~4G|zSlqIX5Uwxa!VpFCERJnq3FZ=i zNK*NlHG`}L24r&uPzI=mIh7V_1vG;=f$A(&Z=tz_n%mKh>;yNNxR!QwrtAXX7EA7M zjKl#e2CO;?TG}2r3?szQ1<-&iecXV@20S(3Zv5Is=oSk-bX+K)TT8n2$KZ04<8>BRVc<2y33R!IHd<&Jp^K5* z5ho?4bf6PlKo>wWJKJ?{T4cY?&G9;TGGVW#3XtDJqmix;$HBfp}6XSFG-0(rGqL4DZvv8 zTZkcn}ti={=vC}7Fp<83vKEI3UZg&++`M8PH1mC&OwPamM+N| zbbBn0{l~ThtsogJ;L{C~I$s;~=AeUv-nT6}57-Rb3xYN;wk-(Sl7zrHXv>wBZiR&c zE=QF`Z3cHYxNKt!9s=|jp{D>nD^UGt0^Bs4dvW88Aq(*9s=)#+w$Q5MLIGVX=@uS?%TmjwV;!GdB4|NSTY$UL z=REjwA4<87pk7;VTH;KE2&>cQqqFbUg5fvOEWuXcm8vL?AgFgga z2b`1`{8D>5a3vuM~hUM~>4<&3{2ES{|cGl9EEfLfkwz!}~Ko>wPLE3(j z5*o;KD0-wxRxOE}6PprCh!bd;g|>W3Xe#Lzp=?mX;Dq0F%Vm~@f;#3{T$|<6SzDG{ zx}c70EpAN*XdSNYMvF5gwkEclk)7CsT+V}pIA5mVo@tkB=-T6U%6yr4u@kz3z`ZZ^ z4#~$~&5*hw^@&4(oFQpLvIATSROZtWS0p8d1h`6@+X84LISVwyLd_PMY$21o0(1+A z6KJu8R#^zL2|06*LATV>U1=dxR-U}i^b8JPGvu8iuL~DKdoA>Vg&txZyFu3h#}eDx z(-9ZY1<+%ia3PK*p0Zq?wNTKOUAAmzEj?gM1hwIMl2;Uz2>H5E~dmwxZanAPS!s4H(6*c%f5j-JJmu1j|sinj;_hljkOTD$hvsglf%NO^DX?n zJM=^RRz8loJ0&*-+G=wL4jVdbiSQfN9-3uwte3d~6y!!NUCct=2$ir?_ehY%O7>K1zZTYy$Y|;r-WJ}m9 z?^u>SX|Amq?VBvT$ghRzT;P^kXoiIr5Nhotw>{3#Ew*&)0R>XvN^%k03Ja~Z&?*ZB zB~0!u?YP`Qx&SAT!EFQdZ2c~z?V-Cn;2vv7_YiXf+*5vTV@v(+#*z57mr$LB&}&It zXHYiW7V{noFH=H}x@yR8EdV|^mT)pKicgNHb)E3Y&xBeZ_m@y#G2kc#eUboNz z3o*B$s&RiquHXp8EmZ46^@n|^!6TG$j1nc5u9t-jm(eIOjW~f478-7$352Ftx{VFD zHe64fK-XAkvxR08x(c}+aZ+Mt2Rgw8bOAKK6D|fPB^FvP7h5Q3%jLFgXD!`eO9Zv8 zwz!}~Ko>x!#Qlx?8}4BVfgU0BIH0Fx4Kh47yxZ`o-~?)T*N29eembb(1@e0fTxQuwxpdN&h7WzZpbi9IOSXA&lpoOb*Ixxg(X`O*c5QbIC;1Xdhz({_oBOlIvU`UaHOoEX!SFdJ}gRZF0Yj zvYXtMNV%5-@WY6nai-9FXVQb7`^wa-dLC%b7rdS$Wz|Fa9KoZG@HR1NAQY9u&xorY-BAPiP>yY(rk7{ zgTwkG!zC41-OHUz_j;9tQLnmJ$^wrbLwb><aFs@hK%QjpnW!1lv^56A3-+f@^pcYe>l*iFysM!t8Zi!)sZ?I5BI;fqQ|RMXY6wT#MNa=x_(1 zbC%E`#gpQg{efmLUma95sQOZv6sww86RWnIZ#e7vr;!r%EbYgxvdR{!ya>3 zi=2ET^tcvnb~%<2rnGVI6iV!5lP8FhLhVm*0PTEu9JG*|KJm}j$>?{ zpDa@g^(tP`Dqh7Zwtp3CS;ebZMV_m8*H)3|D&gsv z9hIv%8o8qq`#I#v;)p^jqj5ed&8S<+T2@NSox51qN^)Mwx>mB@l~SW~7u&p&b)CoD z^9)SLYFQea+{W8E{zlEE-iX3{jXR5S5%B8k?`+*8Fpv3fZ{zhO*m@CiPPYC~n9DX9TAoo7d zkKZ@nG-5`vPg;m+Vc)i}E`LuZu3fhn8usBY znYOV1TevHAo6tKYY;y_A-a?v%gl{H%GvU)DRqsh%>UL>~*)<9bdrZa#V9@A%wkMzM z&*!MlXB)V`6uG3~wd8ZOaL=&%g>wry?3UPIdam>&+J~N0kGZlAiIG0WS{@_i^Q1Jp zd|R1I`Kepw>af>ZYWYhtMGFCAZ0Nu6ivGeDHW1SwZE$kPf%}TFyIA_Ifj!(Hz3Sw! zR0FSKF`vZ6d=eM%-u2?WTg-cB_OdP}x5ebMnD-^Q>yLVx*@q{yMzdo!xjUD2oy^)#<{h8Lt1$bA+wZfL zHjI^AyTexQ_3iGXNZ%07PEU^cH`xDgkn(np{M$M5XR(Fd1n+c{K39iGvzd45XS`EW zNdFJwZhu_^kQA-xQKeJ&vAbY&S$!9NV`y;pX1&`d_+>x zpW_w_?0n300&~v={R`xLj++O#!U5i?5R6kn`qP+un&9<$&O}Km4bF3Ae>l#oB&Hdu zk z*X{EJR$HWAq~MHnoTO3~FzQuXq+aY#mL4dU6nME_O>Ua-43j2HN&gQN*exT?K#rm< zgd53W2jK_wR8ZbP*z9tr?9#UrGmqCkkG(OE-2T(x*`M5?)aW zb4$pxggi^MMoakYIDG|!7}`vwtP_<|PL!>Uvi4ErGm892k=rQp8I{bHUK+*z8O2tO zVjB|7O%Ud_>jXK}kwbzUX7f3n&F6Hc+lG2$yd$%DM`p9$*`%LMZnIg->||M~m#c1v z>vKJub^VdKe`HJkD5c!J0=vJLT=lp-gU(2)OMk$+npsyf>uP2Tn^|KsYi#BiXlA|5 zyr<3N-^~80Wi8FDcLw1Z%w0@5Fo)~&#jePK#m-@*bGSZVED}QP1SJ{LhgTH1bR-)};s!6ujGmlw0(v$Xz0^!7i) z=h-f<3pCR5vxS?9NdXLc08vq-wOvdqG?3Ub4!P0;EYILf@}DU!cP=?1(qJYz&rIeD z|Cv&wbBW3#z0}pf+y>TL&#P$Qwb!$q4Z;Cf=~bMo=g!Q$Rk_U*rc77)^S-iVk(#jR z+@*{4P>C#o*vvL`{ItqNoa$ON0z2x@QVZ2r5bfc|YPm#GEg#!N3$ zH;tQy^x2cg%qmkKobsh9Wx8tWl;$!$bJ~|qDbuT`gGN6xecH)o8fy^tYY2T?uIkhn z#GpM#EmmJs8?n>>5u6tAlKL~^dAmBMduohx_CpwbQK1H_vFcPcM_r_rtF`I}>TdNj z^{o0Y!~l3td%BD6r7_=;K7tsyy%E7+9HJJSt1d<~f$I=E<0pu*@&D8w_1}mW5JK#W za*5PH`ZQI5D7ixr6ZbSVS6!l3sO!}a)jjG_#25dadPDs~hjmw7fwKw>eL7-;^ie|* zqhPw4rZj^4^-Dx3_>1~LM|52G)`=v22F~@YQo|5Q;dC`$U8=4@)Q=yj zt?K7$r}{l&a{Lo9ISO>89+ITbR7I+O-Bb zyXig{sir+qRgAbN4Tzm^hH6un;arCGh?%er@e+2aSJVOZk9>QNuPyCDb=`# zCm|NWdFpbtQr&>aBKKjGKCkwvzab(>rY_QbHJ%{$Pqyl=YE&cQGMtH%AFfcV)CRmo z+^>G2Ucku?Z>f)UR2S=hx6U>9b6CG2P8{FVp=@UuSxN={rn6V0swMT$1LUi1Z>bP0KhT z>5}=2({e950qMok=58keCR%NidmA)0k#3W#meg zO}LP0IZ_AfXGXxoN>s}AWm>?rH&bf3v0{^4>Y}g)?XOzH`|>u%CdIbKw&vqyCjXxN zyTlM3b(EGt-7u(j}mlIh(i zbZ_f^efR5o-BMnUTBN2l<#=PAQs*P*kn^!~*g4`N{1Bo%xvuAi+^`#Q)7)Nex!d2Z zbqBZu-9c`hJJFrwp5&hFPH|6hr@CKqTijFKY3^z6x$azdo;%5g(oyJOt3?l`yEoshiJ$?kObba#e(hC9cJFkzxOcgCyFYR7aewM=b?tV#<`WYf|p@-aO+@a1Z&OZ0o?u+hk+}-YPp3-;bYeS)_RjI}?<1U8^Rai>I}%bM9dbf0&UOvq zjH>VAjFt^J-}r~2TX443)uG#P>gOt)ZE-tJSlNuTS-uro8@diBTgYif>u@^JcW~mx z4RXqgoP&&0knhJSE89a4h8_w%9C`$2tsDw{96B625=NNEuoHH}9*&J28mGPGG<1ik*r8|Bqx#^$&17yT_X9Bu90}8Akr;T7%7SrM@k~yBc+iZk+Mk7NUunF zq#`mSQWrn^0LmRsT0=t_66+o%WNd7q%`A-hi1WATKaqsQS%T&cf=NOn7P zi^Q=u13PHnkJuk@C9m+95s*SxRkwK$*YYJD9}ZMjablXLI%cjdem zeWRSzqQ58SE$N%&G&}u$oS*cB-iXs#p3%3+nMwLq?*;D#eY>30qVJHCTJ(=`7I2#0 z9Lfk~=(}(VOP;_sY3P`o2(6s7T*0Cy46@A{-5vz;Rp1);RnMH>i2MB*)R3`;XUC!`U8nlss9;15dOOp3cnLR>girg|t`5Mej^^oAr?qtkJGa#eqVh&o2`Q}Q@Evqn-tjD}@ z3nb{>kd_bO{yybC>+XU?+zaXVIwajYkZOk^!7?DN;*dOn@Yr2B|R{ zr)Mw3NnMwFSK%z|)i|YRgSRnqxpynhp1cRAO+Mm1?mg}8#93H-aDwz}kRS(f+T|h0 zhO|(2C?9vREL4dzsp@dAM&bnI$)OgU8r2$_i*unChnC`0^%am5YatJAg6y~h5@H*q zz+*Up_gS2tyF0Wuv_JHE=s@V*(1(x);czq@3wH~b;?&%JI0<)XxCt^~Qg|v(u$u+x z(1vG!Nq8AfO}aL`CcG|uWBBIqrtp^V*6?=7f+xez;Oy8Jaj*7;Ukkq(J{W#KdjcDWofesiJ2xNC{l$^XBUeSPiL8!XAK4Ju7}*rr64@Hr z9@!CjGV)AhXXM4mp2)t)Ymql22P5xC4y8G1X=&MM`TxJY^A4}7NaOJNzPU5^o&*Ra zkWfMiQUqPs727H{6a{<3f&z+&y*F$T10v$u6-7jfAfTwI*cBt4P=aE?7Mh3!2_S@~ zufqE7siRXT zr_M-qP4!4!oVq&IE0v$RH}z!d`P9VJ+*C!ex%j2u#>*Jf^{J0<<5Z@mUjGu@{#AD*;$#~X77xJuE)kV>IxH#GX zmqZ)k(r6R>D%uQ};Q%T=-p_D(v;}?>ZH3|EZP= zk*KbcBwQ`TSGq=G_#;mxS6wUVaGj9fUdx2seY#$1zzvcCH%d*oNoqxEVjN`8ESSbK zY1O0)TBxZe*|56gz#38)W=K6)Q|iN7I8bUbh0MMtOB%x3(g@a(#xPr&z#Pegb)_k+ zC%eG<(hN3`<}g=Uz=n7RY8uI|u(7m)O?bMfnr5iHYMP_Xs%e4Zs-`8nshV9;L)ElG zt5nk(1yap!=!!~f+Xl8l15|Su%AT5i(Cc`LD5{#8{e>si8uT)F0Q0VtcDXHVD+j@Y z82 z6Ry>qfnTZSOx!g!o$)KxoFym1v*je%MabD?y2>fA8_#G~dWBB(a&MZ4d7mez!NGDm zd;(8X%@8@0wrq-dQaZCVRL+9KDR7VK767!rLZr^;Gr@^;%I($cGz==8&zN3g;TW{PG_zG zwMgHGGxY;lr1Rk{GGkJU^dmS&KZbMl6IiSZ;5_}5qb7?q{4%iumLyigC5gpk_sq8g z$@g~~xed8$WRv3>**=zQWcymKj_q$BWBXlpkmdT2Pn2sye#9~4d0t~bbTyqL$}X`* zEdOXfa*>T&SQC_{oLia>dx3@_I;K&*)QnBYq$hG`v)v zF2h;7+;UcIq5THFXTOD$?00ao{T@!SoC7=6{s5=hm2kQ(g){6bIMc2sXCcqi=QohM zkk=eub9oi>n#b#XULWw9PtL*v89nS5sjKe}fZZLfmpjkVdXd|f){Ct6-6BmkPj-SW zlc&=fwnky`ibgB`a&hO5L{sUAGqn$H%0+l}m-BZbE=gb3jpeT!zSir}Ik+(;xKaMO z)wg@kD(WW#WK=XzCdlmQB`KETXqJ?azj3ydN@+Al%4AD47q`Az^a;jlK`LRM&<4sbz_RL_xHkEQw>I4Ix|X#*kZdlg+fX zqs=zg=0;mW{@ATP<1CNIFSPSTsRgSgo6Ny2q_x}I?Jc{J6_|OLNtbl8XEIL4^ly$| zonayqb7zJ{m5GYH4?O!Tx?`jMOS zEp6fRU+S*mXf;aXSjuDWz4;9DZ+@|-rd9T&j1E!E80lSxZlwg86*(4#^0?rb5LB%#|yjvQ|(+ardmHYgWrG;*-U+31r zvdS&%!adaDZ!)9uU9Ipg97i&X_e98*+v@t|$~`q; zDJ_``Gm{NNnTp?Ufi;tPemmc>{mTDPe$Dx84Yp@83a`&mRGw2Da$n!}5GoC~;9JabYOouN9*^G=qASt{BaQ8k2^z%~tMj#Vh5V=2QDid8bilSyWjg zn{nPGl-;A^Utha1^u=E_K{Y7f>i>l)Z@3o|Io#Kq=(3^ajC_$~sr|0O6Qd2;m(YHda=}&L5O{?+wr|;*pIkYdm z5(SLrV%id)nK;vCF|NyIlwO|}r7@%O=8W)Kh8))WRDPTAiwF24Ajj&qqf)M+MJpOe zpY@m>#CmI!VZZFBN~tv8$JvKiqlvM$W0fs@K4?*ky@KRFkMb~-GHvZ4m8FEcZm%j! zlfv2FcC9ARMsGVFVNONcDobwb*DQ(it;M$TeQD=?+vi)8rr`?tT8zUV%J`N}T>Z-R zVNMp?cBj19pPUV!6t6h&Zrgs!>wy1kx#C`aooUZxz_0A7(9R6ss8L_~h3z%Z*ExTk z6K(;qOEu@~lrXzw`|&%njQe9LqSq@w=JHRtt+YO@r|tjc`cRw2_Y6C%=c>@lh9luq z%Q+w0zD2dRBvG9f5#25!s{M*+_G_ZpZ-`#MBWhhiw7QZgbrsR+8luv*M5ARyp&N)k zH|<2xj;m<#u}L%Orkbga@{wU`np!54Yz(zc9g}TxOkGnCHKc*bH4RN8(->XEYxm8} zZ>ivI(7Si8gSQJRc>78n{1~*d9X0=QWxUHywDEKP1a-XJ5BP0;{NZ1C0(q!+PnaR- zJVVWJGr~OehZXa;%{ykId6x_p@1YP)HdFZj8`I2mw4#}&$jmac%^XytVl&U|yMzAP zortLiky2I7wItaI&D6(B$|-8c9*J%i@xh%I;G8q`8_Cd%|Nb{K&iM!Sv9 z9Ho1mIjZiX?x=>>nWIdvGe=ooXC`JuXO8NiGZ#hKAui4FF-Wvah)Y|BxOA@&m$nIU z={{BZ2j5qP{(=8jpt67^i3+Q1_fbZQdzENYKljl({(%ySP>yj)W&3Uh$_!M*^{9s% zQ4Kev7XBPX!Ahi929mt;O$%$&1y=7m*fMq>uE3~Mo?FN;}sb(k5K!|b(s z%rI-f+{uQ_Uu-N*Bu|<$Bd?h>mln)y+m+d8tz|cI`us)qkiW{F@;BK_P}2kzjT}EH zXM$oTC}n~|My{WBayYqu+RKr0lys1eaMQ)XRxlMY@?NT6pq_5l|{p3#RFL%j)BIU6y8ol(8ycjK>tGy!A^M~a)nPguFW@O1siX919gQn6 zR-e&lb(}tjKk$N%*BA9AvK37rThXifn!c`Y;2FH7Z|gfcQQy@~Or&k-;q;ZO2qNrQ?3xA$4DJ*B->3{CgCMJ{5{Y*Pumo3tGf&L5t`c zw1|g;7BN0(5i^7SP!yDh`9X8|FlY{61kGV_&>WWi$v)$yl|JKLUdO;;^lsz5xQzvJ zUvL}o8gU!(8gUy31&8tR;4ltOc!zOla2SUNhjCeQ= z9F(9aC_#+-82R~;{de>hzQxZ7Eq+#L@f(E}zj0{s^Qs(KvnT_{?tK5+sf+%1%4Se+ Zxbln_9HK_b#b|ly=ylc6qG134 literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Montserrat/Montserrat-BlackItalic.ttf b/ui/src/assets/fonts/Montserrat/Montserrat-BlackItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..52348354c2916fbecf10f9c17e08db7bccd96653 GIT binary patch literal 261732 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 z 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ℜqRePSnbwFhQ)EPWcJgeeF&tN(lRO7w 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 *lt(l)6c@ENm9wuF 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 l$g3wJ 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 JJIq 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

XP|vVSu|?rOB&&67Osqg3O4$XZnERNE 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%0AWT+EQZ~9+zJN~QlV?R3Js@Bc_SC_}f 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

)4;dbj@ z{ed%9g`9ED+3IXuZ=3xOM9pxhrL?J~gpyJRtyCS-AwzL(GW0^{grJowh05q2M zR!}$S1}hsUezgN1sYe3ufF?6YO=dPUnd7anK0!~iQuJg!8L3k=;+yKJ8u3bTLfDr< znE`EQ5ZcZw(c)t0JRRsfziFlEtDyPJqUJM|n$L7P0i57aa+DhtmOF>nLZem5Z@H5tK>L zmu6F68l=9o0Hc2`HU4sv8%_YDHeXJ1`w?)7^&)4r4Fwb(I?hU6U4&|5**xEra9L%#muQrns3SlED$_LrrmvSKgObK8%`Tn>t@P)$IysKNmZT z0Yzh*IK54xn3xD9iW<+vDQ#lKQq)u`Y919ehKgE36JeqswJ@2~!VIJqW&pJ?L26+t zsDu0&B+Qb}EjLoJD-W<)XCYYp`y`S75ALG&ZOz5a3F(WAfyCHi_6 z)_k&;4m()!8-AeR%QAC?Wv&3ZJrH~nAy6de8E4kyHDit3e2OTKi~&`GniHJ$pO7T=KV0gvZGmce)0o8eDqnC zmHY=lqR0OCKOLW|3u7@-SgS+c5!qOFEFyXU-mlRZMZ`SAUdb>hFXLB^Rf7|y_KL?S z-pE7meUHt>S0O#7{eL3L8)~#rJvEry6Y&e6b$=_p--0E+iH5rWPSF3={~}YHKa@0g zv`ZE6i@<%9Pamuo8ErG^eURt&i+y(GZ8Im|Ekc|jIr(mx#0J9bU{1Y*&fJe!Csu0G z$#*`+EAlfgQJ~AocjnAHIqfb;EqwB6cMkRM?wNPk-{8gK%cV4y%Y7C$WiqqxE0?<} z^0=!akMdbA_ft6BN#W;CieB7F5#UaWP(1#g$Z)yb8KEi3<#IQKkNY5k+y@cjK8P^) zL9}uoL;-g|6mSPbD|bM&aRv4x!gNoGZvr2T?4(iYrx^IfnMA-kjq^IX3tnJ?h$afJ0O?4 z103!S2yk~mFYXR-xC@|HQY^k)TKjuZ-p!?LzZdQKy=cSFr48So6ooIBa&RuK@jhDP zgOrJLX@_@cb=TaZbBH!bG{w3)ZjWpO|x{In8q*S46|OB5LA_$eiF=&y~+`u6(Mv z@@eLpr-Ex9v)XCk3Max9P9LstD!IZbczU-!VV$q_Ol?R zLJtNxv=|a;88C?_at|d}(aVNF_ko5e8OSH`M6$8!fxQG;u1S!~#4F<^Mz&}_!z!Xd^R`YL`= z@5E~-_;fz+y`KysLR~u)pk({~OICG8W%vHiUtAw*v31_I$Niky^IYTuj%}}MB zp-MSJl~Q9;%DJiZ5G_d)=cabfO&y$@MsZe(a8@eitdz@Hsg$!)5w#(uoRyk5AEhPD zN5L-fV7o_xb&~e1^%Mj4(CDw9C+@3>_?jH+H95ZPn~3RZbDx(TkLGG(w|enf?f7gW zu~>^aYm{)-7|B_qn6pMPXN?lh8i>S-Sga+SHQG39lyKG<$@!v~^F=Y|i(<|cC7daW zIY$(8ju^?=VI*gV63z~7oE?feJB;M)P|SIunDasj=Y=-T3nMuTjN~j(%vqqA{J)r- zzl5BBBsqUEIe!T`e;avzF?s$-^86C={5JCZVsiTu^7#_-`H|%9#pLJ3-%p zId(cZb~-t8Avtp)wNX*>=R#_uqU6&3sg0^4udb#xs)`)DnjE`7clQ)shJu;9zKv~7!9F*sz3EpgQ%YxO#Rd#>Zc5c@6R)ghLFRX zlZ-OR;T>}L67KQN;EE!TJH0a)`!s{Aiwv$VG8pwVgHcb-c}C{c<_69Pg`5!zIU^J% z%?O2@5sDe&xysnm9vxTY=Cb7gXNFuJWO%T9YyW{33Jj1Az*ZQ#G~aR=v?b+@d% zvBt(aycnE(v2`hUIPAFilUV(7ij7zlzW9&mLS*-a`1y(jQEU*CX}1!Z(UgdN-iEd7 z&(O8)hJ9rl;M-#F65o16azI=~x+MQLmXSzZ?;WYc;p<{b7&AFm{BnN*#+ZOVgZoNs zurKm6@QbYMXmx!)9rzb@SKQu|;bd6Z5r$n17+1OX65#+(AfELW{Q4(G_X9i~@;phr z-(QRF*Srg$8IFw1h;w81Ldn}Au{(uEDA?gXc+TF&lZNM7K76+E7MM3KP8EJ2CoSjT zd(;p6WqK#|$;>G_^MB!!umMO}lr}uX#LoE_YB5>4`{VHZPiE%f*f;W|LklKOGFXb!>t&xgO$n^9y+d|#JL^sT#_XNTtap-e!fpJBhy*X1;}ou zH>40+Ppa+nRTIxeUP;{SpiC-^Hx(ZciXh`4Ts6EB5vR!Te#wR&%iS)MXN}L8I`|i% zBL#Z}O}stCsF2yP)XWZeY9y|a$s>_1OzTEYGUOvdv~Kvkg>&II%|`xrHZE zDls!8=7s~N{NZ4?YahgX1!%q7-uAl7Dx_6VVINZ*R15hfROG<~6?(_x+GG z)5{*-g+p>4jo|XIqhO%{T8=_$Ig04{luBJkA$ zZ=(;1(DNykT9GidA`xmu!qkdHs1?biRwR#Fk$h@J@~9Qbr&c7Bo=+j_MpEhd6rzSC zl^PO1H6%f5NK&XFiBLn5LJdiT8j?(ENV2IR$)$#*H#H=g)R6R|hNOTRl3vu16i^4A zNeziPy``|*uASSh2**8x;~wR>=Ruo0F|HSmSuv}XJK7xRmB#`XANJn#VQ-~X)u9i2 zYuvUfKJ2Zuuu7DT^}uECn?oP=R$5yJQolTq*4BiUS-jT+)HMfba}Ckv8m7&40KL~+ z>AhYP*Eoy!dMmxx>*&2+!(DX_z1OShz1~Xi_3F5dR=n3+>Al`cd#w}KR?E3)0a|Sf zskt6Nt8FpuwN><6H(G3*#{rM^dfIE#sLQUWF1wz(>?-QA>#57GqAt6h*4YMHXB(*3 z?oYeyU~0E>sNJrhb~}gK?LpLTSJ5t8OdWR>b=+07#SW&Xdr*?5yFWGE{o|T$@kVc< zMK+WB2V1E1&gA~V7V5q;xqq;QHrjOVA8esEJd^teTc{Jy}HYQ}46wXLPqHjDcQ z%?`|5>c{h_AMZumZ4=9%1qIh;ERTet&rIQJE{a0lja z>eDm0$FPN3^-OBjv$)65?5-R^yRXr+C+xoBjowOc^eDa2Tj`A+qBnYPdZV{G;*B1q zH+m~A#16gDTWKeDl63ST+KC<7i9_^8&!;zfYyA8+@kVc@H+q!b=&iIO52O{@p*MPO zdZV`{S(JVBMsJPBBJs|63(>CZ(5@V0M3QFuq_@&1Jw%`M-t3MVLo0QNKIy&b zlio^;wL_ou-n3hX=#!pLpY&GRutW4oucJ?Tl=f_g_Us^i(p%}19!;`sJM>9!rG?v} zPkIe~(ktncUPqtwR{Eq5qphMQZmW=!=L%^Bcj%KINIH2gK%ev|ebQUw*71GLKE$T+ zY#TMkwn5MII(nwJ(rR8vtGPqZ^Z;$=#k8F}w4K+}Gd)IINEK}%74%Fmp+%&gp6M~# zMe1o6siIw^o_3KcdZzcKbtH$@kt$k8Dri$5OdCl(J=6QrQc_RP^cd|W^|Y@y&}vde z&vauusi&1ajh^ZKXh*519i@Uk>3wNUsh~Bbiq@1IT2tz2O{t(adI@bR_4GsUOUp_< zEh|;@L+?xbN)GKS74$>zOY8e!dZ72A#ifE4mwNi1$7pw{r}cd>tuOVoz8f1%6>TsT z^gS=3C8nO1m@4|78+%L+E%AeCm8qvyrh>lbW%NCd(Lz&23r!Av&&z42si$o|jlSnG z+H9(5p>Lq&rizxE3i_Ux&`v*?Ugt5|a_VWPA55?FzO?Jq)8D*=)}1O^cj{@~si$?P ziq`tUwDDBYT0fZ9`oZ)uFQv_XFn!Epv;fu90#rrIeKGAoRkYj>rjL1f7n_horD=`Z z;3YPVLmNgFt<(-}7z1g;sG{{Em9}b!zRa!kWp0gIBP2FWE3Farv`;&{N{+6@vEFUAMuKK^EwX2p zdzUdra!!YQN~wo!Mvgr6xdkF`ah97@xR9ccq1M$*B6KHcFo2oO3v*u;|A}3JhAfp>}HH` z6X{si`fiker2Xp9s0YYF?$ovRqy0L#9<_bo@-H$Pba%e=cXWCB0uBgDx}kPAecNo z(!;nGlV_R4pTW2vWukwH`!2HrKcYV+uQoqF2ONQWW{K2;kIWn~di}~9AT!NQ`1$Sx zmWDs^f|!Kw01KyGBKH84!hbyf|G?asiffU-o!&T0l~N1f2Z#wOAMv6V$_ z-|Axw{ z)3u^L!(rH?p2~KmC7#}{)WiKc_-l+ZC0NOU>yc+2p7g+97md96$a9GMZ)O*lE8!k7 z?n`232Df=bdW%1B6xgAaTKV{`{%^{!KQ!hcudTZYs| zwGojp??J>*8)q`#3ti%U7)Kw*@oD6F2BR6G7BLH_H9vk(SYf-=9t6DFu7=0(VBCoib&M(0F-E9kjL-ul z#JiHpyOKstV>&gBnbb6<^A0K8q5DzK1NH-`=Rx~HOWQxiJ@fOP`FYR$)IBPCgQP+O z`Lvb6`xoT>^YQ-qc>hAwmV}@!30hgylPKy*5Wf$1G>dmMlXoU13_vq6#WN$&|{p6czR#<%|JB5Gkj;_4EwWuGg0^ssh$oAuP2v@(^Dy`Hu_jnC{B=_QUPJwRC-v{+sDJOI{=J6!_fAB} z{w8u>h4|Jr)Vz06^Ik*EdnYyT6RCNhNX>hVB{8jS#*H09&3i31?+w(v52en%Gbw`g z1V)VQq_*Aou-8z}-boGn@k%u8oz$>*Qo~+D4f}Y;haEz#dL!SNZ0gqY_*SHIhj<>} zifn4wJE&nFNsp*(>e)N!5tYriqJ!G@JZjrJ=n<7ooqHbNhYr3EWB5Ld;ro!y_o0lM z_py8*2Jn5T`$U(Ke%_c2W~vLrt_z|EHnUL^n_qZBr9nO-*zsHPM5q ziSDE(x`CSLPHLj7sfq5SCVB#+qjpjgT|-TD12xg(sEO{RCc1{2=yB9UH&7E@O-*zs zHPH>!LDy3UT|*soEp^bH)Irx%2R(stQERA!?xYU7CLSkS;-Vf$?QSatHOx<JAxi`Oq`sI=2za7*pSJI0soBHK)a^y;KEWk26FEX9z!a&>hr4=TQeemOAJ>>Y&F`2R)WL=o5TD^8Lsf zOC59?b!V}y+=`Y4nz!bU11Y~;{WVGunP^69D2LQjQ$^ft?+x7i5#D^$^6p_CCeQt7pj zOWn6a|1%%${B`s{3)9XYrJcW(5jG~#&L5?nzc=mtg|zcG)6O5JoqrVV{3gz+k9Pi1 z^l1n%!fBA64FTHuPo$l{fV&auXwR>sJ-?my{5sn6+iA~_(w<*LdwwzP`9-wn7t@{} zrLDe>w)!mE>g#B$&!Vk9O3Qqd7WgQ=&}yjP&!c|7hWh=9)bHm}vtL8aekUb>PI{z` zqOHD;dnD@Ue^5t_{{%)U?PRo#I_mv9=!Gzh+W#8*B53*|G|@}C5A6XpjK9&JehCr! zN~h3+t%eqYPTK#QX(urL3PqM}-z)28SeDmf7gr@#G@n3AD^c8D#HvV6v68cqas@*VmgJ-PPaT^{{l z^}(|a&Pw`?vp5efJUI8@f`eZN)_8Cx;0clrZPQBhWUiOjU>Gfl=DGtOfjeL&c@tl( zz2yVFz@MQZlC>!MDG*=(`>XkHAkvK9!o7!xu85ox2Lhw@CU!0&`Wef;3j9S`Wn<;MOG*Lz zy{RPu4Ha~EJ#4HiW*y9a;z|yF<+jxuHJxW^ z%5n;|U5p4tS36e&e#`k5AZoUJQa9iVX9Z%%f7kgg;3{X86`&jyKx^xe^G@eZ)N_}E zlV_x5Q0{Z?1Af1AKl1+^@#0OSc!~CoRU-QHGU}9g?uyoNTY3fx`UWVr?SQdZqn8J` zPUyuILX2yJGOh|@+>g_r>wy?o0x_-u%DDz8=Ncf!HGq$60Dljjo_kd~R6X(c? zkEfCQW0d$SDCNf}<>yn%_j4ajUrPBUl=7pL@*|Y;qm=TEH)tuP{9;P^C6w|@Ddm?? z$}gpqAElIEN-4jDQhtSkm5*Af@marSKr7a67&$L{29#@dU~#bH^ximvIkBe?AjE zd3UaMR^#l2WFJpCiKZ;R*Fz#?#gcY;geY4FlXiL7l&Ur5=^!O(n=*7SO3yJ$&p}Gh zWt5v^l$*;aHwP&<+mx7tl$ae#%rQ#L0X}mMW#wL!m1C5WV@XnSpCtJ>pV0~WQc8|d zO7`#wnDHqm+#EC>cj68JAKr zPN8I6O364%$+(n~ag>sA4khDUO2$!2#(9*9ODPlQP$n*=Oq@cQxRlaxl+tj7(r_uI zVdJk_N@+Nc(r^i-;T%fCd6b5ul!kLD4VO|H&Z9IOp)_1dX}E;aa1N#6QcA;7O2avn zhI1(m=TREYp&VR7IXFx?xP)?W9_8Rt%E2j=gG(s^ms0kPQufWG>>Hu%TT0nCO4&C; z**BL`Zz-kTJW9P;lzLMr^+qZ6=2Gg-rqo+XskfL?ZwjT}DCONK<=s5WyAevdC6shi zDCw3`#?7IOTS6JPlrnCFGH#SIZYgEl0hDn|DdR>d-9{p)6ZUSvE>3HcI(5 zoAPTf%CEgBH5O1_ETp`cN=dPhl42TV#7s(oy($0orsUU;l3xKOzXHm91(fy*Dea|G z+RLD{mriLfgVJ6hrM&{mc?Fd43Mt_gQo<{wgcqZP7o~(3ql8yZ2`@?sFGhK;fbv`c z<+%dNbG<0Z6;P5Zr3@FN#1^A`7NcaANy#k6{h2sp$a+;IGv!z9h|yGv+4Fv!H~GQA z{1_g4ERELhX>$I zt-`z6gp)N!_{QM5yb({<5AlR-z>{$|PHaF_QshJoQNHnt@1@OiI27MS8>Pk|RZgw2 zQQ~euIqAX1pGdY60ZDeVMmZ0fm_I&h!Tj-P@IhC9_jhs1^oH>o0Ifa}#pPV_LoH>P@Ifa}#g*>@{e7JxdIG-FipBy-! z95|O8IG>!h4|!~=@K^AnAij&Bk@qP%?@?JASNcon=(QDte?(Q*wOQ9%wfHs>YXvqM z^7kaj%G0GhR?vWII?nl0>LTJ7!78SF?SlK-?SQ59WvT}7Y5VP@HY4EbJ~h{tD8}0V zS3g!r{v83tGz`oLoDZI5TMd+EEu6qO7wd%cajv2R*%i+KxWrXfzOw|Ylqgmy*I?)D zb&ynxpdG&1>cjO(U+R4Oarbe5aE9Bg3Y>xXLu(+;J=|ms;hLlkYolLV?a;vf-a4LA z;wfC2oC+!NFV<<$qP}T;3Hx?;;6$mN*q=Lxy3uo;Pkh>%3yIEe{SRchu=O>(#U<9| zkip8Wn|%Fz{jHn9+XqIdZAx8dz;w{C~jG}c<@JKhI72Hvm9 z)<#G~r&#y#&HAZtns1u53G&Y@>t~R5zG`j3`*NxE4Bw9D_+C7Zcj0R5_mD|$u>OeW ze}(lb5X&cc(Xmwh1PGDN7SrXuDwH-Qj(SeBpheT`ukQM85DQ!BVeB*&7qI(Ec8< zy@%4mqZ72Soxsfh@Uv+9MZv?H@qH}(BF(T(GUI# zCh~+`EI~oOmU1C#os}{-%tqt_Y$iL*M^%C zIl`?847EPh{W?-ENu>5Pl1U>po;6QG+ouq7$Au#_T}G&(7U940vJ~?&rB zL!QMRZZPwfdGCyOkCL!=Q+B4jA^FoPBK}Aufu-E$Vs{A^$&VDL+>QU0hsExfRLN`p zQl3YjUP^ft)ZxG$Vl6HvzfvA`^FE%yK$U0LEt}%@kJuiT`xJFrf_Z(GUPZDJ{fm?n zLu-*5$tOLCuwTSF60JqXB`~B<#QmL~Iy3bY*1Qw7zne%+-JQVFc(+m)re2nc=NBb_ zMW(vgv_!sC@|?70)Y6`yrBxq_Mb1pnB6D2q85f(Ez|8+tyq&3&1W%ib@BL|b?o#hf z-INwieJu4!FK=W4uIEzb!xNV_L9oa!eD_B7qr~gLt`M4sd1XltcKzM`SLy*nNgbWQ zP~%njUW+WFu1_M2?3eTT-LU;XWIYCldL3 z8q)~JD)Iu#zRX&-0^7zK+!2zoifos$^8V6#7#EY8YA14em`icT#av}-8m_lCH77Ni z8Uxl(@+DzaOl?YSC7n-1qNXl)a6Izyu6oZOv2$2%KJw-f^PalvQT_)=vHCYb`iKS?b3EtzVKdnUp5N+t|ul;!}8crm)Usq%0%lI^tUeS}zgq zV?8A-TWUXo)=SjsfXkV4xzOz&F?G4rW~Y*pDycU6rlv6GGG4_sO#L47FJu1IOude& z*O77~Q?FxxwhG1iIr~s!e-G`}*jE5fAwI>v2{`<$0T;5=S7jY;eI^i=s0RVH(5(Zc zUrC&Owyv~q2K^gSo3&VQHI=E~#OhsHzq0=alxo&fOjytQ>xql~7tg%l*lj5-zQ(ez z8C=#xDiuBgXr1{_V(Md3r?rEW4XojI=3mUz#cX%6Is%2 zfjl`J4bkmlWC;IZaONCfpirzc;}p5xkK<$bb(ESyyqTr=CaPvb;Z^*}7QM*H>5vmyx{ggLe`9WgkH|Rm9uZ7Si>kjEu%<3Rr0H;LbnaC7|%SH z5>lIE*D_B#Yj~G*tnpFmVZw4!stgp0wUYQKw%#rj?D>`aqof8qi>c#HpGo0;SL4~A zOND~m+|3V6M%}S2z1i}EY<@=&gGXWa#&|%#|6l;yjRSVT3E(-ieDUA%%a2;*nhyP9 zr4G6eTCgmB^JVRR@LIzEC0v62!}0c@t-#r1*d5&t9aS))x$=Jo%~d#1ZWRaG10$_r zfiZzGR!d-9V7xUvFd;D6Y73kcmAUv(|M>+$ylDDt;4 z{{La*e8PIhdI1q5b2MTx$AWnfl@S<=dK#rT{xao^X$tJvp5N|p1 zfKLPV#|TzQyMSmHP$w7drTA9kuMQryWAWFH?*#l!fi_X{ zZ6|ykx~-}9Q-CAvt)#pqP%k39L{jyclBySyf;S2GQMA5cdn4{u&syJpc)!QtZ5$7t zHpaRVa>)N;cgKU)?cCS#6YT4F#ri3%gIlfNTd!N&tQTR)+GG70JGm>ZcM&C}K^3Vc zHAz*dDQc=3sZLRMs?o4&ZB#4Z!SJkF1FP0c>Jjy_9Z-+iA$z#mEjz01e%MQWK70@^ zu)l6kg+1#5`)v3P{MlZG)9A|VUm(gzy|!^`-03-)M`n*-Q}NSY>wP7S1XHW2~Xvrx>@t&chk_y z(;a^ooVuo*$_bV2Et^|56RUQyDK3^FSmQS2>qcXVaMygKdHFmnuZLPlV~IkymQok< z`cmPR?Ww1AZV9ioW|!ub80*qJj3p{(v}~?CO;U-?A~qMlE+n?NWpmYw39RxG7rQ)x z9XYjfspP9&i25F_wpun1dKcfFf;B}!yRmXbJax6uDsRL0uFAUs@5h%VDj#yO$ALX1 z`37bU%pVw$ngy%elfVWRe?F}8dC6C~6ScS{42|`@l&GchRTp#HsC>hv;acLg^w5{e zPZRmPHU^^a@!tD;z}#BmB`T4(ocRQ+5v+O+uyHQda9C_wmwdzBd>t;vS_Y@JY#y95 z5V@@~*u5 zb-1-uU536alDfS58g_!VPJR=+-o;ii&+X z7@Cy8(-`l;Z7$~ZWS4ItVOU&7n}MyF+cN_qpVlL(4@YITT7OUd2Qsov|_iGp88Vb=JVQU zaB0K4W4J1>7E@vlX#1HD*x=w{v1!Tqs<$QbRiEi%rj|9;Ym?^Wc}x}BwJx@?2h2-d z;HF;cVpkBmDp7NF*ZP*Z`MjD}x-`6p=(&_&Du0nij5Lu2swn|fKLP9oraY6t2HU`R zZNy%dRAO5bSbWsBcgbf)s4Hz3Yu=lj&y-D)4`Qgjc5oA5S1j6%*3Zr7VO1_|;o!># z&&01Kg9V%9V)KuPdHGtIZ}eem8SmE8y^W)n@Ot32=Fv`ZYo6|6UK{7QG_S-W(ryL3 zp7%qrbuPBt#a6kPNqrIda3=u;d(6dNaj^|9b}z9_hbi%-o9|f{V=ezWf39h-8Cz2) zwGb>wX%B<8Me@}?CbYV}L!Ke_ zf{Pg%awMhpKpXM|OFWy%H{=D>{PK{kL$(ds?)C`%Fn@ACYGZ5{*pR(~4cQNxouJiL z5ySoP^3?`=pyiMj?UK)wonO1K_TJh>wM%LRo9SZb^nlfpHXixBR6~=pO>T)+7xU^H z?b0smhDm)r^a%li2tkXp%a~&3B5y4s%7*yY)bNAMcga?528{cOBl9 zcfSs=mg`Z=a`xa>V5?kg9kC741~EKMwJ*BZCKr2>81D8Vsaip;fSi zN2_yFPa8U;ekOj+9V*y4F1F~1n3oUt9AzgQrWQOO@tV80ar6>i54_eq+QLN5LuVy0 z?>dG~acORec)kmfa*2%Y&>Qi++{IS7*kTu3>S8AKag?~5G{Nq7v8P;YwTss@RWF&P7sZ+HE^dh+&q!Cqvl zU(#QUhgu9xN}!H-EswdF*Ow>VvOV?m6}N=f+UqXO zE3w0+c^FGHgrN&|B$ZeOu{``L6s!qPO+%@RRk&ESiyb+&PVzOEqn5eD?gwnfx4mI( zoHl{9DWIL!FaxxFH{UE5yAaqV%=c)+;|&ivvcT zBkAR9E_U82}w=D*1M@SjSY?Sq`t*%&o6+Yl7Ak>x!|y9(vHY-Q)weX_Y=V;Tdh*#oli_l*ZKUiF{3I2J88X z8uxbX0mp#7Vky&_jk5ch4_H&sE#Y2y_v`R#X{ts4nxw9z`X+%klfMNU?P8}88{b1} zSDMK;-OaZM*b>L-H?_!s^*g_ZcN|@B^yVSCr`8=9nhIT8kO-*tax?-!k(Kd9+ zw~nbE?cPLcOI6cj!iSokB!;^c$NC)+bMrOtXFmHdwFKQ-y0>xk5?&A7)>=Fop22ue zaew1j%*DKXOl^7{DbI3D1$*1YUUacnT#Tv1@{sR<&;%RixL9EVYue#ry9I07cbF34 zM807eE@o<}M$PS{30CT26)sjstT~ad`H5jmhg~i-Vsl;WMi-kvY$Nh@r%Bnd-SP>| z%jaQJdZ@+Fq{L}%Ei+uq>&q;+Y)?JC&@JJ$c8N>#N-TD19>x;GR%0|)NGh@0h~0%> zcZ&=%?9*mz*dEdZdo_VI`#&Ex>>=iRsoC;M#A#CBqlsFEJ?>&|8^fM*Y0oEW>8UTn z-bmz2YUAAmZP?DP7=O7}WJ)wg@C0N@$`>tfG*4?jvw13O?urd}X>)qOywplJwT4(j zm-@VX9d16>$6w=I+C&%g`r_rAC#lS_fbdd`184E(Wx&>uw$jC(0JeoR!PdIiGsHG_ zNnPIq?LpEW?vl@xeHpY}&3gg6VlQ-~ZR?V6D^oq%_C#t+RZA^p!d7BwXxCuUO?u< zZuIH0s~Hfxn$@eat6BXqWR;}NvS-`K>*txH6XX+x-e<%J?>RRzy z09+z@gzmIR9;cQ*9&c;u`E%^~9QJ$;dp?KtU&69;*!mn^#T;J69F6_^Y7YB$iPUC) ziS5o|4@*feC8d;sGq&oWjMyr{tvjWxb(7Q&h-0B8N>n8S-9!eH{w5;Xu)=}zF z(zmkzTUi^uyc{3tt2i2~I6kW+RX@NwS8;?_NgwP|jZw8zII3$os%tr_YgyY`j^tX7 zqA ziSGrVj8$7aRi2+)*w!tim`FnD#nSVF^NEb2ZB7@VX^drITe4*RZ zl<&wSKJAlCs+3ie*pml%N7nF;4CNge$~!WYH4o+Zleeg$9G{_VYbeXo2U}gs+J^G( z45hE>^Wtl2bB4u9De`p9C;TdN(z7@2<2qF6);2SS(qh~%beq&~eM9<;RLS!`^Sm$K ze!yQNlsxZCouDueYj~gcWgqD`*k42H{b)@*crk9)N2D*ccL~n?AF-9C%=r_^2`^dX zRO2}U*El;QtLT}>zTTqJ>Me~YY*?sOt!m+eclsK zmFH&V+%g2Jb*zqw&9`M=svP%RqUQwcW_~;!)l&dhg?1lY9CN zc`xjkl*J4#PXZ-Xq{`jDgZGr4*w$sd@0XE&E9twW2HTNRfan7t?vxFeH{vp4<4IY} zJ{a#}jkpKBKtR_r;z?b!Xc!{T1vGJfy1tn+wMj%RAfKvF_Xy@2=yq+ftjo|HPB zvij+QTT7&MYl+kk9M@4h%@O_oh-p2c~O;W9G9La5x zAKu{dbdjGkcB@jqWj*HU`Yo^hx2*rSY(0gP6pm*K+e%^n6qCyFN#V$(uv7|rn90;k z;svB!Xj*H*EWE7?juTghiD`RtpS<@4EMK3mLZi}}2p`K+JvfcgVl z$!ELbldRM@rk=>Fo6Op{QnQ|x`mLw=c0A2{@wC(rio6}Gq!jYVJMy%_r8amm3w)YA z{~75&V_W1u_U)uBQRQg&Qo(IL4|YWAM>Gd{-cIFJoXVb@EOb4C^pp8?ooaCQ{8YB` zmVs>dE%x~>_Vz74Id4gR>n#Q8T21DNO_o%|vJnn5nQcwxSWRZlleO^7$?WrFsWToM zVzP{b-B#i&k6Gen{&(wuN>zn8ApqX%9mh?HS(7?W8W*z` zjT(1y%v#!c!swW_?4&6ja^8TcPgxm=zFcjMfY#m^IjH#rbB_t@EtQtZ#vf-UUDR$E`nDZ&)AV($iJ38pQm{S{na< zO}xBD+=>#Miq>XLw7zW3gU9@})+(Hlw#oVp{NvxWb}KpMppQuVY|p{znx#0!y4^a_ znqi%9U2a`x-GZnSKSPX(KZ37(gh&#ZDy9a*|35Tx+8CU*Flyw~n6+xu6u>7>7&$Fw z?dv>oLQGXmoG?13PMdOKXG|@fiahF}sZ&mfsdw2@4q|HLSY=i%&gGtDong(lzHY6C zH~&L8k>Mr8q28l3PF*X3TA-gvGmS3~3ZLsmY{5N|*nf~nTo)&fK$ z__lSc^%HBe^)#Xoyl3rG0hOovDy%W?SY zAlA@w&fNF~8Ps91=RaOgPFMP>5$NC@4=PRr`aH__y ztmkoh#!l-q6;Zuar5dK1&pK<~!oZAU0ne_z=|AO-aD`p)7IA_6GX9rdv3y8ruE3odE!1))SAJ{POSilR; zo)@@xp1@6nn+YEye3I~4!WRi&A$*Wi@G*f4X3Y;~ zTyPBFh0^EzV*xJ$mkSmj6L{|YIl=Oajs-mb>+S-#A=dMO6!QbCU}^TmJ^&NFBGo%AmK@m ziy`p}t%Ps@VJ|{zwB>v~q|#;pxk~U-NZix?TQgT@jmz4YwK2!W-`zQ{0-@`mS)&pRz|Y2KW?g@7ybw)X1RYh150dtKUVS+9)+`wFKPjV+o}bYszt zrMH$fp?+y2XxUDOU2Ol;-fw?qAFvN>HpQ2>#yr8^f&Y(eI?>XeN$hhm*{Wlr5Y9xeVx8u-+-7= z-$pE{n-ELtX8j$#Qh!&kLR6{M`VsxBqxQS6?x*|f3Oztq>Vdkd%XQQtW>q61RSnb4 zx49pQ=yOU((YM<7zr$T+PsDd;wQ1*L(Hn zzT!LdI(?_UOaD->*FVx5^pEx3`X_p$zDM7y@6-3|2lRvbr+SnA8Deey9MQHgLi!2a zV83Q>)xXy-=s)Ne^&j<1`cL|0{b&7({)>K9zoxh9zv|cZ-}D>$O}$OOrQg=?=y&yd zdb@sK@6aFUo%-*3m;O-i)*tCT`eVIUf1>y4f9Oy3KlOh7nLeNoIylhWu^sI=j?eKU zu2;|rIbkQoi8!eag8DicPNtKENMAWlu9N5Va`K%5C+hTe3Y{XS*y-cMoD!$hDRau5 zzD_@XRe3lhB13SL1}NZ{fV}JAHTI zT$by6*ZXe3ITUh|(K4J&bQ8{}xLHnEk+Z;Y68QZ%uk}ISPkozwKl43=b5{2IKJy*$ z9rRm%<+uIX@A!TG27im%ya;}Q{uAH@`R>@g@>K2^P_e-@}PP10G%6UoZHs^Wgd3A@J ztD@G)xhm>ToDUsTclpA;u=)|sOvzLme7U|nb&s5Rr0(-YeNlD4ugF)V9+1^$R%xOFb&5sHk7c=|yS_&QCdB{R(F!&s2}esc`B^Id4ck<@>7d ztLk@hqL6yl@As#x=j0S#^=E&7e}DA~PExBCy^-CKm0rVf46=9 z-TwV{C=dt)?Hoj*oNeb}CN?vW3Oxv&{9Jp1jd-T^Rra;^GJB=H#$Ic$w>RP}$A|4L z_7nCq_6zpQIB|WOz1`kr@5QOKHs+=@oui{V1};0-}vnlA@;G3M)s^QdZZuUc^$;CSC8oESCTHxp+<&G#+DxqFMiDXs@U zSOwm(4jkfMaDmM@mHA1WsQjYu72oT=w|zT&dwidQ8~FVZf0jSrUyPHKD{(GzgMT=9 zz&QUzoSifc++hyh{RRF@arV(w{%ifq{44!y{A+P~@J9cG;00U!PvDf`7jUn(`nUPF z`*->G`u8I?Y!Eyl2k(Cj?|N0BHqeZitz!|TbxPng+__nJ?=K8o61Y6DIIuKuV_-#K zbzp5^ePCnY!N9|TErBNj&jelwyd2mX*cR9x*cI3t*dMfm!C+c2Cm0RJg8hP3!P;O` zur)Y3I6gQfcv^5qa8__`a6$0W;1$6egSQ4Z1|JPR8{8V)89We53l)dTLzSVLP(x^V zs3SBkG%+-_N7}T|jL^)`oY36R{Lq5XC85hgSA-Uat_>{Z=X=JM0~ zaJG-`qXq!R5JA+|<w(ZK+TgZB z0f#~dXzP*C?Af{=`Z`1kg;vehO$t$IHS}eG&8h{kMGXfWju_6i9-&$RTU8rin`#Ga zS0e#CR0rTFH41Pv;=|i|j2Z(tR*eOmtd0Yms>T7Htd0jfMU4mivN{3qR5bzcG}Q_C zB{dOnnmQ5ibTtWZx|$65WiMMXhLEKSWZ-iyk*7rz!Uwtq3F4_7%H4pH9h1pj>fK#Gu z{h+!4@TclRz)k9_fIm|U03X7RKwJM@PLRU9b}`^)bqU}v)c*iJsxAfmrTQA+7Kvx7 zAH#V}w*Ixc9Pn}Vb->@KD*&HR-vInSwFvM@btT|$)ndS>)Hea2R#yQ&qpk-0omv9; ztojz{WpOux|nU)LxDLhG1F8yJxQfOtHTY7_n~!OtpUi zm}cJwm~P(=m|?F4%(U+S%(B-3X4`iH=Gb=u=E6dQcMrB4ynFVK0Q2n)fCcuC0i&?Z z;N7!-0$3=Ke|3?44`4C&#Nyqv?*ok4_XC#L4*-_i4`PY-SM|0YiYTzV^cc`iuzw0T z!QKSeY5xpxqWuuyiT2L{C&9Xe_X74HTg#3+Tc3mz5o~9+mS=IX{V1-ugU|N&aKZte zYI_Ud_w8R<+Mb|qwI9Q;AK1SJybV?+gKOzxRGi zv>3S*OAY#xmLivH8FGb|BUkEL3?>41`Pns>PvUSkF_n0!m zr_5HHW7Etfv)7apK5e$yhBn;>W}jJ0_>9?Z8`%siX1}Q*eAeu+xvbP`4w!X>&zZMv zW1DG1bI`0OeBSJ24XIUog9D6Psm?sWQ}xDKhUOmzjScmzzV#73MwUN<$r( zRptotE%QEdwKu0NqPu$}*-zCYNZ!*oQjPoL7KgDM@V&jjyzKdPs^@6^+= z!dPK&2A_uWgR|aK>^bjO^gLdq8wMBf8J!ng^!`IHId8N49e$D7C`vClF1h%!Y%3jX zSKC!O;*YYA+#1=)O6MpoN@IPqym^dWPD|br|9pf5?o4=ZhpTi<#5AOy^5Bf(al&}5 z(KZ=wc_(#?IRd_Cx!T&*Ln*3jA~8_jmY| z1jCat{PR1Ta5&G{P-A2QemNIwTj#A(Z}Fv7@Tt5+xw>*Cym_Le@jJCjxs$Rx1TkZ$ zHv-&BQ8W`CDDBapuG8d$Y*!mWGjzqYAkXRZn{w2l_8Qtf)Wt!|_~qUAAx~4Pm}P_~&ff87lz`_l3aBMUK_ZPFZ}kkqx3uB(^3&EXqor)%Rz< z98nJEXvoR5n_M_~r)GrGqda7TsJYLRc-N?fPicwFj`CeP&!}nnBk?xp+IplnU>Dw$ zQY7mXhTQeH&eZ5g&eGXi=Th^7+`B{r-Mi2RYEMLik>^u#FmB1=#&A{ih|e+LiX2b) z5`GWrD?pm3QQ<(9_tR}l+m7p~RtQ=!NY6@91#wXC4iL4gYSdH^N z{R^&b%=|JcR>*EHjkzQnuk;N}4*R-XcInOweG7KwZP?+p^Zu*5C7fUO9#ZF(|J zX+r~6G?_K)Wiy3%V?LRKDAvsu)j7s9&%3$L%_gmU3%Onl!|(IB znNDoeWW2ZVChb=8i}}zRf2BCYfwSuS#QT7|HjcQ*+nM=Hp1aDOicGP8qGIh_H>Kyf zKIhswX1Afc)U~cp3DzYw<+pe_cV#JI)r*%oeuc$9xr=A+zdYXeW^pUS74ftRtE?{x zS5;9T)lX4vh>Mlox(DrcA6o4JwApviV&6r3J%rYJ7;W`^wA5p0rzg-#Poj;UMhiWQ z_IbV*L^~}7i%$#F!;G+Qm02GwNUWez`JY5!FzZV{O%+U-W#m!O3XiwjQ6bt8y|23(D67QaBY12rOP;he9*h! zhOdJ2Obcg(GsD-e8!>+)d^21UF2zg5G7zE_;mU9o82W0kqT;Y5EDg)Ta!{j+a9#MB zEAZEWXiS6Alu|L*%BT;RsneGtKN|)PTMJG&Y%Ms6UhzQdeXmQRBHOty|wU1S7TZJJ3XnUA5H%s>q+To%tx8Lj)RF01rzTXj6xeO z2o_&o-$HM_6U4APJi_g@at9CFzP6w3U&9;xo18%#aKv`Cum<(PoY69!j_r3KUtrz_ zXAUwP&KzVqtvjgaaOR+a!w{aX{Q96f&_?(j0-vIkbf;z1VXUHU>f26R*PTeGlk&Szq+2ma4=2kSP{cE! zhvz^IFMt+)6kNn=k!;uohS=d5Y~>>C+0w8%%fK!y6N|Tt>)~@|1i_zAaD7cVwh|SH36T zmr?Qq`Jwzsek{*OfsB?hGFA#@oQ#)eWrF-fCdwq~j<29GI#vsH9LWB&Isvba6Lk_8 z|4;R2`g46=UjXg@rT$7^}D>@Yh;8lJpIZdZy>pN3l(^)!O=jdEm zf%*D7{k<;GKfn+CQ5Wi;^v`%CT7*ZUzvy4_t@k>d!D4+w-_#|#REu<(F4q;hQdhwv ztkyMJ%x_;yVHC=BtybtdT@SagQ8(#k-J)Az8MgnQF})7P^g!%#&h&7SH9dX>Z+b1x zbZUYxoo1$+nPvuD=`7Ed&NcHAOzDEFGo*GGqxMcl^2b3W#w8GmejbbH@3Dx{9*Y?7 zv51#E7O~J{5yc*VDDlX{Mvpmc@|eR;k2&o1n8U#v%rg#8@{E%ljse5y*v98!8w=$H z&o;s}!ZyM+!ZuFv4C5=FVVoLs4C6G!7D_X zM}h*61hMa9=jV3zhgdD#jGyIa{2V{y-|T1n7JkOhPbpdJAPdHBh&yU!(LYPxEcy*C Y&wjxIYSgi5V0jtfb(vstSv)iNC-}#2u>b%7 literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Montserrat/Montserrat-ExtraLightItalic.ttf b/ui/src/assets/fonts/Montserrat/Montserrat-ExtraLightItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f3c1559ec7f7353d50be555554bd1715170d1115 GIT binary patch literal 246176 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%0D|W)+vwP!2wVCWFPkoZt_Q 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

pQ9pV_Wo(eYaP&1a~#B8z|n;+Zi{ z>pQ#FukVun=z{2LWu+Snf-48|gP|n{dVBXr!eyP&E7r6vTfKT&+Ztsb5&cMV{t{~? ziHR5rpLi$y^c3(@cDNp}`nhO_v%RGHf7JmeNuc282yX1>=dqt*oZ2rL`&lfKJ?X-o zf^eV-A#ar~&F{l>JSWYQTqCRaRD3S5{k9nUN7L_4!Im(x$=HaR=$tt6f8!sCn|v;gW*4 zK4jm%&#!6u_uf0^w1h5i9v@N=zAn(SNOCl>*MwZ~kT4)YUZi0P~p{=A0r;9S2WM)w= z6LzPW%j_{9cY@bw0|LoR0bRgXBw)(#^0hP5+*x1cNxL|I)D5irQ7f2EfC zb7o7=Y4L6Cm(T-f`AgOV2F90746h#;WNQJ#u(bxDv2A@rV{_ly5=`q)oG(0q|3aP+ zElJjag4!=2_sn;rzyw0zg0gw1(H9&T8n<~YdCiV}3QF9w95V5N}qR?dKWo7fs}A?@ns3dn?3wru5&@u9D*>YTOoM zKA)Rt#%onH?mKE6@qPRh69oS?c6U0}578|F$Px7l6!w|94PlTzNx|Rg+O&)y-N5k} zcP9C9uV6!YD8DLLI<{rqkBf%0Dl260;va{$)2^d$(aJPaV>YQV`Am+1|5LU0Z}8Jk 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 H&y4;71utqP literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Montserrat/Montserrat-SemiBoldItalic.ttf b/ui/src/assets/fonts/Montserrat/Montserrat-SemiBoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..336c56ec0cf2e118410440df4f81bde7fc464b1d GIT binary patch literal 249192 zcmbTf37lM2l|TOOebrUfYr1-=PFGj2Rn_~F-n+AOSCUTeOZIdpB%OUvNCHU+kc2cK z5W*_538Nr5jv^xBf`g7aisI;~d6h7O#ME3*}m(@j$?O^eLSMcv@T6cdu7+DtIJvz7W}6s zL;LajU+g`$@5osA&g(UqU#4l9NA~Tw>KNeJ7_SX~d-okav-hiC{^8Y{CW4yyuQ&Ja z*|9roX6rqg`1NZ1zGFWCo{uc}ImUYqKZo}px%!$lvn@~J_qS?VN&Vp~ckNhS|Ec$D z;zt;N!NMaut~uuYdDc$+yb$nLf?SDbg@;#4`VKu z%j5Fo__9+n3+i&q_3{Y*I4}NoDV8FhKNfrPn0(=KU%y;*`J3qVMRfB5di7{&T3xg{ zRk)-WP7y9F+@4f$>h*flylFn4FWa5Aur5;W35nL+P`Z@<*n9WfF1~!> z=?lvSKL7aR)VuJCw%FIS*;&=Ueom{vu441c_#X`XD$l6=oOZwPc!uPE zVJCbamExKEpJ}c8s4hMwg7^>aYqnj!V2u&-1gI~J^>%#@zEz(@7kzflJSODlL~6o3 zQq6gAn?KEIGxoOQ#Oc%GphFzq9Ea;8`is^W!zO+7Yqi(3Y#V)^c@5K|9hiqYwjSlr zlJqz@e~(z_zv(}jGlvO%Onb#ShgXa_FlFAH(_&2iP*fyPv%*2mI0bs*6u{1$G5XRy z5fe`91SgxE#$1qu1M5tDp3_$>{ACXKJ1lsw13qoRyG{6P&@pa_D`?~JA1i!taJu}W z_I}O#Q7NB!zl|!cY6~MHIfj108nd0o#HsxfWX3YAb%Bfc z)1=4a-m1CXD@JgJ^{puo4=eT2>}<%m-0a*OADS+}S*HJGq!rZ(Pr3T1lg@RyN92Zd z`N6PQ=Z}53Qrzyp{O7XRDuEqM3-1G;t?q++Ez4Lsf`vCELc!b zT2NA4w7|b0zp6a!O)IF={P}tAPwS3^t*khN( z$|I-yx?}%Z_5AS0Gv2A*-tSfahnN~{KMdiwW_0=1g5P|8N%vSRd+Fkas;`22TG#CB z@_*%vT0m=#Hu}@kbSVmiF6FQ$gf@*C4Kg98NzM-GklDa2jD#ywFez7MWqVskM{A3} zz*8BjaJ%#K{H-mW1#WjpgdSRZ_>1Sa+#cSxaTPII_?#iXz z6KhxBwsva&nzh|sv$JXzOu=%Z9Hiw}h?nNTTP%2xXI-Hw{9>#?;R9~<6Y??$%uHVQ>AgosZ(cvSD^^DH z$9O3};Q3c${E+qs9gK_lx1`*~>&w6ojeORt(+D1wg5f+*{Ve8>b~tk_^1bLS6;kn2 zv$IOBX!Ew6ZRa&|Tl5)_PpCd;#~tu86OK7B1xh4I6fi-TB(Lzo|Xs#09?U;g7IG3!?+ z59dzNNj}GPTEt^F$crW&9PqYz;4LN`GA!N?@yos3-+b+w&2}JuE9(v#zsfT#KcKX= zzLT|)Ftjzaw$esg4WzVvq<}G!tw;HlBs~t!-y<0GIo3wbIZWv7tc`4QP})fCj859f z*f> zNe3xaOQnNEHYzJMJw&IdypB}a(;YMF1bydd>`ypBO780}NX=q8rM_&b>0%h;x^&HT z4js#Bs85J~mrG1T$_lm8243og>+v0NB0guan zC%z@eV}IdQnf(Oi=Xn>P<`Zvv)1+>irI6 zs(?(ri#SE?j$XmCt|}Uar7tv>*y~P_v@;}{q0X@$hm50r!N09~d9Ge@>B5rO{Yz#p z&2)={-RwZr#J(qAi2b)H#q3%^itCxD)~1nEuYhHG9V{uF)9cuhf>f#F@hh~oOt(^4 z#fBcyE0~@N-ZBro*@Qy}&^pY10t8p<6Ph~(aZH{jPTDdI zp8f`~$vSI|F492_DWnEl0&KLE+$ppN;&ckM=MZr%46i6@`Hp>Xjf^?H!i&NyC_cK->R!WhGX{+VrT51&GS>sBOc@tTjZ099*{3IVuhyQL4vE9 z$R@y3w8E$#5I!ez8%P1+jL3nGmD7>;lz)8YlsM{-W#h~|i?!hdzwX-2JszQvwEc3E zNqO1CGhjHl`D+&ZYWd%ofr7i`PtBR}3`}@X-eKV{GW!=E_j=)-{iPwrerf7E=w_O| z**0Ldo$b``)m;WWB>q5i!^!G%EmVEajyu|wsdlq5oN-7qYR7VGxwvokuf~{vwMkBp z9DCOotxIci9~XR|I0FHV z^lFZeSXbyF{6DuE*%nOJ9x}jV}6Y17q6=EUQZ#ZS)rYw@wEMVt+^M5 zRAxB59HpIzkCn7m@D>veZc|cO!A)(Z@JX8~c#Vl~NpS@a5S-SDeWZT;T4%H^KYM{L z^;DcxFV3w#Y|xrmm4rL{d}FM({F>jF7YVaPp=U{`d{aDIWVn#qzjv@}S8yP2X}E1^ zX6%2NCZ#(;lQY|oHP(bC3yV9W;@_D%1rUtP@tv+c%vCf?a1~L9x$4&@S2N*`E#=!@s}^Pk&q95}vj!;SsN_N6KFMg4hV&24KY5AYv`Ez!m&_9k9WgZw71 zhinWxylozMvkiWRJpt;6e2d>1zQqTUN4h|PcH0OP2gJyrsJ+LwBs~u5^Y=(|{t0O9 zoWq2EUGhkm+6DG4oGr${YV$<8j5cKTDT?*jDA2~5R>30<_{-L;`VGpA>lv(R5no#}PJ$qrKRZabW9If9e7Xr4WT!)#G_ z2ZtqTGiY*UVjEb>U9&-*WLAk*uPuu%E?9t&U^axW9Ci!1V33aIFh1n-ZuZ5GFTW?0@6TRV&{99qn)k>_?EK}&<6BK~+&%kgeGinTNy8O- zH_JN(H}@jsVK~|2b{g{@D%v~t&_>6xznk_M#vH0VW}E&*+RH?V5SJom8%v5L+b_hO zZ-55P(Sq9IXeaFrN431t3Tvf$U^uW-j=)xKE_|C{ZjnC^O>!#B;h3k{16<~z4JQh|MKJ8Z$iZI_z@NVQZd6Lu~P9fjvJES1$#h#9kWYE zlyXtD0W5_1xwJjRJBWa@*iezm3{A_(%gD{i25y=!q8NySl_8kNZ>qwuHUe_t2_3pG4f|IawcqxwrDdV+6ZmyuDyt7 zV+tvlLVWP7EKSSuXXWSR06oL!i&$}OHzL@ut30jo@!Kw9{0}dLbD4d2aR1ogySm;j z4_>)@^1`Y!@`bgw8FbC=evVt0H5kQ2tY9uu|ic8xhPelt`OSg4Cv2EsFB{0|AzdOIRBDVh+ z>;q*abOZ}mhr{<~zvqk+mwP{aGA~#tJjzhO88YZbo^qB}Kyi17`xJqrpMoQwBKBaW zMs&xBAuK>fV1d7?+*h7UaZ(8Pf>0F`jq(9*Bgot;zj1iS*^5_+4_DuKNo1eD{nv_c z;-=e+e)4rN$d$W4s&)>imw4tIEU7;TZl=@uUeiW(z!6DS@YrA2x3AC?e$a#`^wVR) z;Zx8GP5gifXMB>#s-IpH4qw8KUq*0vnzQizu7{+oBmP(q<421kyd6D5IeS5n~gZl!(?xvz}es*rSziZXr zF33hTYo_kAG&NB7C{aggD~45(_YP1M|9k_3fmaXCLBCM zdu8GWO*ri#M>`ZXYAkrW13zGgTli$pVq8#>+kqk>^!Edd6V@({JW~LxDlaVb6flR> z{TYZjr9*MLhKuHcT>!(*q9!G%B0!!?P_Q#)T1!bmu#>zW7a|92ZdD{faJk|>5|E~% zsTDclaJb5y7C_L|GPq!3v8e?X^Hg=xpKu# zGJf2;;tMsaXVxtd-TfD;W#j#s+Xe;>FI$kgub^*nV{`h_Zx_56J1ia%wUKhjj&}GH z6q_v6%Cu;7nO{gfAKn~AUm$#ii)5}oP07VUl~<%J9%dT|Aa_?5C@l`6>B3NcrINqO z_hE(9S*{!)PZbVHPDf`s!Q}nkM3VLg^CYt70&vH!MPr-D7uhD8E4GchJ}uVPR!=u z3<5!(5Pa)~SNw8q!7C?cJ3MH@A+hZ6fB~<9WU|A{2#(cFVjptRf4){8Euqz6VW>#i z9?z8KYk9emd?kipl2K5TGo&3xeDhcLcqe8iJgZ06@9~e{u)6f=JJN1AR$eP^kDade z_YdqmC~l2i`S80z2Of*p_+?&WgZw0~F%jN254>d_c=J5)9tWJVJZjvC1#joIoA7`I z2Tg4AtaHH0LsI=Lv%#-tzW{LTZ=wEUjcNrD;a0T*yz=X<9;+0FAc+bJBw)7dR$q{< z+!ru;ZV8yL1CuONnoS&&XPX4moOc|P=br?Vq7%+O+mp=GNuxzJTI6!fR?(=}0ViKY z!Mp8nSEe=MxcrXx0BG1R|0tT2M1KHB1a%jm5>0egm}i5$Z(*$^+LW7)tWO4e9U3WB z-Euk*6N25wX{E3hjs!yNQwrUk)Xi`(ww}AX<;B%&;ts~nBQ_?7mb&t9O}Wb}4Buk3 zJ^R`nPL8*@ohnGMVyq}#{y=esSwUi)2b0>mhpB9~WFJE9!Wd|xs;K@ruYO$%q0xqO z?51;^0@Z;aG7Jlqt569Xx90XCknFD$0!ayk9ou3nZ+P+@XT>B1|M2h2G63o#|Lvk2 zV1|ZlP`Vez0#sAxf)(zFC?c4dgODP})zF{n61}>fi`{X1f9#dpueh*El%B!A+`G6u zi@$#(^Dh5V7GjM&3Ulwzlq}Hqu`Ec0H#^{Th82Fq0jE=-;B^Ft#r2<%+JD3<(zViP zFcp#6xnXsLV$HBR#Y9^RI$OoZzHs}c-#sGMe)8f?Kfe!g^nVcU*qh?8SpDZe6X%Vi z*FU3IuNI6Jy1{NBGetQdG*zfR$45c(h$qxZ6mAtaFS^kD$qN@n-mSm?{a?iwV;>Y7 zNh5GSy!w~XkmSHAUVS3G*#W23EBuH9PBBykuQB1!0yIw(9*`%K_Fre>)4DiPq54_o zfYYf}@NNg3I9I{j2@a~ihJIecxT!>S(%?pV7r!&gOu#aV>H=wmPEp=jE=4*x8%4jrAxV)*t?ULA9?D>rdb)|?KHLo{iD^)mQuU#(pc3`-N+^DN8 zTv*`u=6myU!(I|N-YGc{y*4CS(qOr9=WBKhs7pRgwwR;+USA>C|509PzaAb zOUv~6^1U8abp_jv?2}xWM7f=YBk1wS4R?FTE`(z53g580Px%vp)>Hfe`bMJVA@MdTEOiw&RdIQuJwY z&>;?Qj>Gj`9Mx8144d@P@0}-3J|A^#J<7i(>2YxW9+@^jvDRtMVM5oh>(M;kV{@9MVV+z_>TEF;UC6P$!d#LRi0y?S zy70dYPeLsz$qOU82Wj!8h}e)9`%sm*1I28Wv45|enJ9k#UU_T&}SQrcRhM2_B~N?VD|=4j#o$LS!DA$ZqWOfqF7?ePxzd3ouIhcsuM(99PQ}$ zyX7mOC;wi)X4UAOrj=^N@Sr~o4yn>sMOTDHiYo%K7=S65jR=bmesRh$;c<+UD)*)# zxFf0%RMYiJuH38AD(fPl^03E45h-$PAh;=}LfL()0i`%}hZ%@gHKJmAXIIB2P~{)`VM&?1zhv}iI2tnghcJ65- zJGY;uPP~TBto$p+X|#_NFh;WVDE~c4kAwRBJ-#lVr|ew9947Q7^HlyR>Okrwv>1~w zvDAsrI$rsgNYS1+1+X4S9qxv*g~1*6HOyLNd=$V{VJozE7Bp(;}lokm~nI9t^?U8xW($xfG9 zYOS(8f6rk%wApgX#_Jm1;@s_7wy7dd<$i{`-3dpKq>JJV*suo0+lk_!1nH^AL5Xat z{>sFHv#0{hS~R6IQG2B8yxMYhFHsm&;q&FVJxE!4s1o0dlzA#cB3P0sn*6bEb<9k) ziK@kiBa6GH<@yI!qKHv^T4WRj_SIrk%J8}{YN@t6nx5lBCJib76gjNoeB~5OHwMKV zIkQ?mf_R_tp8`st)QLm(HluJ6WTm7yUnEjlfeSz$GErd=61{D;@0DiN03;s@Acqfn z26kO>*J@NiZo7*rAXiM@GJJ4n{kn3LKt3F57`kQiX{!Ws-R1*`$bqW74*fi+T91i( zxCTSH<>LL>`Vt-W?lEx@O`GrIbqNjehH4mzlOz49#wp$ofH8~ff ziO)Q(WdQY)hm+M$^4%^Mw0F9On_XNt$wlI2Y?ZU)Q!eN{SQV7eHSjm#|KJK1%yMyL z=Y_o3b$K&8Z^#oj=gT#*z@bCpSt>%!P4BiGs~`PigziR}D`ourFG>w_|E={;rwbr60a?_l-N0tMq^G9o0RWT@5QA7jh z6*i*lBF<=)w(%2@Qb`#|B{Ka~shcwG^|=F-{hsv|3h59Cd~Q@*%=M|C(hA)YEITC!yGRBT#2wXkT(;;GHCY5BtHx~9%W z``GTCZRa&rh(V@7K)=&mt9%7(^=qRa&qI*jTxu?MK%eFkI3;sI4 z%1T$R+`c1rM7}USspfodN-fJu(v-Sbr5BqvynKbv9m63@K9dyQV#1Nvpfy%dAwTv% zXu@$OUg0yO;58;3XUL8pAUN^GY^Q>2`=eQ9Lb?zl)+wc?8~j1xDc3ZlwaW!6={j^J ztR2cS)ex7IL9VjXl!6FLN(z*H0?Jf03%C_pxi7aWQpN5A(~(^U$XzARY+Pf~bX9QX z@Y3DE(cER#Ej?L-$>{q}myTCOwiJ~t>k|j;gywV5>6)avL#7Ya9fHoFQ=jW6imu4> z*y&Mb(uwIuXIs&)o#{k1JZHG_fU>!$AFU{L<46NXN2l5j(1>%>5jk2=QE0Bx*msUB;mX6IRi)RIiMr=cq@KIk|HyGwSrGf- z`t!qFfH<(j_s~B;=aCITxxswYoOMS#av)yW8TE7yE-~lozQa|LN&B@_~I<4}Peo9=t_&+CPr@WogCHK$h2&A`y@S&4d7(XmrLZb0uaV zDytwZ)VP#3y>8>t(=*pxyRD-4pC-4ww?}4mWM2M=T%X>xr>dr|hE9>$bA{LhCZ{N+2KJGj+0}D2Ml-vILHn! zBRE#Q3A>U52~5%lN+2$MIM2doNZXDhMC&h#7MM`{%;kRDH6bd6C4Kyn{0bjQA5`J8 zA)1g{)N>#>*WYyb9Lu1g{G&p!z! z$sbx_9J8HPItSBEqeV7ar%T;AG_}c()x+nMGs7arvJ{X7RP;nMLNKpkv=k zbmTWI{zB}J`ocb>BTCB|UMrWUIL%xieAoD=Dh!%^pVQJ2`WOdsXz|>d70nxL5Y9oz9y=dUM-@mm2Eo>rWi03XAu~)&>g}cYj>G zC$_$1VR!fXE5s8-6P_h=-YHB3UV?rr(<%|(?10l*QTP!DoFXU+UPo|HVG+CyAE;2K zbwpb;p}{?n{BG9Z@I@ppq3;J4{=bV|t}+him1$)}jgW_3EFy&A0+})f>d7o$=+u3? zOFnh)$G5N8aO2iv`KfEqAH5;9Zl>Nd+Q0UAUIWOG`R<2y?cT6sfBjk#I^X+YWkKJn z?K^);tLNGA>aSC)m#7L#0&jM}Y4r*};((KHpx`wYyq#BX!UOvElJ;L`;e%R~!87_< z=77`bQ2lp1;KZ*A-cE4X`hS6L`*%>?N4$qTGJBgS=7ZMXir5C5M4Z(_;2CZlvUxtA z*AqnH5aOm3`snNob+&d=Uhjo(AIblhFN!DqNbUXPbpBVLj~(~RsNDCheP1}T;Ya&E z$(3F_9@Ft=gO13{!Cy;+w@|*$f)l+IevJu-Hlul)@PNDx{UL5P`-Z$n1`*9E(HqQI-&zlRBA$Gc^^>^ZDSdm-vbo`Z2d`#AT?E$yA0$RHmR)#;Z0FnwIw* zJe}UZf5oAmiQ6{Z(6Qjzb&G~qw$mTdfBDtUo~}cKQ+KW2FcBMX-LklMfd2qbDjK{3 z+FWEBOF6^5ln76=!}ZMueh4``;6v&S$w#zzKvwJGnRlpIP6eob4@Ky?XUfz86SCm# zdKyg96ZT0zVD)5lJw;&t&6x=T(-=6nB|$r9hu( zSzdTJsInY+rV+m@aQ;rD<0T}So&qsJze$a^vVJoKp+UVyyuy_R-GqAej8v4_wYFL{0#y{>DBvK6KR@jD zly_8yv#kXRS5x)= zCBr9rVqe&tgNm4u-q^wM4ELR_-OVi`yKZG~=cY)crFGBRRpXmed|9;(MgHmHl8MTi zu7iW`=v%sMW$cl~OM*4wvM@MO?dUJD(@*fpl=5$YrqX*->V*(U{9;J_OY&uCuu|)4*S#82bkIySEm`%w%j-AD3T6`UGUpRKG>minX?fTYVC=S7O5sMYy1nvi&WyJG|gr-U&6KO3BKZ!|62G7Aj0AU)1}0sLgf0J8;n77xChq2_-z|{w+6a@w7zM0WgGn=U%nh*b71qGt7~gS@#S+i zw!q4R$eceQe~et$BJD^tKU7g(43j8`N~U~d6?_6LfiM}JjS_GX)no5tRzVP~Z-nAu z@e6%H2wGfZko!zT`>zosLuL7*a8pgFwh|Y0koT}vY8#BDPwP@}Bz9iER!;{qy{k`0C+?U$_Kw(>rhK9Wl3AojZY&N! z9xp!B4@2_ok$3bhS-R3X!6bJ-ZphtfK%Fl$snZmpCHy{^rO)!-@#*= z{aLc!n3shMOARMJNq=w1SM??}ca3TtfWuZ@p|*wZ&MMtOX6+Vit&&*njyVL3Ihg$? z&f$EL{s;B9>i-RSP#>5xrwRERZB4?Q)>w0TLvGY}&1o|xuhni(Xmh)*jh#MzlRh&3 zqL$jXpPPFNtI(j~9Gt&eIFO)8=u9*tD-t}y=K=ecWRLK2N|LtF1bVaCzbAh_9Qk_- zr(j;3uUI&~d2q({L&iL*qQc+@c~*NMfsRyqZml6no5A_o@OdUa4k9zvs0~L4)OmJ^ z97Hludo5kVsMXeln{F4Pa9!sz3ND`DgvYo1|08DZMiQMZ~c+QrVe;w z8G8qeGD~eIp7=FIZJFgG0|9?UNqSvtYfm_ox%wJ9{>N{29RFa^ri}dRkqUnSUz-gt z4=g@7Fh>@QO58;^WI<*U8kf$#iKlUj#RBnhybtC793G(fs3t!p{feHmPt0~m%67_> z8;D2v=LpG0`Wd|Am0kE-X!ZEx*YdZJi94ccxx$^2Cp0$|MX=dMCN@*7kJEYDR=V~C z#~Y78z}AiyX)y8KT8eugr2?J5or@8T$?B9@edKh~igf{uS ziWcM)i4>HONVgfjqB~s#bUA^rMg7pX6|m{`X%9UeGBV=D0$I+-FKppa3nL6shTlT- zx}kY(O`sWAHxphoY@v9N0R(023dBT%{gGdcBvNs0aZR`aQx8^#!=Y4qaE9ZFW-iNF zE|M6Tcz8?6;};*@y1aDXl8sj^NEzI>>d3P3+c);^4){K^u4#Bh`}(Gl6?klR$vbZu z+E!FPIv(ih*u8S?E#pm1ld;21>)N`P_L0~F4#t~7mINCBD9Xmf% z->@#WWUyhPxud6HqNQUQonSDQJOXPdUt9h0T;!rDXHAEfveU4w&Fu6DXQwH~M!#{v zpq}#^mA6KE4{tE#^Xm}tyftO_aBy37xK6GEo+W1&yAG||oZWTyzO!ws4$0uQO$)1H z-xra*{2gOsv0uYg`r8tc>*nk##P=~-ly1plw(^i)F|54e**cy-V?Z*Ms(7PnsecN* zqFQ>z%i1?#AEM_=y@ivKx(Ja2mHYP9(8G_@VZoic>vkQAjlKIpiMPF{1}T?}u6I z4|&x3VPT6GtQFMQW~A9h-okMyHKTkR{196X3ckUF<6K`cXB_0zMY*E8{JAyWX-RTH zwO_B=&;E|y8=KQ!_pB0cTJ3J(xRh$Q&S*C_+bNcCyFVEF`+3^mS%Rlxe>13#4AmOY zT3qQR1a=zdh{H&b5%}*6Ej>3xce&g~euJ)MhHh$VE3OUKq#ZeXr1I&PO1I|MG{}m} zKl>NRPU`zS(@c%IM(~)-$4`O>)3u&Y(BosA)};gLgBryFrARhJ9EZONMllW>Z0ZxX z*U3-?L1!@1DlWco&t1oYIDL~M@et4(c#=;J?)HE$lAIi5tZ7aa z0vI@RL1cP>YRuJ-xjJ7;vt~GFE}r;Y4xViimDXJRzy7t+qiDoPx>l{kQaT1=v4mrV zmu(1#L=k?PdM;po|mv*V6-WopFP-(jvtRex!; zHz9Fh_UA_Z!OzKdQ@f!5i0ph+T$L3W6<4I>92HlqR8bX6bgH;oWv{pzv3{v4u24l& z;mZl{ZBp|MrI=_Wg^a4Rw>WYsiK38pJG9JfJVb-=?;rB9c+kR(u#}X|@WhRSr!> zd7l4Ynu-dn9GdFj>5Rc+&{P{2R@*g|f5~#=%$%gtOEp~J5Gmim5@s!=!Y7dRdfYSl zZ7qslxo^gw2x$+Q+U+V^E3eV280YHq}QjHbhQmPs&wrdTYh1R+ows^sv7 zsS~DDu08d%POB9B{>+XNn2)E0e0H{`@gVU6wRhBU{DyZ%e_J}nb(dJBR`Ba zQeD+iMH@tQ>@+KL&8;g%fIl;p`vc0F~xRcw!U3t&2SHt8?(_#Uv2f=Z>)P9`DLn+Ry3-hA(h_ZVg zQBs?-rok{@Mn6ECw-I2!3DIJ?7vLi@{X{1ZG8 zLWsZ2My%*kFSAjW1Maevd`dZ!?ffll@8V)|5b-h_-U(4Jv+;v7mP=7UQHf*^v&o0L zTiU^|H_h`UpX>_@pU$%CXPw+_!SA%4p%nYRP`=aHmjVYI_M!pz z+2LdvGdzUIlW~R&UP1uU!Ao;72c4Kkl!|flk97wUFJM=9(x-)pRz_UG5bwA zOXrTn<$#H4$^m2VU`av_xV+er3KSA|YVTD6fCWL}_GEdWB)kGg6d|B&>nAxJM4oxb z2o;3Pupoa0MAdGOjHIVJ^2pH!6N_$mnn<{AVg9ERANM_LYeS*h&f1RVrch0&IzL<) zM#6x;9TJZxQhY$wj#*Ixj)Iw?L@O=B1ynAtnM!D{J<&UQqO|tf!Qm6V6PG53uPm)O z)o+U{#x`19VPzP)T3fr+aqnzx=`u16v8QYYUe3Ng+k;Flz8j>KYKK+Xj!NPxn%e4c zR>j{48YP2lfa`FSKubvLPD4bPIDbb%mZAz|SU6%OMnblCTcG3YJyel1Hz8YJ8~eTd zepio!*AYunYf{To*-4lCEoOp!4iM zpKV>WWA3`@YGZ%UKY)msV_}rN>fu@r+N<+we~g4G-C{$X6|$?Sv!WjiMz?LB%DAfv zsu8SXfb`LvGAdf811E8r^CnIcgO&H(b9T|H9jc6KIkM`XviK9hlj_$xRUK7R!$x}{ zmEj+V&w?W}vqCan>S&S$Tge}M&>@TpJuaw_;e z46UOT!DfDAs}nx#)B0nvH>7`+X{CEu8?~S(@&y*MmMVrx zkYa;-6`Z|GnsbFz_;&B|vo?Ic(GU5Qc6`gH1Oa}`+D`RTVDwMEq#d7qNqP%p_6_km z#;wxu=A9o>uYjKCf$+1vc?UXR3APFZ+`Wm^&3W@qJ$a|T&;ufo{810yh3>kpqOE*) z`_g5to!vw2w_nw{zr3-0UG0)(?Ok1iZI`b0loxJa7%VSc=+8(m>~2}NqcDGaeqOjZ zP=KGi7H!-{dImFXv5O#Gk;=Y1ltk5><`&+Mn&fgfXhrMpp&U}Do*GjZTjCjL4lWhH3@&UUCGoU{<0Y6*u?jsWeaoGd85PG!GV zhC;~w7%#{{_$v*Fk5$Q49Rp`4!mIMis@hhqUEbB1KXOG!OLYB$J!f|n{=>uB2I)Tdjr06^DoURp^yQ;C8-(xVCl*k5#uaC(Xc%v& zdO}~9y;Y_D*6~&AU9CvCEj(Lzci!C}%l0hIzoKk(r9bcgc3*q#ZjyrwG1CuVrWJA! z*Ka(YP2!ugdyH7s9y*r5q1F6}VsALHghSahs`H4);OlXUXuXU9X<95BSen-3wAkT6 z6HcS*Q)Z9uH^ncsQ`Dn;=9Kd8>LEYvEd#10vRdN~cp1S#@#Q!#cOdF(zgI(?p366A z*dtT-YE*W_gi;w17(i@S#5ZsCse3h?yi0noM&5ALkL`=7D?XfqUkG`yFud#(7+LS zOe=Ff0eLRzd^8Imv}I3E%|G7;|Al>qbwR$2Z0f@LS+hZNkg?sge(7yrF|9?9C< z=kp6|KJoU>d67rs96!@G@5inA>9~1j(uH`4JW;jI0tcKtQ3dze;X3&}YMgO`<9zg^ zmYAX%c+`M8F8oCLka3{EzY1CU8Co8d(Z5XsS)inzk_{WHR6~t;*dF_rAwP( z$6SvQ6JN4pS%WixjY)XPE>~V3`{;%1uA731boo^znXeLe(8+?N)xW{{l&Zv+?5val zdP{i8PN&E5@L7&r{Ts3GUN`uyGdoZ8{q)elkEm~PEOs~gKP_&fe~Aui3_2kPj1%$( z(7z_@Dxx zMTMVlhf}uC=*Q=P)7ez`nFI$l|9~AT!?=z&@04Pk|INGX*h8W^FV?z1?2G*>Pkcsv zIrix839*Yb8~0err~HgTsZL%AjTE-Qy)q6jT`n9rMCV3*q<3 zkpbN$Zkz{eD(cI~$OvQ<^2-nWNFFW>LD$nGc`0~_B>qwWe=$qcUHHls;;ZyZ-uJFQ zaQ3lfIc*DT!cD11&mQ$%y+OW$XYz(Fzxq;k_7(YcwK8=1zc%bPqM;vyeM_}BGs*+a z%7ed&nV}8{mI=I20?!NHTTX=3tE@=G(_oUGFh{!SlQ8B4#-4lA=VNr!CjoOTd7rj*d+qD9!98)f zp3XT4weDea-FRVaZZ;#?x@|pSHH)k{nmr9B>50}oI0th=&(!AL^!XV3fX>;C$#*Bo zX2fSl*$mshayEnc0J77Bw}U^(2V}U~#Uy;AS@<+(ij*t-d^?=&4FxZ7z)5y0xR2mQ zl$yq^)w;}Ecm);0P4OUiel8M#c$q;`EQRmd;5YR6QQ~im(^`feA#-*^4ynjN)kvzx zi$^~AfL2opRoFyvxo~s|4~IArZ7S-otJAc)uDZ^aMVMJlPGxndIt>>`adZ>I;GNFM z=vy4*lK%0cf=~&6m*h}w*4rFuZ=Mw%->@{l@hy(Gxl3$wDe9)%sZRHz460|?;cSa3 z{7l{rbua1#>_#2x*_Meab%QBT9g?n;rV5m@H43kumLfH8HquG7CFV|No-+K~!uzqjelnO)bcs1R-C*6amH&Uk4+_)}PHG*4H*j9ensv5ytHDY6OT-sfQ zIg)|fQ1MpLZmR)=nAJDZ%<=!8r!A@=i(6ak>ou))S?kiSj{27RW)P^B?n;HKGI6__ zLIoarI)ZLXaj2YK*QA%Fa9ft%oUmV%>Uf8UZAcsK+q|@6)6C$Biv9<798njg7S~Ue zh3KMGWA%Z>W7FxP%RSi5m!$4!?OxO(gV$Z1n>N0vsdLkCYm0GDDznbGCsl>l1&6y^ zIumb6y+9T8@*%7iMe%wjxW{=*%DnqRUvZjrv4WRW9@#-#QPgN8ILWJ6u?Sx^rr}fwEwsKeN2PZ52+&()iVtv&UbtF0VYE zUKE6~tFNx9gR(Pku)H)9S9MrTHEwX6hi6~qaqF*YwL;2wr_ehBnpItA-r%V6(A|wM z69yQEF}|!kb$UsaZ))&wC~tU)wWW1~!+_gvaHOcnEA#aBqj1vx4jgY%9ODKD^#iM-SZ?Pr&HfT^Pw))|V@yxd{@#$kq8k?6 zAKl=<+{sGO7ry-s4r2}hV-9BjiE}uYr2oOU?EejUfNpRk%xMDh_N{JkY|wYjX)^}< z{B3V=81(U*^qF%zALR9Ke}jY97H=~+UmL?}q4Qjc8^lA= z{@NNk&oEVVjb7i%M@j>iIB>Xy+(o%5ye0)NiH|oM9M$@0Rh6byHB{B3i%29?Q|YA# zl$0JZ?{GMtz_eZANOIuw0{14|-$;J=a~4eWJMM2-f*`(|xW8fSLS_;Q2XKF*kM3{C z$K+n=|D5Cg29`{L?EgXxJBQxLq|3G06vxJ^Q52xo5uAt2+lsRf>q|=YMrMxYLwP!0 zL*n8QIAq z>+(z91zk`$;B@N$J5-xW?=pj^y? zkY8lJ+9*{tyb!q&T9pYemW9m8UEpv#JZQqv&wV=OM$iwQ5PlQ)Xq>qbe3R7CGN4+{ z{t_H)@3D;FpeyAWo~8(vc0{HBsKQiwV54$Pf$>B9?Up=x7_MT39|W?;a1=iiUoTX)eikO9HoNR-WcahQhaJR_t(lX2lM-XI7r($N={PTfrQ+ zT~XSYk3FMd@5i3Wc$y;vYCg^k24z+hJTbEpLJkQzn$GQ9p5{o0T8}-m@-#<@72KX#d73jT1g9E5&=;~dS!Sgo zPH|wA;P#?hX%e^cPnbv8-&bSUb1YA@U$5Zy9Lv+3V^L$zpJVBS_w-4etFV^v!dQjv zg)y8AEP+0qgu?u{dSMKzl{`JRWN<+APj(hu+SjwWAhNq-_Yrs3>5i2BM}u9bI#OEO z7x!g#Ac6ATGuPHv)>iM|R8%4&v7h<_)3=GL*iVDG%}oQtq7>&q&5+K=FVy)!l#I?t zBHZJEQ?`Kd-ETVJ@qRRdL$bIK1LwS!wlkWw0JZC06evKj@WTgm5i`g_1i~6GJ8UN_ z#;PLV_dx@Qj`JI2CK_bPGt5IX%b;^Vm{1fyb8)UDVsn)pR0fWLr0Eg)L!Jr}AX+e*qu*5oao-c(#J(qeDq`5T)@$NoZ; zQ7fXA{z_5IIN6DCQ$i>>QH=2|N#KH4tTKM8pMd^vO!>rqOi93SmIMmllmrT&Vu1>7 zo)876Jc@!d_acw-XSmSx%JMufkFhEFcfLH9f9Iy0$FEljmUoWjJb2p3v0S?1y4@4^ zTycuCEHqv{OVrm4dM%@M@;qv7aIcKRBb;Sne0Wd>9Q2}jS4h>5%Chix16?=cZblJ( zuf9+S55A&>Ab@)->>xa&1_0mwtg>Do#w_pv3)M*Af@8wd!^Ry4bvwBn1&OYp{hH&c z%O__};lqRfQ_r^@6Yh|VUw#%JBm5!Xc&x{&@pigaA-;j}LgJ_5^St^#9a0lqM8AIz zEPM5PUA!*vMJ~XL0ay1Uo;TWk)M$tM5jaovv-iovXji2zjdml$f@(Nqm*`0CL#_yM z7i|}ZK(uJ?%rsrq|&f z=$g#TPE=xk2`d^xM$Dt7X?4-+RGu^WFAxs6ovZ7OeAA~%!_(#7G%ppeWV^i!>&in_ z_>vMH(692yq4UMD-%Z>iuDQOn{hileFPFw1`^|5_L)7Ge94x3cd>$Dl?JZIumv--4A&FtGrwR@8EJve{gpxX8N(K)l3kTLBV=WMQtQ*FO~ zaZZad*x}DQTRaZ{5E}x45&Y`oQc9$YQd?P}g5gWZVv!#QR zhV)6ZZ&+W+IDJSb`KZo9K~jtnjteOa-&_n-q1fkFqW=@iYCgkI3TEHwW=qG~_tO1L zWAu!q80+Cln;4lUhFYVN6#A{8&H^o0>x(WYd6%k*J?Z$dup~?;IC-TX(fJ#r{@&N5_gS`pV`-kCnVvEbOkC+A5d!FK->n z{q((!wcW9EjkRSZ_hZ_4qy2Sx48CSSLxnJvLKdW>K6oKKJft8DdukC=lq-ar`HeDs z?i`;nNx{70H{}pPs)UAA7AR$Bet$#%<|p=#ohsSlA6(S8r(^T@*67&OBWcTyk8FQ* zs%_Cod3f1@-c=JT$96)u(L8Rzdy5r#v4^QC?}1+8m`)X+F~&G&!|*1-2=ZFE55#7Q z)teG%8I1Q0>B4Z@F{1}aaoZTjY-4zmi~)M-W#&9#fjH(#5lig)d$H?jh(uIIL*($% z&Nhya1I+u~Bt|pRbA9P~8F`guDPDhFF3PHDU$Mgx;~ViI{l5R5ykX^*Cl1AaBNh(q z@7%QR3{KzT!-KmXT(@`e-e})Q>>kh!xeNImNe#U$4=>qxj(sPFEE8oEVjvq?4Ll#_ z(=w*47caIs^x)sq2V@hi38P>sB%72)Qh^(pc6gZyM~O?!98(MFzoMI*ptv_h=dlfW z4*sLrtwPV~T2mBu53CiOYI7U$kPb?s^^UQO5 zLVPq&omQMxlLG5_HV6gtzVGH)paNCtVl@jJMw(29!FpX+eR$_$fXh~yeK42p;L*&! z3|qn25epOZ@yzWDRQWw=IT}r)YzyWC%ptvmHK;LjvOkmtMc%93F?#&9EVUBn=r<+l zdvN}~F`Fw%gC@*oLjEsnP}^*j24#9~Aq|?)g1lkUptcrDgU;Cjzey8Qix?QtplS!8 zL5)31z$mpaVkSm>pNUG$$3$1+W9(6q9nt2tBt9h_t44>8O~xUsNXHr&1<5f;#~K*E zq!{b;dld%ueVj08-%;uFSts2-tE3{IpCl~?=WjuLYNJ7k-eb{VfON1iyG-ZoAla%Q zqi=$)Sg4h0Z~eXaMe(~}&Dv-oM0#OaVQH`kO$+FI@vPC5#N*4Wo$>F*^XK9zj3K^s zcE!ercCJ0MJVX5FhT%n5gqCi9XYP*t*gvfqmaBS>5AS$ns^{2HxJ|BHT~;!=CRQ-A zJiU7mUhM0$f030~VSrvOM@WG_O)b@TM-b?RY7_W=l5PqZL&;&DzMN2`Dg~lNcnopO zg_i140`4U6i`oS*j806MYsTymH(0hV&1_Ud|OC6R*BIZFFhR=Em}}sf9(& z4Lxh_U>}!e)5>z8SII!xZMp=r!@NvcB`1aSDTGh`#59^ws+~8izvXwI#BNTdKHDjo5d)!dMKMI zfG66iz{0wP=+N%s2dA6rk1yYJzHiHu2iII1zM^Ptb00nrwYI%cgnm<2-g69_v$?rx zw7eWDzHc?xv6F_MVcojIkc;;w(eQQ*uY5ZU&s+?=t3a!+&@l>5co1);&*#r#8PJ7=0>RYW= z(JihUx!A?xgHXYH-Bckc=_hfOvmn+ z>KUEvAM-6gx4ik!hi~XPuP?ZG@#5v<(e3SnYs8A!^Ru!)_L8}Vdu?l2>s*7E z#+o@8Zmj;84a09@*tMHDO&%ms4wPD*6ypc_2Ni}^r7)PLuWDZ)?VT#ieazgAY!U4)W01zASe3D&PTPF7IW3`?!~xcrYQFhNG0y1u=IEXcP7G+A zg^(HWT;M@*mK&9D=9l-(FYaNlaVBv2Ov+}GkvaJK9?&y$!)|aNeSFW#7`b_ePj2n0 zm~8AD%Z{E~UU=V`L+5+WrA4${nCwVM5U=iK1`{Rx>lJ7rc$ z%*1Gk??70qTIXyD{q(Kb*Wp)^FAJL&S5#5NK)26uY$ScdjhCd#DwVs11>t2LrueuS?+x@$0{O*MmDs&K^J4E?V9#I%6;WYW=$q zdix9fanOJ~-w*PryLnVE-sp5nlMv)Ijaq>kTP3GYGWED6;F96&ABZ2|=M=3l3O^fe z6p?8g$OM&$XrK;L0*Mc}0r#EThDU~CV3%0!USl7Az;jR$xCF_fFk}!GV1=$Q-13&$ z8w^=~1Icp2!IEfv#$kQ3&D!PPn{dQ))@xs$eZpw_gxMBn$KE!8d2^qTXrD3LLJ#kh zx&a?|;Fl@<*`I-iRzEn;A#v60bH-TD(O8hepqm~x zLaCr4uG{!0TvGr)Og{gA5R8)ja*XDrlZ7K@R9Mixwtk60PwszGz1@b>>~ z`0R-TKON=)>3+}B*xlk7(~5fKUA&4pNzTAhgTDEiAT|#jVt34k41)kg;#E? z9u2H4Z;sTbe-jh|SwNA$UOVm2-&k1HBsMuHgD(`F=6&E*fr~z4a*<=sWeyvF-XoY*+in z@fGw(8VvaDk8JKaKD7PO&4+pp^sHRNf6$)uJb2H~8hic#OOLn@n~0Gn-wwl*3`4JA zKNzDxTMiQjPS=pWCV7+^^JbrP;X5Utnnpg12Bz+IQMc<%3``FIeOz7d{ zQEG!q6x+bWOlGWsTZzPz~R!V-FR#7C9q= zH<=6%RrPtT)ndSE@d>s{j9s-^B}`|wvuR}{VL<03e4&}Mv;2EC7J2DBe|YH*zA$+F z$MSm`z14&FntaGI8}Bs*@s8dg-W#O*?_!vLLWLC}#NTV8qhP$(1b^Mt?Yx zH&PP&sC9UpQFKLN6qp#!y=RL} zVfd0`aI6FvIPv3zK_}kiUDX$HqJwuS9^-5=n7jq^SCD0BDe6^G)4y;5g8kVrq~78! zs73l{S(&DlHI&s?MUW^c3DtXGyBgolOuPltVSe^A;W4ORoL|{@-J0=9>*7me-S&gv z91&+11Wkt4U7Ge~FRw73gQ{FnlzU+tSSJ>YGYqW8AJ2XnmGvi$bxY3)^57NJl7AHh zWnQ|6chf2T-p~83b|Uj_cVg`C+=)l5oiJPUC+>uF?p<6`nJp|y<=k!BJ1{=kWj@pZ zERN#-rV)+yqQ26I7Nz3o;N1nBcm$;RLo!75epD&H0N3cfeAO4O{M=L%q zo@-`C-(DtCNo$I;r8a_QFfgNM4`1KaDR=#tv{ZyDpRL5)QwGFY&5 zkg-DQN_Xu=sWm2$Lht62yTU_fWocTLKPx{khdzGp^F^$@l^X+6Y{NGC4^OSa=(z|C zWFF2LU($*3#oxBB!}!y3*^1a#F@d^oV$sl9=lDDoVRvw!V3 zgt*HLV=bbZhRSehF;#L@N5~CyStYAhK#L6($m7;9Nnop9Rl3{qT7v5q4IZxAe^Qw( zE3TPXP*oUv!7yBw?`{wK^CyandwLe!xJ#KZYi^&;$@P7AwK_uwdu%&KlxvPQ;@%Fv zijBMmEW;Fh%Fl}J!KJ07Use{8t_m!a>j4WvRTPA(m}*G)xy?!q{WO@X9$Du$qbIDs=S0 zRcB$(?z-yoqM~g2aq-4QBqM32-AtVi8I&Jp z%3F~(#wgMs0~LS)Ei?pHCM`68e1Gy7zxlF}#7Q*AP_Y*^hL?JPvORgN>-d-(IT=I9}O+IT13Y>yEnIH zr0>dUt}6?tbv=>suGsTp{PmKev11?zEDTL{;)Hs%qUb^rB%EDldlcFU+9=yanF0!Dx0kSAWxdtuu-@tuA9V)Qz`*}ej|EjV|qzhXocUNIsVjKRB47!)^db#j_k2fm>> za37Eo#j=iV^#*W-9Ue5{G-r-ta*yyZj2KF8FM@T?u@ZVpD;+hTa%7Q^$l7=9DOqM@28`Efi` zP}!KN4Wpf@#u#kx&+xt_u2C~vS~6N;kdLLPke?J|R({vQDAcznq0_8MNytFP0Dmcp zI`YFthJFZKVfAUXAm0%4w#z==gJgZHl_c-`bvdgWE3*3bznr%nG$DBV#pTHjW4s~Viop7E$>*S%v%;33nbL9!tGj;?kRy$$O za4EheUry0x%%IIsB5joShh-yQE1!jANqhwf0)~w?{Hb0+f{7^vJy|5=v$1>5-ZHaY zWKt*-i<=gYp{LETOkP7z85%Nz>0XosA;ge^hup|~2EEAyL~rIRNEDVue~6G8uOPh^ z`}(bI-@A4A`u3llYW*2UN%8s-y5B1vj_neUl62xRn8W@*-rfT~uIkDIe)r9cM#U;4 zX-2(F)2Q3(-5T{SSys0!%d#y?wrsgqB+C_33^oQ+ouz~pLJI^)vR;x6!6YFG$&#=R zkPRu24W!aGo5WAw|J?iDXe5md`}=+0$8JWR_wKxR@44rmd&>Wu`*R_kbd)veO@W0i zj8|wua)Unu2!8b$9y%|42E5MRZ-K5x)sldcgZ+`@jt_t*n#M|bfu51_YDqLk3Mkms zYDv5Ay>8<9J6Y5n*Nr}Y3mnexyz&YPI!0W$Kn&={Gmqk#{!+X<2FF5UgKnl&cx@)& z%cekp(`e@vk@8qi>Y>y-4sU+r=qs;$m+e;mml;7J{uEB3UkVB#Z*V?^7Pc^6p#@Qh zKLe6geTIiZ;u+*s7A+L5g=ZbRA{zNw;7OW^NIqlg8c3cGhZE0>ao$%J3H&ldZ1hcQMxLn1^vo`GjI$q)NRq|-SYKyMLFm40Ezj(MEF zU3>PN-$uNB@v|GR{A{8uA<`H0rUSk5iAd)(I7*201;1#!>N^f-{l`fCebU4;LbNdY zYN3nb{&+#PW{qmP`YZVQuS7NN+4HIPxQ}NyUisOe+8x~2KfgB}z`puKq;skr-`_XL3Zk%8hd^h;z7QM{gxv3!J0!u{XUX?b#j)C!S3j z6@NA~Dc_tuqNZ$?2dIOx0p>Tp?!daYI+0tZ== zzfm&!ZVhFfoCRo5Ke@XpUyw3QR}__%1j z>HUS2!gfo$|~NC`Y8{(m+_YB+JI~gg>6<04oa13+-@h%TTFqxjf28t z0_GtcfffVm+>lpHZx|zr5%`w~MYW<*bfglcO0Ep2!|I@nV2Ojvk&GnHJx3xi9fi%k zteR7tY-?09u(xKo?umH3sIs=UU@Rpu<5I@Idi7)P58Wp)Vh3G(i@8EO@5_FIkS~1kZ?bRaCXNxwk7XCh3#Lqp0 zqlWwW+q7rRQJvG$>sdx0&-zsUfFzL~J;vV9Of6_{(8XQ>H5`f+UaUQn?+xPZ+Oy}s z{jiT`H(ur0pUM*? zZ4u?OMJdTawS~!Niw=rw@%~X8J~@X@&ZAi&Tkl(IC zf=rnBguGU8dfl&Zxf~U?hqVduM5W;sg58WWgi7+YZ73bo_F*5 zaaOA9DayxLsTN0qcMHmn;te=dIYlN%D=^A7WPzd@9P&R!eQi%PeIZJ@wBN6yr(=Kh zJecyz`lcLaSALO{2Ke~8Ih=CMN++#qJ_f=m>m8~jzV%8tWwnLB{8=rGi(4pvh-K`>u-aky<#FdSt7;yLRGyCyEcb!hf`{ZZ>y^8 zs~-%joT-fY(p2wE1+viy@4ILD+Wgiw_<+BA_y)O}V?${SKl2*H%K2kZNBsk@7M(s@ zT<~gP(OP)+B~Cf=loRDZsTICj$niSheW`^6yf3xjG|jpK-d6%5k>*+af_5^4XI8v> zBWdsQ?17>;w3CV6n6JnGi<=d3~ z>U?~c@1dgi-ShiKEr90rrc528N+bxfOlc8>avRHEg6pKcGRTh1U3?+cMy=?L4x#VE@N9Z zD)|D_OK%k1Rlzx9F?ZQ!AM!?+>MICgivB=z*ZmUmAXVyl-kGGH8yZItCz=8S>+?7I zp^7WcX~#TBaETzWD{7{$Bh&hfw@PJA=L zr*8k4v1z8+P?%HN8QM7AWXM}u(i75j=)i$s>*~VdzQ~l(Qn_xR8%Kyf##Tp#W@c75 zC{MA~F`*e5?kWX#*K)ffBP~6h<_Pg-J}R5uO>{QK>dLgy$~!UID5>Q+suoA*UejQa zIssU09|vekLnP$*NX@h@5>Mh>6Xa~F*Tta@QIZ9tH1o=7*r?$US~M^@V3R*E<%XjC z%D&L*Lpu)ySqJmvx($O#smi~z`ly)P+{R|*YjSx>vW@o|Tz-g4fNDOAGEi>wy^)wL zWUiAXCR+F}Zh6gSIK(_Mh(ug}G ziOG6|15iE_DvU}zs+FaO%Merp$Q3(<3T5DCZ5-Khvd$o*`W(Nn0UdBxE6HLtMYtRQ zlEa?kl=KRf@`4i@<8W?~1IPUfqIaxax+1nNsTj+m)KHl3R_U9(I-ls9kgj}uU^p>$ zl`A8kSr^lJ_96Y2IT~RtJR@j?c%nB2lIPKm^gTiK;Q6$J97~%$%P}b?@J+hgWli)W zm^Cj$2#t?U#gTM9oQLoasVyqi6{)9coNZ~pKA+v2u|!E{mx3~et#$|J zQ|-w%eH*3}8OHvNOM_03TX_F zY)QkQlLSo@3x6&DCyBl&ac>9zARdhrXi@XIKE6R zKBf4w+9F1`Fpk4pXq1Fz#9MI9=t>b?>aXXSo?oc_o)<;C(zCA|UlzYmN91|-)#A(I z7bJr~1Fv6PIlfH4;PGXZCX3_C)Z$L=X%KW>9AD-wxRxYZERHXWXPo!+>oelZoTuaG z@j;^Qgcl#cN2~UCaYR?VOQiwkZgE6cv>-2rpweeYbZe0_ArV(fsJVt(+YkdrKY$2z z@-c3n^R*BA97MNCHV0}z*?4_zQ9R5wZ;8(pBIN(lOO5e2&m72YoEqI{Y?x`$Z?0$x zB^76575*Yr`}m>VRaGMcQBJl(c{n1nzp{aKDG$bkbuX`HJ)jit8|T@rV)g6X3-p17 zEsR%aLFnM`#wWzY&50NI6l-7)Cu zyzCm^zvnW)-a9{GrEPSgk~EGm-EcE+BcKG)}N+|<+` zW=QVK9T+#-57`Yxd61M&5N*q`nYQ8Tmd?1uWD=N9eAOJ6liSep9O%XS$?3IIm6j(K z&}(4}BhCw7pkdKixsAo20Xe3&@X$*(QEouBUc)L+!XU-sRCsL!7PJ$6wG$ZZ-EZ^8E&VnbP4 z$sT48!_%AyO{B){j$=A~ER%Ic*fGeBmL&s@JQ($7eqdfdX+1`*AEuLY#?^C~T}df+ zD}J1SqX*0ZOVodal9?P3piRu*(EUE#(@L-{g$`todhI%e#rAl&y+Ee|ORc!A9Efp6kFVVDs&C#vZ| zHCphb6D6a9>zwi*8e)zJv4mOxgAX%8CyD^aph}VOYEoGn0X+Y@Y_%wBZLe+F(SGZw z@-l1c8m_AQYNmW);_;z@<}D=~YAcpz{epBupz-Cmd2f>OGJ$qHhwoY@s7$%CyoevX zQod+WY^Wiw^_-@k{YUVn1?H2wR%o7lK=Cu)rTod0hJYf;`pTbB?lauSpJ2w_(WiE@0-Bgm%Sy(z~5&Wae0ObOtM0cDK5IGb>$LwQi z5a0>Z9c~I2?31S>Z*>H-fBncPd+VB0M>Z;sYvc<`DEsT>TJ{$uOw6M$Lx)T`{b|mn zyHPDioi|)3?iJTFThhkd>s5v#1Vv2SFFwqiZ3CwFF6gddu=4$Etyw}gq=(K7HXuB-&bW$ z@FZURU(eil_WH7;r;e7*F#TDa`G(WqluLLrF`!C)GpF*cocdYvd9gZ>tsROtMo7av zhVd-CAq{a~C7%eL7f(iH6sW969*$lQc?1&@feliHK-4(zJGe%-=VBSbctL~|VRuk} zxfzM|A0lf?Qz7d3hMqdSSNR}4rDdcsJ|k&KXj*w*e4TvZa;@C{{C&@M1n$t69^Jug zDlfjkDRZR^a1V*_S}g-yeJ%53fWL6+nnC4frS}a@o!a~jwwYeVUR6%8;|hedvXuQq zqg4vtg?*MwoC?sW1Y9Xg#|_#nIdR{}X9?Ta5TUWX-w*TyW{F&&j6^p6r*obwKH;48~P%duvLtO-(5Jpx(=n^B=F6q1KS&aNi(pu0=7zSZdScKiqd(O{d z^DAB0gHzjCtycW7i}WK3iXpl(q3{7HCv`>2Yr>HS|KY`w;MBzroS>$4%pHwSAg5V@rrzhM5q$npeoMReT zlm+bh**(fnp1u9(`**X3hvf_Jzpp&4+=jzP#u%BcQa7GXT1%w57n5gBhwC~v&iy%< zPrf+uiIjX;c%HSVns>rNp@Q1-o2L%vukYJ?$e4LJ!*F7F*v*%N!M0&_bjn*li!p6Z zXO*1aXE&lI0*%P-PR6^~N+FUcheW1g6}0oye>`p}_I-#$Yeb&>@OZ)ggv(EzI^VBA{OxYM1GR$j6zuEpR?<^((uSV_d2b9GF*X(nbtFi>;B$UV4iBV<;(z*zQ~#X8 zf?{kBKBPT-P4Nfwhm*XUo#0Qm>5+{E9^8x5@_dekI0$PO+pfncJ~tLClGGsG#aPaK zns^}T6LlzeYXiYbB@N|qj3f}84IRV4fHOx;3Y4kBh)9d%Iu}M11e8WlL{PXX6m0`c zfc+p5R#Zl$1VUM8k-9wj@vgf@mH#+(WZBpC8!Kxc&wqry_HQevYUK-mRL=D^73L~` z!z;-o)!FdgC75bNoV5H!Qejo~kq(W~ULFj292^-;$&*W@Ad|_V;XkSJCTVK?{dR<% zmZ!t9wnZ&NpYQP;883}%mkBp0r#?!fRXL1J3sY}p2A%g|?Xk<3#>5W_4Zd#+f=2jl4 zJaXzt5nEGuq~M#T)$Z~KmOj9~(%-paUll^5|BjvEuPjvgM0vKQDr?#AF>-%M=@VQ^ zKf^1+l;Zn`@L?9&|1ld44LpZ+Roq!#y zC*5IbafY{1yos9%s5&k`w!>&YY}1#Q)Nd@{TiFJS;@a5B9$h_&u~8Mcp?s0GoygFFl0r0U2%?0}$)Im=hzWDw8 z3@DY(sSjzUHpckT7Kb=SLm`ZIMpM!)MaoPjdkP)msHU*rmC>A4QPi}l`0(!cEb?ZHayf-PwYI-$cU9n+pL2OidX`K14Y3vRI5tse z#qU9`#uHa9!2q1-zO0+X24w)Z%WNYc8^E{%+$tm%de3!Y2iob5eMU1#EDn;2HVzbd^RQWydumQH-?87%^56;Ody~(HKW{#4{%QD6!~az`di^8VA-=!5 zH#Tw0ZrL$7Ha56Qxx1%jouYtyVE^iFz>LL7iBf?(H-`Be6M@B{k`1sfz%uffn0gWm3|)+GE`cJakR*1dDK! z;DrK(7Azt6g8m~p$jI}^rC%OwBUYcm!c5Aa3y&1-GVQKmZ%4`Pzg(q!z|5;y+a#^N ztl6#dm++nh2^C6Vcu3^Iruv_vA|kM7W8hv)Dvpbrdo>o3p0ue1DS@vYn|L*aNQE;& zc(K*h15g~gV$T}vT7S)|y9OM|iKfWn;iAT}wyvC`r`TUCa{F)XzFWvAwY+Wrt54E-S&mQvPrg8&&RMt|Ld3pOayI^eFjuq(=0% zocESz-yoo%^VdW9^T$1ZHY$3mN@icL7Spe-be1O@gegCMHFJ5kZo8#y!--HeC$fiaWDjHh_R0=1f6(B$o+qyBuVsJm%q!W)HvL_EzW2%`+hxf; z`)A$LIJGHFDwJl#`MXGMlMVXJv^X3XV!+0RqhYZ`#l<)PW87OJK==_4LHmaVe2?-F`heE)bcQvTnYp^nqc$bf$e~7SC-A5Ox_cRIIYjdqh91) zCbT^q%J8XqV;E44KE)C>x1-CyO{%Cdw$=1^boY*bq4(gHEhAe?w={*u<`(wdxw>g< z+0^)@!rV2x%Sww^<+X*cjH7dGGX%3E}Lcf&RVkjw!-dX#7{~ROh5Fs8+~|_ z_u+othrJBD6y6CFmtT*S;N^*m^ha=D&cNNc(7=tAVl7dTa|W)4KOxH=a|yHB2qzOa zb5|_K3SKwnN0#oInBLfyI@Q>X^*eUVe_eNil?>j2ki&=llUOBsLN?vA=pnbWfq90; z)cQQ^VjvUpKln7#~b6qHl-=w zf-Lz5$D%+U$_l5-4+T}^CHO1jB)3m>Z^L@9OPLZ*35ETjH^PxEEg>)-ws9PVL+Lm; z28WKMR`pnH3Va2~a2`vNBh!(Q>cSIjX?BEiJnE~_$vGYe8lW1o%TDMWECdRykSZG@ z8?A-d^>zAFt>(*L_uIL8=Xmvr`$lf>mg8G{3U@EFB`>k;e`0;>UuYJ434&3kA17Mt~045D<*N^%*t&AL#1V_3o!pxko+_voBlOE(i?~eaUE1= zWuO485%RnV-#zyvi5+FP{0Z9AKA6vUjyTe2=)}GN+8>%B0STV9Q3yZU**#8loSH=f z-)x5^1u3YNDib>&6;4sbKejI1-+lUi9D! zkAIc-s7Pl=&&`BJHZvUUuZHX>UtiK}SSp3M)|F0^eL>sh3^d{Wd|92^~r4P#(=9EtJl& z1B)Do(@clJAk{UZScmZ46E*PP+#(i!O5y5wnmew`l-p_SC2Vua5sJ;QG-0AJDD&_{ zfm?ru_r*|F05&~T0K!$g&470sbmK;t?Bp?q3dS);+@TYLvo+w8Qneo)uK`p<%m=;` ztCj?Cg#5EpC*t?#UE^5SyKlxX?Qp8Trg~^CIOB3H0z}W))(*rczWTB$A}=qErEuy` z;IuiCUGRg1AT1mFV6!9{bm$9efulP(gqKJ`CbowJ2w#vGqbcA{D{|xOXwgO>no%`D zzI$(H@pevwh2CNjS0oRUeKuB1_-=8*fM7xn+*;{CO|)=kfR!U01a(r>>k|=P@UKU1(iSc?+$b z+5dqhKY{muj{5PKJ&2iM{0xS$s2@+rhq*$3SU$wNJP5^O=Yv0O>uJAvu>E*iRr1F2 zm8(v=!(UQfwjfwJ`ooZ+hPtiGGgH?mr&N}#8u+)Z>gW;W8Ak6<<25=X`Pt{L)2PIC zr+S@R3!DnD7C05)TY}^$26ggDqDaRvNU|b=7h4fpJMnwGZ)~m|qZz{7cv~HqMee!b zRD6Q>&na)??-M?5>bLN5m&n(7U8jDF>&|)CDas|TFH^5`e=dK%*a@8~PLuY6bC@L& z)0K^Ti&d)V{dsHhxY>orji{gt$9MRiXA8NmkRY|Xn}QK%T!J_wObB&TT4EZ)#llcPDA!IhDu@g~GE-oQa=BE*r4>g@z(OTkp(cyP zo0Q+!hGIyOM#3mtosn=@?oKWFoy z@sMQ-nHgh=fXKqOCI>=_=#W`N9t|NiRVIWC4-dE4U36S6OO(BB7n0yQt=Phay1Mw1 z(dCuJxv_TFvck$go@XmxxZ(J(Z)0QIj&!G#tjY z`jbgQ-D;v8JQFAt0`*61uh>;ccBmeFu2Q2MH@P7Y{Ntq_Kn`6VIrH=6i5u^_{pj!S zVe#j}?>>8$eEJ`qqdL-X)q6n{K3O7%)Fq{4IPE@iNNH1nQp<&_r>>%!LOQyxsNez1v(5dFHO{1` z
}*xg#UtgQ`mn4^}2WG*j=ua$LY11kq|s*5@zvYhgoZ+zjI4nM;-UCFUMEb+3d zpgrAA>!f0KOpVxmiAT{8n9<*k-ukFelH3AvOCsE$RVbl|8ny!bKWzmOOn#?nE?U>qz(rTt=^lzi#@veyp;Nq6$BHapg5N!ei8{+}=Zx zg};-=2|Y~y3Fs9H{}*;tiiJZ!7_gP&4{TYu8(;}S=NzSJ_J*ohQ>>;GTA;vtL>XaS z(H2kVdiimLj1IfIt0+qTNn4}4p*6Gg%V}^agv{J{tgZ33qPv4*E9zR=t%vQCc_#wD zFJIWUVRBt@iSoX@Iqx`lZfJI~jwMh#8{u$4tOdQhl8$8*I+h3lkgCIF*YB(9Nn$@b4X9*zlPQrowX0{W)hETS- zUq!}HP?x;~N?_09m>6EW2mC9r@X0MO2sK`&+CAZPLcJAyj3>)Wr<6ypW&bwwh@5cw zH^jf_U)k(M-CgpBh?&G;H)(MP*lkf3!ao9H5yOpb?(~GDLPQo~2PCGXbr{=bQZOm0 z4+`Jh^?~P2QS??S2key&K&l;uS`lOokr8nvPm@chyKCF`PXrzaI(2@_E5`y31fIF? zvVGm)NZ*lqcJs-`jceC2+Y8$aIfdr?4@^G4&6t%F@x_Brj)k$`1$Iq0eRJhZbH{jy z0&oK7R@y6lpD-gf5t;Ti?SvUx->T;g+m{vQfJym%Az`XikDKskUCD1%fxVex^b0NZ z3giKJUr&&Qr4H|h{4Uzd5;hv}%XeY@MB;n6ltBJ`&MBQBm@3`_aF7^^C-G`D;1|B+ z6Cx7eDAsBtkoo4}8t$!xBah5Y;llGX>U5EL2NEw|O5C5{TblIjEi-5Qi;fl>J6ifT zn@d$@V)lFPKC(OArTmG-CMVT5tQk{&NwPBmd(sosTZWjL_8nTZjlM(I$dJ!?U5BQl zUU#b3d!dP$FdH&k!|TfN@1)<-cl>@g4yp$gq+U?LgzF|)wLffmItA<&WQ1E*isreH zs8y|f3y>*_Ku{Ei#DX}yXAJFNXc$Jw`A*RtN|Gd>CxLy$!{Ed4*%pMR2#;QGTnqnU ziV@7b6tJKGe|-SVr7QnL3JB1CF)-jp5G*qzHN~17HyB?d^Dm#)BYiieyuv=-i1hr|l z1hq3zK^Tj7_V*z92bk3;?kU7BjYCDqhX(oWiMFEQRWre$?ZGoH51;aHJJM!sY3La> zuXxSeS(^0JP4dMfyE0tLVRoG@sjeQZv}2O^i{=@|qWn|&+mMa%66y}eK%aug9$G1^ zbiRjBLYg?^ga<#t^1M`0d}y2~RTS>zadOR9O-bA2RMB{y%G}EJH}~8 zHw3ONXld?TA7+VPu}uEN3pUT7Qht~IIZ(UcHn#xFw6 z^QcR9IM|cuOZ&CWDB$dJ?*4&$$ES`P2WAR~w*_r$tXs1>RNvIVe!Y2p@A1Yh>ta&b zHJ5 zStF9Uyo1Na>A@)oRaP7iGsgj17k_d%>MuSQ!VG*5B#1(S5&Aa)s>l3szA0#lz#p(ksE&pdoc@fbeU1kWK>Ea)0ck>!1)JF#7h}T78$c=YxeO#kiG~u; z<`P>)gmjhplpUuIpHe!nIIC|0k9XnneO^;5&%QPLk^TTEmMmpUr(2#5!O#K|nV%sN zYL5&bzV-zbbs@XywiS*^c%ck_H1DdB0Qjv2C?s0CGkmlm3B@6YDWIoU5Fdegt5uS$ z+14zV6a7d+1kdago=ssIa%T319KyaZF5+!HQ+c~aQPOP<>l@;-&4Hm+ea;&8SGiz# zl5_hYxZT4>#O7CzKROZVq} zCb3o&M>{y8?TPWU8xWk^WF`|s&wX?htyFO|YV=SDV!J9R9y(zNSDqJenx>+|g%>vL zYQJUO>h;y``(t#?RUzwFSrUhp7va17kcB9ptm#^LuzEvpefHA*!6C~EA%$nZiTqQt zEM-=Ql_N{7SewbPs-j^f?|IIGd`Z$yuNsmc;~{xfo)BD+bk)Tn`FYJSa(fp%8;1u}AOA^tZ z1l^MMBpbt?1V-2^y~Fn+u0zsZ#C1s0qJZ&7dvP6Fn0nnQe}i9-gT=dwQ!$Kx=UN@# z%Y+uUTZXlY-wS;Kek@gAC?S2pbDgw1p+`8?>tau&_F_*gkssmh#dT^gt~=*lCw)X* zU#4E?5|=z#2J{c(bmAl!dT;UU0q)0>3GRs5@5J8rWBJ_$vmXr3zak)G-n9PzIQxCt z?8DHGILv2%cyjUVZ&_!h*GQ!iq`qBcNW;1OFOPw}Cl}Z3pY4LrmT%a|u(Zl*eXh%H}fay#6r#9~H zx^3vdv4Jm6Aky~UbYFhs^8D^)bro{?qdk)&-6vX49-I8u5p(Y5jCZnI(yE%4cIK41 zv15`}S1Vh9crZijfDZ^BGi;gYGe7+sLYvz!HUtjmAcz)=CDD@Lw5M3@glBU=Oatel zo%*dhlEe8EAVGg_sJ3ke{!|@?r88_N>Sjgywch1cX zEW)xoL;0j_nK67qB(<|rPAoz%!o1#3-x0-WBg5GM-hh0u_h{J2?+NXP^}+zW)v@ z7~g3FmN($4z~;<~n6ldD*IFB78mevNug&r{ut5F;%ls_Hbmcr8U^!I(#o|017f0ek z_jlz*aadGQp8VYO*}=Zd>5RT7?tXvrSpQ(gq0GLgZ(vK5kKe?9ENYhi;LRV-{tx?5 zrd&C%>>C$+mH|*eVT-WE**7ll$Op1-sQ5khKuxvs#693(TbO+VrZ%!Cmo^@1-?ug^ zc`&c0b6MtCaBo3HUXH76S;E-p$iDJCtUXswM^;&%*^=pqPw2sJn;2={klE_asD(fj ze0)EswJ`U_cIDig8xA$GiG33@Ey}t5vPHR_ZNB_In^4ZFoPEFidvJC(=j>f_DOM`a z;*>Fko)-TtT0kCC7AHxdB<#lb%m0ma9tZzWV@xCxaJX}ec_q`RIXA%ek!_8Dg8vYu z-`J=W8USucqluuCD|w}xa9g;@q(L4H_sNMY8u08~7R~S~!wQy_>MHc>UNYYNVAq!Q z%Nl7^6MTene@B%qEzMTlu7qEjq!EhIs#H4zsx8W&v1!;y+SNVzGsIK`yoSsE*7LXQ z*qAXrF`cpY)$5^|eE7y2vgOhxl`>~Q0h=M0?^LoZ;%GmHpJWp63YWT{L%IwMn}z8z ze9ikzm%$y$SGo*2c)ZeO>|W_I$S0nhnC|&*Y*Iy@DlLFZ@MzTj7EBi}GF-L3o`qFoS&ggc&%NZxY! zX8!D@vi7c4F6SQM?{Z-@Is9GTnKqayb?aD=X%qiq_jLC+%hyc z+QBH7g#(y;I9PebmAPb=@YRp)bWS>tpB#K_SK4ISvFkpZUfEx({I09NcIWh)r#kij zdLdxfrokIJ{a$@FVAtkXH}zE48kH}%*7~#V!0|4O;76dzFdxz6KWRSl@x2Y-wM@`C zaE{165q!-f{btEbk$z7Bk%ck-BDrm1Ds@H2;97%q+NR6StXr8y6ZWdLsVP4C;YY%P z9m)20i3es+pq3nQncba??*f-3aDTEFB1y|Wp&d||C~{V3_MR9eV`8dDn(dk1{O&bi zUCforS;$4Ar#iLl6M7`}pQ~k`hzw9<3H|er6H{HUbx(Eu5Zrb7eeqoWY?2tWXZf>j z2H+ndOZQOZUmXcaj3B9A;2NWGQKULynh`3H*3jzVFk z+~;FMYUZ3`$Wy+}gv`VbmeA>1q`?Y5#=PVd^df4Fo8I1YubIW!PKGqE+v(V$b^y!p zDYXY&Lj_XZf>lO-I-Ku?NG|+1dIN$*B%**4^<$`m#g}(jm|h8T-q!o1lADt3Ehq8hs}W1gX)xZ zsK5o{kZjXImSR?THVomF7iPoQxXJJF&t4%LW%x73pKRLO|s=%S{{r=V7QS7{XfVe0S;M0-NRVK*kceY3sPhL`o-BW^VBdM+fv_q zrYmP@Wnxlm`KpS#%G!)&=zk)XV=B)Vf(QA#gmyoYX^7jQa*WSB9FKakP^!)4;XrKjLTS)_&5?O| zMRvJu^R}exZ@lrLrOR$V-qF1Nr2P=dlLsGsKB6Ia{fr;FC*N`S&|>pYbO06)(t@J5?}>H3>YT759mowX-HrW=>nPt^F(4N6F>4h z_IZEfPUp?>aQq^`px=0v7ht{!n1nKlf>T{~7vYHntMUkZ5ns7;fy>2QTVdKe&|xo* z%CcqqR~QNlIRo!oZ(0{T9sHZH-$W4u5BEl;DnA<7m^5V0NN2e*rtDnK$X%V))tx)b zAZ=4IcdcC0ilfRuSMUhV%jMxYg>jLDweX!&IJdsk1Rd;+e-eA+@FCM7$CUlsrf)~h z-y_*CdY^r^cdxcj@@(OM2T#ReKPYh*#=yOq7%fY1n?o7FjLYm0qLe&g3QGgBWyq7F zV-XoT9D#%&n3kbKDgo9%{=f$yGIa9fXD?PYn=A)I0<$vX)3>BYWi~jn57rcpyN`s( z6}KoaPs!~259_;EZ||ut`SFiSt9rH%b{QUN?YftwI%(zGNy;0JbLmzHTHY-uA>uHo zX5tW3DirV#U~mz)g=b3p2H(F(#381meOD}MSs(~Vw^6xKyAJ5*xeTP_Mn>nYT&yv$t^TO|xtFv%C20l2u23nn-C>1a2H)LSWFgqn;8oBGH{{r)W7i zLJj8{t5YhzZ9{-YRNa)Wj(nth~Il8GXx*O37mYV{mjO0yVs5!;Fa6s{YZ#9 zADKmbD-v=d$_Oror{V1RTXv3SOz#^o^+ST43B9Fw?GJ8X!OBOMF3DY8?kd))d_ZF( z4f<`&gYVoP&rs&)_Nec(BDV*x`sMjEJH|4m`|dHbXmixatJl$M-gtvOIX=GqlHh@} zDi2^ygJbrvN4dU3y6Ka6x6Qz>8=UM0aUI?uvd3+PVzvGK#8HTL{RwD5JEUyB^aC*y z=od13GExz}(-M1xRuC<205F~kuLvwaq8vDxfD?93!^aUr!*1|5oZE0Tm{@R{(EOo4+WnXp9 zU|HLl{JRF?lJ_!ok=S#e=j$a7&cKxLy@luqFfE5oW94b)c0O6vzN>_RQ&<=Je+@zZ{DoD2#X&5%*T63JF^+kHKGDl zrv?@B@B+FXOBF|=U~}l04D^X6+W!H5ra0gZ>yCv2=Rh2vjo; zy`|;C?Of468>&5v6bw33&I>k1v0ZGtWJwt1TQYWA22hb$Xk52V=hbaqwaJ)5WOsTr ztoM|El&$HFPJIzlzzRL#f5D%2DP5{}*C14D0KJW&M(iKR;lrV{FlwL#zz!e7AsWb4 z!g|Fr#CAftMCHrapCjLP9)?eR${Y8Oi!A2^?olbY&Fb>cV6cn={I{efM(>& z<2&Tlv#NyaP%DGuEyBEfEpizr0e5=SYsm$EY4UacI=m?lZ)(Pb zFhe5{N_xE}lrUV>Xm&)-OQu4_0Dz=Cxm4Jtisa^rby0iL2V=W>p7Tqbj@PZPZb~QH za`N@VjvHg*&)pQdq&ewzb*%74TcFnis}<~T(D}i>1$A)}y&qD^NHDS~E=Y**q9mA& zJ9|+zN+eSe;e|}`L=y6Jx^S9$uV}*FZkqLZ;RM7zvGPRx8!L+9-+V=t^A&}Yn$$Rz zXhEJBijeCNX*|i-W+eO+-y|D_J*a3;>ZGWR8nxUd$AHHCoG&_ogiEWx%PsIlksgn1 zdYo>mqqA)&hXFE_j%%Pa3pg%yF5#;j#-QP^hypGnDj_O9Hir1k8kr(|mBLNPF(Ott zq5QZP3P;>n5#?gH?Q?hB)W7{&fA*;Ej_eij`DwcQ88u-YbB0W9d9 zuKvE$U3Euu%UzoaS~gVH)P{an`Hq>r&A#>KlA+eNo#mMs>+Q}O_pmo*k>pVt8G(kodyu6x~8p>z1!c7rQjzu6NfMFsT zbHV8gr?Y1wsZffT$}me9VwBKPLQ(>J05%b8p-MY6oj{wiukClQymbiGf$-UgJf{X- zYn^2{Qu#Xmk`t+6;B+TV>dl>FwdEBx%H#A&V-kI&F_9%rec#RJP54EBh3l>Ayp;>& z0p?9n^(zrg0-Y$D#OVYO2zWtUCwlPfc&7JttN^vWL0pH1PWlk_!L9b8LC_oWhmaE- z{QxU*Pog>t@S;;|wBkMfA^x)27vPDCMr)pFhSQe}!Jn0B24=cKrWv%6xlA)&?}TTX zk^JVHKa6rRp&)mebuVMPV5Xl~xnqC#h$*Z; za7k8X@XuEMc{BR@8aRFgeT}6&vuJZT&|q5KO_67&?Iv@~PI+cLjm1Z%uu;o18)+`d zA1Z4oS!T7S<)vmneG3b|<><&Gr&!S5L(B44WF-!TXF8IGT3=w1On&Mq^yCfD9)W_Z z=a`Xc$CWkj95bgK1z2cfEy@D|0vco<`*`=v@r_U3^46GX&&<)0M^C-E?^nP2+Sh*7 z_3Nje`ZZ)&G<@ypkZ<#H%NCqYh?&IJGM8J%y)X-N%Yc61)u%*S_*Ks*q@pP-rZFRJ zBy7B>(p{D_mSS1D*S&SRq1usJv#)voKwd`|dm%MBCbr9IwK`+WtKt(o>+|b^gYz9Z z&1pIPc0ON4Ja!aEc#TN#6^ukePQuFxnQTC93xfeurlu^S#>3pafj8r%IJ-UE!4XEH zvbj(MfE%8dz$ow88os;F4s9UX)e_$SN?iJQM|z6G-;!1lM{)JHdq+tj=wV;q^5_GB zlk&v2A7cf(5Jlz)EjfpyV_+ZaUc-#al=TaV1Gy{L;Cnc@4Sq%_Q47ljLAYuW8~g(1 z1qVFGM#MzZuSkEna!wZoYj^;vrg9HrVD0Nn>w>0&UNU_<@Y*HK>vq|8u>M=hSLLu9 zdWwpAa%YRPYafH(T8n&}0a)JYjt<2>9*c9NU?>C{WSHkXr3-}(c@9QA=qkfiC(9~! zi%UzQF~ZNJ4AKpa_AUYM@@@h*2we0j7H1}`3?8U~e$F$&Y{>bcFd8ZCNCu)jFab&y zrKsea%L~)%v-8U<*Tfc1-?A^Le!O~Ox$;3`eskWk=9+>oeEjxEM#Hi;b7s2oXZcd` z^5V^nKMLy2?JMrCgp*bsQ7R=5n8~+r)IzptXRo6oq97W2r2p1w=yI8)QvK}Ro()2Yl{a=|_3cI8RTSnwOH@$f=s5yUGs5(Vor`1Vh`0bp+ibQhTV{$q zB@H+}ak>mS(0Rp%2-IreSU;mnfasup5R4A2!WXR^QPqBZZ_{MCzACuuQ0uxKeNCV4 zZRp=n-W_yw==iZ{xvGTi=&GolsK{DTU^cP3+R>tcw%X0HX-(yQm4!;fishq+{KGN; zfT2@Q|3_W|Uyq$)syK6xC5Iqt4mg=8Ld3y{svMylUXi3~mu%^dbiyTC1Q?M}!$M0E zJ@*5x5enfctM=o2+-q7}>xVOjQq7}VH*BjLX=$q2n7=C}YSZz6u9o7;gy3MStuQit zAb(|ZS#83SC5g#JappcZ?T7!w{NKYh!5_m$(Qs$)A!dXAB3=Ucuw*nC5$_;JCK94~ zF(GL1pAUNm3mLApMcA{RL%j>IXY4Vhm(XWV&K9!Q)89B+r8LK;L#v^FQFN76OcnhE(KbiXuot(aNojeWv>5Ux|zaUKm zEufi5q}6~^H1F&Z!dM{k&CgbVa*fJ-B*0aygOGRxX+dow?!V*|hM)B84){rLo9-e1 zC=gljkG`k$U!pmM4#KsM`T38)#;J3N*L&qZ>L~w_orhnGbpXtCld_8ztE$~_>rN&= zr>b*qBi=zIL;bG%FV0J|NUWUmC0WRq1@5^D{sq#+;o|@uQRIU791ft()7jDeWdlP7 z`?NzhT-Fx^w87=~e`mF~G$vS{_)2haLs9xy#2lQJk7G_W3h!a}ated;x=(ODMe2Rt zA8=sUYa&K#!5K-&IaL83YiT&N)x^1DwHx@omBT+6?lMta59%-;l|tv8*=^ka!pMIG zDdVCKkx#-U3YUj-S!}vbHj}(A?Xz?qT{T95Wl0xc@zxE4gJ-Dy{92PW{U1PR0M{}6lD0e`zN_WY=K?D@9o zuB*hJ-%~~w1fRisNf;>6z;~9bP+|E#=9T3d!OI6yOzE!)-!Xm11-SDAX7>1PD=#8u z1X=kZ&IKf7tcVQJ$yG}^y;G3M>g{PxkgxHqkEO4F~UKm9?Mjpaq;bd2<>{nR8a^qvG zdz!2I@91ybR?&X6`E*wmYcMN+oT)F%@5`?(%kM9cXTl=G6I@GE`Ab_o;nESD*~?fm^oz0Yxo^8Nf-)V@{z9o~WOkhgG;qt$%8 zwP*u7U$lYEr?%1TeEj17D95pi3Sj}BEv?}6yR6INh(DE0r;i#SeVmeO9Ewo zf5TeRPvC?@DlPE7Mx#v+0h76)DL49fd%v}Sb^yre)qKF6$UzdRA*rquyEPsep9B;p z5EyX6!Nd_M^Kio40`e(~So=KC@L$R0w4`xsKfzwg^aTaAt3r#Xd*@?^%c_TalesjC zG%p2WfSHwU59Jo_XY%atp!-i@CPTq5z<;3T6yZO#)m_JZh-NZl8<0J@6&pw6kdhqQ{Bp-qKCLR>uX%EMDzK7>~@8S5jCSgrdGWmrt z$-JfjBHE;nO2Es}=;XCXE0u9laX4Td;mP4iuvu_Ag569bBh8MqWZ{*kQ!3_ibot;O z-0oL3o#JfC8d}?UthcqNASbOMCP0^;6Vlrm7tiXy6=hzzqG3zfU~5T6c5*^iXh<4d zKfrFN(mq16T_uZDMHCYKp)PaqhAq;n7KC1$MG8yWN?lbGT@j?=eU!_G8;7AAR&T_y8lWflvU}ggDzS2iqKve5-UPTl4t;W1?D4VMxfD3Q$0y|p zxtO9_SL(uL-W9QlVhTDMwwB3`%kQ_T zg9{5u!|6D)KgHMx7m$RE&vti9Jd!;l7y(rl9-B74GCjuP9|NO3kKKEf`GOH2G^v9Tzj)p#%i%-aofumb z^oMi4E0e1>yBHORP7#8@wxE8w*oFmcQ{}`sH_|T=23t_W+(%1K_N6`ACbBO{H#RTI zK?I4^v;_gmh4Yn|H&0i*wsxj_bgLoYBM#yGD0M3JOa#0thnMI^SVwb1`A}Y4bG$i2 zz&I79cxiH6Nmy{Jy2jRG*N%aUyVhNW*d5tPpCfNF7L^cUQ)6ApiTEv*`1a9ZZzSU4 z6(^B27~kes49t{m+6K&2f}=Gnnu`bUW`2&k?0P!Eq2|8F9_u^3VCg}^iCvZ?+>9#W z3b=%uiyVj+@MKa8?#VpNWupbU;|0Dy1OK8vsg)uJ>i)Y+j=;+GjvU0oD_^Td4zLeI zz<(Ya6CRAvCIt_e2%Wij4#b?VS$LW$WRQ|VXFbnV4~Nurl4het3{Y)3kDc1@Za+1! z{Ul>wHXq6EjLT2kS!r7nq`czSRDy`X=7#>$ol|?l1KNjqEK{lKZz;_!qW+8CVVs5^ zsN-D2$0hUuuDft6%_Mx!s-8e};nthxlUDZ(YL7jG`

G&t5|9`E|6PyZ!*Dn`m!P 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 CE(kdQ literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Montserrat/Montserrat-Thin.ttf b/ui/src/assets/fonts/Montserrat/Montserrat-Thin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b9858757eb98286718cc526d245ee2ed50e3b68b GIT binary patch literal 241436 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 literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Montserrat/Montserrat-ThinItalic.ttf b/ui/src/assets/fonts/Montserrat/Montserrat-ThinItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e488998ec79ac8e5bde78cf3ba1f4991d5e25511 GIT binary patch literal 245372 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%0Ax{{!I9kO&4SD~~gv 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⁡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 z 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 U06T02K3D(-SP0Hn1eVw9AI}l?ZU6uP literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Montserrat/OFL.txt b/ui/src/assets/fonts/Montserrat/OFL.txt new file mode 100644 index 000000000..7881887b7 --- /dev/null +++ b/ui/src/assets/fonts/Montserrat/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2011 The Montserrat Project Authors (https://github.com/JulietaUla/Montserrat) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/ui/src/assets/fonts/Open_Sans/LICENSE.txt b/ui/src/assets/fonts/Open_Sans/LICENSE.txt new file mode 100644 index 000000000..75b52484e --- /dev/null +++ b/ui/src/assets/fonts/Open_Sans/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/ui/src/assets/fonts/Open_Sans/OpenSans-Bold.ttf b/ui/src/assets/fonts/Open_Sans/OpenSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..efdd5e84a0397ecada7b9cfde51db87db08766bd GIT binary patch literal 104120 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

n{#NV($fZ=b2Ttd7 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 -Ui0>vvum!cQP#SwwX988o3plLZOz)* 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 literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Open_Sans/OpenSans-BoldItalic.ttf b/ui/src/assets/fonts/Open_Sans/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9bf9b4e97b6576c8cc3d4527073731fd9cc57493 GIT binary patch literal 92628 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

4J;+I{;ffTJG!iGMcG*?Vwl&%p(3b?*`L@59ZU z8kaRLvg?K|2O+dpv+w(t=N7Xt@4Z$eu*0A+GM#4Z7Zi_@B`=yB)|YZ;2*abTrp(<& z8}EnPI}U3i@dH4QpI>~kCf;rVLlx4<#E57(zVywOcpl^-Zi(K} zVw^1s#s$!a)IcyEClcFvVLX;3AAHeUI=;X>7Hnn%__4;-0`NmS>BF5PRa6g8<@?)# z!-x{{l}OP!_o<5dLH9QCOjxMygdG;+ykTVox^ac7!g;GOE;%Xz7$&bEV#{6GbStbY0i(?Z~_%qTbK{fg1fv;HIR-&4m zbnhpjjy=RRi5@y|o~Xt}M-{QErXi3!bcEcYzW?vId%)N5^5@|hD5k(Zgchi4!0BiM z4@*aPtdv|)Ym%ZR$t*)iBqqWTNQ93l6RNbX7#RI-5-5 z7lP)c$02Cey-HjfNg?&^mS5QFFHS1iwnN>Q_hJU_&IhU#en8xjS#_Ys!mj~-^fmYZb){* zvn}le3A&c30tIv~qJM6SHC!XxgThU6xZS@y@~nb=WogKaB*1rsWhwq){foXK(kZ0s zjG_Gd%2Q41mdYYVYF0Au%xaZin{+LeOH8O(I4KmXIib6VEO}y(*6Y9#44;`dSzQo% z(~Od_GP{VGC!>l%Lq!eRZ7j!g=tdd*H>#$dtzD=-L#N1gkY?2?Dz%ZwzaV3PT#51? zUj8-#&K!2L5P4+d3S|h(pwj?PZp+G7O)+Tg1>Tkq^GW3@6P0Fl;=~uj)r{G0sy@E; z3HP%T>JxmJPq#b)E5-`c6>Gv_Ri8nXuN}pjj)fanji_h(Dqp=%LF8XU{h+A(Ec)D7vJ2e_QhX3#%DK((a_$|Yl?5u32(|?#+)Xzt@0*m1@siu zpHV3slw2g^BxlIg8Eor!-{IHjGy2(o_ZfYP`Wf`a`x)fe$iiZ2$1|nvH;-wOP$?Oy znTNKEZhm+3eoguorjbAy^=60cGV!&2n)vEACM1{rLt+wpUx$k&cyM;`;FOdUWKT2A zBzccihaI3pjhJSJj7>w-4b~*ejg}h>qnX;=OyIds3PW6!VG>kt})U$bK01uO0IXPC} zOh~8wM!a}7G_&42C63da=Qpq-n)%&0<={+#EuG}H`0E*w^=Xh44FwwIBor{g9j`Jd zh?GwB7~vR(3=ACF1obu%tK^KA#oKtD_o=j+{906>7cu>}ML1X_(oOP~RNz%MAM%mwl^+#$rm<4q)OeoZ~lQ%DGX z$i-jL5q*MP8o)|A@PlFe+-$z91ByoL_`6vwH=ISxW+hqtBPlKNN+bf0Q}E^7G3ws^ z{Be9iy{2X~syDYO$%upmyZ!tN!5Z{Dn5_ViO1oC2iBXA8M)!Mm%mdT5ubMnt+BA0a zut%r9@zJ9=OU|3;wWnFWCK2&s4Ng$7grprvyI%wQL zugZ5vMPz4ZrdP7c%5ZIA5DN+l3)h8(YV7*Bf`XK8pl72wfOm)%fhvwwQVYxg(Xxr8 zKZjSrRmnjUn2V_uA%FA3mTGV7Uz2o&x94>oa&_YF2j?xEu%lt_)6(f12QDjaIXbDl zeQwc^s}puUuxRnv-Baf-z4230S^M1Nva~<$-c_%D?`h>azxnh~rdu?0+&cdCl9!)( zg+(q}J@0x20x^vfKN>uYel+4`{?8{@E!x6jpI+5r;{IX7#(y}BzIp1YRg2zWuBTRE z9uLavqy$l!<1g+~yq9-~_lUk@oxtcMEfxOS2$PbsV_GxYW1(cnjs3qUgI}CCI0}eNl>Zm zAAC%UzhT@T8my?4dIDuRQKzZ*Sq(f!QN-&Np++N)scX zOH<=cH^;f+s%isGu4q@9>v@;rC%atHiY+QSs;U-s2A~l2>s_np!$O?SkY2S;q6!rH zxi95O^a$%D>JEI}12TLQE`w0og;9cz;s;*-J2ojS`M383i(uIuwosOm#7{U`asoe| z@{F{Ys08mE=X^imednGedE2ZHJ_Va#&)e_WJZa1FZlDv49Y1Kxq|I2@d}yhAu)-_Z}EG5yM zGP>d6C6+D|LRL0x%(~M4*CJheS@+~4J^DP&`8m%u?Y7TvTnMoq%btE;S`BlKopko+ zqx^7~GrkR-7Rqfqjrbw(Fx_o*;Su3gwX!K9Isy^f2!}fW1u<2%28Y8M6Qk)}8>6=d z^{Tb{#-`d(Vm&~pdk9-c{Rb$=pMHFET;DAZG!$}P$o|+; zoW8k{g}2W?lM#vYNSPG7aI#4HCZTo`9z2Ui6W%5vK?vLcojxs^q^(!flBA`uqA>k@ zo5*YNU;!9O*%npws$dOKy*(RdEc$r;xZ%0|3Nm}9-51kFvP;w5S$}T$Z~6s1Z;Z!wY~S246lBD_lhmORo&-FJ-q>fIyz zr^lN2hefbw-`f1zvdLQ)^}DHgN8U59vXCF?jrny#;8Df18UC3#O`4{IJEEO4F~;PK zc0TWvoiWZBKTEJBKw>5Y`YFb*CJK?ort;EJAT1U|TsjHacd#k26QEx}t+h6BN0FdY z@d~gKnCl!R8d#u;uDxY8{~eL}RH&(r)H%$!I!Wr4v~=(*lV&Wu-%W=<4O6}BpY1th;p21v?mCkD$ zF(N&D%<1ls5PyGjP+*`9d{c@uI4Fqn!WB~D)G`;$wP1P^>IyavNWQ@E1`+RafbJ{H zY9(IGT$jvFtUn-i_)v1M(`(mWdw#>^^@?tjbYAN8^wXaGQt$*mL^{eP#yx3ldA;Ws z*aQ32T2N%r+>hIY;?bwUTwI2o98FbNQO+PaBEn#|p&rW|$N~cmP(ac$(@0aGdkcTO z1PsV?CxHlX<=9}=Er(opn52ow3=5W~uevg8`t@g)|2C)bK*qYNN8YL`8-DW1%ohi| z_Mq!Yrd{>I&7})CYL8ZCmyUio`Pr$`JZ8@>n#?bdjW+D&4?4^#SgYLf2+y046%Aj* zcJVS~1;7H*7?Jdlt+HYb!lzGR7bj{aV?@Mwl?*|n$M0^%?*?pDWGScl(8J4N`Qp=s_!vGdedzu4NZ+R^{epUexvYe2n*^;4nW7qp z+aKTpipj1I6_HZmOduK1D!QxA7N*g{GA(Ls7n@O;w1J;`@59d){ z{o8+gW{qB(Wb2zR` z{W(iN{n||Wtp@y7HGV4q8DmDtpfJF80|ZU%eA@Elet18Ju(KNbupYbE6b9OZ{xphW~GPOg;PP&+2fvr+Plf4KbtjZD-{={ zQxtq;(0a@kt?Y=6jYbBmeY$~xsV_O&VsRD*-5xYO2$X%QqD{woaMpez(IrzvOg+i{ zBvqhxz(#P;nPQo_I7Z?gj?;&TdmvF;x$Uvd4V{eU3XExJOf-PuB@JM4+lrmRl;-yT;puz395o#Se1wYIXZHZf`}SZJc7?|$CnttR>1L?p*Cz0Ffc*M(-4Wd{I<3xaG?nQz zX(`}}$jT!6Yr4uaGc*4?6E#G3sBzQ%^|dpdQdSJBRTqSKBIq1~ies3d5e(7dwT z5ypT3Gn~2p(C4Ao2ZP2t4Fuk2Fb){C#C8FBh`;+YGlR467rS3h%Eivfjm7S9=(Frl z5$#gO^nSwSB@nf)^B;GmOyZ*LR@uHipdzjtcGN#?BCcXGoiA&YThleC>lv)9Dp z#A^Ng4E_c^fk?p25K@=~u-AUb!hW{mp0YDW+q$s~tQym#S*K1h1KYNU{qhUn%YUHN z!BZ2wPmM-aq(Q4yz{lf{(=Hy01jbg+^pohBcw}RlG|MxMzT%nJknq&y7aqKbSKyiV z;F+Vfdmvl8A;TeVrvxoV+D%xb4-Dv2r19#^=jF`a+9L+YNWz<XZ#Pk_G-6yQCbJXXA8{ zXUH%EelXQD)Px3f>9%AR9yQy&Rr!8PgDwB9ZbBv&NEYO%`N8+(Hv@wZt}WOUD%4qn zv#*tf#ZK$CmDgnL$+vZR1r9vMjsr1h9BOD={T3*!^|3^4pCym8^|$cz(KCzR(&^fK zTwpKQMC&$O%9azneuJR5H1=q1kjlb}h58RJ0Cu(TcCy&V?0M+nXU6QDF?VURbw1(^ ze&Lzt7i?!SOOR)$Ndv!ZDsCKbeq#RygAUoxWR5mVX0u+73DifCnkFP5b}<@sfx-#5 z4x(tN{zK1Y!<3jyv3y=MJH?dxDSTzekibrFNoSWW+a#rW4u4-^tEAZU5HQQaD~uQ! z;+DY^H8aq%Mi*+2GGaPZMG!(3&lfp5A|R%UP)b=R(^8+qF5I*5pKrb}IBRNt?H#iU zODm^H=4Ad{O1v_C_Fd2J%-I(0>Qy@4R?ODCJCXMr$OqG*Ox% z!PGa{P0>z6>y}A|tNtA|i;Jue3iVihDMVypRra}WO#KHhtXTH=zc<8>w58 z#38|4on;4Rne->ja+JvwZJKUcXi`ijCDb16ue6?JwUpNz6UHqHE0!i6){`$fohUmV zy|JM-KVneKgU=?`O&VSQ!RjZU=O1_Mk=eFWc{^qCHhyW5bw@zp_=dWM@vA;~A)vNf zdQOkZ^v<{+tNBd*9_=N_xBy5PvhjoMp%Ll%18GMI7OH6>BGz3zi0%76f=EUei~) zXz2Ud^nLsjWWc`3hUG*F5((;#2Z6KL_;4htTis>1i&rkD2Bx#|c$==8rM<8Hl%K>%x?wfnqu+o#0G!8& zfoHfwB6I-`ox>It)uv6H#byhN!ykyOv@{ioCX4`XIZqM^4GaiUR&~VOe<>cRArS2o8nEDOTj=P^g6dAYw%- zK^rVHZ(Id29zA{{X(q!DvK5)G{x}a{vy}}w$>~UpGNngS9$KV1GCdNJ{>VsEdOFhT z(wPYyZa(6+W(T166&aYSN{qZdb?{6QIqN9n#y23pvsKAT`6sZMtU!07BM(Gl;FL-i zADgNxD=g|NS#oyp-`;rh)9BFrl+^pijhx^LoBH79f){_Ddil_yFQlh4l-0F&%9#cA z(+6=2|AxQ*{EA1r4elA0?>v!u=fLv&Z)-Oa+?+PUxNZ0DJjJhGOK_dXy@QyYwoJQ^ za*9w%Vb*9&sN=FIem!dyr73*@S`TiXTw){?GGDKg;nM^t#XZHVjy`f*@4V>50{3J8 zp3ILNkqJcni#_4E4m&_*1PH5u+uyPwOY@iT_&{Q!#M zXG)IN0KLTm3FRwa7A0($y3nQ~<_;FzthfkVlsQA95f%nR4YRkf89z~HP)c66t+t&1 z61iVDChhm&MHd&}{a94d8tDg}$FOi>x7(sn)f{aZaqpw3Xr95WV}QIcV8RFdwbzD? z88=wAm8bLXPi>qqZ|>ZFnUh!w+3qle^)~%vL@j}q#whl=i&ay+u?Y* zM)8Tm>Mm1rDxe3>_N;Hov?UE>NLj+O>+pTbrB4*O^m=?BS0VQ8CG5gR;Zw{Uf#$({ z{uu4fn=3r)*+OVmgj{KU%LGUjfm*5Bcr6`nEnzF!!oPy1F24m26>Bt787*hwuF^vf z3EmbUh3aP@?pYXidcO!|3++ws0_Y-TnBzY3(Tygu=Q>w0-2;z2!#`TOrdw|dO7`<| z@_Q@u>bKfneeCWb_k~piCnp948Un&16WbxIE0bPqNQM5J2b|>Y@CPTkOUrBBnvRg> zW+W>`nKgcGbDTM)wFOB=*=fqu60&eAE-c>$aR{F&6{&hNwUN*us{$EnEgZk($?@ta za0Ik`M-E}&i;8>=a-jh$3I7)ttO@ce zjtV4vnBRAzr}m^EgyBQ`msbuLv|MmF^r@2%EUs?C5pH^MzA=c;M}p1<`2f9Q7ZJ|a z^{?&HvCkb?XPTb^@B9?HV+;OfW{gRHH!oSY&ddMLw6NI!zqw%LuqkX9gfZIm(22=>ux)6ul=lQU_-eL@(|(G=?VKo&BrIe zgG80n*hl@qG9RB9!_xfIb}qAe{y~fn_4OZ4eAr89Of@(VneSdYQgJBs`J)}H539@% zn^>0*7CcM6M4puPq*e#16-T|)YTW)3WGE0J09JvtFtabItz|Fa4e|9&%>abfVTott zWES!(Cr8?NYEnsc2ut!$e`iAwaXRk106s_7eqoO(J(l)(pjer-B>eFip<54h%IZaI zjz8@qCP&`wz=Id3z0*LRAYicTDPJv86XQ1dF&3z}Bdu~Euq^}O+M}QfBI{n60fJeY zD|l-qjS9Mp!=QF0*Q#BSR9S7q9ChNCKB~`0MJ)gPH`9KWu{ZeLhD9;pJ9;~G+RV^H zX9GQZ`Bi@9+}^Sx`Ps%X62>zGHh(XQp{*oR2PL~1sy5yFbl>2mCEKhsW(~+1vv%9De{JWV zoVzxne9ern|6~(c$*|`-%#JT98~yr-eYN8wvRQhPwY;Ifx=B?#CIQm{N0(Oyn+fu(YwyrEkm_Q!e`LI9cH(>6=wx> z#Q-Y0MH(DI8Ho&6#Kl`AU;`ocOh(Nt$~vSR z?3#<|zoamL7e@1|-dt?C{;ZlK`SR+L$!z}lg9lsZV^c-vSZGi2$RCN;g@hAnkTD$5 z`|$8kryOdDMvZB-5{$amV6QwR$wQ8u7O{KmPIy+l8_x@dg7_3dZ*rDJ-K2@yUGq-m zN|tQTW&OOV6{}|L{3qu>DIfSsJa<*GnarQ?QPwM;Y+21+SxcXfN#%__Sqk&7@z!@b zSpiT|hS9F03~q!t}*T23nB`JfOH-eAkM%%VL&Qpq~!ZKZtLU z!wuz!&X9=ftEUHgn-clam&zyJOz!uJm}~D_O9o|+F6uKoiH%CKHoAm3Fl^w3FG`rDxz33xHRQDm}Ei0NE_}M53@xh3tha zrxFh}T2CU8wjpAc)Hzo!A<`p=_x+qSMB;bL$!zj2{#{8%NVqsa0qQCZ((qt zjO-f30fM0$7dnLd54*>FKx8I}v8rv;aK&z+VKWeQ>$FEoGN$t%Fzjs{XiEJ0Y<>dX z?&Js95Rjxy-sO4gSh%4r&4BM8>a+Jr#Q<*}@y}(j#F68V-j!i4tk?ypkg^Auwakw) z{X>F+%(5QPYyhgmgk+&-n18W1=qiOQ@J$Fhh3UaR{69&rTyfU$E2ASgKg3M@+8zAL z&n$Ql8^qbzclm|7==-Sr%lD7=1C@kHo4-R2rF0WQ0hw@wz!Qadc9_-S7ojK)vL1DI z;QAZ1Q950e7rt32K~Ow=+X4;(U{(V~ESF-~sNZs+KiILNo7lE8W3e@jB^&3TiBMLD z^RoJTjIsQJ!~rABTz4MV@JN-`SAz$hsa;q`Ez}$Yzf? zv2mkE^M%omJBta7&=nZ+NTdm$b%t?x+Nv$%aDiFpbUTPy%A) zV2dRLfaMMcfNmVvdE{VlpquJ4tLuzKrV~cR-AECzLa$TzpP1k%$v45;TyQFlo6bL( z<(JXTWl@hB!djCV&Wil3PA_Gt#1#v7GVL(joHjUAj&=oMXCY0eV| zE`C6rbnpHI(j@$faWsn1aK%r7exv%Cud36(e5yfHp= zfw!qh zHn}~6M?dA9*rm2dQt;FM#ruZJEgd7+n(U(3pa&ChoptTFBW2S z^{A}uQBhl2**OaJ$F$6y(@SeRd#8znBzbkz*)o6LdX{{#1gM37Gj?(q+Q}Cy{Dwjw zgf1Z_F-}z{nrD$6pFd75TAn{Sxf*lO_x3w;yR=Dg#rNv+32K<9{P@Gfe%-rtTiCUv z$P`@Jq2{H*Yu6n)^TebM0|vCHY3^X{(|`%6D^D^n4an$H_^w*veE+fmp~lpdlvsbe z?R;>k;n~NQZFHJl1(_W>9wV>L7RW`Qr6VI{vhebFu>{;#Z4 zMq+)?W=JsA(dYrisVAAG>Rr@k%O-WANr#?&7}IHP(a47C9(ipOU7b_;SpM$gED4FY zEW7q0=A1jNAncMgy~+~|Q((^I0@^QPgjDk&&A@>5^8LycZ|y`%Q|$yS5@nt6WY6?| zrV@LJYA2dG(;B$Ve}L*W#Lx7aLCEK$=cBUP@IBU4;3?Ag71UKhS~uLBr9Gm{z|5vX zn+S;rYv%^%`gvT27*5qLe0Wm#; zhl6}AN%&!saK1Qlv`1d#|J)x~g#5kFQF@)YH>kL4fm{0YJCC_{+_E>S`(#zsL@(V^ z*C$(^beT`N5S~}iIj;>X{Np^E{X=9UvZybAULtGKY zPIi}V$W2GX~XMYoOr`&Z}PIh~~Sdsy(V5yJ-AU)jfx)}&NdM^xWA#F5vw zXH@??rN#UgzAEX?+;rEKZAh>llTcY1bN$^F*;TzV&dyoZAv&fo`71hM!e%zihYm+| zFvHyDP=}*yd;lWgVB5f56M#w*cTAwUj2K#i`t~Zz?btP`tZP}%+SIN}zg``CRn~Us z_*bJ^*wqwvNr6x$-Or5cN4OF6E+0D(4Jb;=qU#7Tby_7a1iCn?EsSyUuDjx3jl-LE zt2vGbsFwJ`CuOa^_&-<-ckD6j($%nAleiEkqoBW;K{P@Is2K3K-pA9%jcD%~b zTCJ}_Y}gIdf>G|EZY3oFeezPC?SaZ+zJhX$)@=>@23ll=DgL60|S)yl^Q8mozPy7S_ncrn0AWWV<|)^!}>oh z4?d?PZ5uOZ_3ndWg3{6>Ivr(+dgRQE>Zj(|(V;BVLp1j*W8cwKy0RNQ~?DA7Eqv+y50ORUu}|C^sluCU%)8v01L($HC@rAgNR=62G4 zKS1sM0J?2)hY0LgSW51ofN(2ZC01a>1ELKr<>zy(3(yKs(s%_$Vxl~E&gWC- zEgHXM4L>sS2hXQ$(6>H>*!6tZj%QcIdo=8yK`ikm-0Qo(7YMOv7k89E8h22;EZolo zU}dueuZPsa-+^{jL}hBt>);S4D_0uHkKMI$)6*>IHMP>X-`t*?M~nf}#aFg3UIPip zyHsU7UkU_%O0JM|fool@KvPbvft z9N5os!$B9ZS*?K+P<$mRGr-LU4!BG;*)fx@FH(41xrikoT@1iI)9+ijpziLehV62% zwzU)I4@pVZuI$w5fe9H2(S72QHLfk>}$nW;_LX0OBb&ZHpTQU6beY zP31l4Vwl#wM*HC(!CuK?j3UWm&?FuKG+dxQ~aUaq-A}aN&n~ygp7vH z5{!4qXKeWz-!s!UF4X3KpSAuq`NH6P^u4v6y7kJ` z_6RsIXp+wNMms`!6>s}!JC)#PmD)RReAnu&@g(scba z?J-QV2@&XM(z$RKbV2@qXpAd8D>TX+l3UOwC8Z!FDhr%G#vsZn#SXnC#Ru+6SaB}O z>Vx8*g_q<2vculh!nKl(mkiaONl+>oOhJcUC+CWo0Mp~gxzN&-qTtf_VcEg+j#|s3 zhjp;blXi9gsO#yOH|mPs>wS8ra2%5X0mIEn1FkoU7q!Zz(hu$!E$5c!sPh}R?I^^doVg&+f7dUHQ$@+$BJyi@lcjM{H{dOC^>sTgF#6A^*r%h^6E5}T0vkvfQ=Zb&HjKVHzW2)k9~0F z#)m-biRxS=P-@f}1T!8^ZaBQP;V_ToaI>s4YW@BE%)pHFGX_|U;RF`1EzM63YKe+13HP48=l;jQ@GII7+ zD8_{+i)L0Wa!@VZah{;Nr)o^$?EnCm1UC(_oj4#%P<0UFijza5b$)=34GaMiX}Aib zV>S6BqV9t@5<8QQ68vjTofFzL^-m9r&P5(jFwJKXEf@AGpf0JW=&GE$9?-ALAQ!6&v3B z{o!Ay)z#EjjqdTq-J3~^h=ff}HC=%k!r(-eD9~XI@ZwthfecH<@N|Oc+9BhUj(y8= zP|3lv^Y|yz__68Ba-W_lx6k1kAML#~!dC$*UxhbSJYVM@;9pvcpn0Id9w>pF%GF>kms=y;bG9hV`StHey=KzM!OWRq~XTY)_ zCcVtR-2KXfGv~kf(PAmh=s8Vz=c8;38`q!V%iqahN*41!_R_1=n*{DJMhosSAml^; z3k$PZp@DQq>_zb_t5v*^I^IboNZ97)$(V&zg|UltXi_+iFX30WK3z3*+WeKZ{nK21 zkeefYi#f^8>htEuZy)9FuS#L2oG*9X^I#C4iK+Rw<#+fuXYm?=YHo)|B-CFCWM-{i zuL%k;$hLm64glw1Z6wTJtf&ez3`>v@&IKYN#5w*#DANB)hu0P~BbrNh-HLd=|0v-R z`;g6BBc5|B0XAb^ZeHXQya<-X?)bPwEue?|wAy&RDc&9tXUW!NV=rjTl%5!w+#b~2 zs=k~?(CCGk?vsNcm?XT7De(im|GNxl30$7mGv&GIF~5C&jQ0d z1CsmB2Is<>`Uzez_a!|RMPCG-`?Cxt|Eg-wRVWPA@34{cS(qmcqXHg_)+yqO5pJk4 zT7wQQPXqIlOhF9V0M(+ZO<@ewMlQg#p}(NrBsPa1yUbE2)RfG2?qq#g$|ARO&kE%hn& zTvamooH?9-DDC!i6w(H=`!a5Dilc@Cp)I6GEkFq*|Da%tVlzruRI^Qt9ITZN)V2A9 zxRu%@K@RjTG)t2}UD>ocmZiFoNWqVkhM}rzAAm`NSR~)P{ecS9;I7tAdf|l+`Ih>j z>?AjMRlAqD2=rMT3Lh6kVN+^q%GsSj_Re?`c38Qra zum6{2{0Qf}vZX1Dr3kF>PTH^pDDK1T*PuvFi)gpng4QTWdVdXJs`?{r?C-rqnp+TK z5}Os_L#3bm9lr=1ZWFkNNC{Jz*NuB_)iFz0*JAh*1gnF9*UG{g3i?RZ242)ca zacTm*r6JBAIb{TO+H~&4-9-(^B$Y*jO^~PWeDgT}aR>+NQVZPE#+7s&RqRu=MOgvh zUcgP<&K>GUsO5ebpP!#D0C{sdi?}yt(mOU;JC5^DTaQZ`nN7^aBI`kn zi*p(oT8s7G`&NcqpCRQZ&}1;$Wu%0_P8S1H8=^~@S`n%R&7q3qD$UB^8{WMI%=LWZ zoaPa6js8iDh-#!mBzq;W5~G}vmMAEIQL;Zm&;Bhge-X4tL!_tPdg+T>7rO?3lCS|0BHh>vXwvDALpVWaR zHN&UQUpcU*J*fjb_>NsF&~32g_v6h9!M*iR2;}<4Ip_v-{f3(xwX@;LNx?4YOs9~zs~^h)dfgY3`+^s z6mxLJsrjqk#AT7Wn&ovPhk#U!3I?FeYG`9vZ{q8EQk=`xjF$M{nY9y}R&* z2i|;(S)SVNSyai)(?JOSm4%9^)cPuB?IU6t}Y1;34i~k zxy$&1obFC%TE0ojc<{%LI{Q&)UE<|0jSS{c{& z;r{UhpnZ5fpvZYlRJ9DLz!yamc*cpE(q^rMBsi}j4iV%h#kkG>{Qwq*91R)V>0V8d zENN(qD7bfBs`t=#kXsys=0qenP&10dJBf6B#REa)!p0YPZEj zwSf-WhEj~%o9qZt*nLutng|vesp?|Lboik4^{TNh9JQ2khiUX>h%~(-OG&Ogm7*(o zXUt;@9R(_I?Tm%~#5E0b^EC_x`+(P;QBN10< zjAo-`43c5hYW$c9w-L1>ly=lqs`>fSy`e>l^pss;9%D5@Z?K}E znkh2KePl~eKTSaM#-pJM#f?-X+H}G?!Mr**^85G($$g2rpJ8`FZ#c7s8H6gKTe^P*l0Yd#0F5~_)VzX5kNqzp)V9Q`!5 z7EA8E6#tgLht}ioID9-TQY`+hOg=Z<-u2h4#rhw_3`O8xw#xxpEf{IFT1`lRDLhX2 zXnZ?BG*6i!B<`AAhS=&PxXH7Lm!yPAvwe8tSuJtKg*Gak(ANi%6GA}W{#u#16dj0Z)qnjr2edhB|*6F zk>mpoF zHZ03_qn1x0b|()^ZlR$nq@jjV8&(JatJN5Y#B>Z*&4?wll%5Qyj83nIRF!eVs1Yjp zC_mOYSjCkW^->tyjF*5b&s?P$K$SlZaC?3fsPa#jEGGR6S?9U}=wILjpe)nKq)?52 zQj&kq+N30#EXU&%D3mH`^Tj8!oNY^G_3zy2;LfPCX6#_a9HbR!zmy|{& zJgs0;8^C5T^G7H7{rsV^()`714!m&zg{0?{bsH-hvr|*06EjYx4?1+$VLPa0E zdF5J2_{(d0aNd(8GEW&tS++FRYgx-0$nQz9`B>L8?LfaAfL|7PQx_6RqJSZmJe+YYs8Cx#Oqi@&n zqeEVP1Iwa(qE0kl=biX=taFQH>1^a9+2%|Zatv!jJIV%WPpe_jq|vC7Se ztznFbGlIU{XpW7Ff=i7!0d5^t)1owO8uoX~AqLZG)#Ul=)O!Z}WmRUc?gJ;t9nPL;4&Yn#A?1iS4Lv85+B)ZHLnpHc}Qz>6wzf|x7l9L+znQW+9^%EkJ z$?yrmi9;+b>>u7w)I%pjMQaxy1~@#!f;kXaaBiF4-yeQ7l|4|gSdgP=@!E!@NMV_U zb6fQc(_K#_;7z6&N_M14xAjz`0+}kS;PLxkAHI&C-oL)#!KYsQNQ!k*SU~tIs_b*m zE>ML@AdFH}iHE8_LR zr7nDKKL2C;yurg8=B}PPp|qfv5JlsmVEq_zYWp63d@Xs0KYHuFN1S{qzI#n*c{N%> z+5%>V+oog4Y_}-=Lg6kCl>?E%=_{@iUI&u0m<#de7B)of3Xt1*BYMDP)9}l;Fe3td zO@#6Oju{aPcJl!CuL1ivR)gG8IZmr7t<~D23{*E898y+G=-1Q--#@rnC`jk}kNh?Y zOp(io%>DjfNN&zhQ0_l6-Ozqnix|Og`i1o%! z`Vm7x5-J0* z)68Kg)QhC zGks-p=hm(v>=67tNMYY*_mH|T#0`u+;E(o&_e(F8g4{*pr!^_|pg7_J_r-99twUEn z?R?)q+6~fXufGeF4ubjTJ#`PL4kD`aP~))F*4r2%X z5FzV8?`HQNexY{?h1{oWQh&0LNzkl{l5*8dYx7+-zp(tbKtrTXWw-IFS6+G>K0%t7 zn>yJnIBtY?h4>I5w}-;+vM`6gtT!5DD>AmN8oec$))}UrSZLMm^5HdFG3jERT~i#w)iJs&FL5S;Ae831vxQ|YEIy|k4XU%T-n zt%`$B&`rk7fce^O^<%+M@r+>8ush>g2JxGH_f)TfDxkz9u|UK$C6J1+7ZlgVzag6% zkU?BiySND2{~h1dCj;1db(8$fEi@Zi`VhK>kQ*UxA4Rf?EQfcf6-4i&^xujkljk>TPNE-j<@D--v#esr~#@^fOVtD+lK;qW^3osnZ~gagp~+9J zYfRX>Wy<(Y-Js`WVRpiWo+ECG5QQ=n%zl3GrTT%?qoQ?*x~MWBFjUb2CgSOc?m|aK z=TKolnmls4*scL9ozNed@v{pr@bhoI@d4`z$FMAv%TaF~ST%XrZA0Wu=MEp@8@Io> zV8vjAiQ1kXVB6DPA21Pf>Lod7&nr*%I8m{B%Z!JgNo5T@BUi3Vkt?mc*8a#ny_vpk z{*3#E)gESpm}Wn^e{&r-E8t0jJb)bgHisktxGJRY7Q*Cg}kR}VbPzu9?WP3e2R*X(|5>YP-0@`e4p(0q9H>-_h{eVBin zoR^;%Gx>yio=`8zF<+>HL6EQ~C_DulMH9cfs43TOgk+$EQyuFG5OC<8VPZmkPY|mj zo`5~#tA=Pk_i9}_R>fPFJ{Ac7R149zX>CP~jgTIh-nHH3l^$tLYb$D9g!HJQo@mDY zsP44X)=we6Xz3xJ^q}e(yq_-KH?=}P7duF8MUk6XFPd7R-)U+EpJ-|&96M;87%}QK z#8WiheVE?VSK^p@TI|E`)z94Q?cL8AP0zt+w6n$Bze}HCJ%M8><~~e31}8`Gs))HC zM15gB54E0q@dVKm@dV6$hPNkeeLYd1A!bcHLo@b;TjySV3dQNwe%z)x;C)J)R!>ne zbJU*P1~l5%)hxo#Bl@z(J1cWWi8I3mL6c7LM`UvysbIqF<<4%$R3Zp!bco6Sm6{WNm6ZVMW-G&V2RNW@t5>Yo*(fO>Mu_o$vLDv76khrSIw;O8L zA2!ctAO(}O%>DuJJEI@s>FMU}hL1EiKW}`Lcx#n)*gh&NUqjL%?H}$qxJV4BYXgab z6-MK?4f$!qbH@4k*iQD$Q7RPEmPXL%@~G!*KEdDjo;Z0tE45+Dl5MLE-Sg5H{|0jH zKiho7Y#yDmJdHAM_zmF|55z!TZ@#GyNY_79{v%~_f|JpBx}H-u*3Z{=Qp{`;6MMAD zPGK~vDC&7ZS?Q$lVy+WrJ>6$pdXP6K_6;^4;WrOLe=>lduAzGRc`I%h0Cn^96M7*D za_Yt5GbKgqP6}T(1dIMU`qS7Wbd(?jEV}o14)txEMK9Y{-k!bPdjAoJ(97lB%HI>DIopj!wgUtWgUo!l3I{tqqdVSL^e_e@NhW2* zdE4IvN9c(QDVL7OQ3hMquPJQy)jJty#%voa5~B=zZJZD2?QuQ`yhd+d)r0a^mn&nw zIC#Q~f76N`(XYX)VMN_A2}GkI@TG*;_sgM%TV78%`nv5|jSq(|(EWU*!8Yas<{a^1 z26(rCb2sYB*8yPXO$FAY@KF>O*p1_ub?)H6MuW*D3}#KSLk`vYXGuvTsFj*$cHkrJ zi0z5*F0tFkuGu_m>KMB10^Yg_m&Tl=dt2sCo(OB_Z-7hU{HxKhV9le+dCYfOMxPmT>u7OK8Thne*tzH#aOT%)cMhf_mdd%#^W^1bpEJ1QYDtgZ;T;_yUc< z0c^nN3Nv4$A*tofDc1@tsEFXC%0*B~*jn9*Qa&6YDxw|v&HI+T5=!)jW6wUf;X>E0 zDi@RIL>l|OTV_&WQE&=P$ca7kLfc;l+deB;ke5?nU068w&RwV9c#+n>xT8LHOx!^RQ3oU_MjbOX(jHf?j$^i2tBL z5#uTbss3>tv0z-l2(UQj!m$^QO5Up9Q0!5qFO?G?wkNOuU-7E%{1XFzR^p@GGeqWEVtPA^ykUT=uMTCyIySCeEF^= zuQi=MyzYLtU>b}WeA8&tsMwv~zmZ?E_p3~_60~TXtyY$)_cId24 ztpRIa{>V4%8h<60lV8KueLG_3-0SdJf-b(>&+~ZW^@rEM-;4I;?#g~jfA4<1{oV2_ z{N+%P=GT(+;NwuI$UmShqeGj8;N6&fQS0^P$rlwad zKr?ylmE8}d4zoxvCjXLo2wn_v>L=+3r!6ty&@nJeHDD^Z;kwol(#3Zw36neSITqt# z$F4AV5W?7xtlN@{gN%;Bd-V4Y>9Wh;?QN^uJm&U`>uK=%?l9YJO3HrQL$)InJE-D2 zWbfBCms7(Zx4reW?S)6SbE)xn=6-0Jqz4{NK@X-H_!w}qu0gWL(egRy5icBV%`$(f z$aXM{En{isbo5Sb=dL_L6OT5%lH0Vh>#;ZLr#5uhgQ*10L*|s(vqehQMqJ^zY@5i3r}@+C22iYncDQ(D+w9h+#9NRVC&^ zMGu|~F10-yr@WA0+gIhT+Yl`NA!|Ebap3}d47|?p(x_L^l1HI;5{NgAr_VT?&eRW{ zG^mBz4;Iw#I(5*-`{6T^i!wRi(I?Xd;A;#E$LM8hS_*e3DVAj)-?TAn&&=72H{G@Y zr_&x;zhwIH;%9BYeP{dr!;gQYgAGSUjz1TdSy_a=NIF`l6{W=3exCHk-tM=|YX13y zr_ra10*!I}OPsDmpNh}G@i82QoWkM#=;MR286UrJXm7X@2we{JH)2wZ(fLz@w^F(HMN{JfeRK@#&0zFk-WafB9&iLw`PQ<73DWZ*M5Qte6|}*zv^D!nTB9|*TSoNjn{XZaR*9pkFAN#RPmjE zz2Dc^-*nsoLs=kT@DrK)JG=+Hbuer*E^|Op7O41sz?Z+mhB&+-f|ln@Cv-Rq{}>MZ z$18L=3srn1{vM9u8J96SoJBgEA=l6|*7%zaXOX&F!Wnf9J>R*^(BUlB;b7Gx!Kt9~ zOJSSIM~Aam#dIh^PhJlk@cx82Ar*dc5=9G18@vZ5CS=1o*;|0)(72Su?vCI!iKK=9 z<{THY;^iD?w+c=jck$OLTVmioJI+nbX{S?WJg8H)M97Vo8PG!+zNbERf^(xG@IS)2 zQN`L0f$Lg0$8k8H96L~!{uw;dveaK3Qj_)UKbr-$P=>5_Az2Ymd%v{a)9 z94{i%uI0GjwH%Mpr~=1}jMs47B3K2kOXHssN8k~iH49BoaSf&PNkq)QFi^f}uSYeqOoJBgEOo!eIdJYIZ(cmoB z;UqZMOPwJsQ-iZuhcmhd4wtI1Ou!MAnIZKA(uFLjr!Fm&%yaC!$}RJAO;2Q7=+F~w zZikRN=5`3F`dugY2sjkJ6mrMjwY-FKr-sW#N)59GO2qt-NPPVYol@XOL|c8vRw7PS zkHlVHTK-a@YfEe;e0M5v9^GfIn}+eaZgStZ+(igFdt56I4&NPmbmVkjazg}pT!lIoeVAw7+OF)5UZ3BJ01=1Qau34Ht zo@>~>G)sfCNQX1@8hVBc&C=j3(&5OlAqPD|votu1bvRkh zaMXE1votu1bvXLF19Q?L6QNmvBQy)+4B)kp4Y%?zXU!@TngwWFvwq<+5whatLY+8n zGKxK?`1ZqmS9>o_YJ+u1kn1V2<5U$&7|DDnJ|O6=0eF24gdDO!gP;wLAX}m`TpM8bE1vb^nD{_vDLua?sRaN%OFA6K?`ge^FWbbuH~!e zMLu@pHf$C4f%3vWpA>d2wYl%21rZRBm7zjTw0t4E-hIP z$C$phGr5qKfB^~)X;kPZ&1?1G(h~KcC15T%5vEfCX<=`3jS463&$g8qvCp{noRF5r z{bwO9tO)>bhfAq!;8M{>v4pgyNhzKa(h}}~9vGrw0^eT1?AKn@#Fw(*ve|n(QXkbPp&bVRQ>VM3?vL!wLNaM_Nzk=URi_=}Ae` zr-MhBiGkDW;UWzbe*Yxyk&cRt#9qg`kOF&OJslD5-s!(+!pM2PgJUfbKC4o8MP#Lp zi2i9|^zkEEn}^ep11bj_TjDH>7ACm%iHiNnC%C_xZFW`k`oQ7K#+57{9!S_#6;eBF zJV?Ayi(XG-B7v97a;&8RVIL>HI5Dm+lO{ZHD*k244sL zCL`z%g9pbG2kZ3e<viVZwG4L$INXLnR)bf?E%9*=n_{=s2kAwHV}9tdFk z=g9yiATzLUet`EDm+dah!R1e;C%%o7CAst=d}kW90f~t4KU9U>@VD>1^OGfKE0C~pEzX-Q zSD1Q-Df_Nq6U(MUYlf#}-Cnu5@s|55_8;Ez)G>PL$feackBLhgQ~1W@qCvawTk&S| zQkCO;()PIWgSt-hyD5Qv`UFnETu1kah|uDSh)8$e;tKZ&Ia=;mAfU~6ltWa#jM{D- zyirI=4#ViE+))>UQ@piMet6-rRh_rnzJ1}Jx0k*;ecLXZt!qfZV=qrCT6@p38&7q; z_@OfNzW4g8eIH!3=I#_BU-i)o8(4KgsB&S~INPc5SNA5cUunj(yKD*O z$Wg}J5w^F2aTre9H%il$yY77Q-MLoVcFvjew#U_Y-5cyb9^PP6U|`>(ia;NeXK{t; zI<`QKgc$hrHL*L17`nk2op8~nvb3k)+id&pV8@XWyZ3J0-G=kD>W{IX(rkg{`E2q# z2OhiBImALeYc?&ZtPCq+pJ4UJX>YAJs;+{M+(?2Ls3O$%lG?6zAl)a^oeVHAMPWr1 zijS@zc(sTLU6itOS2v_9$D*(L;F-NtedV$Tw~$fzGHMnOgI&0VSZ%x2Bz##0X*%HL z6X+8*9{cL6sBCdXV5I6=T%lf9S?PP#4$%-(nf1A@{Ln6bdZ2Vlb1tY!ui5s0w|s6( z`=Y{Tw*OHYxc*mG zx@E%Tih^Y~lybi~KcUEYn>e8;J+uGyr#AgJXA_|*;q3=h^nZI^)BpWYqW{fdM3BZd z_KD#*&V&soNn~VZNJ2zJ%pi+jf8yTXJs4a1#aR?(;J`sC!M%IO4#MjHBrIO#1BQWG z$oH(^Y4K{oD6(iSHH(bG%UYcCrn$@EEytc_zdH(@)o$o$E^nJ08$Tc-aYo+qc{j{W zN*_LO!jQaKqv<;5^U;;Pwew=Oq()hSqkQ`&)a6WXOB!~?=6OpqeTW;`VI89VC9#^ zrym(z(J#Que{_Y{b>3@Ud&~pCN%VXGT8{BM=KOOlm*FE5Xe z?+>%Dy#J-TTm1vVT=F+f-0)E6xvm>F4R^`-^5@z!>%Mi2?q5yGran_@isv*{j(z{7 zw`kp=F;g~Q?zF|BE`nzMO{BmFg6ke3hGGAu zF`Vn79RI#kZU?0%l4JWt`(iLSzO7I~IpS1ezWq6^goks9$9qc9LVJN$!p*tFU3}J= z#4_7H0VVi+xj<1w`sS2(`4^g2hL+fiH7JhnA5N=s6Q5-$ON_JEX(dd~c%J0`Qdy$N zo~)HH$`bYiIGq@L(Mn*qv)c72Wjcmi}t&S=hM`fh^@ZqND||l;=sW%8#!$n=av70CxY7lkI(!L#xVY!sqqMY zyRWpmx;S|B1N?J6Jc6HrYaw)sC_70PzSbt=99M=foH*?}l-vg`!(B|M)BY8bdh#OH zmETUUFl>RqCSVWv9qc)Flzqi)O1e^^+@XA{Qx;*0YuFJ2k!LDOnXSqJ$`i`5YTc+E3x7Xdh+=sYVxvz6S=6=Z| z)MJdtOpnDLcX)Jryz21}&jFruJs(QA~~TCXeKsovAQZ}mRp{k~76&lI0qd`|mD z`D>TGRTr@8Eu(tskbb&thd}_*=2do^19^%%a@ja z56BvD`+!FV>>u#@fDZ?JHQ-W&F~T<@JR&6`D`H$kWkgHFl8Cht`yviUydQBc;$nmi z^Tz@r!y`*0mql)g+#dNvhP)T&9cPIf9G4Y0DQ-^Ovbfvh9*=uI?$x-r z<35l3F7DSjTf8y8BECAlA$~*rZSnWUACEs3|L+8vkd!biAt&L!gdGXrCZ;78Bu-77 zlei>tL*jjjyOTVU>XYtH`YJg+c}?=ODTb86Dak3TQZ}UQN$s85KXpp#_S6e$1JcUV zI@3N#k4SGwKal=b`sws<(l2LtWQ1hQ&RCN1YR20c?`3?R@!inep&N$2IrO8U-wX>F z7BZ}2SoN@mVUG^mJ?xv|BZfB*Up9Q_@Uz3e9RB_A-$sxTE+c$K^cgW>M8$~e5gSLm zIO6M(=8+X6?;QE&D8EsSqjrtjo2h0_%iNLq?<~ws%z8QNjjRu|S@x*x8?ztH-krTa z`^D_nvfs&mKW7N$ZY<4tI@gd}m-|HSuht~%eCxqHzdTD`SKijV(|PCfzR9~f+Aw@Ik( z;PRO8F{NW38FP5d$-;)hd4-D#?=5`2@I>L4WBZM*9Q*3H#Bq0w`>n`Yw7clXqD#fO z#Z!x0i`N%#FaBbD!1#pmQ^(IAf5-SAC-j@Ja>C0KzA5Qll36mgq`YKl$%7@&mAqf_ z!$kAMi4!+Ye1GEirJ1FjfBvuR;YnnY@1&qfnQCr_JPKl#qdZspV52n|gWLGji} ztW+z@Di7Qcc*EmW!>V$s3ajp^`n0-V^~CDB>IK!SsyA2vFk?&&so7aOwDz9blXV_- zBkE?z?&Qp!v*Kp0n{}anaQ)i);|*~QH#BT+cz<@#>>0C9&;DZePjjN@RL;45 z&XGpX#tDrp8}~JS*EFDMYSYH1Q_bPc_qOzHiEK%1scbpiaFu|d0)3Cwk~dcqV?0Z+_vrQ?(MDZi`zG}-`9S=BdTLg$G(n#%}<=)H2>lG=N3dS zXkPHQ1urakXTd)fe7}$`bY1AXFnnR+!etBJSoqPxZx&u%|tQR1Tci=J8Z)}oIV zeY@!DV(-P~#RC_|FV0>(adF+^1&h}$zI*Ym#m_B1y7(W9zh6R^L@gP+q;kpJB`@6Q zdgFu}@44~hQtzcXOAD7ibd!2h)ps;5`Ix$5+)i>vIbeOFsn zr>`Enx_ou*>WW*Z8lASd+G9?3$`I^VY0fvuVxNHIJ^@ zyXMfE_tt#A=C`$OYx}JovNm&V$=ceri`H&jyKU|6wJ)tbw)X7WA39m5UuQ_?pw86J z?9PduwVfTEYdY`je6;iF&Nn(wb$-?P%R0Kwb6wE7LFBwYg^Y#U9Wdt+0cK( zRcX-a?IU!OzYtgS6Y=+EO+g3`PsY4`^74hNJKf50s)GXW20jk?pL&!W6k#v) z0{JzD1S#9en}!$?t=5wy<0;Z+*hO-g8+nuMCu7)tdy_hiJb`;nEW^GPeVb^Ok7p|F zk0LJ{*M7C$ehi@(!Y>d8<0{8hgewi#Bwn87+qWX#V>IJgI zFdN|{T%$;eVGYt-Ns8iQKg=Gry{LYH{0NeQed1D#xC|eVCF%|tp258lpnnwEY3L*y z)dS>!DT*9`hiikniae{1u^(cO+D|K$JRc+Sc+UPje+F372%Krmxc2Mx>g`v%Vptw30ZKN<=Hg8 zbADfU883mKTo#an^QFl_$Y21EV>~inmjjoD^TqXSH;ECl;PP->kcE&LLZNrSeSOI5 zF7W?JD0GxRhx!ZJIe$2<{~_f1%ysHdL+CoM57&7f3cW`?|2VYobL1QL+Yf_|2yP?L z(@VlmpsQS8xxENpiO_z(b6Q!1`|wCIj8}6xa-7$PhBkbl%6r1zz~k#fQwmvP@ z|IQ)%#O?;0J11nnpG@I8&-IS$tk4?=tt~VScC|>&rz;TdW>qv>-Nt&+NA0CZ55pCx zwy+e0lQ=AHcUYSeZj2@2IKLqr^o%q-i?EiAWZ#p~0^hITwGr0`_9H@PKpU62;d|&E zY)r`SsC|v2ol|4%CppgzoAC^6M=iIX9!(8eL$YdC^B^5=QIPeC5omx9X_ zc&pU!$O4h~tNlf^O~WuNDUIJ(_Msfgpw6|T9M_rK>^pcnf^(*3;{G&lSB3*<*ACfV z6y<+}ecF%)Ok;mMKihW2xB&6ZXg3|WxGnPg$m4ZH-FAvP^LB;vR<L-t`DmhpT0D)lhhLHQm)+nr+A3>f^K!1?IRD~^xz3NRhK zGJJwEGspo8b1IYj_U#mcJV;?1#s|oX*b%DJ5k@0XpfH}4LdjOhIbUF zQ-N<Q(+aBaaHH-{n=SjVB7YTBG zk+kvt0q-}kyGcGSqAn#tlwAE*2_kFI{uBOA!}~o0@o0EtmtZU*+H{fx8EmLCbXEPC zG|BhTG=wv8-L5`L#&Wwbd`Au%Jn#%}$7{(9!%nhB!F(W*=6Q~57nx_sw@2^`HaJ4G ze}sMqT);<9;{7)RR~)WNTvKo@!BxWJC_{LU$q_QlY2;lbIth7;5YI=P&sIB%Oa7sJ zDZe-#&MU(P(t#Om2cW-|T>rSNh2BDUjM!wG?LvQvkeM#T9>FiP3rh?UxR-?YVmH>Y zk}Llt74G`d&g7@?e`zli{ z(%ndZVBe)aWZ!B!hcwrR!}e}9!M=mH4ctEUb~_3EqDsJ%q3d^KiOW*ZO7qN(trv)s(9jF;^6ZDj`x$obpiRKy_6!~XPauERp#zT4 z@qQ8QJ>-fyowHyl9y@P09-fM*+i&kqM*{{IRceEq+MTxPs&)k6Cj2VeiU zp>E#}JO7jL`aX@LJ@`+dqwW4(c#x!`?Wn@FlaR|7w2;TIqIq*%S8V9FP0upOTHP2$Tnjq8?(;!@Eo{ z&n*d$gleI3oXq6yHgk6|Dwt};)U$;BGn1I7B6A>rI3a6d4(3^y?N^PVm_4xCWg{y$ z6N+hnXz45AwBf)eaWt|~Voe2px}C~6+&`WBFz$Psc3E6x&WHLan`=&kfY z+D*Twb{5Ri*z@dl_9pv;{iIMu!HKipibYwkbSXD0cPsZO4=RrN*t^L~WG|_<7oe8Jey44XZMAK_z2079pJAU)X4!MEzDs&zfB1KZ>FPUIkJ|rr z^{8#74PV7qx7zw%y@wE+ht2(Jz0KA38LszjuAh~E*5~}<&oKA+v!&;~K3j6$^V95e z|2+5Ixr^t%K6mci*>k7QeRS@`xg+P^ICsyv`RCdRIoIc$`#IN78_(L#UOxNt**DHc zoDDzQ_iWHvzq8(Fl`~(QdH2lGk8yOYQp_d_E#stWf0&tf-QSDXrT^z7dSBx2i9apo zDDkHSHaqe`Cgn9{-eDH~WaOJUPlW#;IqQ!2{KN+*^~ z7++j84#zeZyuCc# z-CSKvMuVy_N(P&|X_d8Gi7@--Ra>l<>ipQjW^14N+}OcZOI}sCx!T-~K#jEI;|{Vc z)!pVQb9W?yYNza~?o5=Nd0oj&tz@QNlKPm3li?hN#oT=~*J3_Er%WhEd}FSq!rXmP z#K(!a8YvQI%fhf_|q%rQpz{6hH6ZkE$cOUlFeUogfKs=B)J zEatqfs;=q-_T@7yW*ipm6;;nGDeU&2 zFtxm!MdX?5tHBKXA7u$k4-WIy%K*S1-zH!Sm;(-ng>g1)IFLzZAkn>iLb;YUlNrH# zNoHJ3MK`PBcV2ef>0QR}EO*?|AFr}NwuKYRySmkgf?A6e9N$pgy?h3=Yc>~*#i!fr z*WfTqm!GdWBMvm8tQkZX)HayA4UyeO{*?0r&`JJC7k(fTuV1y`VlWUy`udqOEC9pd zSS{8n`G0VmnB=% zB4lu~tPK;(#Uom-wYyhNH>s+TPj$yx@hnu|+Ql{PzZKRw@ZYJxts+n6)5O~409eL zmh9p9?KVZY;PQcRL@rnI?BV8e8cZCeK}L79*;|lo5W{DV&yKn*I^LzXjnl#*YfiCCpJdN*txPh3UEDWrv^*|CGs3})}K&~+2`WYTpLr<6Z~8Q11@rR94WWjR&Z6?+EYUimX-LNY}z zXN<^Mk2ziv$9AH|Wk0`e%QXtBNGoj{y zs@=(SKv0qAqU9|Yc@_L`58)imbTeeSWV&X0Fi#e|2ULSH^lFjo+@%&L*zLDpfEZN;Ofa3Axu)Fcy z6u+fY%fn!j=Du$Rclli8lBz%h)a7#_HuF~3uzYiwnJQ(W`AS)cVh3z(b#d}k93d(2_DQh9i$dlxsMD-zb zc>p!g19Z!t(upxKg$GP_yhmKePwl4bx+5m?-^>Y9x{d3)N!gUC<$EaIRIz5`Mv~pX zusd;LdAGTLMPYX>B0l~11d!~CwzilUe&IK!t+K71$HWhhh`&CS1pfA3B#;#0%Oj9< zV1A2}hY2_FO@e(=m!Kbu*}l%dHtg4puOIAZd*ycfH?|i07q*w|Uy**c=XtsR{hy2W z$OZB%CXL3B6XbQu5XVI>k~8Q}6IyD6Hw?4u9^zj{DwcJSR$N+~V&Yho4LE{y*m^}9dJ^TXlV zD5b!4Zh(Kp1UI@XaU<^Vn|Q(^y)paG7j1(-&U)yLb|DaUA4K|M{$D@rDicCNQJ*jp zPAp^qi6D_A3SOFMv=cFyiW-Z0#RSxYvN4di~b3p=Pvx~PGyBDawr$xmb>xeI&r9wPrBKag!?7x{(!jP~&% z@>lXEd7bQrrq_@y(10V5;~V5H%;z;x98pNV0{2dkcgb z@+@`39=yCu;6=U3Rbrz))EBES{fQlIc`w=X&)Ly`_f?AkM^e_G?bdLAznDv z&-|NO_!l}(hKPbED4GtUF?2AEr9)^O_P$Agmn(^UK$9^cIF+VhQg8+xN{3OL4?suK zQ8bfgVGI0E$$6SXbE%c)(a|(teDxR7vDjO+2y>Fh(+Q-T?7@2AiL{iK(MfbNEvFT9 z3Y|(WlPlyiashk9PN$Xh2Al*?4PR6Zyis*@CY?p=X#JQ~^hUar-b6km=g3FoH2Ii(Le7#?>dvf*ln1NdIxqgzKh;X@1a}iy*+*lc=;ac@mtWH z^l_YH{TKQK{VUxKzgaikL-*3B=sx;4x}QEx?nPJP8Tu@Jjy_Lczd7wLEOpYYuMK!2n^(Vyur+@nH&qyMIt=w*6^ zUZpm8Ckgt$IKYyr%z*u2P3YaaGB@VVcrVinGjM&FFY{ymtQYIe0$3otfI+M;e471O ze-^?*(KQZZ;mpDYun4STjbZ~?G#kWX&^vgF4Q8=qKY5zG%7&1A$&2JAmO!3oiR51_N%(iL$c3eoo5=$#gAHZF*l?VgcsEX)+)D02f9w%*E9MJ7 zMmCe%$sObwHj<5EnJkNCvmBPotSpa>X8EjujbVjsEE~s)STP%q8N?-QA}eKOY!aKy z%2@@Q!ltrm+?T{|U{$P|&0saGmesMDY!<7B?`bxh!x~u=Yi2EME}O?%SsQC-9c(^Z zz!qXY@?y4x-N=@*o3KICa<+o4WUJU}wuY@`oopRj&$`$Kb~D?^HnGiY3%iBg%5Gz~ zvpd+G>@IdUyN7LM_pSJ)x;Dm%-go_)qHu+P~S>`TnE z{+fNmzGWBLckG|+d-emi#rlc;%zk0NvVXDP*uU8&b{U6lU1c_AhaZ?K48CAhF(^iy zDvC4Fa2l#RPA>CQyx`~dQG69Y#b3dZ21{A8Lv!GN|cF8sZyp)QYI_qm_a^8nW{`vrYn`o z4N8?#t;|qrlv<@unW@ZD>Xim%wlYU)RGO4#rA3*m%u`yGHlv~s;^VV&U0deYwYJr?wAQ&5%xbNkU&n8{6;#)Bw2P>BK}|zzO-Iwr#=3?4mM5G> zb**)64Q&ESR#SCNYfH1KS__R?Gg|BB*BPrtV9IKl)zVxy$5gF_?m0cM+-rK`YEErS zyIO-EV{T0~z!__`AQ!N!+f7!9q)sBSYDnrt;AX{h)ipJB&FyY=demfRzBxE?Cx}#oY=7`8>E$&sIS4osC7{deBFx!1h4{G<>J#mjh zCt5w`T$7m9T36THSlwLPP-7e`By4OHfyY?qa*a+2<5-PvjUrITa{e^p$5^C2->f}f zp*NOQ~y~Wh$1^ZIRL~)}-4a0?*?5j^)hLV;vS_=06f~A z62?*uOuGowQZDs&{20rGsEr*WFqO$#b;w$kX|?JQfuXFmp?Q{}ga3M#IoHXv!#QOt zlUm%Nh3=DkD0E-o6t8fKFY1XKr)YIuECRPFx-Pjb)}w~TmgZS)Zdsfbtyr}lHDy^v zmI)Ked4u3y+}2p#R5+ZI_|?LCT{8hC3XGCazh9&jses+*-1^liW+*Wfb< zd}?-Gd$nP7HAoX}Us6W0N#aze;FbcMhSGY(TsTsW&rn!BcWyOIrD;ZOH5=E#iaJ<% z0~A(J!NxZzCG{)?t4$J?x)?VUezTodQRTo4 zb42wTMfEg7vvXK;2V2-+YSHSbwAQy6+js>N3?fk4QBR3qnTtBs-~u^@7A^n}4%R`I z_jP1?NSK=Ram`?$)56wloZZZJ(bE+digXx zmafM#9I@1RJ*MMIb>K=!PI25#(4i#gP!e<~i8_=-9ZI4DN_=9n14^O}FELfm(;+A7 zkP~&tNjl^t9deQmIZ5Y5l8z%u$C0GtNYZg6={S;f9LYM4WF1Gcjw4yek*wqB;Y+fP zBU#6htm8=5air>0rRqQAKVPo(Nkr0G

9nNjw4~{@r0I~;bjWEs}nhrT# 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

!GC&_!#ZtN*Mh&_?3T(2tal^%sA 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 tF{6TqYG~a+&=^Ld*=$fFp9q2yx(>MC>Dm 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�?uC|3&0+ngjt%GBCAB^%e& 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

_T_kl)Xoan=RX{3lY#VQTZ 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 literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Open_Sans/OpenSans-SemiBold.ttf b/ui/src/assets/fonts/Open_Sans/OpenSans-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..54e7059cf36359cb5a3860085714a95306af0dea GIT binary patch literal 100820 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 DEZ%x^ literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Open_Sans/OpenSans-SemiBoldItalic.ttf b/ui/src/assets/fonts/Open_Sans/OpenSans-SemiBoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..aebcf1421226d045b8043d26433d780fa365b7de GIT binary patch literal 92180 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 OmxABnc!Ht?`Tqc{BF`NF literal 0 HcmV?d00001 diff --git a/ui/src/assets/img/issue-bulb.png b/ui/src/assets/img/issue-bulb.png new file mode 100644 index 0000000000000000000000000000000000000000..28ee73514cb9cde411720ba5fcf962d2910318cc GIT binary patch literal 946 zcmV;j15NyiP)x_#@^J?Gq8aK+=CQ;u=;|M{wT^(p{v-;UV- zB*Hw_Bt(>jqL(?$UoES*TW+0MiD_lCdo7q7k0XAT&8L%uVwmE}gpNz0)eu=+R#TM~ zi;IeB&+x^uRpW8{5?BD5Of;*shthrdvP;b_an!}w4jpAtosu}o+2l(WsvsL}c%SAu zU?%{{vH0PEj2fV$5n3P8X%1*zMn?--RpZ(mYo>I1PZ_EwFontW(s^x^asiB6-zpyb zCL2~6+5RDsdy_Oi;k}d3$oe;EngPpV&UEoBv-$Tp`v@h;G`*JckD#BR*e%%p{fJnn z)H^%!b|6$v_~7g-hI>ar;?-I<+5yIVjBU=CFTW8fDwJKbX*Xh)fpZ%Lu-}cQ&^@~8 z4oZ!9=lFB_y(6ym2qTs=wf8`KnU4hMQ#oWPv@=pMNL-gQ)wXsLtI5(>47(=j?+ECJ z)D5glC^v+)wPLEUah_3o11kn8`eJkv%EvkRQU4j*T1D-&1b3+F0fkVTFJZPItUYK| zfvG*{fJow$ifC5?FbNO=F+5g|ja)+;HRP)~iyWQ_&`bdRx>$*Jl4)gp^juh3Vn32L zU`bNj%#0Qesgblxw2~Sse!0wQHs5BrEVf{tuHykN%0s-1Y6{c(q&mJO+-YJdiVC-r z3*Be3=|}47x=4By4)XwBx4=R@mK1&vu2U)xSZ$E~zRtF89v@qlwxU_*V!~4id?dQv zVPk$0t>!@|oTSKoneT`sf6Dv>S1r+f!)(@Gwo`EQ=1tAvX`gO)Pf|a?={KY}heS~( zT@d4>15{f`Crks7N-t>FbNW@uy?c#k_+oE9d?*F=ZV&DH#AZ)y&qN<7G;!Grjufb? zmo#xs(&SQU6?g9%Pw}!hLyF_CTQ{cRyD!(A?KaqMNp0oEs1mw~7Rr`X#7++?1|%O$WD@{!3Opi<85p>QL70(Y)*K0-AY*Zm zyA#8@b22Z19F}xPUq=Rpjs4tz5?O)#W1cRKAr*|V0Xqc`83;!{LhbvUerhx0fqxGCaSdczRP>?DeWyYSw+p;>ml? zf4)=oK7LY@&H4GqW^^$NbR83tEA`HNUOa6 w*_mdKI;Vst0J?E;LjV8( literal 0 HcmV?d00001 diff --git a/ui/src/assets/img/running-bulb.png b/ui/src/assets/img/running-bulb.png new file mode 100644 index 0000000000000000000000000000000000000000..4f23b21d43780f4ebc6ec89ca0959460be7c82ee GIT binary patch literal 1016 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 z

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 T|0R&U00000NkvXXu0mjf)KbQX literal 0 HcmV?d00001 diff --git a/ui/src/assets/img/service-icons/bitwarden.png b/ui/src/assets/img/service-icons/bitwarden.png new file mode 100644 index 0000000000000000000000000000000000000000..04d8a90525b91a0f14b2beb0795b444c72310ad4 GIT binary patch literal 12435 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 literal 0 HcmV?d00001 diff --git a/ui/src/assets/img/service-icons/btc-rpc-proxy.png b/ui/src/assets/img/service-icons/btc-rpc-proxy.png new file mode 100644 index 0000000000000000000000000000000000000000..78e57d65e11087fb63419cdb8ae4ef4bf902fa9f GIT binary patch literal 58548 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 literal 0 HcmV?d00001 diff --git a/ui/src/assets/img/service-icons/c-lightning.png b/ui/src/assets/img/service-icons/c-lightning.png new file mode 100644 index 0000000000000000000000000000000000000000..9b53c1a5cc120f02ca5577ca002f1ad6a462b71d GIT binary patch literal 52891 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%0AF<_^d!&f z<<)2ghYP?D4iZg|1f&ke?o9{15!<=btI|b?N+;YSMNE2`onyYUD-Zm+JKAOZbxL9c zqxtgV5(H<5)m>V7hBPm9Q}(f z&`@22^fkQvpYo3Em+ZyyB)_26PgWac0b641>@CcENb0hXRV)~%N1Lfd71(9Bh-W$5 z)l@gwkG$2wxd)1pt0kOlYNZbXB_5!nBY<6)AA9fxs<4xHpCdYQv?@4kSw|O)odwmbb|(xIjt84os)icZ`^yLO z*I=iyGX$~y+!!CTk#I=ouZAw?8nd0v%4aD8lUGyQ+PbYm-lbbNacRm8_i zV#jPTHO0sF`Y zEFwNFjb2=2dAYv8z`Gz1zWAwX;**x`UWd2$R6s+zR%znp1W4{-`ZBVQ%3fFg!x;!K zgSP`jODGwg0ue146kyh7!&+k`Vb504ar?tb1mW;s(|odQV!Fz)Lhv5*ijpT`$rj>G zt`mDD4{hk+M|oCsT7#oN#{xtx3^v3G_85ls;PS*}&83#lx>cOZZX;Dc-|PFx6&}eZ zYGt*vS&v>1l%K5ddh<`$TU4GEquak7TrkkL)Q=RF zG1?IT*R)ca$_EbMC5UAKK)U=BA0u~XB0;i3s-SvJE^T4E zk3f*?e!azLhh;&-U+(#1T&#(MP7C#7oBhsGv9(pmLX`bFD@oliexepiOR#pIyDYHx9LA-N;m#E!hr%0lsJ9Kv_g``I4 zBNx~s13?c&2G^@ZYsN$X@u1H-W@-KuX~f{zHR`UGyh`t6s?5Msp9r_8I3c%PXxHIi z(Z2DAK^~YQ0c2-NvV92Zi~fFk=emU6tjWY}_uHrU*)4>ZD?K<5)ur-^J~%E8MayL> znF_waRTPlCzgSl}LKkn*B8nQio!t<1Z3HhF-u~UB$?lm3_OvEao@(>1KS7aI4^kHsCM>p&Aur$lf|n%A|fgOh1mjRDqh0@XwDH3g_wFBv}&+O9?agNn7+uD^s7gre$i@Ui0BkVP|^3=n%RlVSglrHlIU*hEk@be-rqre>Xxa6ew)%J$Y;YlzP zT%cmNYRZ`@=1zQ9lUF%Lu_x#mq}4)^o-H~^J`D-_%(Gz+Mzw;j<>g(TIsWzHcUzGB zoro`GW3zlDz3UBl{??V|W0-=?1_BVFl=FNy^5WktqwCV{=mL0@BV_BI z!F!=+mmP;1*^m7#b^Dk}DxTcg%an#um5X2-Y(B!Up242KP>!Ih14c1ZAs;5-6SAe# z6!z1HidvA*noq;td_!DF2Q_3FSWPoziN}qCx|^v0{uEP)TCegk!OKI?3~I~@G!6*UhoH4GrN5oF=rH?s9w z2t%#6G&uRg6hyC=8h)@s*f9X3meNzj^`ywo*T!>X@ph$#B*(npdVg8z3G^P={X_F9 z-}^Fv5Cy)Gaxv6vPjCi2YInorE>zV88^*%pNb3Xdmskf=mCq^HS+`UNuk2=Qi*a2u zu|_rVWNW!~*C%fL){Q&}Xvl^FW*CRp#KMIMSD%u(+k_O6;%R1<#c9V`lR^r(bnpt>ydz~2h< zYQwb^xqgOLCiVCG*zxs$qFjWgOgc*7?UY8OV7~U zF{%Y|)eq;@(XDH{jZSDxPgoj3b2+jwlNf#Rm(L1pZ}U_jZ=+^XP5~bg2w|wS1qBh5{(msf$w`#W-_nc z5(zusr_ab>jZJbAmNx{>sWygp_eGa`O!_ADjD=IzH7kVPeO}0-!eu$H`-4Mo{Zgp2$pS7y6>%0lBk$L~2W> zE@jhUq!bQ$5gsOHqWL}w6Iu)-{7XXf| z6&8j+n%3}>?6z2b8nT*{3So)Y^RlNnQl__l{7S>Log5=)*B;@Kt5HkTIE<;c-sBjW z_lf3sy_o%nahTU~>UGGw#LaW#Iea_zmjfZhCd}f`YDu|CV#j0{?#`P))iN`uuDK;02CvTN%Z?l z4?pN8fWIlyVdt4-vL6Y-c}>NO$PstN-Ib7-)jaY)(or%knX9RIw>IY4%YX6h4$3>2 zf33}vL*W$|S88+lKWflV6hN<5>O)mN4SukJ)s;Qy|0Ya-%I>0@xTp5zO{4R=i|ty( zWIJOz*uU&7`j@WhRs-tknuAlg6t5d)n_Ld&#rcezkv8w?)vjs)QrcSk-asB$D}F9P1Od}`57Dc)Lhn$mOlIjh!x_kwC|h)D>vy&^y`C7|NN>Eb7*a{&F@;M-)l>S zPxQtjEHr(L9Nbr8O!>jeyx8<%BJr7L|7?luqkH8KW09I8F~iIDNPLvQ!v+?f2-#8d zOO&sJ;P&NDDyJrGI@1HeiBh!Nv&H}R3(67Fr!>;>)F{uBh zbH{6+8cg^~_;Sa?quRyxa5Oe=+d^UJaz=BJ`13^7Y!(z<)^QPM7R_pV4hb@gNI3mk zIG6+QHVL?*$Ub}NT}z+5D5*@bYAxP~Ssf>}I}h#>q5VUKK#lEfh7eL~Yi7*yng)ZT z@Ok*Bu;A6H0;=?LY)KR^jJrsWB1bsB4$L= zTn@f*;)`AZg!9EeAGuDcCq_B5BIOxfj5P!V%5oQv%KPy7@f$@xBO3&!{)>WJ#JUZZ zab0$$e7s~jV@<#~EbQF(09J9d2%)*!aJXix^Z{uPunL?HF8JEnp{=!>$Fil}4jhh% zk~V9vKCbAgWrllvacep}wD}4?JyT<(McKANo**1H$LNC`4>am!#Ob;MQUs>#@ha`g zJK?$8Cck_uI%dgWzsq!Nd6Acb9B;ojtlA9qxt;pcsv(xL-XB8nc!d=Y7SfB@$^rev z*BwR$i}-Vo0I}@~1Yu zNG7QS9mFhgt{crYZsaYH*L64_KCv63uqz-nkw3)NE@>TXbIKZm!XaOY*y~yj-~7w) z$t`fdvvak9gx$1d^s$FS+A|ZqT*g&QkbJH$l%(?TP^5OirnE!t`KB)Dj$iR>E_TrC zkKf0*ywh|&n4w3s-(my&GVy85@Il#H?}N0Z%>&iJZu^9D@2*ABVU(#qRWxDbhQQ!x zdyBSgg$F1L750NyVVXi@i!`M!t0?c=y>A5F0$(9 zF|NyiB3NHmy`)_d zLJ^kzxk+E8tEaOe5&^_a3l%{p6sQ^`BN-H|jry1@6_MmJfPq)&*yI?d_5^k5JrQ;M zB2JfMzy4xsG?4L8brh%`M`cHgow6;HY(vRo*Z)Oob8#XXi z({W&cZi8H@6(-#R1W@|aNOLw6z58KbVgNzYg(t@PWJ~u6J+e-#g?cMpA0IbeMLo-5 z&tSo3(^r3{o^v@PuzYs8Yj;JPO*_c`_19|2bvIpP*uL3qWf#Ts=U*4;tH3JU8(LjJ zPgsk;nMQnR->P9A6C__;dF50gXzsCaxq^kBZ*i*@y{Ukgt7wvEv><$P4M?`g?ZU^c zI`#Q(gvA*Mqd67IE7%b2IFSnd(|e(`fxhF z1x@Z@G)qcfG>;fvV1Xnbj8Ua(?T9SD&Pza}c1P6vs&X4h$9WNgj)!A=l#^T2`<|qI zGYcTC6kU#uyst_v@WQdYsXD8JX2et!Zm_o~xD)ZJ&hkK>KYRj3eQzL9;u<|d9agr< zuWLWRdFfU9`c*%6-JB7(jf~We|I8T35WG>^%qt;pNGna;E6MtJNo6bPS?x+WQ=@A^I0g~9)~aM*9{d(h%##Mc`KMgq^+F9YkmmtTZNJfBeI!%xLwoSI zG*=g(TEyR@H1xtM9X1oH>Mh z`e^zy7+N@xqJ1H6X^U=hbi!<3ByhooyU7ENqXwf6RWgp#=&Qd|K%NdhF{9qUW_!U; zm1!((4_a*VP+8Z>O{XNfEN8;v*>WSt)g*)IK>5d0oNkEzzbN+m{2dRjp&k9&bwZIN08cFQw z@k7nzKzX1|g{n`@INQVA_>6yQ{wT$esbVATERE2Q7+e%71sa`AOrh<1b$I=3rn~OQ z+4A)5>0vv$=R>GKM`drv4}i%FGeQp)h_YHb?;iDb>nHVzNvR6yCuT~q;GuUKc$5xx zVZ}{9Aw*LoIIX+kgBq$F;k^&TkauD?R_5Kv4RQe*ylk+Z8YAb&$@``q0ideU#sl)r zu^Z;haUu?Wdx#J&Z?0~&t}A!1>>0P-;o{BphIZ!%Z{!-o3sZdqlYI569W{<(E#lse zRt!|aZnca)N-uQqiA0G`BF?^ds*3*dJ@KCE#>&~}Y5Yz5?!^d*RiVB(qt~$Eh?JxQ z)ArrFzjM`1tS^w@wCLOIV*|hwpHzbP7Q~DK*R2&v-_q4isbgBt#W^Cb@e7ZP9G=%8 zI`Wx7^@A;7s)S0FE@{OXG)dc+i^+n@!`9LU1H4n;CcX@#MHa?zTs9E=wIhYd754L& z2$@6WOwdtHK@mKvPu54lRq3ND5m~;tOyoJvD{DS^;xZRWy)kPg$ww$EOSk^S+Q0<1 z!(_Dj`+)m8w3Y#+!^QRbP_s1XJVpZhV)VVlIZ!`h)ML*#E0+&m#pl8Kjo;Qa?JR%R znguB5IeWl(Dh0TwA)vN#VrJjmF9vZ3*E&l^c`3gTD!54YILb=ZLrmsMxlU161G-^* z`EZV0!XY6aEEKv!(Y!?dzwUngeR1@PEK6&Do^#HV`girKL{K4f-Gr6*+Y=L*M zUGc#LgW$W4>fOPp-yOYGw{=TA2P!(~emIZB-lXZ`<5G?e3a1SUl!sSbjqL~@J?>l3 zqF0#FP!y@HN(i3lQ9v&y*GsLSubQ;lPO>#lvVW=p;{(cVmh-L8{$epXGj-|sj)g*k zBGxxHPiF!511kGs9%k5(t|xtunRy+B&rve~nRH+`yq`mU3bV@eU+R|6)J_8;)Z3l1Y7p1lA&**UDmGk}WT zTEb0|j#|@Z`-GQ+3V!7C!LRJBcGj(h`p25y6Rwt7HpqgWg)V>iS@bM{vjf`A_->sw zpV=DxV;(+fMBNM6(46WJCRx(PxyP<-`|3v(yW2_82MwAI@Wr5 z!?eSlZwYz%piFdLKXUp=nP_ux)mJOr|3A2+NaCn(Bn8^zM%VO}c0K#jXalK*p3cax zqV`-I9fORD8Zp1ObJhe+A^@J*Aa4JOmxn6CGMK%Q!*<6k6MXhGO4{E~hmkiPt!ens zscVULwiACqco$8A)gq-E-$IsHvWfWuzIP%*@Ez@>F}onV9xy6!xIm7L{C4bbyTV7d zAA^Q;g*lT?CB^fmIHNxUV&p3aU`5vJU?ttmvWK<07Q@?h(zB?$bBd4T#1?cHIX`c4 zwBgCT2Zk2 zlK4EO&1W7gndZ7@LBuN}Dh@fPvP531z_iiP>`NmA30XKd9V@~@mYeaSbS*WLIR1rO ztOr!r76C3|LDmOcoK`CJI#m$L)wH_Db2T_(?OImZ`I_%_M~~rC;0F4-NOLMk{eMg?u+*p;%CMQQ*arQGHZo3{TFkvpn84u-D()>$ZpDn>ruCiNA$)^vOdkThY0-Ftdh>JuhNt3ae{b{Fs}TO`{h>VI zRTG+z4U@G(cuTY)0du`~R{&YC!%if?B6;$^vBRehU>K5bnUTG2_VonLM zq|a&LYmDtXs23*QozYStTiB$WV};g1oy{eJ3|Gd^gWlU&*RU7VYS(6lK$hT=f+Z49 zpSB&;FOfLv5^6qYd$lTiD~g2bZQc(5i6&sek%v<&mA;=-GEEU_=XX=pauD;r`Gd|j zw6VZl+XkHH5uc7dw)L<&D9f-Jj8N?WdeWUsr)?SXJ*`Ixk~83M!VMQ`TD$k92e--v zqqB!8o&^FS7LgAK>!3>bqp@(YfEo|9ObviY^ZFZncV$m9g&ZnMKIU$x2outmF{1MI zj>lP525u{pqd(x~0TU5Y$G6Ud|KuF!vj2hu_vE)k=r7Hz-`v@4jEk#EInrpiTBAUw z=+lS2L=hGLv_0`Cg}bD}#;=UOpxyzcLR5d>`+56ho`>g6SlET8Yuxlt@>E;U;>>)UX?JD9!ILZUQ)X=gQHmaYfnUj_HB0A(|MyxA3d6}rc0 zrbLDB8MV#(_OOsU{MtAXM2c(* zn?6!IS)hysEiYTosp#RXk*dp-W<5m-|4i2w&u1ida-2r^z?0yMnh!_W##TzyLid3k zY5pvwtC_WNN4Pf6wpHj=QMSfx;hi;%(=d1N_Ug9rrIgafA1~}C4o0WvsHf(ZO}iJU z@C-sYfBP>AWE-RM*9NDcm~n}?0S}po?;DR&gkpxf6hA|1r=Xw*()=*JGf1B@6u(Ro z4qy#Buhn;=a9Wqe_CX#UTD`mznhm?_Q2z^BK|Puu^$6SEg2H(?kz&g_8Zr&9bMI>( z3WBq8=r!5yUL7cNKbD+0{B)2if3(`V0R9WT{mES(*ckD@k3M!JEr3fU7ud3je_5 zXw!#Hp{E38w$BQ+5#cmFl(wFDJpN7eSQSo%pR=KI@$6WK{)z@y{1yFPn%MD!<&}V2 z-@^y8ik;Tl=`opg$NTA3VI4&_DI)JRK8TM%ir&30I>wOt#LvzxLng-{vQ~H5 zC{xgnx+ln~Kpj?bN9Tl^K2Iuib<{uIci55>Fk0(c5Nv37d({+Xyu9+4?mXb{^2!_@ z-+-L%T1nqyXdvj3ovh2#G9(QYLM%{f=&dhoUp%>Id^lId+L0cm>H+cd4F^9*-H$V! zwdy~7(=N~c)F-W={J88buq)uGh5GGl#}L!D2i4=kuzNq@BL*_+OcVvS&l)wGA1sLp zZ-1`nGM^#L?L_h+EmG|$LAq?aK8kf5)e-aLYCZ^z;;o28ACq-@0KlB|mI>L2_meY? za@-T{d6IR(8FnrHLi3|CPSt6+=SDspjjSwiB8ikfTtBD>4-%R`hPN(yvcmIe((6ImPn9SINxn zEr8#{m_xG{;|ITG!kh)|KxR!#-Spyj-Cy5o9?%WgwXe%&CSRi zj<^AWrpmDpVN11I{32?pLB9T!JXdObv#Av?LNBc^W0@XIsZ<${Y!9hb67AWZ>*gV3U-9NQg^KDZ)kv!p#MO4rg9pUEhg|pJDkJ7%PQ|~l7yJ7Eho|M-jhesSIBeO}jbzK?^_kOw43GRf0H@NqBWe7mhaQ75O- zxD}$3zVQexc1DVf);B*TE-fiN=VlcN>Vha%)ev7#2LVy{ByuywI0mKp15f<_TQe4+ z5rnprpF=H!#s}TTg#phNfTbX)wrEQvG|Z!=3Y<#UlxFD-Uk79thQ+2+{xb$ zL#;mXe${buZBDK2H`IG*8GqzHK-0Os|6i9+Sj%eL_Uy2}q9HP184fL#UffXbO(4|t zD~JyJ*-x$_`;|ilSKQPD;Q=?^)~8iYZ@PJBJ>)gqdFJVGON>N9;0y8=UFtTvQHoq< zcv>#txG5=L2aGw2=8*8>QEs8MkNMP}D6niRz!egPGTCJ7!)$)mq{A5d0 z&SOl&3&M|@T_xv}Bl%K&OZ!I8^_EXcPr6A{4VQNg@7vQv69KBWoyWvHko zpy(mltTCo#`t5Zs3iHb`td?Lq5n)EsNTNG0U}Ef?ZeYBjsMQ)9e`k*$zXjFGX-yyZ zv$esxlT2{s_r&*KwDwDwU0K9xgh;P}CrsR{uX3RZAkK_`QzfNbdxY+U$L0TX)yxL# z?CBQVRgY;gStJEs$>XQ#Gzv(HqLADqxJV@-g&kJ$^9uXOFjfE0%%1pfX42V$C`3?N zHMLPulwv22d(BZ}s7(n+)t5^*{GZtd{_FaM+e@+n=#8Z^9r783*rD@Ex3w;}!^EJ@ z!L^i~NeW;r*1x5`FqY9y11WH1t&HR zC+G2V5pjPH+4+z=XnSwumfJc%yE#1Lv#iT@k9UJQEgd^pES%|*f9WL2z&Q1=nK@u- z2^KGr=^{DdY%}*$;YgI4J8SjKPsXjNrc*cAm7eif{wpFmr3Rhso}Zdgf5EK>efwh% z#s(1FOpeni1g7J5!8su3!4bDvXhGfpD~fvlOo&GdHTMMHWCN%44#`&e6oOHUQ(0Kl zJ?_36Z+#;>O8Pe)iC%KDKhn?xqyDWxzNKfn&GK^I`5_;zp7Kq%V+US3DjKq~mi9D$ z)wShJ7jc-bk3mQd;`e|%IL${yQg6K`n!k_N#KI&VV6l&!s}LoCEYjbYncApte@SAb zHkb&N;#!sZFq5O_Br+7jlIEv97JwX7hPh78|r| z{@}!+Po6Aqql-@B*_2dnQlnZZQ_XFl+SkXk^tpT}h~qVZ1M!56DB)NFJ|_s`9E z1M<)O_1!7|E)@K4(ClXi_&726l57QuDR#1Lk`_JT_Ls+90XMH3>2$|_NgN#s1N7uP z4YWymQwiwEPeOd^jVZbGQa@i5~z({>?>Z6V-AJxLxY*d0qP4p z=3ffKcUJ&1Yxm&cGr6T%eC|CJ{I`yqsNyvbqq%bXj`p**l8$qmp1z|8GX8SfrQ<&% zlEOpV?17Ln;jNNeB|Z8sOYuK@=QbsUbDuO+c0$Wi>7YR+1k}GxpRfGehz#i->V}cj z6UV>a^6>hYf238Gxljj$NHv8EGY3mJdOS}wO$YU~Qsy>~h@fmr%J|}K>iX{hE7#Xm zLh_(In*QKCla%`XN_c$Ep2Fc3Ar@ersGcrp&AtvRr>Lts?X9?rk57B_su;@tcUKB+ zB}d0|^`lCdU5X-)^thRr%rUT}y?Ol(qlaUOAA8?wG_Zme))|<24EzkVrzjr8-Cf+m zZPLlarLQN5KIo?v1Wi=1Ezo{Kb{s={ErIS6xSmzA2 z;`&`K1UglWBN*-CYXLe+l?<1xKKg=}B;jDxoRhKvwgBoWge3O?L`Os`iKheFBg2q7 zGj>aq*0?@7Tb>YncoNcMlAb&znlF{_$dc0k~eU00! zP0lNQuZue54>da&(ZDDsavmyvkQcz%7rvg$p$aU*&Hx3bpvY)S`ttZ(*jy0Ja^-`t z2#vE_gWOjn^}xZldHQ9@6yv4|9UU#B-^8^yoRjr-;@9eUxRuzNRg>9GAG>lsvSkgS zI?di{D$qPG8!C-^=Vx@mXzFdRs#(>0Aq0p}9a6iG-jEcY3Fr~Rs8+i?_8;|2_5q5e zn)0p+nmZze9-U!?RZr-}*zZoraKugg^)7Q=H4c1s;g?X7_k zK>7TXMPVtZ(@JU!&bM&eL-5!`bgd8RnFyIP1moWt$L;K@o81DWYCeo;S^alw0{iU| zhaOn=i`eM@H14iR87(#Q%uO~i`ZVyN!PQ&{AF^7ulC?Tls`$H%H-)~Z+YJQ`8agjT ztPCLe6RQ;MqCK<>8KHxvXjZm{AI_lRqVtLR;ljrLf_(SA{8t?zs*olaQo_Vhs+~}> zKVnV%T?$({D?BOFku{{r07WDx48xJBT=)_+6X?%B{UT^p3z7cAPe5ZPv7+=ejYRHh zhfS&UHf1U|y~3eM>yh;T0Xrnb<`QSg{PH5&BjU-U5}?h6K@@(X1?S) zAlC9YnUs%RdK)YXS<{B~1e6t7m)N^e?TCpaCFTCl4)gWV0HVSjF#3PanFjed5R*$M zG%rp}r@4WjkrdqJYQ>F0R9{2mVHF7ksvNJ4H#HoKhb7){2V<%de7PCc&PbiweMf^i z*%Rp3{oFK!>Ye8wQnP62M;!G5I$FV_&%`k5br$tZ-!2IM!&-E}DLoXEfoiD5Cu3UR`D)93z*1L`o zdxjr7v6PjSHJh`4U$ZRinc4P6&czi$lYirfp6U83#?>QvW4MtTlh8`R8V(PR z8x0>BHN(rOa5kSmWftHpOQ$Ma{kp_vaoXXd$Qx!*`2V`a@&%wBW~na)e$s$-XZ*-8 z@iAboJ&Z6rp{S;*6Mv|#zJ(=W!%?a{_}uvHItr@pIQP6$2-q2dH;ShN7w`_oLgOx< zblYsk$g{>P19iuqJ{@Q5O;L8p+Zdlc5pa$q6}6Gqnj52|1j%(zy zxDqHxsRq4}YMu=*U^Q|jtoS0k%Ajmkdi;wpSr_68?DWE{$pVJF^W~TV*asoO%n{mA zOQTYEA72)l5v#*`GHpNOV6DgtxP*H*%R0nn?J95XZMdhs9M z@MX(VlK8-njpuffZdnOR+x-%bnURh#cLUl6&-SeGy*QVOZ*VGKw4X$@Nk0REqgq%i zZshJTghV$2AKr7ea3%ikwXRP^Y-AhJ@yib20EA*r0+cV4-cY3}A@mC(*fLj|@^oxZ zlb7!sai5BukGPHC=;O?71rw?WKrwZX+rVh+$*su zA1TmjS6RVlR?G7^&CA$5SmZne>MGiUT^rm4&rx&_B|sT|{t`yzD#2Z!!X2XMEk6c5 zw~qQ@%AX}x0NOIkmI1o#m>`#EW|ICcXIuR>$?`9Xpfv#vk*VL#-Rdi08RiAa4K`oZ z+OxkDetG+&HQEE_hl2-;kmNPTR#WVeiWBnrZasMySN2 zn&{-Yy_VnMWqp?IDzXYA@3+l3M5e@%@G>5Wq~z6Wf|X3uZjXStc{wvinSpP0^yU&J zY9t9=4roo4&wnzF#>;^_L<(RL_N5-@`54#ebMc z*X=>1PY*g-2b~$AHX|g`n(by)_D>6d*4OXmhDc08xZFFc#sF@Ly@4Ar>Y!H0(%HVs z#*6X~(Eyb7YZ0P7Dw#H2C)oSK2()^pOT#bhz0sa8@5)&=?>k}=XpW=jOu{Xq>h-gn z^4s)U9W6ZUD2q}TX8I=9E4*JsW3qVJ9)gwBdI}cBDj67|_$6V1coh{M==s0WaZD80 z2cOIXZDNL~EHUi<=_j5*d*ndG0nAy?7~h zq218W{-8r*UP`pa3x^RSk+U{ttYHe0*XK zU_V`GvDo18%$e2TX75_w6zpypgWKp)yN%pi{Q;os8=F^W%XO^H>(qH8JKy{|OCj&TBy-0I8TKVN^N1i}73#w{WNE=f^`l$5qV@4RR{a7lU)*|CWrY z6(PDCMpDo&WOSISrYoPvKiwCd#aK;qase^&ck30dBr|Be2PqDLMH;!FuN}?rUI5a% zt!ra`2Ki;7dIZNxRsWoO3_;+sQCAFkH@_{f&Bxz+nSw~J!M`u*&Y*ehXxngi`NH-v zc*LF*W>MCgL;E$K5EY-B0$Dw3RkhCM-Rc)so=LD)Q|2s3vt@lP zL9b~%{Hjm&t$G4X0_W`A{=HM+^y|D+ho#OSMLTyV@-*#` zyRKkX*Lv7*djQ)v*co@1e&Nqh!S|xaeedHY{{|c;wAtDc0_;KcQT9zQpmD0pIssTJ}NHojP~@@xW;Q#GxkAFN)UWUc$_M z#jg#h7Ph+^SNxT|SFk)aj-PJ{JN4d`8KQS2dPSJ~r}u!NEl6}Y#eS(^y9LCCIG#Q# zVeFV29-7iEsXHB;m)MJ78^IRUJCmuw%VWqVqWHK%K)xInPR@_Z z{f4~h!Y!}Q$RMF<8Qom@a0X-SE$^fR_PjO6`ND;`#_EGBgsWiiji^TRYdgpfoINF4 z9<-t?GNtBQgP313Ezt+q%Xk}b=7gp$l?md-@>z#AO_pjlKh$e3&#q=mpbgmmo*tF3EaAu9eDdQZyQTxq-d&2S!uOIs>#DX##B8n*WEDb{aZX^_KR6YpNIcK@KD$2@FnhzZf|U9lrG_w(?+L$=?eTBbTq zhKdvQHjFKOwKRa@U$x@~rxlFXKm#K2kj6+8H@vV;&7QO_Je{(_e@bKP63o z;;_P0wg5yOZq)h82Z2<+O5u5t0HaB-Z@$scYRMbA?7}l0PoX}6^Fln|0F?|We_n@v zUNzn;z&Ax7v(quJ4)=3JikB;=71fqRw}*D&{bBW$-zprqL8bxV6HLDxgQ%>K3wwS) z-}}xvI&b#ZSubuvKFoa;Y=XsTfW-kB3DvW!{mc#Rkd5yX%${mnB-8>trGaa_GtNH` z%Krj4Fxu7M>rE<%hB}Y~8?w{N0=Vpx$_gt0vt(JXQak<5(;?n zyvZiM@$#x9(s$J~uDQ{#URS-zMsq=Y$Ainjx1r#c;g}8(1OjC`0 zO<$KREjthG{KnA~{30%`1q?cu+_bi9tL#fM$X&AJIvs#_B_c-4_EDW|%`WwRdFD<^ zS_bB(5Mq!IkTX|uF{A8uPYX*G3opNk;D5m@b5I;^jIyAoaa+w!`3HJ3!B(&iNKH#_ z4q5z@#Cxoo9h$D^X{+XOVTVDI_7Z_DHvm*0&weMshWk6pW(fX?;Y&Pi(rRWL5p>4@ zbYSux*E*VTxj~!xOyTpzs&p}q^wu2hT4tAvi@Td-%UQvG{)oFNGAL4eh3(`M?!>wyZ|>)iMpU%|gAbb~O(2XjcWv5yIaCck|C#tQnWQ zj$AT&8qx9AJ-Gqm;0kydxi<7q400qFdda*}_t?ZR|bQ6Oe#;Qep6uv zKtLtkmZ(D)C6lsd&Z5ioAqbFKB(S+RpJEU?;3AjY=D(6fjJd zudyRZ?ugj}i^Q+`QxWUuwHodG_~=!gy=VWE_wVngFf|R$b~DBZlad14*9_z=yUDqx=K0 z?JM=GFCVXsu~uT97IkY8z+INJytRa~DYGN=LAXcCD%PvjtW5Sc_9oXRyRHqJDUY@$ zE}wCKK6W$4u8_V2 zQPMNB+P-TSDE*PpGeT#waE|7AJp7~C*TKmjCscDM2Ws%0Yk;l-W@Xw?TW_BwnHh&+M0dpw# z0e$mEUl?vK=JOAp|AlTDZKZ5@6ETw&b@W;i-fMQvo3_|nUfiWb51+~Dq`Q5sk`ggr z%)?TBlyf>XC}te@s_5FQY*m)d_XYnbI2M;mg9xhW8R2N{ z2iVnlE9Tl{sM9RLoQqVwuIO&~Iemc9Ek*q#m<3&8F3%bIghG3rV7az^S*#!z(oJS^ zM7?WC?PS*InWdYHj8iwYZ!oszKpM(%DYGBKkK__X%DqZ! z^!N5PAFga(wI*QA!MAIlC4_1C{I~Vb*1WZ=pUFBbZ^(l?a%-dTr~5y1jYICVCByU0 z0{bez{mrTs?dV^K8=3gm>iXbpnT_4b3i>DJsY@*q{?^m-^BlV;!d((>y>mAZe zEjnUd!)KBwX=lO`?_YxuB;oCvKU5|l5fvdKs|GNf!kD^{NI!ka%Y0idOJ}E&Rz+Nh7=qf4kz`qR05?1P)x+PlDbqYe7Ua>@h3P2(F`nplvz^F)ce=LfHm58ZD72&xU%I5C@z>1O+;>fVnp_) zd$28ypXy#6tE+5$V^{*1{GxxR?UIg0%Bp=i+duc7>9*%qt$&)uJ=3FW5gfVK-$sv7ZC6iKBfB0PZk{6SSN zUiLT2Xo9oYAB`^4Y`n_k&D`Nfrc;-9jHmrPmC4E{X4Z5}dsfpx?{?dS3Cv7iQzSA~jXsf=BN5s9y ze*vq>PS7Z4pi5)OHu^=zOEU|yG0(*?VE!C1#?rD$xZvjRqRbBukk2L2S?Ew=0=m+1 zk-CA!&<43A=?KN(hfVxxH+3%qhzBcCbj~$={V_C@)7M>3>$VlSEH5V&It!NWnYf8M{w2x$$j^M`_LJ3~@lyahvkY@%xI8Ccy#Cqb^=0l5Bi2UYce^ zaLQz9YMj(RS%%9$JwlT{GBLv%_#FwI$uTW$uGWZ2$k-A%lq9ih>9|qvSrJ}k?V#fi zDdpMdblRzBOgiKM1ams2StZ2C2c}AqP1`{tOgL4DyMeQ0H?~&zM`Ec>s8%ur@w7Qs z+!n$~23ew6Q+?vY%1GXHj*Q!^h*(H`H0l7PoDj!{ zKWlBV@$2i|Vd-C9OT4R)HLGOpw#|~>!A3!!bkEI~u_DX?uZc6qa+dg-N_ z2)hFHJ7+|P8yT2gIqCtQtAaB{Q4rkv>jZD`#>N*o#Lvu}^lEQuBAAd2y3G4Xpu~#t zAk}PAA;=ufQ31v!-UqeJFRBYNTo$H&c+Hz0z=%_He6lS^IXyac2#oBRUVz=VoW(DF z7}N2lz^gcv*)qE^xcC-&n*4jvMCp{8dxCR7W zspGMI55$psw)TBh2P8kS59prO;RH0I@e|#!#y7Zc2p4s-lEK?u=l|?f4*@>2R{57zo_|@^1FnqE1vnUgS4mboGKL z_IB~}*=B2=!lz5WIySGo?DTA=_|yRSa!T~}^Ed0)rS$&`*=@Np=23e3joe~#;NMkt z0%n){^JNd+*q08Uhn)*{g@m0w<89NRew`fWpdAr^{>mp}wrU?MyJ)}yXq>_vjyU|-;6v!q_T=m8RB%)G{YG0) zS1^ifF(

X%uH*|t2Ks)D;g$Js&sE*hHxRyoS=ppL_M3*8VN_DJb8 zq05DxCBYuK=?-q1iarDUp56-d_XGQ$rhTKH$hI7PWqJd$p~An1_ItpyHJjfPR0Qa5 zVuXm{Z%6`Cw+Ma!({&7`E&Z2(f{uvDZbZ%p84XV6-o)ke}Kar7e#n;G7+(MpIuuQ;E?aq0%~58y|J;3+4?F*DicU3aZp9utv(f}hWpZM|+ee}oN`--( zT4TGIZP2D=-N;>LHf3!qqXa_MA&q>087;}gff#bXXy-r1zLt-ojy>x-G%vRAH0JSJ zjV*_NvbuIsp*>&requdK^R?1l1B!j-Y{p0ke;)~p%My`lZk8Kp}+@5i$WnOaxz z#(^O%3nrErEG|x$=xh$nByUlTw(9GvxGKSqc6z>e2u`$6mV)Iwo8u+Ss#Z+|wweAC z$D~z=lj=DQ$CR5p7W6&h*Q+bblIrBZITDG*xoKmbR#yj9h(76996_x3trKat{OLL| z7bO@4P<=6zzpFomkMjU^ktfm7bD|B`p7KDqGgcKt4Z>BZ5u>gc*O0nP6koh5~$ zY66m<{59OT*S_epU5!=8&#V`%l(~op{C|##usD%&Vam;4j<-~fPbtk%oW*h-$~H`? zw5pZp5=ora)Cq7zNg!nL=Y!22st;xpvAkqQnl=#B%CBFXiNLZxDu%lyilhdJi+7S@ zN%$Kgyd-`+P;M)LaA(sz9$L_Mee_ zU(cqYBCdo_Uxv!BTs}FXeI~i~{j^6W?RGKs*3ipt)R5^g7JuYM*so_8u=?{#ta!G~cPlq%`yN$2lG}PEOd8kfz@M3TPu*K-wce^Hi`lfJr>t3K91<7q(dL19@ zKj(AkzRjaMCdQ0k!570WMtk&u?BR1aR}`GqzR-kw{^YOEX3OfbJyU?BoDq1I8)T{g zxh;HYgBs5_-isf%Az2p_G`9Hloy>zqZ3<6b4bW3gni%&Dd!(}(jWUHW`GlYU;SMD+Y zi))1T8WCccTLJM$W}CdsFFi~0YBqTIVeKiWA5UFK-zEHPdvKE^4Jb)Fjaq?)%}MTZ z7!~j(lU?boVF?T}i`6QCHOnTjqGpu>%O(?8MLNK@e&p-yLM^r9d?CqB&}U1H`iZr6 z+qq~435!EGZ?(8PV1mwdIkNUjn zc^)Zh3@`7mOWWOqYGjM26Y}bXzN!zi{$u6q2G@;yCB>Ap@5W`lgi(XS>Ay%J;)cZg z-?QSQ+^)L0IMMpL=oMya7u~bHsp{-|@=Lc3W0i^RC!e93l2b`Efp@-_x<|%8Wzp?j zvd3hHU84ItoewqUVl2ZO1R(Kb0v4ng06CulOP)VAobNaF#$1LfINhV+zGS-)lWVL` z*gqh$PE6p&l7I|2S#NAUIwjgdY3kkF_-{&i>MZ$D;%FO_xqC~)+Ew=t9|4|S@n{!- zxR~x&%O`eU<+bGm{LG{;)%^&}m!PlZ*xTfczwbp|uCqZKo05#fSVdTC+?`+b%RdTe z{|XMeDBceN*ADLO+pidmP7U6dVN`p|?NiyUstndJl$2j>akfj>KE+nRV^u-JT&dyJXo8<#R0yXkKRf<7~A zdofgK?8J<`$O0$Bf?0Q`koi+qX70|ASSKs1$+}NYf~D4Hh|xZ4{dFeb=Q`2pCXxI{s0+HqEH}?^9(1w=fV4eM z<)1@_Zl8#JnP}_(sb}D8$;22dD2#69X1Us?B)#!<(1b88U=t}Z?ohttW&=tYU7O@6 zls5oi{0o$iEEe1)iB(`<7JnwiYSTnHQ&+yiJ{(0i(orpkt75wnwz6;5pby8_fl8b2 z6Wv)aoQ@VJJxZ-&C1+69xOc<`1^60niX60ATNQeHEr#oI>f6w!QC^Gtru(zZt}Rrd z`Vsk~rRVmiMQnOPd^&o!_vckOPokBTbGq(!-|UF@%vc`eWBMV`CJF7Nq1l(9pTMM@ z6!tdIRML%Qi|r33!TpB3t@mmoJce~#U0hlXN7t@qL@TyA)}t%S;y<4)=KPp}hL9|& z5!fjc348~hT1EHH$1&l0DIo(cUIfiesj6aK*fT#8k}9LLA}NCW){1;#vERVxwI1h; zzh7m=4-{^9>r0KWtM}nEjU#V)l!ip|v(a_tctPpC()$62_`O$-$t!%Eb=Kw^j#LJ8 zpPic%dJr`Jv&)O`^2xcs`cFy&EZ6#VukO6xlHaNu@m(Fi{juY5+l@8olfrU-%DYXX zo(eabX8Li74{hp@{o(RPyN7+RPb9m9rkccWG1c0aI{2|vb9ZCK8j3FK<5BL2z#Aq1 zbCEJ7@osWSB9UgM1N)=jj#Z|pLcF+g^=>>wn}D2P!$E=aajNVVIPmcf8}g)aG5YTZ zqp>O1(7V&FL?`>0loY7fs3&K~cvIosLa+LAz%JRWQ&7rLzuI23CmX1;|NLLUpH#Yu z*5P|bF#wyOt6lVTY!az`jP4tU8JI-4wP#@6jp|`L`9q|K0q?9V3=s)~xpg~Touwz! z3tH|TFI>K$9G6}=jq(we@sji6#N$)VN+E%Dfi{vMH@DBFS=2OQX^r9cA!Df_L~7su|758 zu%dFm#nIbC<&?Kw{c*$tC%%_G$iHFYvBnO1`nx@?HTZa$d3_1c1rarEwzm1l2p6ts zyvz;?+ZkOukdCVacUU$v+@QRYx(olmHaLr@LYI6V<|e*fL}>=QP?uys^_zZVB#FmC zmT=LR(2fHmAXP};wLhm!Nqf^v-B2csl9Om|-M1U$(f(bpd}xlYrNhSLdTY;oooBiv z_7-_*`D$>BRg zO{G)lJZ4PU%3@t!x&Tb>`KJpp{j�ojJdgW$eVuhSFN|%7Osy|GWT4w(q)?^{CyO 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

KgEUgy+4 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 literal 0 HcmV?d00001 diff --git a/ui/src/assets/img/service-icons/cups.png b/ui/src/assets/img/service-icons/cups.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1f72bb05c471e1c5e16d49b0f5385a15a0bed7 GIT binary patch literal 63490 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 M07*qoM6N<$f?u~7IsgCw literal 0 HcmV?d00001 diff --git a/ui/src/assets/img/service-icons/filebrowser.png b/ui/src/assets/img/service-icons/filebrowser.png new file mode 100644 index 0000000000000000000000000000000000000000..6728fb3c628d732a060d068d5e14baa26dcfa688 GIT binary patch literal 32957 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 literal 0 HcmV?d00001 diff --git a/ui/src/assets/img/service-icons/pastebin.png b/ui/src/assets/img/service-icons/pastebin.png new file mode 100644 index 0000000000000000000000000000000000000000..8763529550f9b956a8197c7c2d8380a352f3630c GIT binary patch literal 62141 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

P5gBWnUu_SYnXot!E=fs*;7H0fJZ;2dj0 z-wJI>slTZ_c(8N%8B<+weVr>1Ln19{((6+dntKBetYafA9~R$>d|YUtx|PMd6xa%_ za)Op~35mfSc*Hs#TWDe8?qkm9cp#dx?|Wx++|K2f3k=Nw7PzvIetHO1+6S2k<8FsRJ1 zF}|wI`B&DdjNomGIzyUVQSW)mbnWr2Sp>mmgqqo;yfN(FxFp{uHR z+08w4GCpgvsMuyw8^$TMDI-F$_%UWdy@AzuI&Tx=@O&)t&Q+&hO~d7~5(?rTrOEw* zAh83$$S~1oJpYYT9LP$o3Y`S2(+)dmF z%7Vm3d=nMIl7c+6VASea{Mghcv9M|#QEF@GzxXz>*u4EoB8u+e4;U2GSB*}!womYT zv_tyzOK3w-`x=vp1*MuBFtiBqDRCGGHt-fhax6hhA+oXpfoqw*d7s2C)Z^O)5 z8jeX_ud5+E6BtHyY$ocTH@M19G2D~ZZ>l>|t|=i7Q#rcSk+;QvRBhkoXJ?0^)@a)% z$auO^Ee@u5@k|cJ*|0+~*QnV^S~fqd>TOe440q&bibK`Vu_my=VYLW5uO@bf2=H*$ zlT0m){BQfW9QS3bH5ZF*cskY|lCrVT>bO}ewkD*zOepMQXV6HVoOKXb#M{AXR4@NU znlOjW2?u*P0hh)Rb_S{DMZr#FHzG$WtU0W1RAU^Q-26h85R|p7>XVv!@DDBiR{{tm zR6xzRVe8piLJW!XkZKsg(4qNW$EC21<{;ErJo)k5RC8TeqYE{?quh@(sr@qhE;^~{ ztMFmEcZ}cjMXmHWS(0l=$rY%hfA=JU}4>TSi935&MlFO)w%=yRB zp}h}MKQx$RgP#?GuSCPiR}&UcRtO)P%}Lph3tWQPgLJgICQ2~JWx`US6TAr*gk9g< zEvK$OWBPWGh;X))h3ZyAcLr)&=Ah_xH3BA?8%+p`>;>!OMIBbb`0TumSRq_NiK zh|%0#sJ7h)4J9mwPItL2O#cH_FcgQ0;(^mt1z(#!KoSb9iN9*dBOtPP`wSBlZPsdh zb=M4t9cG*L_o)$;q1KQM6HB&=7hF8dxu6uCWLz>%i^0CkBbxs8w+9k0%4k}HWMZNM z)?*Vw?L+OmBtiR)8LO1g84~0-B!pRGm32eYnd)=QAs zz*tf?O8i$Un^`lEe~Z#E3sf-w2(kY(6C`=yyn0GX2WaYgr=}=xr$_}(GzCApfRrqX zR8o$qJ%hn+#yJHF{B0PS!~GnOVXFGAWTQMI%j9CAkwimSTDXpL5ZQrC z6)yI`n0`dmBZJ+&WK9eM6@dfU`3}e*la=6Lu?>B|w5iqPDAaSk?Nh1C)K>A?(}+2f zQRT2+WB9Km{{4gx6b->E`MlD|{12%zF%SmkedMB(lVupnA`qaTGA!@@~=L?QAa zjbL@H-z&mE9)R(Y;X-y)Z=oU9>rG$;xda;I<>(8qW5I$vWnhJWHIohv@L1c+u>|6?k5Y4tV_)d)OonT z?%@q2U_$+^i^|eP&al)rI6M3hUWW`-vmTQQ4>jg0Fp~R6(IRMTQ5oe4|j3&o$Rn z*n-nG5AydYra2O|1>D&P=TqGbtr1%xQXjaZV`^2XAnG6jv&jaI`y?MD$;59^HOy3_ z`HI_uN*?b{B3u+VejeU1t~TH2$S%z88#Bi^7U`BiNe$<7tb#=)xWyT_`AcmE#aGR5j^TG2}n7 zDeKFwqr#c8+^3ZlP6?cT#FOLG77Z>Vh%|xeiX~>lQdRuAfE6absFMMM}S=r zp$cZtUpYk$=Oac^B;~UeVIsT7)%6fKImzC8N@Pl;v*5sVW%RPe9OQ>X)zo(k87Czf z6(4bQZAANlxe2NpA;-X#Ft^+h(4ZE-7sbCs!Q2|7S$M~9`98{1F%9J=8Aw?__5lP? z6|C^9gY%f=5QLptLK4%J)^0brHEMG&$gpDr#`)2y#U`Z`g=n4P-V!j~BSO671slLR zeD1^nhgRxP0*DD;v>f=(D}{S!2ZT_0#Rd=AW|6<;@!*W`t6A*EvgiR4Ls|MQH7FUk zkjRE5z*Z$c{TP%<7n61=AM|zn=?7y+4o4bd20lpceK|ap(U5&fd_vs{5mtv;{U4!E z=hg^?Al5xwGt_g;wjE>Whuo4a5SW>dPopNlg66-@$rO6VPfYT_4om z5Ey>WxGuvP#WdzB6yg0`e^;n%Y?~ITb#|CwwpaJ(lT|hg53QELoQ;XFf6E7A{b7BP z0Wd6h%9?YV=l*Q&NuMDx_qRNRj#pC_lMR0}#){~Tu4y>L_WZq2=gJ2ykv1D%){Yyd z^*ZyGW_1r67`#CZT@GT7P91k(t*pU{EfNc4?fdWjD@gFS1-kik7LBetcgl6gW-fr#yn?;)&ZCo6PJiSz45aytPO zb+a@3E(77NfSxXH1)1L7lBJAhrg&I#L8U3N^k7tz^MU}OajOwAs+ORTOg4SR2Xv%& zRJIIt497+%q#G^ao~=WMy5|SefLfAX?fS~se5K~?C6?mD19c+VPfUZ`c}oYWKs2K=XNg;94ZI^!f6dhEDFJDfM?E3QYR!Sy zWk@6Dnma0ZdcRO`D{V&ODVtdX$7HqYyL^4KRJ<_cXm`J&NU{g9u#L~ZDb2|dONEJb5AXM@BM)mY_BnzW0nL)BG zt_%MpMg-FAICpb*v;Nln`TZaa;x2?dgVw`MTn6~K4sOV>e(G+(|P*SjtX)q z=MmN6DT04mb+^%6C6kLZ8Y0CXs*$RJW~4U-l0qU8 z;_q*j!Ccvzxgu9_%gY5%EFBoe>f`?X9v9(4pevEh7}%cjTKPR=F@*c%<`f?d^2L%D zcP|%?qD*OL+dn0yo2kjj)3rrblE;L=1m!i%c7`&C#fT8uQ>NL4G0F?Bjd~>ispsK| z;}`T>;<|YbDe(xS|4>vGbd}`3=?;;zHDo%tlNj&}nQ-YYj?O-*SIm!&102qqt6$}hK8 z9S-Gr-rxHZsz3spONkg9w7Ej4xY-_Y@bsaSu4$F)(VOf5TLQzR5<*DXv%E(goQ*0C zQQR5qwOvd>71^|{aHmeoDLR>HlfdjcIhNeRR^sT67cGi}_C+OIj*T+N2!;v17<^=~ z;`9I}y%L*7siQhriaYRJ=cXuH&K4sLhP8th-ym+H(wl|zXAt$Hch@D&3)~arq$zC0 z&CD!2bHq3R;}XB?FQidm@|3hl*hH_072n@%j4A)kvV_WeOYoQ$;w4{j# zr&37)E~Q(5w-;wmNJjpWGErn!wMyuybhgEIT08&}Yiq?o5?j8w7-m$Z%t4#e*&YmD zq`NZak~(%7QannQ0QOobBoanTZZ<5`-ow@drfQu(Mdq^aQ_L`HUvOac)s50ZJ*0YS zQJSf31J3VI)Cio+$UU(!%fy^L_JKUFiuTztB*kTXP$*8zUInXNEyoTKjMi@sZpeAf z2>X#cK5^-7RwWMu>X8LSY;ZRxE#BvlG&|ejYaH{NSS3F05sX8u_OReq>Q^(0L#&Cr z$b>6XjbaopfQGYN-wUO8RdQ?vM^Z^EWicYhiU#Do@}xG>dHvwiyQxve8VoqtaL+(vft^sF`MDPvwb)fnVsm3r3L%`SE_9!XQt~ zj>BPxOEj-pm(A-o#gm2^IkGi?3@P4IMEl}GWv5CPT}qeal#Yq@@O{(|afA~&wKF)= zcr|Rh-p_1a)OPv3?uPTX`C|rTr3@h9K`*} z^Bla*E{^B6_69e0#_yiRA*G?yFjoHoR-I5Zj{W2uL(g?{69hpm|w2)a6%?Cz7!}TJQx|V%DW* zI}NExn3tRCDSHb=8e$WEf+OVSeT&2ju%0kkCYG(gdRPhE1Vzrsg1)pUcIFsTN^lHF z-$5?fe;*;%kM51Cn8UK@H=HP88^`$p&7bYy)L_T|vS*W4wS9kmWS8EHV$TtmQNC^E zb<=a*xph_Rp)b#Mlydac*7wKx+)hC&j{oiSXw4-455CJZ5I3IteEg`QIL_G@+VLQk zgKpKpf9SaLqRyZeA8tpXR0Q5|hdKhRLR zcO#7rL#i+`sc63-A+Py6M7-zeu@F-Gj`QsAUMrVy zmcR8rZ)fFaK?1KS$sA*ZE|<<9w`24Y{rT|<&9}zAXJvTlNWP~ccw5-6DxS|>J3YF$ zt!?z*H^&@|b^b#mQ$*iKQ*A_E&)GQEUHEPr$N7Iw7^Yy_xbz=)9EW1F@f=-cNX0E8X+2NK-*VeQ({~gQ(1q^J5 zXDYWG%IV=|y4cxRg9E@qi0cyVe#;a_`jdNPZ}r?q{do0?XcXeRbBbX{-{Z(^*pBey zHC~hOqyL@p`D=Pk_d3eriG}|&=4eU9p=;}yz3nxF;bt;lw^Hn`kh|vx^#L6btp5z# zDxF5(bI%md_E+4|;uM39{(I*tJ>$C>TX479vP;}9l)sD`^c_b13}xK6o_LUGv6La%g9sj8HA ziB}^yha+xj%(J1_d3h)Bd`s*i*0&3uc zegag9#LTIy4T}YT6=G>*vMQ=gwzdec+Cg+aj-Wvqw9ov)BQ|G`9_m%iAk7a#7o2KI~+Vp_uE?qblG>zoO!Hozvnci4efc*_i8w?^f~}P%2V^6`r%eCR_dgt z6ux>YwrdP2?29|J6RHia{1L-5R{T;0U!6uw@;k5vT}A-~_MEC3c)W_9phCKA*(i}D zbns4+b|Z-h4jSrW1~lsU87i4uA@{U^bB#G!J!0R(kibALk^F+JrltwrtYVQHL#e*s zu2F+5)d`$JbT4@XYzR%f@bDcFuTCSYVb&;D~*4Iv`Cw6mbMTDL?P} zJQ1`uc?xhecEZSb7<4il3(}k+l;g5gv(}a(pCue^psDw{Y`>c-;RJHd_GkOoERUiH zyR)sq+{RA)YW1Q4I4|yjq}lunVt6UxyF4gu;@NjQ-6y4g()Y4_w_c(3o=&kV_zfPU z-OqaOI-l_T(K2WYk0$MnETd+8_*Pv-n!(7!nX=@o4sC_Qg){}{ftwsvqv^qM?28;$yV`DYDuVF_IXuRETv z)GRzWZ??P$rMr`TxM%e665d$SS=Ax_9B-(9f>L@eJQ+xuA1O82VqhMdWQ_je=!0Y! z3Iy(9aJG2d1-AX!y2@DkxRg^Jp_8!TY+${01xcR098p3$0gZY@7;%cIR1Au)!Wgah zc&L=;dYhGr`h#!1=iT9c1q*469+)?VO`3P+wa57Py&tNr&gTqbD$}ED?$~PQhHYwy z=xP2)|Cv|AU~DQ8CGh0nI~vQ!nsX^*<5&ZV=wlZuU8CoGd5YzG>hHcxNWNZN=cm?G z@U`14ra1(6J4f!{iqFtt_lwK zvAn~W;MKfbRp+B?=YMB0X06;3=7Nm%a;G)5R>^onXNCEe2i9L~3dXjNumP81e^3gF zOu$I)GB;VT&(tSWOq1VZGXKsyi3-sVPHW&ijgH#5GwPWP zjwz-0NvT7T@jBmikmzE=x`2fB%ww@c>6246D+eCV`_05OYg=xStCgJMG%EYV&D|8A zc+4hnVe+F?y{o(PO*-IqliH9>39xp;1O*`v@=))a zzyTMMX&Ek2_ToHPRXv$zAx+&2Y%V`f=jWY-OK!lHCs_hpg&Y3J1`4VATV0vRUHUw2 z6MA0)Uus|8+3WmXWzrZwqw2JKU$cAdx&8{B&{O7l204DS=s)xbCMUR!#{zbcbs0KO zi;gV(zp&CRKK`v7NSuG~TO|m+4v%p^P7^uCxpjYk+1x^z$N`5H-+xhey^1R4xAC%jQCCbhedMXi9NI3rzBU- zuN4T%7pJE(BWc8BHvRi4e0=QaA&F~{ToI#d2Vc~>F9uZ$&- z|LS=D<$a^fGGIQv%_BxAZ)RiBMP1dY+ zvQvMGCndbcw8j)$$0^LB|H)kr357qcI=P#^1ku8ktcdv%aF3KX35UJ0Nsb?d1)u5- zO>;-Zcz{PO#4U;6g}E0C_lEq`EA%iHq*0w4$ckvN#of5#xlB<-qCdYrC3Vdlj0@MN z60lgN4TocIFYX9v=u+iOqE zVNKWXsEfVt-Mg=k_khFC?!H38Z_jzlY3$4q?pXorlSCb#NFlbx=pZ)WueQ%V8ew1e z*O7n6>le|>_E8X4P9MJ8VIrLW&mz2vwvMOv=TU717bVBA@G#ucJs8cFWz`$zy5f1` z*xC7QoS2jL7cbhIo+=m+-1Y$t_gwzbit(;YRPpHt*X>$B`X}43=A+y^xK;; zUf?rxhp{qaETUwA@{iF#e7mGf^-W?biY_g#n?YDG9+D21l_UgjA9c>AFn!+PfvUk$ z^kXF&H1Y{6n+^FuTFbQ8is7np&GUva{NnTqM(;?I;MvT)i&z@R(~)U)kTmq7X=@0rNvp#QQ-Fmw=_$ ztz~RsPg!ckDi-P{^Ae&6M;R+L?-4bD?a?FX>%am^icIf9NT*F`XlP@$T5o}?$^?v2 zGz^^h#x}GEMJMev&?h>BPN|)Z`SqIn*d9j1WAr0r@mV7b$jCQwC4P9{52rEvS^uYe zx}8UaZy&D}qL10Tgt>R!f>!S4Z`ZweyBE=tZqVJ>-5i%$eZLc&z6PIn4_>>D-O!VR z+(b&-hfyl!60kh!83-V(i8*Pv+-u=|O=cY@&)c9rm9W^ega#@bZK z^z4xJGDljh-cx#E(o>j34?b(IQ@sRW&^dl`fOH|vIw^K;cCfC;!>JGliw}e?GytRuf*7ly;kA%L*WxSe@WlU1U~1POH_b(^Nk`yuIg#o zy?|m`MBY`F2Zzz%1S(P^M+3Mk-ZsFmzCiV@6r{Asuuz!N=v-!jB;v`WA_z@;RlECv zJW#VJ5o>j5$A1^SOmj6_!)sm>=^&^z8&sb6cRJI>44~s4sJD#7oJz0!b(hHSg=gO$ zD3G<$eHiNB?lli4fVX+RWPcUy|6HV=TaiKSUxefwn$N704^a5-dYmTZ*n|>z={}u}m>L4AOfpB52GwHA)ldcch&EEs@!?Ea^svN|2y*=5-aq83J9dJ2d;fgI zako0TC?jQ7Ul$uAK1#H{?`ovVGP0D3lus#+5zN-?FI7rPkci79Wa>f6vi5mKJU(`i ze5R7aP(hhq!;~PC*y}Bt;|t-FhW^jjyI=R;k`8+_LS%o-8)vYJ<5AMUN^gN2z03np zKW{vqZll>&ZT@8tknGfN!Rz$un;YrQ4@5-nSIK#sh#SS^^UYN9Vm_sCdsX3 zTJx9{!20#HGvvw~7Szp3Oqkyta+{3sn3gs6@Bhk1(@?F_HOzP$r@J&N`7bdZa;|JN}J8-Yx*l}9ar%8Ad@c!JS$oyg& z*ReMKFO(0bfBM(|`#s&G@11XoXXjP^GmXIi_w|f}*M;*DPu+&T^SVwNhpzK$qt9tn zL(%pQ4bfv4f1K@nerLzY=j?W#_pBbf$B4s^JeMcE+YT@fJ^llh>j)%VEbq9yuGjlt_D3x4(Key8!(5kmW?H#%dpV?}z zaS4T&Ou@%1!$Sz!N-+GBoz_=zA>4aJhI4bo<8#c>X%Z8ngv!s3ty=$+Y}M~Z{O~qr0k3ocJ}<(Wa7 z&KU~bzX8<#`xN9Hxk4|DdUm29tAb}XkQOT7vHBxaNjBHa86l2dwc;QGnvk9}m3xRA``N77EgYW5o{`s%m{>PvC-pzM@$F~DvH(ytU z{5S`4@v(c+^CP#exZ-Wg8!x#;zaaC{mtV9z=UIP_z}F(u@tZr{t%IKsp*f zbT}Lw_`F_y7$`rr7q={YdM`h?w+iGIDXP`xXir3 z@IfWpi(h+@7VuGzed6-PPkzGY5f6X3ek?~~)`0(bMd0O}gWVc(ZbJY0>A${w<2QW$ z_8|}bLfptcq;*A++je*W06+jqL_t*iPRi@ROjS2eEH4x`_I`5d>F|S9cH#_=t!9&* zJjTh^v5Q0O)$t}!1f^Ne+Sl~Tfk5%stT5bx0(Is(6Exjh}&EQxze&Zn2#96#i3cSjxDbYp14@C`i4XiCR*7X zUu&o-<}&d;{hJTtQ+3Zc{nNI;{p-KFIpKs85Xu*c|bp_rC7~%WGfpSLE3In;-bM%UAv{U#^cSqaqg~J?{pn7Wec>`e6IfGpgsOpBPH7mSq(>W4& zaM?HZ_HoRL>^MD{)`vF&PWwVBTXYciDy(C5-qD(Nm849yu$AGk&x-NvocnXONvMQSLyw5x&q< zzH-6bSIqIp9^=zx=vkNNB7_gsDTa`DA~w_J!1#`u$GKX3V~ z7oCp;ZnL@f1Magu^^}uz!SUm^Z{#=d@b&FZ16@_n^*2KGVOF)N_y(6gb73a3_>#>2 zwU&&>U)I6b*{Ee%Ui?aYsL2PeSbprs@%HDZe2qS~j84Sy#l@}Ja`So3YhSzE@4ojP zUkZ$BRBshsTFsnjpO5*KKqfC#({Sq(mcmJ1=WvQc0w*DR_=?9mPm+1~uzkl-;%TvDm$(tYhKYv&W zeLNixCNG9u5d84WzkA~wmlwV0#mn#h(X*D9zUcYe<)qKpoOhqI^=UxBZ~4(!81=JegGe*$>D*8cRx8iNC#?w2k8KEUS4BM#sG4~o>wU%)(4`=HXx!x-bC%G2eP~O49 zLr!($5o}d|?6id5uK=uxjx#xu5ds4n!M<$GU>$m)2=oH1p1lcL*{vY9qqacR%tI_2 zc!iNoQgBYtagB>V{kZZKr#FFmHu@xmE|XvTpa1Mb_xVR1XdXm9=4boM zFTY~B@TD(Ze*X{uWcj_{`E9(T=#1sT4?Y)fCq52;$m6Dk-+<%S?Nd|!=tvf|a;npgP zP*`xD`i2h~&!YhV}{e9Y+YtT0#*SU%9Ck1tbW4vmIPUX>-%_3Q-OHGv< zh&G4c^_+YB5T;Cf{No(P%1(rwU-qS&r#|JYbs^^&Tk9mmnba#+S_qv{vbbDu+6rA!^3=xmoLgnd?Az5a2{C_mFmoY$ThDrLw}lQFe3{CE!f zIwQq(Td0aV}r}-ucC^e%bPvM?F&S`{yD4Xe|ew7eC*4^O6fMT)y+W zzI(avegE0=y+8GfoBN#o8Os+w<_Y|fB0lr~I{gJ69#*a@y2^PKrFBe9IHky0Re_Q5 z@KT&V5zwzC^T&V2c0F=1Gb}Ef+><_sy$&d>lQCkA7?iUalO$_--}^tfJnWH=UHZnJw8idvz&BCT>Lj7+fF@V_PYZ1#hY^GM6_aXY!Vr3 z79gh~k8T=;-m!aXo`d3AXX4!r$$_zV0-3S6w9~4yL9}$KbACGt)9V;DE_rTQ+F6VS6N#Z^9xLItlcu83q39D@t~$Rm#2@W)**f7K<+o8S1V z&71L;gFbTPQ479-hz}?^Oz&I-wh2jwra8KU^wepswWbGeW?`6({-Ypq={*P6;+=?h zIrH@8vbS8ZT=1d`md8K#F`NEHsl8N`&nLBGxm>K1PC9Wp@tDIlPyf|lTJC(;bNIIl z6DM`=WW%Xcs=vUy7^rzoX^pZvS}N#@H}qks(e}h>rTpyDjwHsv%sJ|He_;{Np?ktN%0xJP9J4?>g#%}-cn%PKqmZ|)EV3#KcQ`PwBaac2 z-0{e5XAfbMf1C;dTS1l4)Or0%A&NHg8TGyI|G@I44}b7-`e~=NeplcjPq3x5uRT{~rit*0)^p9Q09>4>*b^SR@r6peg zwJ2euTGda)32&Bmq$kh4t`DF8AbD04LIZ7VxjsmpD;I2r7RE@S8zbG}ce$Is2cQYS z{%`nTaEhWV(FjLLUmUDcTTOp9j^@&I#1POr_FANdOnxg|ClJ~`RV^r*h?EN#Bk>1@ zcA1BbA3*u~%P!x1$>SfjdDuh0;J`!6XMJAytne*wee3cce)?yYr+oE4UvAhQx!mu5 z_vgn}ZLY&-+vD9iiA5;?Ws8|hTFVf$*)d?G4HxTz55_zKf0g&h<%Q3C;d0CgCv1M? zhrf6E$)Eg*%{P4gQx|@`IR1hV-l_N5%cJoTWKY2j;T>;~+ke{f;PW0-jEAC`7(YQV zweb(5UiI#)m%n`JE4QC^+mkl8_^r^_A}qTu7{~VB%`OG#oP#4K@~F{UMDFeT@#V?GAN9EH zcYWt~EEimWS1gFdb-OhhTC$Hp0XI1kUT*^wAs6OIxts^`F(N2%OeW5=G_Z9KcgX#zx)XSw(JuWte(VOz?s zAw`5>cZA(9Rdx+EN1@DpR9+&>O!+l5(Z6`2cE3x?E`k~3Y zd$nFt$Hb8r7vC1EFA?7RzUBM>?GJ6g_=}#r{j7W3d3(Qm+-37&yzHf2tizGHcR;JP zm()dnsQL)s;;-v&|Khn9E%&G&(a%!h|O7kw^d&e`}A2)Bf( z=@{l5sLeMgW`|X7b)y&z-kWuelLv1C{9OP0pZAdEyZ-kd&|ehh`X$Gi=#wocSH3A| zIq43|_4qOC`YO`;yH@wfe1=8m^lD`$B}F{SWwP&!T_H_*P?+cnQ_jUrez{Cn5mf`# zZu;xQH7olHwKtI>H-K1`5GMRTFNWk`Q>jG|3>X;yNUbH8f=sAy$Zju`{h=OrFm_8CH>{&iomdG#f4)~`M@x604?CXaE}s(x0g$3T=c>LavQ#D4Tz z;doI-gYB?LY{fC2mI)ALkzjVvD?0&^z@R7{M;-614s z)hKoS^UcFQh2SR*KmR$;+CJm|edgwSzWZOT-dK~v-APYEY;S!lejWIT(|NO-7?x;1TZC=;HAn7hgl?FpCve&pB_o@m+7(^2fV7jrp#tDFBpAu#y~*>@7813F6AiVe%1ClY6UcS`MNR zEO9h(OgmJ3*~4!Sh9ADcK{KsC5fvEHglT8#_)`Ej2e88qd>G4+WJnO1B4ntjNn3@b ziC?Q^%_^xy{-noZ22n@$1( z<9~q8g9!di|M`FZr(67Cj14~6sloKQQ?!=N6 zm;xV4f-?Lif0PT9C_>^Z!sdaITT%bDI{bQkdG|jofBxL_mv8#UuLtzjYxla>JsqsK zNmDO}vSZCEfy<-R_p>Xw4Vg^!OT}(lO@q_hsc=T-smmsKj!Pk4`(tCw;Ztu|<(cUkL~^lHXf+t&OuF zX_mF~%GxoXoz`9>52*BPKTN8yYS96pNnHF40DkTqf82KU`#->6%Hb!_F2@~v%od-x zv*F8H-Rp?gmC^?&i6rn;f3I!gXao=={$oE#bpqZf#9u)A{Xh7l!$uuEsAJJ?TroQol7=Uvqm05QTKER>Z9bq4FVdV$M41(SpH9QGC&Hp0=_x9`f4o zXYqLJ^Y%~v;J<86#``OhZ=62aWBA|uzV|JUf6|w3`3+j`D}SRB=_~I_wAP{ah!!;3 zn7V*9#{d=9&Y1F>pLXS03_Kr&l%K-F<{c2%j$PjD6uo_^V5~H7wBxLo+W={gIqf{f z=oxd=b*QHm==|RleYwtI37~H`mX|gRRbUJl%~se!As2SM_}K=>JXvW6vM&j4QeRzg z9Jx>F0uvtR;n~Q4vV$3~1a9W<#4o4c{?z66w>?E~thp9H)8{ksM9W&4Ia%jc>yD0QkURtuO+FgA?<}%dQMYsZ|j& z4vTUk_wmOcyF3>c?T`HEzhA!Ysb5P9KF=U~Icff}c30wK!j|Pd+r#mhe`q04tZ5!S zF|l#9em^d4!L=`7N^u`fTISDAVtqNXS^oN>S4i>k)MloSz2~;^ot^i%$KCO(%WvaN z-Pzz0pHfR*7@@9wccL6vKd=X&cT_u5^D6ulcNI-fYNhehN6h3ZK8Eh_c|kDQ3BLgVJS$&rc3f>}v(+rXQgW+lDOWafSuwwASnWZxP-y1}8DX0?f})d;9iv6| zmL~kTN!SETau^CK*;K#O?3DkiX6@k0&0zE^t+)V=GMi34pF%hM=G2w%eE0GdPkQL` zo%l^UHonsMcrTF4@r^b#z1+vRs-K3m;%8pTEhdiou^=&e7&GHaj>@=$x$vEEG`t;p zx!3(ZdwKCo{%ZN~hd(S{-&g0bpIkZoXPtExiTN>U4xrtW$O6X9R`x#svPwxz;SO*q z+`tqO_2$Y6(EeL3I*SFbomlH)^TEECh#yue}+H80b!}dWbEyITyl+ zNmP=nPH91gt0pIoNzUz@a}p1BPLwXz4_`_{S7&K}xw?<+FDg%QqGkqkOF)YAR-j zhnO9LQkk8;kva(~%p-{oWNBbFgoVzr4Mgu8HC^R1$7(QziQM|Gf8|f&a5FVD*{Aw< z7t$DJ%-^Md;rY*A{`BcTvz(1j;{8~^+pjQFmuI@`uDfoz`0p-R?se8__$ct)0F+j8 zRPeZZtt#y($G9?JWmD5i4|s92ZkgBxOSZ=I$8yW^LA;;h?bP#2D~+G3PNxCnx5f8y zmcu?xf7GS+$04z&NseP=OY41xS;+$9{{zj-jprz*nvQc}gVs^m?;R5AWbSiTGYxw( z(Uk{-c_E=9htKpnD)YfZrcoGT)oUV{4|JeX1{cKMxFS*2<%z)y0g#&$(z^wrAgrKe z=b$<|In4;lg^7s62a;?~h6ROy>fp5P!ik&_|3>b>vaW1&^E z2xqxsI?y;3jhnHvOh6a7l5s`v@DSI&x!~V=Io_vmD>nYEg9kqNp8PXn`ruQCt`g=- zV5li`#)C6yavtRhO~GUzhl%HZ)wCMLQwF(MHi`Q3lgutW<;xH|wh>F4JdzMF92t|< zIu~ep0{}?mERqjp9c6h6V3;&YkV@ZuYTKE`NUSi$?Lgf#j{b>`7>B4a6IrXvVyIv_ z5H;e>*jXOrzQU9j0WdJ}N?x_A{@omi5utmE%~7%}g)5uB{*v1cUS#}RcgGxg)CTYC zM*@DIywi)z$3Eu5dgqnzTrPRtMXTQdP)E!Enl#Ow4n`Hv&oEL{3vj z1&sKgg(@h|HbpcBzh)eP&76xVyf@qBjh4|vQGfp15&ETFijs&@h=S}a#GtXY$hA#m= z-Y<7{;@;x4ZdUj!NQdj)l-FI)-wCj`60SjOGOitHnef2Su9Z=|EQIZv6;vp@*7^5@ zzQPUGpiC@Yc1<+Fsq=LF?#*Tb>QK^l*OWWvX4#% zV@k<|^|g_VilgiTGZ+LSN*t7s_^Z9k+u!-F<*DEJ&6~$P=Fu{C7Axq-K8gR|UwRo{ z(|tPMufSZ`lru-odW=~G2v_!lhJbq=5s$j)=dooV_Uh-Ga85n(Hu|eZ`GuvtdO0ZY zCrig41s-=CK8@-68}bd$B#(TRGICAov!o1S==uSrE{hO5MycpTUDq$Ll@+I4Jk*44 z9lL!QYoJ$9!pC`LPR+*+(uDSrckjO=5i!08V51W>5gpYq%_N=@Ow zT;)iQm{prHkd3Jvg-`AI8+^9@zkJ%a;v=??{)B$ym%!X^{?5YRUVQO#_j}(_?_H=` zrqY=Z7FOxV^ML$alR>FZ6vPfsPR2I{MTRbXH3BhKOFHi8(fF|^-j%m{n{o&~RU>~w z!Ve|+z_m9_DRsUH%N(7%O15nAV>|!BdZn}fqBpPCu){!DpMOEwY2o6NQ3iHY>^ZK_ zD^a)(#|F?(PL(79jKja@GM$OZA;66CC(G1qb3UZ61)MXM)-F+NoC@GwivOq&hKfWE zblmO82Wt$bS08_jahJeJD}-$4#F06ZiE>|TA`6TKiI2W%4W|Zgw@2ag`(FKbmu`RX zhks=Gtoz+hnEd!|IQ-+JJcGUu-vGSm)qk_S9X=9FZ&w~P%zy`9nJ~jrB(se4nB`)~ zlGb#8AV8ED_rMb&zbwGVnH{yg8oyG_KV*9AHa)30RcD*Mo>F8TV>+Y*3LDAm$&rpI z9{*>r0fLmZDNN(2=Y*p$oM5{G@W|_`q0Hbo9uacyX2 z?5u_d^RC<)Q5fn&L71L3Bmjv3xZC1(`>xC1w|w#zOmmn_HN zRfTUu%tduE-#peC&U=(9jMcNZ?i#C-l&$KAL`*GQ$B|Gq83zqeoebZP|Nakr2p?B= zW5I5%0jttkbegG!Nib86&@p3cT1$%??UZ~xEwT5xq2#v19jEf1F`|>*alHpX*pT56 zyrmXA{?t{Hz4voIp~jB^D+U~LflM0mpqW+#FqU1zd@;%rXX7$M5)r2qiJ7L3HG0J3 z>lz>Dp)RH_C&UvX8Oy}3PU@&J;5j@P+aY$3UB9_v#B9_>rQF*(&$j%r-}5hg-SRX4 z;ooe|Is0r>H9k`?9-qj_k0)c(8E3vqwHcF3uUcWDj|sK74Mi_KS@-RePM*EWD<0AL z;sYOkxoUIGb=NN+!8ZhNt;V(Hmq;fbedPK$VU@brgX+tQc#(FlkE-jCMQA6oyz@Dc zqvIAP98)q-A-WP6SrF%)jmN=b_Fq;xgn5rEuK*el0g*y8oXUuSIy|QJTPG%a;gaMY zPYmYL%$PM-!$xjU?Mygjyc*kQ2+Fm+S}>rdJnN2%X>s7FW>_y*0JASGK-vF+`pEEmRT>lD+G;?7(E#2@c zAJh-KtK?c(vOw9!Xs55y3mXfjJDRfW0}QPm8^YDpzC;y3_NX)LDvR3YLv#TCV~ZTZeuF@J*O2%B|{PxT!DHhea|CM?~B)La9sIjl2J+8 znX0Iz;W6;PPCzxw2gnt8=Afa7BO0q-9R5xNz65vzKBSUu=M+l!@pR#NFTSbvvRA%V zA54l*zYSF~z({fR{gz-{m@4-x7U1MZ2RyQ7E+m%rUJ1ch(Xvsu@?w7Y+=K1m_;u?~ zb<6tjPp)5i)w?z);75V{yoXhDc2w$tX%>JM=r};7VR&-t))Ix)69p7>=y3x`y`@{*i(9r@jKX=r;zZkQPhzq= zlUB6=BW0U4TCALRaLJR_+!^IdTs?+MahO~#9Y;C2Q@jLSWfD-5s~E;u*}*X7CiUI5 zvHy*@H-WnKI;sP|i{^QrEL)a5NV1J5j4{R-uJ9Vmd?W#K8`G!0E_d?(=_q_kwPb@$F_y5*%>7`FUqE~+}@Z0b!JRkWl@7

    @yY_cFP4z=pbCLG08a#n>H1~Gt96We) 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 z,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 G`2PSn5%xs@ literal 0 HcmV?d00001 diff --git a/ui/src/assets/logo.png b/ui/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5364a7dc5c6b41ff1a8236caf476d89bf25d4735 GIT binary patch literal 8789 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 Q{x4qTR~iZ>a_>I>AFBMVDF6Tf literal 0 HcmV?d00001 diff --git a/ui/src/environments/environment.prod.ts b/ui/src/environments/environment.prod.ts new file mode 100644 index 000000000..970e25bd7 --- /dev/null +++ b/ui/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true, +} diff --git a/ui/src/environments/environment.ts b/ui/src/environments/environment.ts new file mode 100644 index 000000000..5c68c17ab --- /dev/null +++ b/ui/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false, +} + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/ui/src/global.scss b/ui/src/global.scss new file mode 100644 index 000000000..98e9be390 --- /dev/null +++ b/ui/src/global.scss @@ -0,0 +1,280 @@ +/* + * App Global CSS + * ---------------------------------------------------------------------------- + * Put style rules here that you want to apply globally. These styles are for + * the entire app and not just one component. Additionally, this file can be + * used as an entry point to import other CSS/Sass files to be included in the + * output CSS. + * For more information on global stylesheets, visit the documentation: + * https://ionicframework.com/docs/layout/global-stylesheets + */ + +/* Core CSS required for Ionic components to work properly */ +@import "~@ionic/angular/css/core.css"; + +/* Basic CSS for apps built with Ionic */ +@import "~@ionic/angular/css/normalize.css"; +@import "~@ionic/angular/css/structure.css"; +@import "~@ionic/angular/css/typography.css"; +@import '~@ionic/angular/css/display.css'; + +/* Optional CSS utils that can be commented out */ +@import "~@ionic/angular/css/padding.css"; +@import "~@ionic/angular/css/float-elements.css"; +@import "~@ionic/angular/css/text-alignment.css"; +@import "~@ionic/angular/css/text-transformation.css"; +@import "~@ionic/angular/css/flex-utils.css"; + +.ios ion-title { + padding-inline-start: 60px; + padding-inline-end: 60px; +} + +.select-change-warning .alert-sub-title { + color: var(--ion-color-warning) +} + +.break-all { + word-break: break-all; +} + +.loader { + --spinner-color: var(--ion-color-warning) !important; +} + +.loader-ontop-of-all { + --spinner-color: var(--ion-color-warning) !important; + z-index: 40000 !important; +} + +.alert-danger { + color: var(--ion-color-danger) !important; + & ion-icon { + color: var(--ion-color-danger) !important; + } +} + +.borderless { + border-style: none; +} + +.fab-button { + margin: 20px; + --background: transparent; + --border-color: var(--ion-color-primary); + --border-style: solid; + --border-width: 2px; +} + +.help-button { + margin: 0 8px 0 0; +} + +.item-interactive { + --highlight-background: transparent !important; +} + +.alert-config-value { + .alert-message.sc-ion-alert-md { + color: var(--ion-color-danger) !important; + } +} + +.center { + display: block; + margin: auto; + height: 100%; +} + +.notification-toast { + --background: var(--ion-color-light); + --button-color: var(--ion-color-primary); + --border-color: var(--ion-color-warning); + --border-style: solid; + --border-width: 2px; + --color: white; +} + +.sublist-spinner { + text-align: center; + margin-top: 40px; +} + +.alert-radio-label.sc-ion-alert-md { + white-space: normal !important; +} + +.alert-radio-label.sc-ion-alert-ios { + white-space: normal !important; +} + +ion-title { + font-family: 'Montserrat'; + font-weight: unset; +} + +ion-item { + --border-width: 0; +} + +ion-textarea { + margin-top: 0; + padding-left: 12px; +} + +ion-note { + max-width: 140px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +ion-badge { + font-weight: bold; +} + +ion-item-divider { + --background: transparent; +} + +ion-infinite-scroll ion-infinite-scroll-content { + --color: var(--ion-color-warning) !important; +} + +ion-action-sheet { + --backdrop-opacity: 0.75 !important; +} + +ion-alert { + --backdrop-opacity: 0.75 !important; +} + +ion-loading { + --backdrop-opacity: 0.75 !important; +} + +* { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +ion-popover { + --background: var(--ion-color-warning) !important; + + ion-backdrop { + --backdrop-opacity: 0.45 !important; + } +} + +.text-ellipses { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.modal-wrapper { + position: absolute; + height: 90%!important; + top: 5%; + width: 90%!important; + left: 5%; + display: block; +} + +@media (min-width:1000px) { + .modal-wrapper { + position: absolute; + height: 80% !important; + top: 10%; + width: 60% !important; + left: 20%; + display: block; + } +} + +ion-slides { + .slider-wrapper { + height: 100%; + width: 100% + } +} + +.qr-popover { + --width: auto; + --background: transparent !important; +} + +ion-loading { + z-index: 100 !important; +} + +ion-modal { + --box-shadow: 3px 4px 14px 3px rgba(255,255,255,0.3) !important; +} + +ion-modal:first-of-type { + --backdrop-opacity: 0.75 !important; +} + + +.swiper-pagination { + position: fixed; + bottom: 0px; + padding-bottom: 3px; +} + +ion-avatar { + --border-radius: var(--icon-border-radius); +} + +.no-white-space { + --white-space: 0; + --box-shadow: 3px 3px 10px var(--ion-color-primary); +} + +.notifier-item { + margin: 12px; + margin-top: 0px; + border-radius: 12px; + // kills the lines + --border-width: 0; + --inner-border-width: 0; +} + +.full-page-spinner { + min-height: 80vh; + align-items: center; + color: white; + margin: 0px 30px; + display: grid; + grid-template-rows: 35% 15%; +} + +.recommendation-item { + margin: 10px; + border-style: solid; + border-width: 1px; + border-style: groove; + border-color: dimgrey; + border-radius: 10px; + box-shadow: 4px 4px 16px var(--ion-color-primary); + --padding-start: 10px; +} + +// .divider { +// margin-top: 15px; +// color: var(--ion-color-medium); +// font-size: medium; +// padding-left: 10px; +// font-weight: unset; +// } + +ion-item-divider { + margin-top: 15px; + color: var(--ion-color-medium); + font-size: medium; + padding-left: 10px; + font-weight: unset; +} \ No newline at end of file diff --git a/ui/src/globals.d.ts b/ui/src/globals.d.ts new file mode 100644 index 000000000..5172a75b6 --- /dev/null +++ b/ui/src/globals.d.ts @@ -0,0 +1 @@ +declare module '*.md' \ No newline at end of file diff --git a/ui/src/index.html b/ui/src/index.html new file mode 100644 index 000000000..d81986a53 --- /dev/null +++ b/ui/src/index.html @@ -0,0 +1,22 @@ + + + + + + Embassy + + + + + + + + + + + + + + + + diff --git a/ui/src/main.ts b/ui/src/main.ts new file mode 100644 index 000000000..3d8855b64 --- /dev/null +++ b/ui/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core' +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' + +import { AppModule } from './app/app.module' +import { environment } from './environments/environment' + +if (environment.production) { + enableProdMode() +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)) diff --git a/ui/src/polyfills.ts b/ui/src/polyfills.ts new file mode 100644 index 000000000..034407983 --- /dev/null +++ b/ui/src/polyfills.ts @@ -0,0 +1,70 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags.ts'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +(window as any).global = window +global.Buffer = global.Buffer || require('buffer').Buffer; +(window as any).process = { env: { DEBUG: undefined }, browser: true } + +import './zone-flags' + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ + +import 'zone.js/dist/zone' // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/ui/src/theme/variables.scss b/ui/src/theme/variables.scss new file mode 100644 index 000000000..d710b5ad7 --- /dev/null +++ b/ui/src/theme/variables.scss @@ -0,0 +1,273 @@ +// Ionic Variables and Theming. For more info, please see: +// http://ionicframework.com/docs/theming/ + +/** Ionic CSS Variables **/ +:root { + --ion-font-family: 'Open Sans'; + /** primary **/ + --ion-color-primary: #3880ff; + --ion-color-primary-rgb: 56, 128, 255; + --ion-color-primary-contrast: #ffffff; + --ion-color-primary-contrast-rgb: 255, 255, 255; + --ion-color-primary-shade: #3171e0; + --ion-color-primary-tint: #4c8dff; + + /** secondary **/ + --ion-color-secondary: #3dc2ff; + --ion-color-secondary-rgb: 61, 194, 255; + --ion-color-secondary-contrast: #ffffff; + --ion-color-secondary-contrast-rgb: 255, 255, 255; + --ion-color-secondary-shade: #36abe0; + --ion-color-secondary-tint: #50c8ff; + + /** tertiary **/ + --ion-color-tertiary: #5260ff; + --ion-color-tertiary-rgb: 82, 96, 255; + --ion-color-tertiary-contrast: #ffffff; + --ion-color-tertiary-contrast-rgb: 255, 255, 255; + --ion-color-tertiary-shade: #4854e0; + --ion-color-tertiary-tint: #6370ff; + + /** success **/ + --ion-color-success: #2dd36f; + --ion-color-success-rgb: 45, 211, 111; + --ion-color-success-contrast: #ffffff; + --ion-color-success-contrast-rgb: 255, 255, 255; + --ion-color-success-shade: #28ba62; + --ion-color-success-tint: #42d77d; + + /** warning **/ + --ion-color-warning: #ffc409; + --ion-color-warning-rgb: 255, 196, 9; + --ion-color-warning-contrast: #000000; + --ion-color-warning-contrast-rgb: 0, 0, 0; + --ion-color-warning-shade: #e0ac08; + --ion-color-warning-tint: #ffca22; + + /** danger **/ + --ion-color-danger: #eb445a; + --ion-color-danger-rgb: 235, 68, 90; + --ion-color-danger-contrast: #ffffff; + --ion-color-danger-contrast-rgb: 255, 255, 255; + --ion-color-danger-shade: #cf3c4f; + --ion-color-danger-tint: #ed576b; + + /** dark **/ + --ion-color-dark: #222428; + --ion-color-dark-rgb: 34, 36, 40; + --ion-color-dark-contrast: #ffffff; + --ion-color-dark-contrast-rgb: 255, 255, 255; + --ion-color-dark-shade: #1e2023; + --ion-color-dark-tint: #383a3e; + + /** medium **/ + --ion-color-medium: #92949c; + --ion-color-medium-rgb: 146, 148, 156; + --ion-color-medium-contrast: #ffffff; + --ion-color-medium-contrast-rgb: 255, 255, 255; + --ion-color-medium-shade: #808289; + --ion-color-medium-tint: #9d9fa6; + + /** light **/ + --ion-color-light: #f4f5f8; + --ion-color-light-rgb: 244, 245, 248; + --ion-color-light-contrast: #000000; + --ion-color-light-contrast-rgb: 0, 0, 0; + --ion-color-light-shade: #d7d8da; + --ion-color-light-tint: #f5f6f9; + + --icon-border-radius: 10px +} + +body.dark { + --ion-color-primary: #428cff; + --ion-color-primary-rgb: 66,140,255; + --ion-color-primary-contrast: #ffffff; + --ion-color-primary-contrast-rgb: 255,255,255; + --ion-color-primary-shade: #3a7be0; + --ion-color-primary-tint: #5598ff; + + --ion-color-secondary: #50c8ff; + --ion-color-secondary-rgb: 80,200,255; + --ion-color-secondary-contrast: #ffffff; + --ion-color-secondary-contrast-rgb: 255,255,255; + --ion-color-secondary-shade: #46b0e0; + --ion-color-secondary-tint: #62ceff; + + --ion-color-tertiary: #6a64ff; + --ion-color-tertiary-rgb: 106,100,255; + --ion-color-tertiary-contrast: #ffffff; + --ion-color-tertiary-contrast-rgb: 255,255,255; + --ion-color-tertiary-shade: #5d58e0; + --ion-color-tertiary-tint: #7974ff; + + --ion-color-success: #2fdf75; + --ion-color-success-rgb: 47,223,117; + --ion-color-success-contrast: #000000; + --ion-color-success-contrast-rgb: 0,0,0; + --ion-color-success-shade: #29c467; + --ion-color-success-tint: #44e283; + + --ion-color-warning: #ffd534; + --ion-color-warning-rgb: 255,213,52; + --ion-color-warning-contrast: #000000; + --ion-color-warning-contrast-rgb: 0,0,0; + --ion-color-warning-shade: #e0bb2e; + --ion-color-warning-tint: #ffd948; + + --ion-color-danger: #ff4961; + --ion-color-danger-rgb: 255,73,97; + --ion-color-danger-contrast: #ffffff; + --ion-color-danger-contrast-rgb: 255,255,255; + --ion-color-danger-shade: #e04055; + --ion-color-danger-tint: #ff5b71; + + --ion-color-dark: #f4f5f8; + --ion-color-dark-rgb: 244,245,248; + --ion-color-dark-contrast: #000000; + --ion-color-dark-contrast-rgb: 0,0,0; + --ion-color-dark-shade: #d7d8da; + --ion-color-dark-tint: #f5f6f9; + + --ion-color-medium: #989aa2; + --ion-color-medium-rgb: 152,154,162; + --ion-color-medium-contrast: #000000; + --ion-color-medium-contrast-rgb: 0,0,0; + --ion-color-medium-shade: #86888f; + --ion-color-medium-tint: #a2a4ab; + + --ion-color-light: #222428; + --ion-color-light-rgb: 34,36,40; + --ion-color-light-contrast: #ffffff; + --ion-color-light-contrast-rgb: 255,255,255; + --ion-color-light-shade: #1e2023; + --ion-color-light-tint: #383a3e; + + --ion-color-start9: #FF4960; +} + +/* + * iOS Dark Theme + * ------------------------------------------- + */ + +.ios body.dark { + --ion-background-color: #000000; + --ion-background-color-rgb: 0,0,0; + + --ion-text-color: #ffffff; + --ion-text-color-rgb: 255,255,255; + + --ion-color-step-50: #0d0d0d; + --ion-color-step-100: #1a1a1a; + --ion-color-step-150: #262626; + --ion-color-step-200: #333333; + --ion-color-step-250: #404040; + --ion-color-step-300: #4d4d4d; + --ion-color-step-350: #595959; + --ion-color-step-400: #666666; + --ion-color-step-450: #737373; + --ion-color-step-500: #808080; + --ion-color-step-550: #8c8c8c; + --ion-color-step-600: #999999; + --ion-color-step-650: #a6a6a6; + --ion-color-step-700: #b3b3b3; + --ion-color-step-750: #bfbfbf; + --ion-color-step-800: #cccccc; + --ion-color-step-850: #d9d9d9; + --ion-color-step-900: #e6e6e6; + --ion-color-step-950: #f2f2f2; + + --ion-item-background: #1e1e1e; + + --ion-toolbar-background: #1f1f1f; +} + + +/* + * Material Design Dark Theme + * ------------------------------------------- + */ + +.md body.dark { + --ion-background-color: #121212; + --ion-background-color-rgb: 18,18,18; + + --ion-text-color: #ffffff; + --ion-text-color-rgb: 255,255,255; + + --ion-border-color: #222222; + + --ion-color-step-50: #1e1e1e; + --ion-color-step-100: #2a2a2a; + --ion-color-step-150: #363636; + --ion-color-step-200: #414141; + --ion-color-step-250: #4d4d4d; + --ion-color-step-300: #595959; + --ion-color-step-350: #656565; + --ion-color-step-400: #717171; + --ion-color-step-450: #7d7d7d; + --ion-color-step-500: #898989; + --ion-color-step-550: #949494; + --ion-color-step-600: #a0a0a0; + --ion-color-step-650: #acacac; + --ion-color-step-700: #b8b8b8; + --ion-color-step-750: #c4c4c4; + --ion-color-step-800: #d0d0d0; + --ion-color-step-850: #dbdbdb; + --ion-color-step-900: #e7e7e7; + --ion-color-step-950: #f3f3f3; + + --ion-item-background: #1e1e1e; + + --ion-toolbar-background: #1f1f1f; +} + +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: normal; + src: url('../assets/fonts/Montserrat/Montserrat-Regular.ttf'); +} + +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: bold; + src: url('../assets/fonts/Montserrat/Montserrat-Bold.ttf'); +} + +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: thin; + src: url('../assets/fonts/Montserrat/Montserrat-Light.ttf'); +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: normal; + src: url('../assets/fonts/Open_Sans/OpenSans-Regular.ttf'); +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: bold; + src: url('../assets/fonts/Open_Sans/OpenSans-Bold.ttf'); +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 500; + src: url('../assets/fonts/Open_Sans/OpenSans-SemiBold.ttf'); +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: thin; + src: url('../assets/fonts/Open_Sans/OpenSans-Light.ttf'); +} diff --git a/ui/src/zone-flags.ts b/ui/src/zone-flags.ts new file mode 100644 index 000000000..07aca7176 --- /dev/null +++ b/ui/src/zone-flags.ts @@ -0,0 +1,5 @@ +/** + * Prevents Angular change detection from + * running with certain Web Component callbacks + */ +(window as any).__Zone_disable_customElements = true diff --git a/ui/test/assets/bitcoind.png b/ui/test/assets/bitcoind.png new file mode 100644 index 0000000000000000000000000000000000000000..26ab11e1d4faab186ec0effe67c88683b990cc2c GIT binary patch literal 26145 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 z

    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�ojJdgW$eVuhSFN|%7Osy|GWT4w(q)?^{CyO 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

    KgEUgy+4 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 literal 0 HcmV?d00001 diff --git a/ui/test/assets/cups.png b/ui/test/assets/cups.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1f72bb05c471e1c5e16d49b0f5385a15a0bed7 GIT binary patch literal 63490 zcmY(q1ymeO@GrV(a7b|5MS{BoUEG5QcefB6f-UY62*KSF+}+(>LV)1zu=rxj%Xjbp z-TPjj)2FJdtLoR)Gt<*EQxm18B8QDZh5-NouodK`KLG#;|5yY78tOk{=vrd^k09Gf zC`$kUwegtGW+?yKR2K4|lmP%AdH^6W6aaYqCki|S06aJWfMZhtKqw6WAa>4bQwRU+ z2({8xuvS(EF#qGx04NCW07(Bhg#SL&`w#CU0{Q>pKOr#wj}9UL5Mc*E{vRFv zfAqg1|F8aM^S>!l9>V|in1}fPY9j#hkp3_KpIOq3=f{5p-C17G4FJHz|F0qdGO|ei zdDFAg)OFWYRuZysa$q;JbTYSM_i}Ll&k6wc68gtFSh<@~c{zM>bQAItq4{4LLjU;x z#2hqK|4YT)UW7(hS&d4{$<>PL13ND}Cygiu6%`fO)zVt%leFyrnEz{u(Ac`WI}34e zczSxWd-AY5x!Q1W2?`2waB_2SbF=-^U~}_!bT{*2b9AHq-%kEtKhjoi7Or;A?siU& zRR8%kGk5ZE7onl~59t4t|2Az4#F~A)EXWB$Dl=>L-0041-g0zID z7s6>LdX}}82S?lIs^hBTe4h&7p?5H<)sSo+DV98ei+Cq$@e{Ah$W!{NZ{qV+&O_;J z$L`SX9vuhQ=zLnHJ%zgZjtm|z8Y4|&u=_mr+6_2fOXRoV#jA-;^-E=aw_8`)=Wwc< zBlzd)&Z5pcQQsVu>@0udFHC9y^UC}SXB*w!ap7xz_iG_ms5t@f2Ym5NQC?o&@~$p_ zzD+?|T3Vhc%x;wyjlfLgW+PeIzp~PQ0sLEwSOJvJki(mPF~I$MFvAwGznZ+8mKzMQ z{aJNxx;8QrWR|ez;o;Gq@5W*4YhYl23x0<7GXRK1?H8*Y-kS}@lF~M>x?=VRMbA&i z(4p`qcIw7@r~g%tm;5x{QdooAi*8l-gN)b&a#_*a+Z)E{#i9n)4z9yGmuxZe3d;VZ zv#4!CY)rS7kf4OV2AH4RVmT(f=zPnU{T6}hkfKN!yc$!3i`b0$w>h}&EuW)wSVL`V ztM|M`yhzh@3~CF`r2|zgtd3j2h&nX%A>LWC>LDKO(Tco?1E5v;6h>@3k^=dlzjCcs zGBtRi)bTTn(Kc~r%qA+luNZ}sK$hVAEflLhk_8F6HA^H)%R=wFG3GcCl-PzP6DA(A z%v(!;`2l}|y!1^c&esH7wW172e}8{Nd}jn3taA9`ttJ+(l=a%yr}KYcT6@SsOhLZL>Tr}4vz18x-- z79G?dja~DEFmP#nL*U=!vNJS^H70^xf_JQPk7F1OjyJsv&lv_750y2}6q7#GxlLzt zE&X=q!g#hEu|I40 zp5JNxIq7fO3zL$8oEUbFBt}*hK!tkt-CN4};maeTaY_CN4*=;g+U!Fvm6$J45Of0Zaq_JGXxD1QcI|xGv2hsEb5HS~I1l zv)D5hnEtL4X)691>*zK+JU`#b!D~MqI|(~pg$7YuPb%l@a4upoOWkBGU!I+PaxHX07Vryb}6jpu7lO!RdppdnCuu$ucUZ1Zd z=lil`#hoRt6rm?8d={7U-zaA18Ha;DJfc?3($3rU+MrULp0wjwJl<3BcN1a1AX{4~ zIoGOT(FC!Cty_IfJ=5y8_QNcV#f4=VZpO55!Du=9nP+r9a?BXTG$*Bm8&nZ1aQC(1 zx$^$S7=g~rxWJsM$${{LVm>E0@b?i3vnDduAJru8hI!R*1Oi3~zvU@ZKN@6wu>Zp< z?s>a5l5-(h-hj+TV8G0F^L>Y;Yi*EoV*mHs> zR^6|ThLypf!KS3e`Cz5p+lFWnHNHM$z?!Ve`%hv%+T^`gD4I>LZ78_QmzuW|1ip`| zX8#>{j6^yb4~SExNNuXo*X3WdQc@sUYY2WDjLnROW2J|OyRWvi$ZleW03+Q{0$$57 z`8*Jhl6sXD+&v;X_)S75iEWb-pKXBW>T^Q~$3i-^&L9vOSP&8|et@Nha1(Tv342*9 zQqJ^OdMlbgH?^)DF7(2$5HwFH{)4L5Knu!MdM|6)w&74x-5tB8KJh8h1F)PDmQ(3> z7m7vEi8{kJwu)0t^$JC(=AhE5v&bta(@Hr~d?|$=s-Cf;m49z0%FV$0RW@IcQc;W$ zcRAvNlBMQgUJba2NUXRIgfHq!n1^P_ibh=0x!*0UIr$VKbDuY9aDO4041C+i<+j*X_3&QSZ+O=ZNqc)Iq#i8kdvqLeugSlP`$z!CO3Z)UM_CV&&U8yqRe1^*DkCoF4er8)g2-Y5N zx}1T4TLz+A5iL(;vr|dQ{>Dac&L6&g4luPCoCHsM+9rd0QZKISssRG!(~I$mpM`uO z4|}QInCoKFG2K6Qe5>SW69f`Lm|fPX-z5l#a&^DF10TsWL~4Xj5WCpzt9pMtEFAUq z2@N?vjBvzdNe_T|=^x)W{1&~qcb>_|d4($6NE^uJ=ilnMyd)mY)QVwrJM#5`dr^CG z#buy-J+>Db8@@8IJ(SKYmcZ37To~|MuiISdUNKdJ=lpyLOD3RKY3xPsW}TjB@lVo~ z5_SvOWp%G)Csx-|AWX5pWKhune_7v0_SY}7g*lTL?K}peo231-#Y1V9w?bvnM1R)Kl1-uE;xuCSZ2hu_4B)U zJ2bnQtA83*Fa}dRFO{he`=R)VA^3c44!McY6?qoagXEyma9|!-X(80KJEeXy)ed0( znhJThGl09u&s(!;W7PYFsT#UB9BcRcJ9;5MqW9Dxd6?K9dA!)w9BL^3i=71N8@6M{ z8A1BLjArp=v?KP==YEFTZq10g{Sx|eH$g+mU3TS;*J&&)tmoM{N?{y{&`yz*sMN`t zo*{|IYsJS>3+#YJBTtuY8{|s(6Ex+uvb6LFqXF5Lg3~3b5$nrCI#XGIsp(V=s0Sn7 zhhlOUNj2#bMpcM&=~dT_O!L$0`rzjMb3%&3@88L`xbLVLuY1EOa_@ZwuyNs8Sx1E@ zJ6d`D^~_5C9Qf|iFQstMG?4)$>Uwk7Z%S!qyxi&Q`N?-T zxkD2|XLs`{%9vv3D3)XB!KRQL=9#wK9g8g*4F|jnH0n#kft=jHnscw)wMRdVUNf^h zJVd&?CTuiYtLxcz#=t^=$s7f~enG}0e+2BvDsY9vG`gFS8Vo&GXFqk6ZGpf{Y(uoP z`|GN9)p^=rDH5+{3XEe>L@bmGi7puQ?rbGs)D&711W~w0b;UO%+e@7SIovv6!=hQL zV91}JhHG?Q>w5F4bEFQ^zT-=Q<1-q0G3r`uk^_H8`rwrl43o=8PydWvK8jT8Q72N} z#on6D?PtR0WD4kEamr(g4(Qvt#oK!U^7*^j&&EdFd3B-5g`4Na#>3>@F7s0&b>cBo z;rglt48zA~Z>U3OL&s380=xhhPp-QO!_xvgvGFLa)OV=N6@m^N=&J15Chxc;-}mX7 z*gFzDW4;{?`25*Xl-xq3%l!`3ohGs}nl7-{T`_m2fTT0JId725xGh0!Ps3dH7W@_% zHudMnW#lt7wYMxf0QMdd{qeH2TWP;_^I8Zm&gYf`P5@(zvxw_vo+$o?i{!)Wv+{^1>YnZC9?Y4CWn z(T#>+6X#ay)xUG5{KTDXeOF@aNK;H5b;c^q{l@8T*z``*75DjVV$W_2FRm}81pO7A z5LlGBYViQwxOw=E!0~m1CjG7Ox}`2Xuv0=hPko0DAP)XSTO^NajN`VE`4ez zs(o9#a+w?gPYgJTY*0n9w{8dyUrN(+uV^yM45ddPk%w=(eoe86fp>KbC#ZV9AB9)u z5*Gw5D-1Zo<{GCDSI7OmxP^9wv}6O}(ZYSiYfN^{FjWc=6mW3>`$3(I)#FsOwSnAGuSCk@FB^znt9!cW4*0$U*Q>XFadXp{ zAHJMx84`{(7RNWXg%oQC4xiGzWjqbYV4sktrrom*kFbZ4q|EPFY2`jiwNk9PzjJ_4 zf4L2>iIwKR@?IMEvL<8%aeEo5vo7p8$Zs+xh9j{Qp678qX5+cM%?&q@W!YqLsM1*P z$d%xCmIpMW-;1salondd&YqtKgqSd()f&QBMBYc*#h|^EiDd0L?Z$PnRCl$dikmwy zl(hKNUjxwLi^sAMEq#k0dUENzQ)Sf7SA!r4Y%rE6deS*`(xQIQs(IM~y$YOFS!{J5 zmz6t8&O#`Rc!~VKJ}iIO0s6BYu3N1hHWQ`fiL$P0U-#c~4>?s`(SeO4Mr93&B!Am& zNq6B@9piSmn|t9LSYd0smeDR9$cSWx?|G1zP~%2Xv+l%H;m-FeDFY{WtTvT;HXoxLdkGJVXKv3U%VuXA?2z8zyF^m}w0vNf-}HBi0S0rccFm!Y~-K zd#Se6drT%rtSNs@pN535RV9>HwH<4Cy?y2Qe2D7)R5^aJVTDRtXgg#Tj-DP~wN(Ic zfq>bdEEzwcF<_kHIf6fvqAKqzO51iMU2jqjm zVbb|tXLT_=VABn^Xp4({AlQBWr$S;zdwY8T0Bq57rAbSl*EN!3XlP>Dq?L}}W`LA+ z(=WZjU(*zTr0FxvdI{nm3@3oxiozB=y>gu29eKB=qe6UEl?b>9q)eVk$eS_Ua`ssuR{FPrQ8xn#- zOAO?3pd??M(}bN8f+AkN@l8BS=iA()>n(3#*ELT%0rJmFiSt_y${qwWu624Of6?;! zX9Bf?4Vo{OT=2cZr{t1qb9Heu)b|JB;1%wx;K6A^`10X-KzD6v6uEC*Wyjwvo1$2< z{GUG{a)>59irwrx8)}*h_PH*x6;tHNG@j#jgzX`cz5M%sG*oeRfpe{YkKru9Wh-u5T&E5iuygn zK61}u$YpQ*{aMoV*;-^{BWn7m4Mx9Bi;sIhD06IuOJ$Xy1kn&HXZeGX)W^;&T$a5; zP_DKd`R~|=ASBoe8T}hjBRDg`q$9xO#to42ebLZ+uTh}wmbL+Y#`v6dYHuCXluOTr zDe522lgiuohzz_M%q=D*H%!#gn^qN=(V(O+^x9FkR{JDaDBOX|(wD;l{X}=mq#8(g zV9Eiq17KKz*LfJ6lWx6i-Y`66s0Vst-Hn|H9gMB)bEJ-Lo=I&v^>v#mP2ZXKY(%mL zh@5YdAcGNpIrsh^t@D}F6ofqgd~Uf&o3Nu2VHv^Fz%0Y1K;ab?Ri>#Ufij=^F%~cC zP-TqmJuffi+Mo+jJ&K+JpGifH>k_>02fLJD=2d`}`sxJx=d@E_h7^;oAmVV`BO;|c zE~HSUG+(ZNPceT@JE*Tf!*g}^A3CSpc1e1KMIAA!O4`Y}Z|2W0 zA}hP?Pfh0B&T9J~R8ziIVBGLoO6|8|Q`Y&6xu?fD7>EhAfd~~s8iL|3itVa{o4p5$ zCx%Aw08VZnui-rhAyCV{Ukw$_J#_BkCXh`YRhHHG9xTie3j#3w5wlz%LpDP+3Vh{U$3km&J<#nKwEfF8K=S|QA z4bD2?@!n>Qjl6ya7K!?@e!0#h_v&D$^X|BuQ+Ce~$&uMAfOdSrb0*r?tXb*CXX_?} zqkp5Fi}>bNNvk{;LfTt>_LnMmxt&n%LfRkV98V#xDCTD#F=3m*`0b^C&Vc_tB_nj4 zK{>UaK_z)|7g3U@xX27>dY|irA`5 zLc8$D-_+a;Iy^e^2Ed8!1%1`Yio$YJ-HqKAv_ONF8z!4nxYd5vk2dI}#yI#QUGKXL z;b0Y!Alez;>o*Uvf+Oi2p4nA-beOb<(E`LcF44F?G^*ccIVrmzF>kzE)o&%%ub((E zE)%GcXyS)`eLLara;ynf*^n6aZnNEX9c&-;U@oWn2Jk{%jOXJx?5l2^(-gu=2Sc^g z(r;{6N>1^s0k-iU7W=yk)(stmiVe`BXaN+ns3Q9zgo1^ z9>lA|JkoJFcvozTcI#F!%%@t3Ks#<*7C+}UX7p_6{~w5Dw? z(hwfYu%b4k+_@iOqzt4qNzRsLjB}STX9W#AIexmL1;hUGOlaYF40^Zh@`o9Q>P$Yl zb=M*8v%CAcJ&9vmU; z^yKVs|Jf+BA`7gwpYOWleDj@xf+Pt?lPJl?{=08xl#yU&C&SkGAXmOO7t!IWMthxF zBS{rbA%pV=AH?8~n;X=x<}6Me%ptB}xxSB=x0DrFCsm>y_CJ~YGwKlbG4oAaZlLI3 zVD6ldoFZHSf^)dF66{YJ}3hckI?AFU+UjD$Lz)Nqu{XQ_Kpp@bKEDrUo-j zKI>m=q}n66@{Sbym)!`2X*_J+H!zcG5u`MX!N#HAt>$V0*JfGEbQe;J<0ei{)i+z7 z&oGxGQ6GZ(OV+rD;$N+LGhxYp{%G6vRyY2V(TCc99+LU^{KilCQDw}7G0W*hpWZ>h zXCdN`Z=Z9ayT!!oLbmFdC+>NQx3cX*e(r|iA2rkZ!DKwKo!Q7}OF(DHSqQ@}e-YdF zlQyEUi4=Oni6C^ziDzE(>lv;?7}GwEXt!@CMab%Eo3&sR-9U@S$dQ%OHn-V+l-b|* zh6a8E-n%HAE7`UPjck-HCd_(7AHwq6@VzH)EGVJ9IB-%5DvsK@VTMjv*za`dBs13*(o?}xZ!Q}jKh)WR;j>344 z`Mo*%#W(M{wc5Y|n^swRn+eNah2OHkE|NGPK^l>@wP4Cb?$=lz%k$M%?#6nJB9&}r z%EJtmGy!$`hDJMFKw_nS`lpl)QLy*bPi?%4_i+@WtZ#5Be~3KYkG7eB**jlgz=OK5 zt4z1lapn3{OAG&wCTrGP%1Tg5^~DmSXWq)j!f%>R#>b9?AYr71Q&ZtW1xq50*z~Qv zuE0qW6;>y^WY0+h`U9mL_NBo1$^of4c@*q#S2v@;hpDFG-IN?ZS8a>Tl%Le+=s{S!4qg^chmeD|bL8OY`>9LBDtUc?eAQAvU0OnwPETW!78$aCe+G$?>ed zhSf~`dGKiJuDx{fm=H@z+0enVwq;yum0#H8;qoxr&ll^`jffYp8i716UP>uu~MhC8Bp z3#~xn2%sKz5u&dRN`x<1wBRCQ;&R*ZYLUowQ3%LI9tS8&<$Ljzp0&6bsrUGA|6Kc< z|92qQD`(q_>Zrrv-L%}+MTDcnvEj3(UnKqp;e7Drj>(Gj@0fqMB_@tJow`-oTqZ@- zvHq--b%M6C%YuloDyfyd>lOZSOT)8~y@9SR1Z+hQp-xe7$dUH1`gaN=#hyyObb`4D zigv&Ejw0W`Z+s{2^UCLg7;taC#Fxdw((n)lseoD}PPZRtX24O%Azt*zB8wI8<#r&w zcQvHs&NmrKYWZv#!v-9EJF6@Usj_4smY*LFPTb;$WukX3TbS3AaN*4U;e;^PuOvX1 zeUhAU3pw?}`|~vxOd|HA>uF(C?J7eix0yNBtiZ}fuQp#F-unwi;&Bl_LxbatfY^KuLVmRNY!LKK| z-J##Hc;jui#Dcf)J(OTC&>rLL3G$vV@W|||(Rca0Id;#2LkH>Sl`oyH3QzC7uUD;H zt)F-|!#On%Q|Td5e#jyz9%=ZnzA6ST{uwqKe&rs%ZEDKToK)u^(>?s$_t{a?6Rtqg>IeI~fXYFYCkur#4#(wBkQ*8ZEuQL195k@4_3*2x%p!ane>R-JTo zw6Q!ftFn&#k_rr#tWE&rBwP`Sv;UBoa?U`QTRQRm$Q{u+Azmn-qzqHewyGL2=-~$f zuegm_VW$Q4GxajvyFV0RR^;jY0bNb!!)lu@e#u|{cIfdrt}?DPIVMkL^4WRjt_8&H zJoKl0UKpefDS9&>eu*V^hqZLfQ?b6Dn6^g#{o6|Oh`|AS!hMB*a)W9nl@#MI2PwY& z4XS3BiTHHLSe;4l{qek=A?Nn^-r&yR@@X$HXd}HO}2<6O28-lF#wJ{%358I@9SXu4_)wziUz>rdiS^`{(dN z0^ef(yO#bjL_Oof;jvy!vML!^hJBSFar&8rH_mfMGE6vppgHy?n8csFd^|yW&9pY>LAA%=q)duSeBwkDmn( zPV23>^{t!s$#Z=^`opht$Nzm$EVB4&Y#X&xroXhDZ9}2USs8d>7!ymDVdYbl88#W* z@`eFs%+sj2KG&!@{7fOqTS&M6<#o{$Oy^0t%2Ll2lMA}$ISY0Lpj!7L=MMXltY#5! zChg!2y~f{y5}TFM*_<-!HHkJgsTrtU(B$-c79!R{#Ke5WyK48C9_#{|S?wH=uzlYO z@P9{15lmObEH6NsT#*S;eA&tW)y7hnv6ujt^5P&iRSC>x*ty-|fHCzMF6VVl-&^Q> zHSt}xG73>vjyD^%6RN(DYErkh;^_^14+WHn>F!%(0b(g14%QE8+V1=$F@a1N7QN zXnidf+taU~$P(0OhqFRiPg$w7XXd>gIO}GDF25F#I4ez&K8hf9x?)>DZSXopDao3h zRt~F~)x5QUBeYuG)3-XjI>tU2H11hlqK^(x@je5Rh*Vk(j`E_m`A62$ zpeNE>7d8x2Nd{iV%@K(=@|bz03L7Zw!9BmdvnhnU4Xd)(>8f+vHTTVs)QwEUpdq^N zZNn*VuXwOzM4K(LDULu%N0Vu>(yCNNF~2wrK`No0*^QgCwoH_8L-6eOPWA_cdjTJh zgP@7<@7X!JstEqZAQq%)dnyUR{%t4Nae37v{ZN&YwDp->w56PnpBV}THcOC2KEDrk z>Xw|}@#sV3XwG-0!qh;k-FG@BjCK;*JnDg3;Mpw~;GOI5!Eb_D`8MUR$K&jYCsm!= z?T_8kz1=T&D^~rFw{stC;#8K7lteN8(Z)}1Yi1Ydf^Z$~t3vc(_vQ-cA2e(}H+K_a z>SS5k?+A(29kMO01iWdwn%WlAg+W5 z(yvfXTi zh;#Xk&GjB`F>lYr(0cjLwGF{aY^eR;YPJ+G-90A7h;+2xc<*=$g#X$~u--z^$?j3q^(J%jG&%d1;uaZFKP6;0rEkf%Qe9u`yX4UbLhCdo&vcpy|~ zYpF&LdNmjCZ;R~iPXU#Q7H}(}eH)qizP@QLF;5uf-|~}ZB%vu;nIDWQ9fW(+h;=`> zVmTQsSS}TkQaOOD%noVf>1%OXyd>aS?U#p>0FRWBs%Z9X`tzlT#Bv2y!+iX9#>y_pIz zSjJ3GZG9;6TD&GfC_}C0Zd-H1UJWL=e?aYdKIud{R4RJ&sk`gRt`!O2e|5M2(o>u9 z!%g(i`zb=n8Xl^5r6WX_Q8~IW0H@`7QF@r;YrJ#e%oJ^e6>}5Cbe}{4Q5NO?AB!(8 zKlaWvcKhOvTnUPCFN9sBtv@uF+ah_ZI1`8{qzMwu6gUX>k$_QrN-?!JbCS%?i8{=; z2mamH(7`x2n4i$ITn&ftjI8v?zdnSOw}Xa7-D61Fg)-6$-=?(e6U{1M-WcZJcI4Tt zZ=z<<3}3xrL(WYTsUX+ceP<&!2C(Mm9}^a6`i&!J?CKUEYBYg1{*8Z~v09>hdKn(@ zvQ3O4!jK+ClpB_l=o9vc>257+`RL}1y-x3*>oD<3-|&1UFDWt|-}g`3z`5)KNB}R@ zJ>L0a^g(EVTCpY=O5(LUI-k6Igb?SYdj0hcc!To-ee>30m@Bn|G&9IQ;PG86*wh4E;o%!8*iO}D2;DM@xyf<4; zso|!^uq^_yq*cuH6Z;amz?%!W0xb7_EqK}!HxH-&x6o09!!OUBn$a)Wm(%*M+kMm0 z=qO;MddV*WEI00iHXTtXEKyk%Ww^;`R?qPb;?=)aZf5uJSv6aZRX4dr_mp?PNZ~GC zY}|LgL0Vz{LZJ1o}%?qmw~W4PN^J%|!9zK$6tOjmy=xqPeIP|OJ2g~FnB1%Y6B z%IumfqYc*PuNMhMEsA-VMz86UXP@G01H`mh=uOEl=i*epupTE-4#$s#FvN|1xdFnQ z!>B}YVg-;)4cO{x3ELX2T17N3h(p!5C)9)TSv;kjU^bkTh?mA>` zp6h|)L@e(khuAxuLo8w`vjtcxCa4-QTISL@C2~4KZ_!&O5`R_Usy-;iDTRhqgr(=R zJpP^*8^ymR6FubO;CZLI=~9S|yAOeefRY9kQ${?yt|?ph>`fBcPxp6Rb3E=Bi12~s zC;hxjh6@RLqaRDi!(OAAc=nW+Ha5chrkxFDK79?@BPY3j^-Y70^Q{)pRYz}<#Eyk! zABYipC`pa!Ir-yBB?}&IU-TFKTERW-GeV+qV^B)Lxj_w|ks>K2Pin2i-%U=m8P^m(NjGk7iSsvu{=?$KQS#EfT0lg25_I2W6XC!W{X$ zG6Gvgm^MJ^ap^WbX#9HS%UOEM#cF{~bG0rX<3v zOlu*ZlYv{X^Jl3zUB`q$ubj_};zQlAmq+?%mhq>o<2KLc#rTd}9Sq{&Ez2SCWX123bu`Qf+^8&R@Nr4A6T%Ty z?nkDcV#?>|483^EJ9Zpr=ZfP9^f?`%*4qg9v|qsAlZ;iq#QLhWOx9nf#>&K;1|WoL zUkV^^mu^t@e1~>Kot+t|p+oh#$oYh)4p1S+%z&!v4Ua{mXSIV*N?#zjYyMB~`R8~$ zKDJ<>boT~j5Z>X*jU9%9o-s7S1)dV(ot=3Ypo~l*QL3P^k}L+V&Y%6&s@t+)Z|=CO z?kHCN`$H9>30S};5@_b-F88%K;D=33Z3H2LomTu&35_P+Iu0(2TsqiQ0)zwWAhkb^ zS@~;4Vt=44;1)na*x&qBl*b2f_W;e9qi zBD0ffvq8xatbC4X!=Yj{)Hr-g?WJS}7*9f|><43FuQO^(pNU^xn#GqaqFzb4&NFh| zK9nkNw{T03R>t1vA+q7~|EjsQ*&0?%34jd;B>6qvpM(P)@4sy&9rCxK9&8_8+QE7o z4rhQx4jlRuRYiPXD$-fl7;l#3Xc=m@_S=Q|j?x0i;`Zl^hZv7p(Rr9vgX)4eZ{KsL z7>lZ)D^8I+ApMyO01&D6dIu3nAG5q^QUrCW{Qh9Ztist8)aQrPVuj|5I(3xBG)}Md zk$T3}0;JGn?mg~W;PF~EwO zg4KX8ov&q$_F~}{#r%cjL`dYuv;eEN5!*3 z5yJN3ebv1QWMEsB`OM-{q4b+;*lO+Ztx?l6sS38Jzh$$Mqy6BdR3ev4q!XU0+Dt57 z%4WkBN}~0qrDgT18$`^J!SPR&x(cVZJ8@{NCq-^B%xi@<7r~gQWhCYSa8rT${eHR! z9w>x`a*p~S2*Lmt69%3ptMLD+<7{D4}uds928Z%g*SG}hDOG{$*O34zGZ!Pn$G zobP>6_;4rtrMK21?vHD1xP6d9NHn2db<0V<)idNTD3`GfwkANvUpC2r>j8aD#OC~W zOE{wk?w_Eo6@aDNMbd&WOyc!8^eVlyo<1h5Caz_Ru<&$4m;E27raOh@V(#gqpqCz& z?os3}C1qLKiD7rEu4j|#>hIG>3((+}zbb1t^C?hGs{UOgVE5kJb@Fv6YU^Pi=HAK% zya^n;*QG)+Yc+0ix7+8kl@QRtsbxd6)Gp=fmoLoBh5$~X9167tj`!Ee>hLGi3V8lsn#Bsf98}bPu zjfe5jH|)HdH~T_3w1$diMi-8LU?J#ka)JJ!cTb%jg|60RZ^Ry&8RK_cZH40Hruyz6 zbW9HoqA1fH;ezgH{pdSV7fbg=@Y~K6*oIL2@DbNy`@*7S=Gviccla;HTW$NvU*4#h zO^PglccKXDhvFtH$?|-tP6jde@}1IWG4%Y{qJUIyCTm#d>&!5|oT|;@ z)%rs>5yHr%eS{^*T~RqbjytQ<`ztS~kY59rB(`>hZAnYV}M-KLfQ z)&~+<$80gweE>9e(v?92llN&9zb^hS+J%ee>agnFSTxi8Pi#mCl{=s64Efh{!8#qG z8jnA+h>gJ{$@>oSX}R+)8Ru$8VTYd^(65K1(`}p|*!r;jhHJfTBPPo1la~d|!3a{c z#>{>GFhfIeSKv7)EmWcZ0<`|EU%kVdvHiz4zIv~+v(3pt>QL+y*zVz5@<3h(ZZR3u z1QXr26|yMMX(;|MBe?uPPY1wv5->=p(*a7AgY$ijKazRF^&>K{Z@+I=w<@Ri9Gj28-LAJ{P?y*qM^OvGr9Mgz?IU@= zMSK+-x9g4_ff!Sx=*++z6tNZXryOy*39;nh?S_4IXA}NO>4pSZ-qy_Sw*aCX@p&Afj3M#K94Ybw+of88448WVrNdo#V@vwEWz?HH*bdQG(Y%i6f% z_WPZEBmebG5#lmWYNP{*1#Ua*)CXoMP_qVlJx#8{ysCTzs_mG!=%%{+El4QVp>Ih< zfHJkb2|+9t<5QXXA7O&t5tx0*uQD$jeN`Y{V8l9y3J-ZfoN50bZxZI`k z>0qXYA|jWtpQ#+8P1y6d(Vo0zF<`yJJ0QrSB6a5{nb^vtRWvIPOv$XKb&P=f+t$P{ z@K!+|$g2VG-4KVy9(UeW2?H&&>Jg|bkE#%inrRAO02}ef``G)Xs za$kY>B@4IH<^*3<-OKoE3vbRCAX;Vbgl_Q$i5!UapR7)=%)=lg_@Rl;n4F%YFKA%} zlp-i+C~5gx(bthQPtnfarB|?2)Xah5lk2U$y=&1Fx~~t#*DGN#?paC$P~tCqAuFzZ z*<9pXor{2IQ$Qw9HNig3;M)A?MlJ9HN1t z!QQVoh>l3;oT+J4zDyZ<_L{E(_vUrGzO8 zn1ONH$VAJw0&X$8k=I*uVzHyu+INVLKD%8a?apN1lUcb%n1kxM_@O8B`{u^D?@8?KV?fb<@ z2#HQ_=R0P>Fqbjx2PPc=5i!Yg@z&f}UtvrJ3EV1;YPCQ~EqwmQqpmPW#z$!gqw7I+ zu<}>#qt{GC`%{%}yEf)CrRQos=w#;l83iG(Xj+yPlc7!@$R{be?S5^_}^FtS_MrR(`mUHxufRQ6-7#!C$;J<18xnA|1i zS5=g_I**T(`2I&fb{v#{tH!C5@lWF1m7 z(ue#Q;mFaNBbf09`95m`t$=pSGJp+?6)z$-UkZ157Sw9Zknr+#wM%cDqaSZa^g^2B z8gO_c>iU?#qdgX2%P_Jck?fAqo8SL^1DN4 z9(U^68-&~Y{R|V0@ci#A^i--2y&qOR&sSnc#a3tIvnl=3VESPvjgIGr@7qyTF`SNW zg@!D3%oX#MNL5L@#1$su;go&4{X3D&%uPNNDCY@UEgw&-b&P}Kv)B{TTPmuE=k;3j z2y_}6N7O^TLHnYjotFs9b1UCCSlnqBjy`xx|@E%*pZT{vWu50I$(MdM=9!}!_ zTDx8Ukt)!_bI1sx<~HK-E$h<@!>OY%vC-czSf5P2lzDzc?s{R`wo0Q-g!AakqSOhl z?VIhZ;&0fl-#!8k`mP`d`{O%UVq#sbWS}!I*M8LHE{DwZt=uL!0n-9M(TZf+FCjz` z51If8hyX%lxGIkTf1gsn&%Hs>8f`V(1+tq9@1*RqMs z@Je{?z~nW|bMrE6EGB_#imHBW`&TjK&sK~aD6Lz`-*eD=31cnFoHzJViNxxF)Djq!7vp0|C8D{P;rtU+2L_)WzRE$XF(A_5Y|kL@;I%X#nR1XpS}+Imu%bq*+m<0 z4Ki>koDp;I`y_e=d#Qu#Hg7UpdyiNA;wHSNej$PL7W`fDDv&z|w~-&v_m!dD*c--d zU+nMz1)`khBAqSp>R={$b-(+-ddwIw9oPM^k2dyYB;p4UnNuOHdP z_wPu*xGp3GGGXAi(6n-OdXJ=B{t{aL#O>u@QcvC)B>dGe0jO!I%qSf~>sMFODYZV+ zC?B`&@2`R;I~X-t=1E~^oJ2IcuQ8XXaLr-!u!s%(m*wR?^4fT6-s*ZqVJFEa`X^FB zc>)DmNaG3oOP8zrs`1bVKdU3-M|Bx`eY{I|{qtMp1ulUUE+Vod=Eu<$9vVe?#>N$Q z7vtT;NMq4s=aUQ_bRRja0HDquRt!Y0_! z7w_r|$n<5rCCSxC=^Jh)GEoN%NQjijARHb^$9SqvOSBS4m_xDIu~0Y>BBRf>VEWK< z=hzmTJh5`*G56%H&To3(No|7fx4Dc)5(ikAsF;V^v7DKen=Qq{FHpMz#vl(Hsksa+ z&TszxHpv@lxEgmsc}fDN&RywJ5pBCP6O2o%9vA@0wFrkl?aJP~qc1#|iBSBM>C(F} zg#TvG{>gKMn<9^F2&MECo@uo2lc{JnkUz5j2_71VD(8zJ{)*tQ`Ju|VCyfPQ|5Cef zZ%tuu6x%3&eh;eeXl`c=`b6<^$FrOTLMMJn(ZjNV=Sl5FDRRdgRl0@%<85>w)6RdR zB#@`V{JQG7?hc@b>X4E|(BVYo6Y&VjC-IsD4{XhND3j2Q?XI+cO+PTTR^ z62!M3wmYGge-mMjn->--uaq%5`Q!0@vH4i{+`r9epk|tm0bS=34~SLRCQv7anMu(lE6oOtl@;aRwk(%p7y2YnM5xOwDl6uRCb=*YfcdPi zJxn89gb}#r&)nbknptxmfHMRKGp2aFCK8tf#Sz+|?>uOv`9G-(n$qXdn+M;U$+gkc zi%kgVqo>758{^Mjl9#kiNb!%98{MFidBQJ!{W>-+uJD8)KPT}DRxJML{H=! zozG(BZc=!!=6wbgiq?nn)zH{W**_lE0$T&_ak7*~^`FDx2w6#)O#CX@v~M1t8fFNS z;kwReo%61^zL^kxZxR}7{K0YHRZXL45XNV`#IL!=u3d(4s+pKL0@$Vn)vaAJIQQ72 z#JPGL0S!;+dSSFZm4`D|lHXBrNb&fMQLo}qSoW}#F#aC^eL#Z04r2Q+H@xjYFXEe9 zH|kvh!`M5JrDfLZDYS+0bMYd7Oa}^(KFTv12k2Z8;HSpVnmKLS8-uzrtq6>%0zm7} z27sCQBO&o~HU*qUG{P=YMK~oRVTx#mqnrDA{s4Pk>QsM7a1TeC@xWyyyngcJ9)=Ng z@g*9Z3zKyGIQe(tGow8H^wZKlabj%!%@$2K)5*XLHkY_0Q&@N;MSk^U_6IO? zOiyrgvN^`_c}&j$3eY@^jlXpkJB;HYh#VH~xK-3dZ7HSJx{{5KTn+97yvGf&k{*(^2ld4)UlfM;(`>(eCTt1I+ z{A!HjIkP{+c@1=PcsIh6_>9 zRQ*o8BMA%`002M$Nkl=U#1NdgXxl{sNkxPWwuUmTZ=4QxKR4hO7ME`mV(*;s58i^F8+ahd|Y@D2cSsS z(+yU>M4!=4$%Q>;9Vfen@oy4l%)h&1v+O~OU(b62aI?;AoSb{z{3UW26#_=x2r6%} z>7WfBjy8p~RlkQLLp2cfFerNPv2P%&1+h@pibIy=v#ut%pKzIM)BZuT4@PU+NI3;<4 zN2M)#P;4Oc3d1RVQo4UnK`82?KcVMnc{+OmESr~MU%;hsV>u;T*)wVdfTb*r50rnH zYuqr1dqoiADpShBsKyt`dK};~?GaCY&u1|4c=$IK*5Fs0gIuBgfu^!l!pHPxzJLm0 zcz(bmDW#j2jCxVdQf&_i|;&i?fcMMv4`)EOMWw8 z_dCxx3ohN4Ba zMFqfy2$Rkq4)~hv4d&9#D09XXhO_fvlAvR|OV$-)TXM1R0%PQ?!D;Y|Mobosdhkn8_k zUP_;6uMr^UAN7U8=JADaB3sBa3Njyh!tC`2nEWb(KU^A|j>7OQteHQ8Pj3%3qZa^r z3ntiJJ!igL(9wY#hK4bowk$SkUQ`2=%ZE)Y(xmLMIPe{|pu&9`OLo^xoFu=!_!Tm< zy%nDi@0ZpA>|4Nu-}@xdR%3*x-klXv`c;*S*ozKM|6wr`rf47pDm zjF1C^g{6jOMii1qv5PV-D41IY`sB*C$@0PZufR>eE%=}+Rw__{2e6&_dk444r#3t) zE79d|#=0Ht#1KAYrm#V%|Cs#2!qu{-eL8My>O~>vg*#1h7cLF`!r`rQX43@yhzc`c zp`DDvD7KO%_oV#Z@8O(~^W-ZGy)OV2Knqql-W|AVmhoD|%C=vTcd~^;q^ny0(u82> z76Eeuu1F^0z^gE2OpZA72besb&tP*Yt2~qoyrv^9$Qq8*n+ZTJ=!pKHC*p$)>Adx) z6BPh;vjS-4xqra=n49^kaVb6cgLJ0C%a*}TkC%UgNe%AcxuR!GHA@=jr! z_5#5CF8sI>z+OP9$)yzlCjXT7gEebji_>k(Q2{XadHy8uQ!!p;5xx-H zxvX=JT!TCG4q&{^B{{VYZq!j^doI9Qo=i_83U4oZU&~S9esICrG9R=4#~S+dQ((QQ z7`}}Ufcyyx@L5>T=bAmg@?+t1x{mV{dk1=P`Ns@-`mh3cS;$!2SO`5=^|xxEQOg&YyxtSC{h1qZuT@S99fss_2lf!sSIO^dv0L zW|@^^;wk7_e{1(MxH`KBg{oQC+WD2?>*p@U=eM)lb-5dlA)6d^MLQ5q8QzC!F!eN} zJ?h1#ok_U3^S73~0-ybE)-it@_V)H7>~HPeEPt_WgPhZX@jS-+4am&A0-X=#TM%M5 zwlL3|JW<}g@GM;GRWB!T0HXxN&lE+O$Y*$j zhUuOd21 jO;bo0jp&m@bp0Ukh7Vm}PiV1lM$_9`vgl@jHh0_13*lOE*@E8~M2{ zbQ%|7zx`XguuBl*^LkVS^&AV7Jf<@x7vcFalatWjibDI_i_VqB`0{Tbrl=Zmm}h`X zl>4{H-)!9=t8sf#F9s`hXxZ6?wcuHK9Kj^t6x{0jd-Kngxx4@sUHlfD3FwCIFYSC% z?!Xs;W?*uYlYv91Ib!9Jq)(B38i#~0jTil?Z0awPi8$!5O3f@xn+$v{dI595U)_5T zN(w80wPEtFZg}{O*!edR89k08yn!B8eF)s+6t0m7p4a4qUC}Wek(XhFaAE@UUazy}m89(Y^8u8Ju@M3oT$5>mxci(mtv}`Caf^@kUU)Oof zj5)FwcL}n~uGJ3;88-{X3|!utseb!I37$q{Ys^hMA6~i&>;3Imu0sn?ZK!1KLinHF zwqDLc<-@c69QX6FICD6{+m72XMEnuwl~H%mvF$nOYD!27YCfrVwg5E*y=)z!U?FPO=y#*8sC znoyqCV7R0e(JgVcP>qF$y8Mqa=J#;Gsb0cCcXUlA(8w2g6FBPk_z)I*0KD>xZtmtE z@`f-~w}UeZ5fLJ5_IR9!jc#moN24b)W!?fSlvVLH!XOiQxQ0Hjaf1AhgPUX>?h@pE zdAv`c6@CBfXD^i{Sa&~(9e2#5?2c0=hB=CUhN15T^9#6@PoBc$;s+Nkm-E^>b*;Vu z;nbnmareQ!@`;^~%lS?1sFZM%A9HR9i=naS(2qcm0scRitd?_{CZXGpiV2m;2qyjR z+`miyb}K3mT!YRY0Uxe-&``70+>DqN4TTH-86J)WlkW}(!KL7KrRgoO16 zU4^jGYq?(5bQkfH4?j)uK!-QRop9+xy?A{37_4qer+yVME)~!HsiFiO%H&}nig>GV zIqjLp^BBy@KWsyhsVJb|+=&B2SRG)CKZqN2xPACdxOr!QI|orAWLY;9o-&&(t}cA; z*Z&0$9esS(N;w~&Ge3#zdihE7MvU9;9wA+=!WM(qs2u!w8X77=JWE z9_L|W@@}A8LPQeq5m&$yX(3DtHx_QnQbND**FvMDY} ze`<*v6B6j~rMs5hV*jW674u%pkS7Ja6+~`3<@gC>p61>+z zag$Bq=qC?#grC~x{DxQ8_YBH-3iMcfwQ_Oc8J@PV(D!5P&x1g536Q!-gsYB&GekzO z;sG&}P_9xqqdHy-&j@r2!uH`QYvA!>rEn5Pw9~=?VgS9ySy&ppb^kW`#bMlrj0;3? zSWT}Lzq)Ilyt27NPJpMu`juX1i7m}2{0A|Iuojib4H!{>5*(X;}ffB52yFJ6YgFABH*WIRyB z2o*hwPmCvD8D4dGeI7PBRp3Gl`lC+zyD$3zKkHY>>h*K4h;o%lO3Ep#+!Bu*^4i6`cK9fe>0JuqL8a9u9 zY4=mI8~f;aV5k>UZ(SItzjfXUOs-)rAYXbi&90RjA&k<;8T%geBe=0+BV1U%0j*&ZZD6Izz4hDCYTv$lGkQm8iBXXH zQSetznk;X@(c!HqFg&*FEUVb5`Z=e7IsiN;vD5PH3(u7KIONlh!rzF0xT;fb!8-pV z$9rTtHtw82FN59l?7=!ef~bLo;FLRo;Fgfmh3bYf|cO#D=sbpdn*0%0w{%ELm$a~3KTH22t+rz-W2 zu3ljBa(TxTOg?tV3f!v9G8qrBEL9vKtB2O&u~s)L?*I;!`24uA)qBbUi5RylK(rjO$0AC39*k8 zy2ffc`N+dw$N(k~yP*+>^NGqHDrGz&#Nk0d4kGjoph4zb136r}sX&@0sh{eUar8e~ z&~^NP2p=E4Tz8<3n}2Yf^)x7c6(_X7$zhHf=Z*9lJZ!w`200H`@fPqX%7l<8Q6?mi z`U!_$jvn}l^FJ*Jq#4~@s|1V|T+2w6$Mk;fwbd)gyPnCl>5jelGO}@H&lRU$_1koz; zMA;Oyy04$N5FZ*1V`a3~%+U6uwT-|XMrCpR)ERQ+tohhTgqeMgy-|Q4#*F`8ZO29* zocU+3f-&Lumbu%o9deK3FwfN!r_1kfogcIMw1Wk(9^Ljw4(^jb$C$qvl>{&N>P*G)ly*UX+h8y_;%Q4W(?pV%Eh_g~|H?*AH0WKD%Y zGDBe^&P`LxlMDurH(X)Ld3*v>lzhgkt|Ak;fQ!72$G=HW*F*{7lU*PB-DCXZRZ0Qf z%aM;GroH?2;r5t8nSnb2PU3c8OXa9N=kct)fh!vppWIT4yG2gX9zrG=tX zKUtLE{vn?N6Iw3h{*uBAW*@l1f!AQ_E8@xFz5WCy zUwpi7BAq{mM_dVB6Eo0NoGOZbLEiYutFSs*TI9kbKKz(wJ(y79MIgKsgv)_O14~6u zEjZ9L48nNQ@G_+1Fq@Ux;k~R1RsQ6;$XJD`FdO7~e3(Y3o5NRh^2)GDD8S#v=Aa)Q z+zGY@Ea8EU7W0DXv*fK)X3HULpXTkolw!-u$+NwvMBh4Zi7ds;`w+GgH)HtF1DS8_ zcv1#>2bCw>%BLHADEm0h?El{E6>`(kGi3^D6>bl1!}i{OY)ZQQ@HY9~Esx5Xb(o_; z5$r{1R!P(RqK6ZA+i+6wDy$sL#CeCE1IOiF#A5-L9=X~;c{aSPoMyLl$aEY^>cvUK zE%>}TuTMAosGCDeX=v6@i8D=hv68^Bi2VdUw7>A7+!&rJu8N$JP(H3n)x-(_%YWI* z$H>U#?EWKGsD!iR3DT)-=C1^j&qx7ZCF}9j0Dm+*fsN*McwRNY%LILtQxJa$*)K!F zM|#mug~(lziL#zQ&@;xM3u(pHe?NKwJQj=#8FW4%@^~3VR{mrmk|9DBVhRNw<22V~ z)eoMCr&`nD^(Q>WVtS(A0a1^`5v++P5q)3YufH6v=2v$;gNrqeqWg^k1X2f@*c&ju z@5B&_+je=Hl5KT2=1|t6Vz?9+jgDZm4krXg(4zi3E+F|5*6h2mvB-AnakB3O(*77) z^Z&l=T)A=fVjb5HAnaE32u{Ggb>AlW#HOFiO04tq<}9ujFr=)3gj4Y7Dg^P+&rgK& zqR_|jiL`_G5DITZ8iY-JI04v$y9ds})nlE|-_zGCPh+?<2Q5996#1|?vA5BNlZBl~ z2YzF5Cn_r}MQAS}<5Je@KcO5}6Y`j<%B&)%%Ymo>E)Nn~)(Kk$pzehiUbq-a&eHKe zKl$Y|OpsJV1Kt}QVV|))Um4!(Er4@2P+x%_#Ra^#LuG@E$&ns;0&F<%rn12_l~sAu z8+0(uIwnnucL6S5yjXg%EXWscdQGSIt1c?1K05jbe?xq#@Wx|&bi)&M8N$0>f52OY zp`4dBIO2n>SEsPqNKY9LNoY^l%8`Zp@V~j^X*r0AG#01<&Jp0loNvc2!96JSyg`VW z@yJM%ybk03Dd-7s4Zjg53^(G^kuPC~;aQl$??v^&g2&0eb?6<;!`l0&mR}&3Pn(VU z2CD(+p7Z;D2O<4s^cenX>jphD!27Iu^KbS~twLy($0q#Pw6{U`lW565GH0o*=$I;d z@aga$?A?ii%>zbU#?0hc$sEEk;R1X+U=r-#h6>;b93`Frm?1FYjME|Hk#n(%(TTOm zW9a>pkMUzAVecZ-nEYkJrB8~3zly8EV>>R+!gneb2US|;_0QVM^4~=`{KIQdSVLs- z3rbXZMPYp5RrsL2${6Ckk*O}D1w7^Lr*cMjdLo@TK8b9GbbmVZte8yxU-^znEg zqJAG&BBy;4>NRcoGz{^@#P{&n)c8tA$f!lM^;G4{SlMr~V0;FIbP=j5ki3E7#AN zhaH1Ma_^qKa{sYI(vFQl?9Q|B@a^_-zcDI{)stsHf4w}`eZVVKm}d}<;dbHGlcvf< z3?+^nKPiu#I3!a!Oz`OyB=f27-d&aEF(KFk;Bp{FR`nMJiAn|FR9vRr{sMy>PbDMe zkgf)@mrlBe1AmMhXoOS0$`siU_*D(*;b%HjPYFK96YQX4cte?Abs5rJ7k)}-g~Ai6e*QPoI8R9yokd z7U5JMFaI2Z0jXU%KRleC(_RI-=hxu-4)4O=gPHhdz=H_?&-QJ^d<3sOM}ZH5{P4(T zOk&X zEEZz&>x(H zn1D?}_h1faJyr=;HRIFi3>OcJQy(gWMqHD&uw$}TM!!6M2n4PeWZnO!21X&oZ=a{2^G*t@^Z$i zHjqEaM;@mmr`PcjpZ-*D&}Z=@F6vN*0=Y!S^hWz2$F0-+7T}|gKB^Od=bd++9OCuh z=rUSZIk_a1D~~ z-6DDs&dboop2;ZYUoQ3Kzv_Cu=H^3DPJ((}! z;O8)4+t#hJ1s?`E^UO140&WRnrK)i?eO}JP3@i2fFg-266fqfvgWuZ}VX{W164>jl z!LPySpCki&c@KwhHGJUv@jC;PdH;eh3@yURytPwj>-e3MfD<`;j$*BQ@UaE>FAr>x z^D(=A{j7y@5k5iIiOn_*nDrk-;b99rz{@+kkIKL9ST8?1c@(z*;VuBIvFo9r5N@;= z{LBi2SgM1VjMcdXc^DNJ zP9S4aazuMA^Kh-m4RaQt^%wc!uKn`wxO#jUHXfZo#e`rqy|pmm`vMmuj+|R~vU?9E z7Z1sjwrSbbZAE3gCkaW(vVh-<{|HR?yA)SbrzEm+H9 zwWSJ`z?W$L5?JK}jj$E8C{Gl0nBNMvRTgHv(#cC5c$BU{W{<~3eMItM_;mP(Z#X;= z3UuQ$dM(%NFrL_g7y_>Hm~Qxa27uoNc;JBtwd3Qn~Nmdv$xT|5kw49bq2_ zr&EK2Kk~WoEk2Rv`Mi!A_^2-MM_rMS0A8;rdAx@`kArzh=Q7Nwe`WhqvKSX|ENbOu zA55d61FG*0s{}_e7XO{jMRG2d19{aqC*uauVh^EE)?+#CFeVLuuemO^q1$gMxbc5GEk+>)tEh$5(>C zy>A!h4<Gv+lY$i3s|A(!ZKeUD|{p(cL{Qv z^8wiV>W*1*7J4^FFkJb`5tKa)d)N~yd8;m!3cxX>t>ueET3;!h_6x z9y2&OY86bQsTd7$g^hv6f*D})>C1$xx{2^|gu|nyPf$&y(GT@$^|Z4*(7w67c0hwKjRFDeRK>B23=# z$EN%^b|wyO)@c);t zv*q#`Go`10SZ>*|NuC_&mZhlBINk@l+Q2U;AI9dP*G+$gOhcFde%SnPn4?(2YsS%| zV6&V{H=jPi_#8cr&?)%Q*q>`+jkW;@$W@%gLfUB=$`uGR$`v>orHrHjAN|04m;tHZ z^HC4{R)Dhr$?13ryYSN9Knz=@Dt}BS>NMLcED9N)#?xqJyhitK5ifDDnG=4j1n#@< zK6(4w-!4~Pb(Q?&CqI#?*c`;oLRM)qUGxEego#M~L82qp1pEYIDucZb|^aEp%1`EgGcx)^5*7_Nav0{ao(i_J?n%sWHR_kRc99rzlqA774D zfRnssBs@F~xgR}>i>7tS1yg3=OG*9m!+m=}MdgOd2e+eD>@y*_(PrX8S~_x`?g=&E zpwo)QnSqs^B#||1*33lfzmORhF6+kZNdq^3a8o|@dm7;aKYJSbI9ikijrJqU*nH+csHy#TELgu&B$0 zYr1HIKGbE8*Bfw-YFrv$dLk{=VVoYX0#QOaqR;acz>yD9WfidnnTuc0<>h&zmMZ{D zu{8Mgog3w`lZVkIZ%<)Twi8TFzv$<7F{PeB2GHVnfO z3=^Kf_Yi-lYmwZHv;6HCZv1fnUis4 zBVWUCWih@mG=vFH97WJ!g4$K~$2EdwEDSIA_;(fvq2%lR06;Co2SjI)r1KM9U0vs( z2k;>jOxlf@hVgn3&iOqp7#Eal%T@?ekLUHU3q#q;{7THU$1oD!=ry3s4dE-9iABF9 zn!)Be9c2k!g{KVk@qo~Q0|x~6E9#ZuKfV9{$`;|EKgx#iQ-2H|^pqC;49*zG!Dk}0 zHOdF1_m3B*im}Kr_p`OZaW!3{!_IiweC&wK#w1<~TImzO@8t|VaChw4BA>_UzwaGC zC|zi!XJPcpYdv&%HQ1bUAnPCV*=&*)P)s;x>+rk<2y+I|XM85x41ix0-iylOAbuZR z@CvzM?jrOA8s!HE_sFN7d_?A;^5T338#e9IBRg>y;nUbf$gd4?lJF>20seN|MjR44 z4jM{6IxMUJasfg<4L{~fGbo9dp}kwBqY?~@4#};s_3OC6W~a^pj0_I0Xuw`7_bRx+^hXo}(HVnw&NDI8m7VHTk87g?Z zot~bPH(eIKXEd6_WmZ}M6(4tZ@nfM}66BASz(bf9ID%zC-WsIKt)?dptHiJD1+*Ay zpqW~_o)+Q2kopx}pd+wXbP-X;SB5twIhPq8-C>j(zFU5@b1!b|`O6It%iQ)3O!$fH z=sO|nvAi}Nt?x{nA6Sh!0KM%O{H#0*N%hQg>F>E=1LZ`f8 z-eSyIw8(c4Zq{!{=B{myUVVPZQvR(YhPH~ z2w0FU!Xl6eLODw_5*lfOCXXh^p6=<~z0dQWdh4sIQ|Id*iTlT`?(dwcH&>lgbt=~y zDx$hjr4KtpQXF~gMew*FK|`G4DaY{6uOd{ClVx~=1@}-#Dx0`ahvKQj!Hw7GCVTgC z5?RJyC_u>B9m3h`zi{C~x&2@MMNbR5`R1E-mY~iHP{!JYeCh%{7WOhTIL8&~H$IO` zJe9SI^D*jcXz4B@99jI0bH2bkNj*okD?0Q%FKtF(=JTD*@3n;^wU9(OI~+I;rbx1lM}ipf00atpAn*ob5X zIw3!fW5)mBf=lJn8MAOwP``X__Y3lgT|dKl0#meOkTnsipe@YUTtRpU`w{%+s`VJz z=#njGPUDc0ttc!o35efV5b{gwndpb}aVdi3YZMQMPGJZaF$~xP8f$)|5V(*O+62H$ z`e9Us)}s@Uo2zS~phA!+bY5T>4*g0+LRV`@aTA4ANgZ8*eD5_+cz1dT@-~O~)KB^# zaZuCZQ`7yUb7X_Wbd4cQ;;3`3Myvi)B7-U}oo$>~JRkA#-dI~B}OPDz) z%i|Ev`i(w!5A4aJ4QO8-g@@2VcO2F96X?X7g4)KLu(#i@jA7J1`{ppI2WYubn*~3!H}J3%fUCd2k=(wrJmiMmDjFX_9+q zqj<$Bpki{DlqaDXL*{25KY}K}?KTX!OcNfMh?qtKM1hKMVWmlNj!|h-9K&$FS&`x$ zuf7=0glu)+$uU{HM+Rr`MpIb8P{3n$72pUL(rY0>y8`*f;^`8c!P)CS6|(~$d;D=( zxoVZX?zOL#ef#&zBj^v9hxzV9SO?EErZXPXv4LGAEEtSn-X$y0{6o;xLf zxcV}A)7)j)jC4f)*S;6!p0h_}6%Qcc2#~qV`(&bwBn=zr235g{OC4ylx=0t|7&Kld--4!3!wHY4IZuz*mElWq zJ`CNg?(f2|->r+5$vd%@pc6X%abM>BmmO+(lS75p_De%s`&PTsXx~h@;$)H}pGPC^Pgcnio3o zd0ZL}aiKq?tAd9#^wYge+PKz0F@eSKa}B}{O#1mh(38&spa~fh3y3i(X9Tkj&tVJm zLD_?6#3jp{xMC0VYfw8ty%`geiV8n7vVPhin$46!6b=W5d*x5DM&YKpOSKd5+ZgWq zl zds(T#`)MS?dQ1I5cp|))7s?_Nor9@22{TCN`85#OquAsU$V)Ki7Ytsa_>lx+98C!y zz&S3=jLv?6kN)8wD)Xm5{b}tZ;D~`Q1l+@ACZN-6=vQF)I*}-*jqI2J=V?Par$cY` z{0;_( znA8qH%ZOo@fX{eg#tr=xP8Y&Le~Jsj>gB~;%15|^sn_Vjdw@5vx7h%%;2tF_ACT#D z4~wEpG)|wvIn$DJ19*h^rp=pmn((V$^(xs6KZggqPzYGZU?k7!Fgf;uIPvySi(p`n z0#aVj1W!mC(gkp@ljM$<_iWk*d`g;z0~y4dJf%%8^>Cgvl^=%f`FP?$A3k+lX55F& z*@wOWl6Io%KN}+rb1~^?CbKsT7(oXiw=SfiW)FMKTaocO6uAq#{=8}S0{Nqrm&!Gm z>wgL-4BviWhkOPdg)2IzV(Kyn2jMcd5F9#_uQ1R@VFJUrg^cD0zQkj=@?ARuk-z^} z6WXM&!?4ub&A%_{zzwt3uQQ>EMLOIm)p~&G7?;*JER3&fX7_GSHh7dgXe;wHcSoWNkR`j^pIS%aihHP4R6qiDL?t~k7X`K2XuxS z=v0JWV_6<#9^RqL+u-#2a6%UbBfeBlL|Bf0DBt@lbbEXvGYWz?e2x)MCVrkbeZC%1 z^LSa5<6bSjV+K%hFRH*apXuL(S^;Sp0%gGGjo;QHeYc9eQNO^pEfm{U}LvUx}l=w6F zQX*1*;vz^ryu(p1m#lI|AZ`8O-FM5fWy^%S2(4PZTJFO<0k-e-h%pudj?e2!!?ef2 z)U*_zhDol3nG0wmTo`t8LLFX0i1R?_nE>bYRp~M@CO4$3fO(n3NBV0Rws%oXtfDTqU*)hnr|98Lh9bGTL{R6JQ?m9Vi_^>>Msl&5y#sK>bSU#)E$;!Y~w}X=} zv?cUMxR6c}o-%%sGx|twF5ogyp+Dsd?DK?Go`g1f<_Rt*qGnUkzUCL6S+x(ZeJ|4X zI5PWDWOPmhI)U{ECn0kkdhluF;7!AXhOp4@wefxO0Ww6P5JSJ!0CqN9e%WO|z|_mP z;ETjr3N|rFGl3>@5CNa)4i@4)j^ZfN^bkgSELX91q&A~Qu}l{ zF=Q&Qv)AO9E%m~cINAw$p5B-$kGZgUNuZSY#VIhBjk7PKw=V91fDxYvC z(?}E)1{45kOr!~DnOM{tCR!@0GVC6L;Y%_Ce1w|-&h5nddVA&M$&>PdU;8z!2@GHf z?0xs&FSmd5o6>>p#pa-3V1dEOMeI=YF7VsK53og=fY@M06Y?uAlw(N1j88#TVaMxf zGvRtT$~GH3odN^>8JV7MB3j^C)#udTtFVXPZ!Eu1&nVq*4)riW!Z7g$bBRTe(u84>DI&Q9G$niv7r-bqIUtQmaQ z?%lEhwSjlO>s_*D%^F=q^Z*Ki@7;N)_8+iDz*+-G477OwUavRwtMCFdS$ys#Eb#{R zmvBy}ho?5A_A&l}yyzu&a4#$64a1Y5<(`A5@HM|4dkg-?%8h~z@-VHJ1Ac<3y2EmK zXi!cd)AQ7x?Wo@0hp)b1HKO1oqE(n1z&DIrn=|9{UGsLqpV}SaQoNEU6k%LQ4;Q6N z0f=?xU>P}yEJl}IAkVV^*o!a9QYi9!0g%{dq$HDBrm4g$bAhc(Q-?0nAJEZj&dVks z&B#XN?h$Q*s~6sH$JrCoMmQo6GfsCy8K4t^=3$$U4(uM>gGE5S=n*)CX2Bo|0qov_?9n8%fSZA) z0ay5O|Gwhq(g(Ig@{@2W<5Ih`UrkYS>dUbA!P8gpC^#faZ1JcX+zNobEC7z80GI>g zI1<8l&u6G2P=vi-2@;yLkO*j$FUg>htQ>DZAJI~7fYYGqvODo%LMQY_HmN)1g#1o! z_~2<@7>;zOI4VtLgtmtCfOC`9X4D8ypE;vD4YMG);f5Pz+0vylfXPJLwr$hRM_DuA zkm9oCIBpwTk+F%u4n__)@}An~!x>vDan5$dr+jI=fcJ7jz6>2fbe=xs&FBd;QRpv( z1bRa`ie%FBtIa>GE<_=~YCd-(@*@FAw-y@0^h2G1I|p%RVV-cTjxveo-GTf~5iTAR z;T=<5`&CUzi^jq0q$i`RB-b$naE&Fx#~LoZ^iu3^(9lg$_|;x_=hL{?pss{)5jMzR#Og&CMs)QJ4=;DunT-m%y)3B4V2g3WrQ^Dk9)Z!=5+fQ=(XJ@WK|-Li*63;Z5yLZD5#_g3x`h zQD^KR(xtnLs~M{Inr(IMa<&*NgX%K&Ml>lNOeH-jj0O{?*Wi-MD$|h#rQCQg3xEM6 z1J7IX8CbnR*k`Ofp9H4>G z1QrM{fM(OvPfHJAJhyQ6oH^QD;QRv?D3bd$0@~66rPA*^*cLiDnpCPHl#9@Z!&Qy zl-1&!;R$RQWC6hTKrQ>!eEtO?gU=`_UXcZMGBlB_94}#XPLG#aK>fouya$^ncMojN zp-ZsjVJV(60(kQHY9i_+xbbIs!RO&sG8~*=bk+(u5^w~|iuYsV(aSNV`0A^!l6C9W z3D$W^H|7>FW1mG~!F>r?C>%U^Q1;-!l3g#pC@&qt5?AM}aNxuv&QNSY=OS(KH3k+C zPPczCEeyKQ?$A&1KCFQ_jxP(B%5h=6@j?gNyliKu52tt~kFd44W@rmgOdsi+3{Pku z>FGjPh0O(FkftGzM+R|MvH8wQk|P%54VPYW2`DDWz$u>GABrQ55Gi*v|+7)1;Q|gtWfnofIS8l zV$Xpque?%LWAtG8^5rrclZmEc-vJgH!`PI9vk-Z5@fq|ju*SgMiVkDq(P0z{dr_F| z+__Vu!{!5KifXNa+jOxI;5-Bt3?(~LyAe+94a2@b$;J6Rc|*CWU6CHAE2R&^DSaBI z{E$A?SHkNfjW{&zB1oEcIi3uxWZNWZLK}+$0E|(Fo=iALlY<2r*k{B5rYyYB1#nMW zV2W#kXCh8S7qY)%zk5(QIk^XFbPe7JocP3 z7wNd?Av+q?g&8A_UncC+B;=!@R}xP3OhR6ii6-Ko2%poZQSz}RMI6UerVA^X61xlF ziIiB5GGu4~kK&lnHC%GZB^>@M@{!A6K2xP(GN-UKT!%(cyqI&m40@fD!DVO+WcQLh zL)e|Vnb?61mI;kSap?o{$c(4z;gNI_xaa}r=ySHDFoqE)76hyru&vK8Hn$$@!$`pq zWMnoA%(1qxe8mdgv51S1xJ?;%FJb|~!hvp}zh65RccEtRG&&mZx#u2*uUNiZreTjm z#!YJm&K8D!TpY}Y!5O`fA#IAImU{REM_OgkYneBdl?zAwD#BTw%2vW4o|6gZXhIzo z_)@%bbUFJf=z?c4-T;R{c)xJ*#TVnGBWvq=3_gwT`Gli_=X~X-wx2J*qt_cR z=F&I`+4w&rB5=Jis#^KD!0* zx-ez(6b#juVf5}HSYbg4YBcfQ)#MgD&pLN6X-x>bAXQL9I|iWB4qYO zn2Fee49~p{xuFRcGrfo!!pfB^wa*1r8Ht1X7m5=L4Grt&;F!E|U?} z4#V@Fr71RH;31I3KqS^Tfv(_XZ+7w1v*$6Fn=`)n!jEHSNbxA5S2olZzsw;94=8kT z2$%#<+K48==inZ89(10^3WY+rvV=e1vVkrH^64ZIWz@0yvUdD0?a|+9tIqJ zSd7Aeor}*u|GeD!z3<8WI1)_@0yH65yU7bQB7Oz3?Td`ext{zXp+-ls^E=LeYZx2Ci`;@aww*W=8Na3u96-^DE#PqC z?9fS&V_tn&8!#ny=fgAGg9m9T8QzV>5}aY;BbUhVxC!8q97pS6b$C4u6!Ar5+Ibkl z-cLg+It zv*#8WMD{go+_-TI9_o55Zm7E!fbyaYS0~fw=pug0NU2OEs&UtRL^v1l5<(hAO26^= znlm&u(ua)ALnfz4%T)AQ&s-ucQx-`Rj%sS_o{Ef*E)Oj6Y`__F4ddrz|I_~}1BbRq zQ)^px14jtWy692y#iVWS1vQ3<#sh0m?+f@mjPw)0bF?0o^186c2l73vg2v+=4{HY; zIbfl17DI|VFhr7|W8D_cfxV7VhnASq9U{!->AU5!`sIwU{O8o(o{ z=3R>!V75fCc#)l8&4igur|1B#bOcTome6XDm(T^W2=+QW4Io&l(SYTf0M|HoicesLFCv4ZLVv`2||RuCSws@;J_PKe!16z!B_>&NJrG zL>)&Us0x~6v}X}=9?HE(UQORa0_WUxfL{CmgA`mr+OSc3xO7N8nWHL zWy=HL}^Bf;+fj(gho7}{LpU( zWMGy26nUh+p%TS7|q(g2`|HarvN*PLZBao#-NPgIOu zmWCrf4HOi-+Cx%EkkPAn2&eNpe26pOiibPW-z#nH(`4$JH^`JFS4h{idD{LT?mI3+ zCw58i;hl2sruj(&nMWc;GwflM<}b(JrM4&xJ1@uf=~ zA)Y?Lm#71Lgmds5jOsi*N2df6zr+*Dfo!iQCzEzK{fsaB0=St8S1i8c9q*7^-~WDH zsrc=0e_Q_Ui(k}XLyk0XGLdD}iEJ?Wq$|DTseMWkS?ujo{>jKl(=(%ELOW6!IlUQM zOL8mta&%ETk&iC6eFV>_88v{fu?Fy2)Bt`j+7irVP(Da?X_&wu6MMQU_#|kRm6y;3 zd<0WZ6WaOXSg$>dD#|aP9A((2G6{R$^mA#wRWSU zAMJhDDOkM5crmyx9P)J8ClaUdQ_FccK3v+Ed&r>}hbJh0B?BVRlyEt|983k*xV_KO z`mm$(;X1NBP0CXdRxmGgkV}3}Mq)v*2Qvye_4u#;>aT>`ptBah(~&sGfa?y1&~zxJ zzmuWz0+||~C|)W3WWu0HGfo;V!~`jm+L78^p;y7Y1g@kjCkyluU8>*7i)ivNEdUUc zziq;_(5p}Y_-(=YAk?|c=fec1Fc(&oGPz3*P8bbNWf)(M#{|2b3Rq1a#z`yoXilNrH4TzXca0Q0ADB%k5Jdun%xtNCsBukSZu>gPI? z)Nh3mHZ-7Qni(d@tUkk7CUXjMa1SF*Kp(*qoCc9O`C>Gp+CDsRT&66#6q)~4>70Kt zs`Y(x=EaB6i+`K+9C{e-_^Hx}FFxgKbdVSv*<(ua8_z>c3&%Ta0GKL^KYM)|QP32L znoU}Vb0TuLOyZX$1vFK-DmYa}I43KGMPX$sAReCMbMf&sxiI)5d@3i!Lk3ftGXt5? zmn>c^cVbJkgIKV1;~U>7Z^qE!BM(0;Cor>+i`?DXq)v$n#%snloq4LKFb+1tWPmHmJ_BN@Zqs znMvt<#xm~W!54zOq*yLP2_GqGM2&-)zZsh}qI!?L*=DW3NfuoCPHFGN#FOKD<)zJE zm%}gqD>8m7hWw_17iAbH_XLk(T>A?s6ImUyOec4H;lKw=U+Q2O5&HFLrlYi z=Vbmx@07V0yivw*ep}Ch$K}xGZ^~HT8ENX6hW0IyPCCi{%^ z>QEv30va*g*MM!G8(TWTiebTXz1S8CbTC5)0nbmedn zj2gfb!JLfqhUNHD`8k>thH#|Y$zV;O9nFAK`06vWf9`Xi)6Gr)`X4OjyUWmJdr86}`)^m1^*R67ai0v=CKPE^I2Ifu_3lLZ&QOXjYB ztF|GJZT$f{`o1o$?F%5MsP1#eR{d&&uMuBy%umBO|1lH}9Ws5<!z_ z0-nHh;44ujU;|7K2O*Cl)#H6xSQYI=a7Iie2L%B$Olw0cz6dYL%(d^5g%`gA!+4Ey zXvcTu=u=;l*3QK!3@~ z89aSV#!l{+{yt0y!mL5A6Bt1)L7M;=Dnz${HUqqDMxer_55<$2T^>+)vh)FM2@hNe zW-@a)C(HAkkL(IwFRMy#$_KhA<7MznTa!y#9(MBFbI-}Iy#4L+`@jGD@>86P_=!(^ zLJI+|M%0mkfJaS9!x_D%!%PqLnhf4Uy2y4#)@)TC(nELZB3Q;Y(x)^EO9VwUDNjI~ z(y6S}t_nL~$S4xE2{N9*j!;*l_e~HSd|SaZ5>-m z@-li;n(T{dcJrRd;QPZbJtm{cx3Qdf4R#y)aOq4o>p-a#)m zh=Yfvo(h`C{*)%MRYj&W0OsPHs`u}!A(#hJSqL+p-li09yy<Fn~tgFpioDhm6{qW%0&$N^|!-={@iy z+Wh}r+FKT2k9M~A%}R)-7Bm+IhEAZia1#m)ObY5;AcL6RdwSPH7$Uq^`cD1~lZU!7 zA!wR3buDCVgAF%uxp{IW#7{Yx6_p z2U6)}!Z^7B#>1SDAm%lC;&MC@Oo_sjBcN~*9c+lgBuVW`!vRepF~j2#fhW+#FFgx^ zPkriBIyvap4}3trkKsbj6y#(gb{u+_@dsFMZ%Uuiq+w6*JjCl`NfAMK!pu)wVSl6x z{8fA*UFZ)~mU(l933Y@_<`2_OWIMt7hR&Tmdl5PW-T~>>K2R1WfPJymtI!x0!8M>< zMyZLY0ar*EqDBRu;@IPlSz+f6$>K}?jdZWPLWWM`5XMKorX4~${TJpHeC*-Jmz-I5 zs7DrD{+lv)!yEA-pDw)zx5|M{-;k4Aza`@%*i*l4CW^T>BnbXc`_U+(kSTf&SQyZc z|`Pf|&(XxE%aEVWvXwjyHlK5ZRQIpP`9(Qh^Aw(~nz_@zkTYz4fhn zNa{Df@eNskEz7v%Sl(IJJd}UdRa^lFMYdpzYTNWRQ%voDe9b20KTZ9Zxromhl)T#oK|2pyaIaoSG@nlh+uXqQW2 zkJsSRkCIEy;RyHm9LyM9yez0MZSuSf=jC}o0g2!_d7z(&Cc;yGMh=Grxs~}AY$|dW zwi$aHk3+*mp@$!ONanjjAd&+ax#yG8q+yGmzeCPs+=NtVoFFvIlhK!}5oCEGGm10w zQbt}jJ~jIqsSo*m8|kzFz}J5d06i!brUF?E1qLsQ&+tj+r7`wW(Hl84%<*`f!3l6U zm4m2_!<@P6-Xx6}+wa-;sGQpIeQE7LMs}IsWUv?*8XA%1SHEATEx#Ted1vI%77XRR z@K4gxz8qNeBXD>S4f>+UC?1Bc2Vl*CHZT!Ji?2U-)8(o{x}qp3EUJ14wM2)_D7g3? z9~(H0;seJ_FMor~TE0;_W~@TSpNY{3Y_A2K-Dtjapi^?^L;oaW=&xvKM6HA!4w@c? zKKe^K6|bgM;>hD9IKo0oNfxlBmo1R5%r0EwoeUjlB0k4M+dRC2hPwN)cxXKiME%TX zJ|ov&bB)}5^Ub>F;1aGdWGx_ZUZ#Ub;Z)BgX-ersJ{J!sLc@_RBKR(cbfMofW;{8% z5Jta~UD63$2?iAzIrR8f@z4i>Lx&w>q_imYQND*D;PlGx57#C%z{bJBW74tgHL~#X56Ij#uaVa2%XJu%eGBYUz>F(QhaH#J z?m5!dIz>+G`3Yt&PQ`<=0wAN>J+!PjwFjDg*bz@1+U&~?Q*!*1h52;K*$-GG#}S7x zw)wdSAx8(eUVtkK@5RUfW~}n7VnwT0Bpmy@qbNF^9?uL(2NA;UI5P{3tWs2m#lsRR@MfLEy(Dehnf<+ z;`9QoC;*zq2W8rdS7WTcOHS_GBz;GIfXzIv!9z#p1Um}>76!vu-#>HZ8)W7MuY<@j zIsW`za&-H51w)$XG~%isDWATCiZ~p1VQ1=l=>O1ud24t~rBpp~c4`akWq~q;!lYxy1+x62-_#9AIJsy9&5zO1A!!?L(OHW; zYD;a0$YF?{vh)&}dGaPX``n$9X`cHVbUbB zyjZ|bRy_%bvZNm&rTtHqn_(B~m5;`8j2ij`7lD4#YXn^Cng{L>t6fuSzjf+Wbm z6K42;mcnVYf8he0M#d!ua2ws-SfB%;_Khsc?H;qP>pwAbN%`s zmid?dJ87M{RQiu`G0<(8O*UKU#vC0Q<;eUfEXMm}6q9=vUh|viB)kF>ooAss*(2v( z+AO``9Yp3ELE$il-GN5Yes5{(*0vAL_I7Ka$hz$4;~a$%>?qWVf@H}hH%ZsLjfiJ6 z&XmVXiMD=YE2z$$lrwvG%8@NUl&Em{R!Fk z!JdjF6C#bw)qDoQ-QlwpHa^FI)MyE+f`{a!kLZ-Kfa!A$h^y!VlCn3IZ*g&y+)0?5 ziE=-|w_-$qi-x|3VL@&~&Sk@)E9noB^gG!eoQ6Fj@l?=7nGrN4{S`1u4{1Yxs5ye? zWQD|`zk)V-Kah=8gB1Yd&9~ovyF$?Ze-0%t&j^?TB4j7NlRzbz*C%KIryW{AI2glW zM8d+u;ChFWQGAJ8v2kbT>2Nt2}7&Ghgv*tHa*ze-`{^k=3MYLnZN!mDxWoy297ddn6Y`RPkQ%l!L;K0 zrT^eVGTu5S-PhfUFMcZ`2|A_?`XU<96d6UcrhD$iGH2tj$f2jdgpEp9pav6EZ;OW% zr6J?y(_RB{8izPb%g_T{Ex=X<4!6_`2r9wC=gc=##v(G%E zTaVAjiA9_=RGJr{RPK_Ior_}xtI!{cRsUpUJ6REL%10z%#hVpS=6C~iUGL<08Etlo zokde>i<4))WYTc#*s)&B2Y3fo-z`FBV6E7?#R}RWbGy72!6O(k0lfwb>f-8f?ED+W zVxQ?4#+$MF)iQGCs2tt=6=cj#BoeyMn0R;(ICehXzfWdgev3?*w_eU2d{z!1)(u40EQ*`)yGTPjNizagIJ?*w;X)xpLI84 zj%Lic@a@>K2*a7k@Z7~{4BL|R9NR7((-xv|F_ng~96T)MGR zuNm#+zLUFT;Ou_%3Bnu{00k|^%kjl;nY9j?e;wNGgL3@ECsCBO0AExG`6?8&$V2ET zns?26r4wWDV<-2>o=3kd$9LQ*ZBynKyZ+*9%pHWa-OaW)GN{?(6AXO_ECW!h$C6_V z*-f7bT&TnSY_DNA#<@7 zVH_u}vG&t|41XGh)}H%5F2g;T*D&6RK7$cy#5U!NE`B!(1kkYtfEq&aZD1n7x%6Y) zXq(;@;VvPbG=_6<3+mlql*6AP4UVvf5$9-9nA()^k|v_dgjF7O1un;DdYQ?2P9ggN zcof-XmtCfu+=@K1pHL?^lQ2tAPRqv^Cob9ksCGm<3q{MMm#CB;AW&BWthu zBWas=q4YJP;}E|#6h2L;S?t^Nb&TtOMj8i3&=;{78Gb|tvCwGF1vg3KjKwmHj>2XX z0;4_0IcsDd`U8fbi!~y3F0IYB0vKE!o)FS_m%u%a zaOY}1003v$enw;PFl;c-?_~P05mRQMk9@{!BnIgcWd3BI4)&95V8P4ZkW&u6;j->(I|IG=_G5i)QG- zBhSgs`@blsw%v)%E#{%K5v>H2L?hU>Xv%^sWDe#83}RtXBla3-Kp}T*_Y*RB;$hgb zNY3p3i5%H`pVnVEWXYKVvsPV?A<$paEzcUzTqrwdvrAu#f!&oJIEL+KGORF7;koCe zFek_O?Vjo~cyv#B1Dhf`1X6h=`#{4Ue>(O9aHEi4#%RFqJ$Of0Lv${ZN|`5eBaC8f(6aely(eUoP=D|Z1NM&bFmW79luH2@9Z+_znb@blb-2aXeh ziUdd!A%X`9;0+`!!&7`242O)36MUMc%tfZ}kYRM_4fSAH3@h^rUP@z!-hebuUxpKY z7Gq*iFXjiJ|Dt8ScC3y15du`9&mESjYp;`LRP_gr?3SZjZ^wqA7#`H}jGun~oNm2q zxGxe5U{XUt0@vq1@HWwX6KLd}%YDWJ;&yELW`+ffpY9iawjj#Y6 zdU#1)Gh!V51PeC)l8j@+k)|Q&YHpE%Q+wq23*Q0l1=<2yUrVPLTXMl>rU-v@cDFeBaDlGH)xydIDocZm3?<3X zN3zKe$7={Lo~@$lUtByqk(1}c^f((?0Ps}eN3mrXX98Y?qsOR+a{|<*ypAulOT`t` z)mO)t5~OiV@fI${J++I3Ioon{jy8%zg?&oO%fwFeH!}YgECJr-$Q5P>I>T+z9pn;G`hF>M9o{;DUkR%)lAYEh!5pXFi z4HrZ)uj*1n?NYLpcBMMgFxg4Rn_k_;(M2#rg>>{g{t!&Q9B+2M)~ z{%A*XA>^;pAzv@s)}Ifab>k8b;E!erZ@6f%d8QhB* zgP4qjr!$Op#8i%kT=*_bhB}5q0Kf ze?530*U0Q1@l&RA-bY@?Z#azu0-gqbYwsU9aztj%#L7-M?lKI7`t?HjIa!2%6!b8Rq9!NgJCQQd=Wp`w-$30W`vZ`JrCaT!2>|IA8F^ZFbFgFN} zz2*2rryGX}$A%6__ly;2O0>(l9xTBSMj=s-J@1CDxYVvBleA?QFZt$Wzuwew9i{0(A1iksA zn4QSu$U0!_xf3tROIVrMiar88laLFOXe@LNBGWf_u973q+>TDl=XB;E*9@R%Qx>lK z1??0a#a@Q24Qa}PhgOrfX1$9LV1z50Bo15vYVZ(j^!`p{BFED^I3-20Ghvev(Sbk5 z>*brLf{xFKjw1onr%zXZG$q*KBb`b$341}8LTW+{zHIhdrw&&$qx(cVA# zB33A(vk%P!BuQbIet_`xA3Q0`uJ`~J04;^yA#5^=(Fhzvc5u^ouqD7r*jw1n{LM_R zj|l0ZJ2PQp(|w!nkdd=TP++ksgEGxrJoUJx37z@@Eefi~=3pWtaW?09DK5{Dts)Dp%Ty5IqhzZypYW5!2sKL2=x_;`1>ti0}{7>-+qJqQNT z48XS4V;%T1KPlTE_>ZWW^rB{g_CCh^oo0;La|tjy_pV8xCw49laaP0MxJ1GZqx}DvF9S%7~j3o|=^yU&F>}82jHX1k?g|?t z8U|>ev(e+on}K<}c}PbQ7IywH>`|#aA{@V`QBa1PyjA=ect!&G32w#>Um^LS)9I?u zMTpgb(2=3>*r`(|X3v`SW()@|1+%Ro4(ae^c8(2s>fzl$<_Yfso?tcsnlSuz?(kNO zlm8e!{CL1v8K*;PPCD&x#Jc(Z zC$^*4o-^wh&!j^J5FRN$hHC#fX5pCT^9a90h zAgLBNW_~P489Xi>3opmi;9F6HnSp+RA?#h+E(51`$?k{0C@n~iG4>B=y3@{#(`Vz- zjOl=lOS>0ejL{AhUMO&+V+#IfVTR$oh%-6_;n-JFa*)G^mUXIwe1UT?LUQm3rbGp# z1P^fZs;iJ)yoW{<(?)VLap6~=9jBZJz%vDRzWAa%_0&@`3mt;#DMFDfs;LuyPn)Aj zO!dJaejZlk$xGZ;Pv5I^`)0T9&ysQZQ+ZcrGQzvub^ zSTq)i87QK0`m;zGjln4_bcT;)Ks3hG#xdN+xd(jEaSBlbd&v87@-ODgqncgl#Z~1Y zHuz$W;>$fY+=Cjz9+Csd);4Mw+6joT<{LB<&^gzDg+b%(jj|d;eQk4AU?{R5sl*0> zU?b7{W!J;V{4Gmi6KWR7*g7f!t<=lWig66-HP2WeE3SCIjAKs$b_%wlP~o|S`=7pD zM*EJU;9$jxwT6NZtUmq1%s`pke?Vt3_Mb$j;J2g!{Rg8+lg7a@3@NUc1y|gProa}^ z&_X^ML?%c}%J43LlZLnw-oa9MiIzesk2k#r7pEtJJAEa3C&P0GVb7nF=NZ^hjQ$wc z?&pd?b?FBspf@k&dmRp#gBg8v58@NTQ+bv~A&tRO+BB>@L3)HTa@D(oPk<~PV32k;}N9dq&JN2lE=W|g&L2=2tL`()Rne~D$m z%L^GC=7S8K4aNNhSUpEUG}_c9E3W#8G|gCq5ea;$Q6m@{@5O?n|B0i?AJWA}?979* zT6!@aE-e@ZwUHi+5$Idn@wMOa18j!!5DKG489=IIEJ9|jel4~=dk;E5(fmP&DCHVw zm>v)s!6Te9)bL7Z7iXIV{XMZ+;nWf6G1^*ue2faz1hS2v_maH|v}enLGE1Q%if66f z;u6>yK)vk|41tp5oZS_$NLFBDPG&^QKu)HEmuTw%Ds&Od>OcBX$G+{@qpv?z6X%U=V5Z}K9Qar9xw=uWf4Ya_aan;9jp|els4dr z>?9q2IsS+);b-NI>ClQVKk0NOAZbjm-3g;};gU?JyCAAvCq-9>_m%M1nwB+tER6z4 z;Z5Ud1Ql@RS=Qj;9zyRwHvnZ`k28n^;ubq=2Ef2?&`1cvldDCw<^vz$_H$y0R~m!c zJy2sb{%$n92hQUGi~J$I^D~1KwwM5h@%2a5y?_SQExH_GY# zkIJq`{t6R(R$&x@U;UyJ(zG>TYcKX54q@ZbHP`;GbYiam;5eoUu}2YK{ z-tNSB3V7(}j=v*4&&k5eJ|@#vzKY!g5YOYsnx*I9)3WEGzmb;axftEY_&=r*GqXER z+%XFfLIwx-%ZlrMPdb)ghD?q^0&^EQ-ruwTN!jI&2}~K$;m>h2#HM1a^w}4@533xH>C$P=4`6>lq>Z|r{<4lj zn`Q8tZulHuB#Q*Jm%otM(JC$juhbjT(oZ?5bGkwdzhXQ@l)e9)0f@Ei%2l!p&`RAI zT_swlJ2j~)o)glQ2m%0gRoE0zd2f!EALcNfl(;6BC|3Xb(2W0<6IA;86P_&<04H%1 zS^)>4=m&0bP%$ZpTp8mPOqAg>G?wW4@Q61WyOS5r(`mrb8BNHi)a46bS^lxde(3BD znRU^x%Yrq(Aj7D#52JIh319wm$DYIb{4ZeP%@k1L3+#IAi>o8ituEi0w(YvMh$TPC{q5q7+0~?8|oh(_B_&Zw}pOQ=BQ#@oe2T%yKPg#iV z&hEfOq-V93!Y^MVhD;Y;^bTpBhO-elc?snddID8goGh_C?eX+w|Uan}cv@R+R9-RLUrI$Vb%!n&8dMHX(vG~E^~y1@(7 zjOM`T@guVH(Jx`kF>cj`o_(FHG`4;)T9A%)B6F_hjNKGIJZ9c|#R2o+a{i|7q+d=}=NuvCV_M{*r) z1PgT8)?jnz&eg(T@7}#KV+M9)!n5=)r^o5{G|rRF{5k%Vkzq#{*_xwsv_@Y=62dLB zg)n^vj7Q>1&nCemsNzrv{Esp!hE&x6*bLCd@S;VF?n2dTCu#v)&c-^fO5jz042MPr z{(_Q(#S5i$3Esopy7uE>KLp9UM3+tFQT(%v^<4foK6WVY*KXmhbkR*d{w4_#0^+ zK%=1*BLm@HeiRhMuMk|o)JCQQgTc?!(4z>{M(}PowRB4F(Pz-Xcqia!g&|H{9zSK# zRX8#E-7?sN>B*crt!%;TL;dyi5EtOReuKHYhtmU?-t-z=NSo4=*1-xcN1vlrp+%Ym zQVTETz*zx+b1N{#dPsKf-YxA|AxORI>|TUCjMzv&F?DDQMt3D0ekJ~hD4-4DfsPV? zh0IbKI(flUEgj5+qV+!x0SKW%e1eRbT0fzrD znWh=5_73CRz_Ul5!rcB&t!}f;&&@^n;b(^8Xamn1Tz&l?$u#U!IEVs)CkMA+hoFHI zJJ4+SB8KF!M_>yI3JfEvZGuVAxL ztblAmtT+~f9foFJ^cE~yx(a0)=fuNi=Wyne`YQER+2Z(2j=x8Cd1&Fu@i_S<{W)4n zN#P7TSSo`n0Z(E!Af0UsrU6_cTJT3z~Ev8d?ZX( zcn|PK8{I*x{Ki8|;MajYWYm!}&&ixueMqLwzgTCBab15a=Gq_GhC@Vf-k_cv$jl2N zdYUg{se23#bM^mOS$V_n$<*b@{8+uGQ+$#6296z&T@QQ~OZyLEb|PvHI@XUQSHlW> zA{%K_l{35D-S}$cOm@gbhHvgzEPJ2&s*D{!C}Yhy#R$!nCY&&|^pamkUjWuduuNv{ z1%He`WvMd{blCGSkdZLW_#?c8tAHtej>o~gZ1YeDTqK{cj11D)PnmGBwE)~7kShY| zv{pcVCqsdCE*5`JQlXzVW!-tgvr^7OM#)}hRGK!Stq#Xq3z|oRNTb^vUh{BB8~W=O z03aM=EdbT7y)fzyCOlqwtp#W#T|%nBB!Y@3BBW8m+Qk{|A9{%=ky+y`e4Zb4{Nr5y zAyo0Fu6wu4T!S5Xk*%4SSWGBAIB#J8Q-3GzQy1XN%~gHOEbJ)3mz5(0*o$DSqfOS_ z@E>H#l53?;n*!*N8*h`L!`o!X!=J)3<1<(og!2P9Ro7*D}>^T1oP+8!2x)}6& z0((rAsV>-HpV4Iayqu6J&=Z19f5hWxBN&;eGjV+1P9x1Pz2p*Xz1A*!upJm3cM2*| zQ*O=airkfF7U0DwXgZVq-_EB1Hf`% ze0|$cbLcz%9CrQv3_9bEV17PVEplTI_7j+;2u{MrfI5wG5w^HRk}>LlNiZ#)7vSi! zFUhH$kLe;9Z0;sQ&7(5w!W(7!iklE^tfN5Tr{8}~=E%CNKH3vGr{CaqR~q0Lj$p>@ za27Orrb&)I2g}lepU;lH{#RakCHilgWb>v?*nG833xG%;0wuZN_s=CHCOk(U(uDp@ zJSd@FW)Iob?{r4+j9jy~6c_4?nBzcz)02N;+vgocfQor6e^my}iuKZ~K9$9kP%{Vn|iMFAe z*tW;ETL+%}8ouzHbC0Tk_8yY~Uw&l%;hvq?iRX>7=5<^cgvmhox^q7OPQp2RaFe|F z)Bl9M3i?p7!f+wh5oj!Fv)LWoX-d`4MX9(Me{c`^j8P3ePab&iLERnL&jxgIOEx;0lu@$dJYXuGm(W$%8oj0XuS45@ilfHw zLtDBFUsJBx$Cx^*_52N--7GUNeV?ql=HE#Z_T(GHsz828`FH#P76$$J&rqvC^%@(M za?uZ!t7-749kkooq+uFZ&js-c`66DUDHOT1f!(lc1iL8j-*me);EO+wzK$^zNL{m5 zp}*t9GJ0wUYBTH*3|^H$mZouNo8dxO=y!Ot)1v@4S*hJ6T4SQD)YXyCL}sTmJ3{G} zEM6=x9XO!=7VOWc?+QasZX_MBdUiy#DzPTVg1l=So%{$M2Fy>L8Cu$x)n|O+y^7Ys zBRPb*Um!wBM#slL>tK`0+mj+fGeDmNY60IuEntfd38HlIk%lphtp1$#$Y8<@Z+Ax* z-pCXFA|4}*_(6^Los(ypx>m}Zb#Fv|#hh_W>S@M`yxy0#;^?ifNjtXkvUYm|77UG! zpOnGTqq6e){~${*y+wv`;3%i}He($=+Bnj?y!k9UII>yM#f#vmmBn8IUd@OIXX(fQ9Qz;IrmmBh zp7;Xh2w+_RMg_R7cxzKP4i|Yh&Qw{U9h^F>>6OGDdx_1?2scG zLzmJTE}`YJ-$5J#^7_}mUe^NLamO8kIVqJ#gsT|pO7#(u)9Lgj))iv(I{8Z~gW(ir z(ta**)t0_0H7A2?FrNZI3&20B@PnS_b}3e@TXdH55t*bwEDnE zXSAU|F`Ybgo)^{PQEVGNbj>L;T@szM|`Hsc!*>>AAe(wGjZzC*JP|0+hn1J!V`vCW-gNzILl!8>>l)O zpeCbbmMgd*Lo=e28R;|mq=^imK0w^B5=XLxFAaNiP6v@0xD_0iU<6>-u3fq#5H|&3 zr)ZdVsq9F1mF-mN83Rwo4#QT_8-6nPtPC>J&d{0NDO^cQg(~wP=l$qrA@#`HLQt@_3f5<>u(h4nt`dl znC*v-J?tDc{dmOBOVZh>0!L=$7sU- zhrRpmm&03sjG}D-{T3(`P~n@p^jevF*@w`v`3y!uaKMVQ&~(_{bgMoWh;Zk!+28;G zHD5_YK~#agEKsX(gr_*#Oc%iw5IkF@AQ7k>y@7aV=N~>a^7gmCU90~OqVtcA$A(YZ zK`w15*+E!FC*|g76`rBDXOr?&$ID*pNrqvDKnMS2Z`4teGS{J7%}tNpC0r)JgY z6CW1|Oxj@_Rs~~!wr8+K^UY8?7XX$({O;CV9IC(G-q;xTFb`s1Xa&Usg2 z*zXpcAVaVlZW3a%U|=G(z)zvGzTypnB(i{Fl)eW#JxKo z#4%rgflSjY&0Sd7qdWg*HJaw~-ChvJ1O7>;J|$WFos5ZixhV*@3TbVhgQL$Lm8m#1 zwF^xju5%bg2U*vQ`53W8frmp>#@T;StEAQJHhZbQ1}%K`>;SGrPp&{-D$Z~bUqBzh zovaRg=}(+EAs_zmhjsk_&;R_-W%=^uTK&(_D_co%1t8GvDRM9sTGCdqRMC5Zi3jv0 zNlr!y?(|L)j-j9ie*L#$+V5|Gm26qo#3CO&pBey}d@TS<|Enu`iXn9;QnfR3_VcO= zk6Ea9OPC7U@a2j4Ac{kJBj*kvb6+Qo*iEMqJ>rdc;m@AfjdKBS!_eJf%$Vzvm2duU zvJ{!WY1RdpIfp&{ks-LvxNr-ur@kpW@A(*p(YnwtfZ2UEwb$$k?=;_qwe(MLQGAN1 z=C1*t%5icnei0LC4X=C%STg`82eo2S(t#(xBz?VywC2+=jQ$VIgIJ1f#QH~eqjtc@ zn>=F3F31cAVR&Il*J7|*REM3>({TBr=NaW z;py~W0xkU_`2k!RlS@i#=n}jtEganV{GIV~aq}>Gaxh0w(&^~4aN?2=CE~An5Bc!p zz-m(f_eyq(NZonW0LYA5fPV2Y(}=Zzo1h$fW1+sR`&Gr_`5mP-EGQ;&o;F9Q{FKDa zJ@7)KhqwXlcfmOLqDybaxqCQ}12uwX6at5y{JIQ{jLPDxep}{W@jmSJzd`r>V|$*f z>Npi(_|S8*_u+q( zVA?Zw55yv&^-zmLPLSf=Qx+hJy5z);?_=a(KFSQ#3^`!}ouR2bHOc8K;i~Ki;N*|^ zs$@+RckodT+xh$V@0X8$^rJF={(Sk^$FLv^>i{_R&kS!a^cyUD4|!68Dq91dhz0PP z1py`prwqIYS$eQm!S&qKCHQ&&fSnriB*P_dA=bi1>1v z-K4?fjOqs-%Ay}GjK2cXi=)$R#JbnZ(am3$?s=N=9e<`{*zbxfu8_x{ctY@@kvUii$caGa zDl-Yu>{I(nWQ%pvW)@wDd2#49K${>+hCo;0pW-IMy^ zqGGq!KzonKH z#Y@cy3QT@P8ce+j-r)dMXLklde}N2mmB6J(j#e3ns7ayELOi~qZOSq^@Yp}g(5am` zlMt&HFc{3gqH#}j1#79I|(;dnwaK+W&rX$3Kc0_OnU}K3VvD@18}T z2=u^#1M>TS@CRt(HOfEy!#~J8>;rHPg~Eg`)$Qby&*Vok0=p)JJK9K&@#7xBDQto- ze~F$vIUR(PK}jo2**YyaEO*@t%sQ)hR|{>T4Gp8x)z zVOVfGrU_pJxCOXyS?ggND&<0OwLb%eWmq163Hzm)dMOtXGf~jW@ zVAyZG_n_>1=9{{xsRO$hkB#+7+x!g}8vJePJNqJD5mx}f&`Mijqs8Cb%&clXo=w((D3-v5RT8{{>weziRE$RpYm=$^t;nTk=ZH2x~e*_^X02P03; z9xqEhwTq>P-93i2SnBqGnx{ltL*;#G+L6k^GP3Z{(cXo_hxh;F{gpWPR=g|`+99}k z^X7xoXUv!bW3Gm=S~CcxCEwNp#l)MyWhnsEx&N4}j|2UX4$U%S>7`hn+l_I1PV+_c z08eBL`|1zjG@<>Qz9L5+{TkN)Z^p^N=qSVx;TU%DWk;Hp7!%lV-ss$egb=G+UXyrC21qmhuwe#g~o{lNL+oY{^DrWkjwxCCJ!#u4;cx&o=%ue3zrv?V$5T3DJ z$?It`e%!$nDJoMf7|x$@}Bp+M>e46pR@kx*eAfg zi>yoJgfyl*gwbzl7Qx-esAQ)jD#00l{&KFKO;tP% zInni%)Bq@Z9Gx{S*gUik`?Q@zN8C*?nr8|YawquGTj|QXckZjAC7=gpJoxH0x3o+D zt_S7xsRPn6ZK||mUww84@}(JX?~<;?7s`y;*GkWcz0!Z`2~40_pl>^}3rcp=4%vY> zqe(%07@?h+hf~E`gYzY@_&MmLR+V{vg0YA$+bLRi(odB%UhzI&ezJrAZE^v_;Q9Kia?VR{ZgU`?A0O zl=(^v06BE%5KEv&^wvIwMH_EKsl5VWtj9xMqy}?*@h9m@l%AJKQ#>%G;lo4Ke(cOX zIkxRibO=tD4s4v+f+hhw$C%Aqr!7Ke*ogju**N;^PCb9Hp&8SI*<`?9AZ?P?O_B_@ zz3j|R736oW<}*leS30H!G8p`gIID0NXB~{8Fq|^)0*#|I;N&43Up|g`0%!K#gP}nb z0w_Qu=k!gas|ruuSyx9cd8VL^&sl$;`OIhZwL@o*yJ8(vtX2`Bw?}$9V0NcxWGn zU&FXZdD#b;q4@xO#&%MYTk%>KK+o%Fm~mN?=cXSGm<7m#Mvra#j`a7PkZ$by)7Hh8 z9HRy35g%)xF4O0)lBshqk)9*_WvFKpX3{Oh!!!-4^u&;fg2~Iom%$`Y#Om>h41;H1 zETeVl7t*jpwh3nzp5FC6nY!RgtP#LzMI+b^8LJ?>X3j&iX*)JX#je6FZUk7F>trk% z;`D`j%s%3>aK~4LW9DY&-;S#P2S4~h`Nd!SMY-*^+vF$r+@ov$2M4fgQ}TXP$;#S5 zo57#sVZl@Nd~);}*Q$6{!8O?`rTOGbJrx`Tvy&ZB9e*pPL?4CM@>nY3yuv@P0zjJr z&p-eCAxsWJC7|(jFtpSm7+RLia>)Y^>8t$uAl>Y^w$Ax7a&(6r+x0kR0d}Lue*s>6 zEcC$=(ow7sY{i0^=}Rs_x!Eme_uh>SHKwASi6r1e8NMoPAJe&)$NLGwFK091=j|vz zab-wCz@U5Cs$Sm0N=m|{D6Dckd1|-JS#&XKMA%VRda;}COq@PEM~-j(23ASV!$=5g zL1->zR4J&=%Uu`m;#Vb?g;WQ&_}YyvzSgZ(E8c(RC3gH_KFNPP+uM6PWU=bcm-ZFA zpH~6Erhvu^O@VvS6nGa5UI4>&my(IBv=_RR!737@N*=4V4e0c0K$Z8zb9dkv?@=@f z=1XULHy#!`l+Y>Ginegq(u<^J)&?Br`Irn1oWT5n8Nj2%jQZ-m2vv$F1Fw*qeHlV| z0pG;5VARCKc3RlDbl?OI7HOC&GZ(DK7GfM4Y(~v!Ce}$D!h$JG6~Y z{nS(Se!{k_yq9OQuJuP=`We#cmU_{1xbwRG+zJ4vmG#Q8nNy}biOlp{@LLkq-Y|nq z!ps^|hM01gps75q4K(AR&H2)Q@F6*~Zxdz(&Ou+m0`vo5gHNvSM{Qu*tfkmJ=qee- zn)B29v11UX73;ZsI=#AheB56AyqtT$15lPN0)I&;geB~=&(PjV_{cr^!4*=B-KkV5Ce34EU-v|~2vi4WWBHYC-5K(yR>B-@ooUHyF zeV{PQQ+vblSR3Ak{SoS(@)L-gwD;#-0E}@|;Q6gv_oFF*zMRGzkh<&;^m@{a;WIE3 zFU`zBG~!pZ$Y4w~FVDX;grc7x)%vFPnW!jXb>NoU@$z@blpwq z5(qAuSN(ZJ2k8;xtY_>Vt+9utz*Q1(z z3HAuwB|V3pLLspbFCz8|z_B1|9|W4rS74gHI3d5uR2?Cr%I{tj<13Q^!!$%ypNY-W zj|UH(ka^eKB5iZl6bq=3340H3k<;6Mihhz=c$YaNvclEV7reAtdqQ6LoAK4>mmkx| z<D8W@h0jOgR*UzX z83l|nWFnRlxv&Xi}iZ^~l z=B~RDX@CtvkdBSx{c`;IA4u=%=P*xT8s4vDB+1LE$b_^JG!xljcz&^Ym?s}SR+7r+ zKmU2*E=Ynk8p(xkA0A%aiB)~vhM({2=Su68`P%tEjwQrR&E3+zaIH+o@Y(-v z?@XZluBto!X3at}A;~0@1VTty0z%k?04h{O1=q41f(xRpEv-VeJw2Ybwj9(-tF=8I z%HomYMyuz5RE`xPv?zrD%3cK|I|+eo6Ozd!Gf8GkKi~Iz??3PN`~S9?OeT{s@63OG z@Auw)_ult@_ujX^x1)74_W(X)x6|5kw_^ivkV7k1F*2DCA_9R{sPdibs^Ft;i}KmN zWw|--ygxH7r(eqch$b#F<+yVcv6KA}>mU6Zho8)roPj=|;_w9_aq=bN!?aS0!&u_0 zv;8-3-fZq*bI<(w^UX~+-DK{$=N`M~pUo^*`7;#=93jq-p{#JhCeLR2 zj6DV{7}6kGUBhJjTneI|jQgV2s04Ieu*j5iDMC;RN06=pFJ^2xa-cbbd>tECn7Q0@ zFoT0a`a=mvu4S6O&3e2>lhGapu}Y-!c@VRmILSxG+w9qu2`|c%$_~l z-2Uxvn;A1_ns0pL8|J?I?lZ@6;72>F|5Wp5DXYTMzN2L?D2Euk1$^e^Au}$E7KF2S zkMWf9l0}Q~ZfgAo@csbh{}M?xus+CUXbRy((0(%jj*iVIM&M@{fh)*Z3nj+nv!8H} zpi)2b5EurZSFfzmJA$ku!I&n~4ZK@l{Hf{g*kulz#Acz1(`X{oXXFx*I;ImR&Uy>` z>`yaoo1bU#&@#pbj^c~!Td3wt<=T_1eg;C6_3^6{B|_4K8#ZdR^AYu|rRJCN&w1Bp z%@L<8GTr2_N3#JKg&M9Ie`U$7X2+}lP3=De-Dk_N%R?qVMLa8B-znfr3Zc<_t?!re zFIu$7+;GDUrkerQzy0DD&Eti6)iaz0m1R6h#&;496ghia|@<*yrOcF^pfcfqx0)`Ba|E?P9)tikje`vbVv zY{lc>GCNi=_183ynSni)&8VzXu;vM=XUy>!rdB_H0t>KSUAxwv>39A0*PD-j>|hmGF{XkQ@>w# z&;1^&{aSh2Y4yxBLl7|>2Ea}YGS#!0CZUcKzk-6W2Y6!)B!i_~E}%!F0+!zwwDx~#Z1a56zV2z$y=x=u z2Bts;Bj9P-+BBm^i_y(_akz5CB%WAvel(_Z-@(o|mYZYW@#nVL-&N1~04V=hc1ZSc zUf`<7ZZqvV9&E~SoQoKpgP`)13dU#^(I-9zA8?}@U!QaJ>eXi9!iBb}e>x-mYVQ9H zHNUp@s!Pz>*_r*>bMW_%cQVX3hCHEFvBDMag1l{REO-S0nk_#u2) zdJ5^V76;K(KCH#;eC^j}>ubL;<0niuW4SJjQA1h-+!271jc-1l`Sdf`quyzDyz&H# zjhd|jMqfReO%Lg&()0OCi7ZU3G-Sq#8Om?3F;ky^6Mg>kud~YEOG}^!!_+{{-;MIW zvgCHtM$JEV61O99WLiWc{NK+=Df<23)+fdH(|dIF%-^%0|I@7P*U?`8#M0g${^&=x z$*)U3wE8d4=4aA(WfqH9m^1LPaK~SyQwe6vyn;7RUeaiJw3%^^|17+u^BaBs0p-6L zd{Tb31opej;%R>n7A^hy7!>*`O~4PcAw&ngb6Q^%p=XsFq#>xnQ!=1|!vp(zI?b-O z_2$U4uQAQ1ewfw(hiWiO(9nzOF_>1nr_H>v^bzywul^MSF_C)*b!E8r+CxM=11kwm z9GsAb}IoV^#j~>fbx?ktQbffgO&*~Tu^H{;RVpLpr;n}=$2j`)VYSKJ-O?yyUtvE(M3i_ zdjFCQJvZKXqYc+$AB5WatNuCMS>=(d#H7tiS6CBgrOgWWjAzAXg%_lA`O{QiBmR5o z_g_X5&6Fu?nc4GbhvF#-7*40mNdoIJ0?(201!P>7P8KiIRhaa~fC9J9E0+(?#4wNu zlna6yo!+%=rI|>LKliPlVL9z7C>Vo-T?igK>*{KHOb6F03W$#!aPf%~9Qv zO^f)`|479KLLb;%fl{BJA3Gr1IrwAV`SkfuU1WAQu<41Nk5Qk0i&_2{1Aa_*HXeQq z#!JQtPV6#4xXQ)vc=cs0cKE5!uE9Mm+0~i-TeoUz+L&vvz1CcK;f40(-WOkd(cE_1 zZH7%@wy!S(p_)I-Wh!_PfBO=jlQxqdWgshER=7)JANrT#B>U)q2K`<@`A-KVT7nws zNJ@&K531dG_RqxgSt1r*u zAez^`dv=<>-K}Q!IiE9A-|}8=AmS8adw&3sI%>Fcv%R5b-Qzc#v7At>tH^wOgvBFI zd0Kjed)^#~xJY+WeUA5}=HI?~C0ClO&wsh;VoFat?8b2H`JRsT=9Nbo@LTzSsh>>E z-{rT}GEhj@pwd7|BjAKtWvZsS))T0CFFyimHf`EuQ=NSB$>#FQFE?kNd8VD`*J%Hb z@4nkS^ow8Eett8j_;zrLuM|qSlKD}1rgJul`g3OOuQ`tE z^=Hl4soXWdxB>HtPH;rcQ^xBANA!G*=SN{N=aW%;tM1o&giiMK&$;lk)cjYnq?xHc zDvq%n1>U=3qglP=-%Q)upL1OLJPrt@&kwCiV>zHprYspLw`zAy$>}MjR~oI$*9pDe z&14S$l1nZzXPtGHo!3|G&X|t5_uhNWBab{{!E}m``u>$0e0}2ZY555Q0)Jkd!1Ce; z6Gs|b4ryr>CzAGm%D=QU9xN|TIHN^z8u6zXd(T4opC@?O`u(0wJ-v8^VZ-A0Mu4us zMG#!}o+3e1$m)t3HSm+F@a^LWEkE0YY6X-a~C)%Nl`}3%+2c%|C}4cM3;t z$!^s!=(g8%c5F7AesiB$|HSP~C$jsHg+zT^R+5|>$P}syO+2;$q`D|ReSSI@D8Cl@ ztTc1peXTiS!6Mt|*SSYsy|rfB`gP`oySTD(_fym(lgyM!wamp&uw8;WjtUo#`pM}q z4z(CGD7OnmSCc-?edvQ9Gz(5S#hk$Ey%sL%PsQ-i|F+rI6hl zR-4IheV>_e#;2(5=b}(RFhHn5xf*uYwXgjZHxGT+^lp9G)E~~&o95kZ){@*vR1&$W z5-y$Sj{-Bm*WS9!9P>_;pG7{M9D7zvpTC>rCrxQEM~{EWY*_v)vuSgO+4ROnvwp({ zvwGzkjM9!I(b)S5C!Ao9;?gZV`f0jOH}SA;gTqwm0%71bZro^=E?Z_Ee)wVYKEN3(m+&ehywHQO9}?kCOR$GpvS*R%DwyUSiZ zR?k|eo^5N)+TY%7Ha&Hh8P`0Q76f&8;^I+jT*QYqEQp|U{a*F?qh@*gmR081^FD88 zo_-m9e(o`3OY=C!Allm2nRBP}ThM}$Xtal)?4^EDjoim=y1f{lUTS+^`-_Av6Y{Jk zzXtWRMOR^J4fIfpw^GZmWiih(n)vrGUd-Kt(I~#)FxIvOp}{>Fhg4Uj2uhR(lNaX+ z0@GhkKF~e$;wm5+sq@n2#R+d-e5Cw+e1|$@{5obvZY9M5RerH-WkH?;>@)z_Gy8}m zu4nZ9D-|Oksijbn-UG&-C`Y2w-xg4@=~5C_4Vm4oubCNV|DieJ)DLm!$dPOyrb|F; zU<^}by*(Z5C3wuNef;aDwu|kq6Xp}9xp-i}Tg$W@>dAW`j6SQj&rjWtQg_?kPJ?-x zzEgSXnr;1b5|8HYbs49v3-}Mj%xGq#;njC&N;Z4}B1H^-1kzqg+A0eVJ)wzx}+0f66IC=bGKD73iUM z9NR7SVP7w$0))8~>@C*IOuW~(w{5ob@YzRyn$zjMPXbM$+nd48?% z>(M?2&M>IuSg%!&+=PL7&`g|mBAv=Ej?>zW0>2)|H-NX6mKLk*_Gop=R)cwJ5wMf9 zSUJQtaF+c%n!+X6EEwYR;&RgpufrchpNG={rl#{q3V6;;8_`vEtn%~x63zZE^Hjq! zcS45vVQ~rR8y1>bM8u2wMyW=?Cn{t(%^>IlriFW?$*23^HaIPvji+&4Uh6D8+_n_dh(ed(I6EoRfpOU$~*z6!h+4^78Nutm2b2R>(N z^z*A5Z?@Y$Kgv(dzl(W(U3pf|Xn$XOt69F}7PD*l{mk>vW1~$p&tI!$!8Ge@=mOX$ zysHsqf69!@iv-sHFtpaMr<(M7TIb6^X`Fvhim9|kI6N%~r_vxkH9X?f@|PJOq*V!5 z!8zJh;U2fr1pEcT`E;XnLOWuWUwM%w8fmT$EBUZCmC$5;7lofXFqp-3_>sL|Pw(_a z^40qy&`w1`&p8vE(rWeD}1MWu7@$caR(3OvT zi!=Whv%Ghn8&6OXL}Feg>`s7XxT@mPO0I-p+hh(d4Mio)(XPBFJ!No^CXer2c!ZX~7L33L2;f-s!JR53 zWc$VGV_WUgKYrLK9Y$Ku$wCd>Ik1V_in`lgH)B~7(7@?KTvSec7o+u4ID>G$nK<`E zvvtdA&h2~IjM4dg4Djt(x6I7DSc`l(3FVZfLhUxcHG2jO=(;>_C!8&pI;FTNm7CtuZ} z{2J)F4(0zB2#!eQS3!(q10eqDF#=CcY-)N1|D}{E2VS#tN|GP+D+L&HKF&X5k-R9} zI|+(^Px=Lu#NpnPLLiJbtOnz+xkB~@G;-?jjx8(AwwLZQ<2i!6k!{BHb==p-_2he) zDjdfqo#xqRG8x3W{#C!^#2)s`zlUc3DOWO($jCd*{s#K|wJ87cB{!QLH2cTW=Z};> z$b%>+7)reQ+{T|J6iEp(l_`!*fJrv`A$-~9!8qt5-W4C_zMlv_(MfZTenxDR!lliG zDd3%Q(rGdE(tX_3H2d$+J3qAuGSL!uz+7fI9x#p)g#9`JmZDxv!QRJDMvFDJdmGY9 zR2lN&p+7_$W;zM$;}q`wO6%c5JZXLn;YDhop*$=sGX)7zBX*uin&8#!8q+4(- zD+qzx+l4{UI{psM@OzEjhQ>^oHpg@|(AQ_4e+;)4b$76!=YMZ8+m}CR8mAt^-2N`D zB(WTck{zLUj1=Jf- zLtdPy5$`wl=sdp6haRR5h(>-RD) zFpJNlmVmkgGT+h1vMGk}Umjk?g-*hf5ZMRMWkgv+1!rfFO8kZtz&u&79eA|jcf8}g9w7YV-wPvj#PyMxVz z5z?}70<}yG;vY1M(iY{vFg}kh5<_3R`m~?_1?2MWZ0uP{l7m9|m9>MS1rU4#U$Awv zX3qREbKRG+%vI}ArFvRJ&~F5s0NSwRKdY!N(8Gmcic+}3!l#1yg@xwd^(^I>7Obxs zWA+AgJLX59K zP$S$0{5W`T++w(rNj`s)7mVq{apKg)5hj zG#>iXhv!$^NPqwDTvSCiJ?Kb(hVnkrc@6oCYI{akS*v~pFF$1In@(04dE)|3SVQJ* zWln(3K&fSru(!K|!M;}8vZ&+0k-B>BD4@%rBND2dR|NOW6=I**@gSurWh9i2G`ULT za1WHeOBR0w{KX@x-}30?#aT>c%B+AFX!yatZu}o-UB9mDuE=9G$0IxBU^M_LRq?JV zmTm?I=kqb{r8#yY``rD#1OB53cHf;7o>W9W&IymNT?JdLL}WvQg#45xtMoC&2SfCi zN;)^t@l{qaEH0OaV!nX}wh*oerVPCjIQEGT$3tGLfHG8*Un~3S@xP4!GMfEMd8)~; z)@LCLz>GL|FdG10n7+?dH*3a>?@*jk0%{sifSsFGpdzxPB5^E6A-@wh-#Dvc|b3f(-3G3d=fmMp3FB2(x19P!k7@WC72U*}Q z;2UZJUAIz19qqx=mEcJM6HY?pmC(j|C3VkzmXv^Q5|^i&U@87uQekW&2P=P)Rvf7S zqVgyOSAfr#p=e~{E6PW}yYOT>50~;SNu&OwALZ9x>MygT_bLuU(K+b8zn_WvV2h}h z=7TK<>HNyD*?C&J1ZN>!-=Q_IKnGzWTvcNOF%+RtctME)RKH{jY&B?ch-i8P5Y%S2C3{ zE#qPj(#N6J0`Q-~%W?xPfpsj+{1&?kwJP_WwCS{=NMi$1GrPywCrUmCq72EjnePZ; ztQDbmoc@ROLcawl@h?;mr7z_Qlp=;>fUrs%6N=+NC#Q&)FBV*|>P41qrI&^ZJxrr;j457#r{ zszVY0{?+5~?|KqeI(?8XG!{W{wb$VFPIW7nNoRi`AB3?>}m?n$^dwl zAQ#tCVZ7kr4vB%jM4n@>Zw3RP3@e}dm{NFyA^2k+U!yfJMW!FWns$mGv=bVyBs3kZ zVkVK5R*q!C@ZGW-1q=wEQvlCnh%(df(qzU55v7z6__A=N3|krgTzRFGl@#CZ+ox-| zmH5A+*1yALNd`gjDajnfA@Vp>y8vmQM^(P^TZ4svmUHj#=AsU?W=Q&Ck5Ci7o;B$CYP>Mn!(T@O)l<|^nLkAXp8Wr#H#|(&$sj* zWcS`*yREw__KHmC<;~*WtOh{eH)icI1n11`NS`2|IqZ2vklHTvEtAVju3G zVYu_>DvyWHdkS~p^yWWcJSG4Ny)Jzz*pze%DoQH_EX7lhmm-{&72tE>s`D0g=~UxK zim!G1|A^w>Y4Q2*c?eGJx%`!S_-|DT_z(wDP2l^7wcLGo4ewu|)|jUnmcc@62q>_~ z5Dd2V9Y`Tcr~^8=3Xp}@DTc*^zZ8x^(3Rqsa%FiCGKaGea~!8N8fp5ACzXa3Oeu1FoQ_hQZ3SdE;0g)n#*|G{L zg|{Ey@s&p|j8nQo=kn_fTN&QU;suw`N$Dv{dqT9ze-H0J;dv{H|9HUPsNx5Ok>(vW z0BNO?9wuS(&40rlgQJ;7x{9z*Ac)5+iQj90SLLeN0|}`$043B0@M2d=QHs!@pabH^ zDScrYr}!a{Du~Qj7^!+3mB7E9r(pVx0kVunM#eyjrq)5ikvvC? zI^`v#>rp131u&JG9{P6rPJCbmq|{oecNdqL-ph9H^#R^k%Pa^V^_D0BmG7wAw-Qhp zT1DqsseLd8I;Zdw!afYZLYAA_T1*PSPjJ$7o0fmMyApvbc7gI11E)izDW@1rGf9HY zic7~XL{Y0Gh!<*gt9)6gb!8p+RkJ^d5xtKMIzOSdU+$vx@U1XkjzQF@cOWI8Z#e3P zt^|CmpfXk<)C?RRhY-IPVSYb?eJ;<*UU{6-`DUzwqZUFQPbiXHnquZ9tHinVWozv) zU1^%4;l@9FdP0=kE4+g1tpK`~5M{BQpKAJ_^Lvm*J1Yg`Tx!|+$kFHEN?_Cg46fYD zq)HW7t~{SQX3UtkA?WYscRt48Bz{_lZXIEI>NqOv;{)mZ0;!0)52c#f5vGj)V6_x7 zqVs|sZ+Rd#&cTU{eo}ZjTOOgpV-$77_DjG&%I_h5zvldg)(E^m4ZfH`4dO?=`&a^_ z24Eixuw-&?45Sd1Zi3RbOqw*Wx1nJn!hasGXY-rSZvu*e`t&O+@ku4nw+nx~CR~tS zfCE;1Yl0%28EF+9{a{d#4$d~wZ62cJ_CFvy@MuZy)A*MV|J3&F+gAr5^7`g|GQSD1 z(bu6U0m;Rv8{QI7nft!3Z~9j_VC-Nf%5f64;~6N(8AP1O?`Zr@0tyw`>70T!u;8c3 z^zNPizIuAU;zGZN)l+z+#7>W^o)#9muoFLD(IbqkfW^@c@EU%<Fuy0|W|+y3l1nK883cV7|81&T2|f)sB8}g*YgaQ1VOmhS7L;$M z>Fb+G{oD+U48s(Dhx1eGVFC(24uv0w!fMQ+5dxM5W12;B)&Kwi M07*qoM6N<$f?u~7IsgCw literal 0 HcmV?d00001 diff --git a/ui/test/assets/filebrowser.png b/ui/test/assets/filebrowser.png new file mode 100644 index 0000000000000000000000000000000000000000..6728fb3c628d732a060d068d5e14baa26dcfa688 GIT binary patch literal 32957 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 literal 0 HcmV?d00001 diff --git a/ui/test/assets/pastebin.png b/ui/test/assets/pastebin.png new file mode 100644 index 0000000000000000000000000000000000000000..8763529550f9b956a8197c7c2d8380a352f3630c GIT binary patch literal 62141 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

    P5gBWnUu_SYnXot!E=fs*;7H0fJZ;2dj0 z-wJI>slTZ_c(8N%8B<+weVr>1Ln19{((6+dntKBetYafA9~R$>d|YUtx|PMd6xa%_ za)Op~35mfSc*Hs#TWDe8?qkm9cp#dx?|Wx++|K2f3k=Nw7PzvIetHO1+6S2k<8FsRJ1 zF}|wI`B&DdjNomGIzyUVQSW)mbnWr2Sp>mmgqqo;yfN(FxFp{uHR z+08w4GCpgvsMuyw8^$TMDI-F$_%UWdy@AzuI&Tx=@O&)t&Q+&hO~d7~5(?rTrOEw* zAh83$$S~1oJpYYT9LP$o3Y`S2(+)dmF z%7Vm3d=nMIl7c+6VASea{Mghcv9M|#QEF@GzxXz>*u4EoB8u+e4;U2GSB*}!womYT zv_tyzOK3w-`x=vp1*MuBFtiBqDRCGGHt-fhax6hhA+oXpfoqw*d7s2C)Z^O)5 z8jeX_ud5+E6BtHyY$ocTH@M19G2D~ZZ>l>|t|=i7Q#rcSk+;QvRBhkoXJ?0^)@a)% z$auO^Ee@u5@k|cJ*|0+~*QnV^S~fqd>TOe440q&bibK`Vu_my=VYLW5uO@bf2=H*$ zlT0m){BQfW9QS3bH5ZF*cskY|lCrVT>bO}ewkD*zOepMQXV6HVoOKXb#M{AXR4@NU znlOjW2?u*P0hh)Rb_S{DMZr#FHzG$WtU0W1RAU^Q-26h85R|p7>XVv!@DDBiR{{tm zR6xzRVe8piLJW!XkZKsg(4qNW$EC21<{;ErJo)k5RC8TeqYE{?quh@(sr@qhE;^~{ ztMFmEcZ}cjMXmHWS(0l=$rY%hfA=JU}4>TSi935&MlFO)w%=yRB zp}h}MKQx$RgP#?GuSCPiR}&UcRtO)P%}Lph3tWQPgLJgICQ2~JWx`US6TAr*gk9g< zEvK$OWBPWGh;X))h3ZyAcLr)&=Ah_xH3BA?8%+p`>;>!OMIBbb`0TumSRq_NiK zh|%0#sJ7h)4J9mwPItL2O#cH_FcgQ0;(^mt1z(#!KoSb9iN9*dBOtPP`wSBlZPsdh zb=M4t9cG*L_o)$;q1KQM6HB&=7hF8dxu6uCWLz>%i^0CkBbxs8w+9k0%4k}HWMZNM z)?*Vw?L+OmBtiR)8LO1g84~0-B!pRGm32eYnd)=QAs zz*tf?O8i$Un^`lEe~Z#E3sf-w2(kY(6C`=yyn0GX2WaYgr=}=xr$_}(GzCApfRrqX zR8o$qJ%hn+#yJHF{B0PS!~GnOVXFGAWTQMI%j9CAkwimSTDXpL5ZQrC z6)yI`n0`dmBZJ+&WK9eM6@dfU`3}e*la=6Lu?>B|w5iqPDAaSk?Nh1C)K>A?(}+2f zQRT2+WB9Km{{4gx6b->E`MlD|{12%zF%SmkedMB(lVupnA`qaTGA!@@~=L?QAa zjbL@H-z&mE9)R(Y;X-y)Z=oU9>rG$;xda;I<>(8qW5I$vWnhJWHIohv@L1c+u>|6?k5Y4tV_)d)OonT z?%@q2U_$+^i^|eP&al)rI6M3hUWW`-vmTQQ4>jg0Fp~R6(IRMTQ5oe4|j3&o$Rn z*n-nG5AydYra2O|1>D&P=TqGbtr1%xQXjaZV`^2XAnG6jv&jaI`y?MD$;59^HOy3_ z`HI_uN*?b{B3u+VejeU1t~TH2$S%z88#Bi^7U`BiNe$<7tb#=)xWyT_`AcmE#aGR5j^TG2}n7 zDeKFwqr#c8+^3ZlP6?cT#FOLG77Z>Vh%|xeiX~>lQdRuAfE6absFMMM}S=r zp$cZtUpYk$=Oac^B;~UeVIsT7)%6fKImzC8N@Pl;v*5sVW%RPe9OQ>X)zo(k87Czf z6(4bQZAANlxe2NpA;-X#Ft^+h(4ZE-7sbCs!Q2|7S$M~9`98{1F%9J=8Aw?__5lP? z6|C^9gY%f=5QLptLK4%J)^0brHEMG&$gpDr#`)2y#U`Z`g=n4P-V!j~BSO671slLR zeD1^nhgRxP0*DD;v>f=(D}{S!2ZT_0#Rd=AW|6<;@!*W`t6A*EvgiR4Ls|MQH7FUk zkjRE5z*Z$c{TP%<7n61=AM|zn=?7y+4o4bd20lpceK|ap(U5&fd_vs{5mtv;{U4!E z=hg^?Al5xwGt_g;wjE>Whuo4a5SW>dPopNlg66-@$rO6VPfYT_4om z5Ey>WxGuvP#WdzB6yg0`e^;n%Y?~ITb#|CwwpaJ(lT|hg53QELoQ;XFf6E7A{b7BP z0Wd6h%9?YV=l*Q&NuMDx_qRNRj#pC_lMR0}#){~Tu4y>L_WZq2=gJ2ykv1D%){Yyd z^*ZyGW_1r67`#CZT@GT7P91k(t*pU{EfNc4?fdWjD@gFS1-kik7LBetcgl6gW-fr#yn?;)&ZCo6PJiSz45aytPO zb+a@3E(77NfSxXH1)1L7lBJAhrg&I#L8U3N^k7tz^MU}OajOwAs+ORTOg4SR2Xv%& zRJIIt497+%q#G^ao~=WMy5|SefLfAX?fS~se5K~?C6?mD19c+VPfUZ`c}oYWKs2K=XNg;94ZI^!f6dhEDFJDfM?E3QYR!Sy zWk@6Dnma0ZdcRO`D{V&ODVtdX$7HqYyL^4KRJ<_cXm`J&NU{g9u#L~ZDb2|dONEJb5AXM@BM)mY_BnzW0nL)BG zt_%MpMg-FAICpb*v;Nln`TZaa;x2?dgVw`MTn6~K4sOV>e(G+(|P*SjtX)q z=MmN6DT04mb+^%6C6kLZ8Y0CXs*$RJW~4U-l0qU8 z;_q*j!Ccvzxgu9_%gY5%EFBoe>f`?X9v9(4pevEh7}%cjTKPR=F@*c%<`f?d^2L%D zcP|%?qD*OL+dn0yo2kjj)3rrblE;L=1m!i%c7`&C#fT8uQ>NL4G0F?Bjd~>ispsK| z;}`T>;<|YbDe(xS|4>vGbd}`3=?;;zHDo%tlNj&}nQ-YYj?O-*SIm!&102qqt6$}hK8 z9S-Gr-rxHZsz3spONkg9w7Ej4xY-_Y@bsaSu4$F)(VOf5TLQzR5<*DXv%E(goQ*0C zQQR5qwOvd>71^|{aHmeoDLR>HlfdjcIhNeRR^sT67cGi}_C+OIj*T+N2!;v17<^=~ z;`9I}y%L*7siQhriaYRJ=cXuH&K4sLhP8th-ym+H(wl|zXAt$Hch@D&3)~arq$zC0 z&CD!2bHq3R;}XB?FQidm@|3hl*hH_072n@%j4A)kvV_WeOYoQ$;w4{j# zr&37)E~Q(5w-;wmNJjpWGErn!wMyuybhgEIT08&}Yiq?o5?j8w7-m$Z%t4#e*&YmD zq`NZak~(%7QannQ0QOobBoanTZZ<5`-ow@drfQu(Mdq^aQ_L`HUvOac)s50ZJ*0YS zQJSf31J3VI)Cio+$UU(!%fy^L_JKUFiuTztB*kTXP$*8zUInXNEyoTKjMi@sZpeAf z2>X#cK5^-7RwWMu>X8LSY;ZRxE#BvlG&|ejYaH{NSS3F05sX8u_OReq>Q^(0L#&Cr z$b>6XjbaopfQGYN-wUO8RdQ?vM^Z^EWicYhiU#Do@}xG>dHvwiyQxve8VoqtaL+(vft^sF`MDPvwb)fnVsm3r3L%`SE_9!XQt~ zj>BPxOEj-pm(A-o#gm2^IkGi?3@P4IMEl}GWv5CPT}qeal#Yq@@O{(|afA~&wKF)= zcr|Rh-p_1a)OPv3?uPTX`C|rTr3@h9K`*} z^Bla*E{^B6_69e0#_yiRA*G?yFjoHoR-I5Zj{W2uL(g?{69hpm|w2)a6%?Cz7!}TJQx|V%DW* zI}NExn3tRCDSHb=8e$WEf+OVSeT&2ju%0kkCYG(gdRPhE1Vzrsg1)pUcIFsTN^lHF z-$5?fe;*;%kM51Cn8UK@H=HP88^`$p&7bYy)L_T|vS*W4wS9kmWS8EHV$TtmQNC^E zb<=a*xph_Rp)b#Mlydac*7wKx+)hC&j{oiSXw4-455CJZ5I3IteEg`QIL_G@+VLQk zgKpKpf9SaLqRyZeA8tpXR0Q5|hdKhRLR zcO#7rL#i+`sc63-A+Py6M7-zeu@F-Gj`QsAUMrVy zmcR8rZ)fFaK?1KS$sA*ZE|<<9w`24Y{rT|<&9}zAXJvTlNWP~ccw5-6DxS|>J3YF$ zt!?z*H^&@|b^b#mQ$*iKQ*A_E&)GQEUHEPr$N7Iw7^Yy_xbz=)9EW1F@f=-cNX0E8X+2NK-*VeQ({~gQ(1q^J5 zXDYWG%IV=|y4cxRg9E@qi0cyVe#;a_`jdNPZ}r?q{do0?XcXeRbBbX{-{Z(^*pBey zHC~hOqyL@p`D=Pk_d3eriG}|&=4eU9p=;}yz3nxF;bt;lw^Hn`kh|vx^#L6btp5z# zDxF5(bI%md_E+4|;uM39{(I*tJ>$C>TX479vP;}9l)sD`^c_b13}xK6o_LUGv6La%g9sj8HA ziB}^yha+xj%(J1_d3h)Bd`s*i*0&3uc zegag9#LTIy4T}YT6=G>*vMQ=gwzdec+Cg+aj-Wvqw9ov)BQ|G`9_m%iAk7a#7o2KI~+Vp_uE?qblG>zoO!Hozvnci4efc*_i8w?^f~}P%2V^6`r%eCR_dgt z6ux>YwrdP2?29|J6RHia{1L-5R{T;0U!6uw@;k5vT}A-~_MEC3c)W_9phCKA*(i}D zbns4+b|Z-h4jSrW1~lsU87i4uA@{U^bB#G!J!0R(kibALk^F+JrltwrtYVQHL#e*s zu2F+5)d`$JbT4@XYzR%f@bDcFuTCSYVb&;D~*4Iv`Cw6mbMTDL?P} zJQ1`uc?xhecEZSb7<4il3(}k+l;g5gv(}a(pCue^psDw{Y`>c-;RJHd_GkOoERUiH zyR)sq+{RA)YW1Q4I4|yjq}lunVt6UxyF4gu;@NjQ-6y4g()Y4_w_c(3o=&kV_zfPU z-OqaOI-l_T(K2WYk0$MnETd+8_*Pv-n!(7!nX=@o4sC_Qg){}{ftwsvqv^qM?28;$yV`DYDuVF_IXuRETv z)GRzWZ??P$rMr`TxM%e665d$SS=Ax_9B-(9f>L@eJQ+xuA1O82VqhMdWQ_je=!0Y! z3Iy(9aJG2d1-AX!y2@DkxRg^Jp_8!TY+${01xcR098p3$0gZY@7;%cIR1Au)!Wgah zc&L=;dYhGr`h#!1=iT9c1q*469+)?VO`3P+wa57Py&tNr&gTqbD$}ED?$~PQhHYwy z=xP2)|Cv|AU~DQ8CGh0nI~vQ!nsX^*<5&ZV=wlZuU8CoGd5YzG>hHcxNWNZN=cm?G z@U`14ra1(6J4f!{iqFtt_lwK zvAn~W;MKfbRp+B?=YMB0X06;3=7Nm%a;G)5R>^onXNCEe2i9L~3dXjNumP81e^3gF zOu$I)GB;VT&(tSWOq1VZGXKsyi3-sVPHW&ijgH#5GwPWP zjwz-0NvT7T@jBmikmzE=x`2fB%ww@c>6246D+eCV`_05OYg=xStCgJMG%EYV&D|8A zc+4hnVe+F?y{o(PO*-IqliH9>39xp;1O*`v@=))a zzyTMMX&Ek2_ToHPRXv$zAx+&2Y%V`f=jWY-OK!lHCs_hpg&Y3J1`4VATV0vRUHUw2 z6MA0)Uus|8+3WmXWzrZwqw2JKU$cAdx&8{B&{O7l204DS=s)xbCMUR!#{zbcbs0KO zi;gV(zp&CRKK`v7NSuG~TO|m+4v%p^P7^uCxpjYk+1x^z$N`5H-+xhey^1R4xAC%jQCCbhedMXi9NI3rzBU- zuN4T%7pJE(BWc8BHvRi4e0=QaA&F~{ToI#d2Vc~>F9uZ$&- z|LS=D<$a^fGGIQv%_BxAZ)RiBMP1dY+ zvQvMGCndbcw8j)$$0^LB|H)kr357qcI=P#^1ku8ktcdv%aF3KX35UJ0Nsb?d1)u5- zO>;-Zcz{PO#4U;6g}E0C_lEq`EA%iHq*0w4$ckvN#of5#xlB<-qCdYrC3Vdlj0@MN z60lgN4TocIFYX9v=u+iOqE zVNKWXsEfVt-Mg=k_khFC?!H38Z_jzlY3$4q?pXorlSCb#NFlbx=pZ)WueQ%V8ew1e z*O7n6>le|>_E8X4P9MJ8VIrLW&mz2vwvMOv=TU717bVBA@G#ucJs8cFWz`$zy5f1` z*xC7QoS2jL7cbhIo+=m+-1Y$t_gwzbit(;YRPpHt*X>$B`X}43=A+y^xK;; zUf?rxhp{qaETUwA@{iF#e7mGf^-W?biY_g#n?YDG9+D21l_UgjA9c>AFn!+PfvUk$ z^kXF&H1Y{6n+^FuTFbQ8is7np&GUva{NnTqM(;?I;MvT)i&z@R(~)U)kTmq7X=@0rNvp#QQ-Fmw=_$ ztz~RsPg!ckDi-P{^Ae&6M;R+L?-4bD?a?FX>%am^icIf9NT*F`XlP@$T5o}?$^?v2 zGz^^h#x}GEMJMev&?h>BPN|)Z`SqIn*d9j1WAr0r@mV7b$jCQwC4P9{52rEvS^uYe zx}8UaZy&D}qL10Tgt>R!f>!S4Z`ZweyBE=tZqVJ>-5i%$eZLc&z6PIn4_>>D-O!VR z+(b&-hfyl!60kh!83-V(i8*Pv+-u=|O=cY@&)c9rm9W^ega#@bZK z^z4xJGDljh-cx#E(o>j34?b(IQ@sRW&^dl`fOH|vIw^K;cCfC;!>JGliw}e?GytRuf*7ly;kA%L*WxSe@WlU1U~1POH_b(^Nk`yuIg#o zy?|m`MBY`F2Zzz%1S(P^M+3Mk-ZsFmzCiV@6r{Asuuz!N=v-!jB;v`WA_z@;RlECv zJW#VJ5o>j5$A1^SOmj6_!)sm>=^&^z8&sb6cRJI>44~s4sJD#7oJz0!b(hHSg=gO$ zD3G<$eHiNB?lli4fVX+RWPcUy|6HV=TaiKSUxefwn$N704^a5-dYmTZ*n|>z={}u}m>L4AOfpB52GwHA)ldcch&EEs@!?Ea^svN|2y*=5-aq83J9dJ2d;fgI zako0TC?jQ7Ul$uAK1#H{?`ovVGP0D3lus#+5zN-?FI7rPkci79Wa>f6vi5mKJU(`i ze5R7aP(hhq!;~PC*y}Bt;|t-FhW^jjyI=R;k`8+_LS%o-8)vYJ<5AMUN^gN2z03np zKW{vqZll>&ZT@8tknGfN!Rz$un;YrQ4@5-nSIK#sh#SS^^UYN9Vm_sCdsX3 zTJx9{!20#HGvvw~7Szp3Oqkyta+{3sn3gs6@Bhk1(@?F_HOzP$r@J&N`7bdZa;|JN}J8-Yx*l}9ar%8Ad@c!JS$oyg& z*ReMKFO(0bfBM(|`#s&G@11XoXXjP^GmXIi_w|f}*M;*DPu+&T^SVwNhpzK$qt9tn zL(%pQ4bfv4f1K@nerLzY=j?W#_pBbf$B4s^JeMcE+YT@fJ^llh>j)%VEbq9yuGjlt_D3x4(Key8!(5kmW?H#%dpV?}z zaS4T&Ou@%1!$Sz!N-+GBoz_=zA>4aJhI4bo<8#c>X%Z8ngv!s3ty=$+Y}M~Z{O~qr0k3ocJ}<(Wa7 z&KU~bzX8<#`xN9Hxk4|DdUm29tAb}XkQOT7vHBxaNjBHa86l2dwc;QGnvk9}m3xRA``N77EgYW5o{`s%m{>PvC-pzM@$F~DvH(ytU z{5S`4@v(c+^CP#exZ-Wg8!x#;zaaC{mtV9z=UIP_z}F(u@tZr{t%IKsp*f zbT}Lw_`F_y7$`rr7q={YdM`h?w+iGIDXP`xXir3 z@IfWpi(h+@7VuGzed6-PPkzGY5f6X3ek?~~)`0(bMd0O}gWVc(ZbJY0>A${w<2QW$ z_8|}bLfptcq;*A++je*W06+jqL_t*iPRi@ROjS2eEH4x`_I`5d>F|S9cH#_=t!9&* zJjTh^v5Q0O)$t}!1f^Ne+Sl~Tfk5%stT5bx0(Is(6Exjh}&EQxze&Zn2#96#i3cSjxDbYp14@C`i4XiCR*7X zUu&o-<}&d;{hJTtQ+3Zc{nNI;{p-KFIpKs85Xu*c|bp_rC7~%WGfpSLE3In;-bM%UAv{U#^cSqaqg~J?{pn7Wec>`e6IfGpgsOpBPH7mSq(>W4& zaM?HZ_HoRL>^MD{)`vF&PWwVBTXYciDy(C5-qD(Nm849yu$AGk&x-NvocnXONvMQSLyw5x&q< zzH-6bSIqIp9^=zx=vkNNB7_gsDTa`DA~w_J!1#`u$GKX3V~ z7oCp;ZnL@f1Magu^^}uz!SUm^Z{#=d@b&FZ16@_n^*2KGVOF)N_y(6gb73a3_>#>2 zwU&&>U)I6b*{Ee%Ui?aYsL2PeSbprs@%HDZe2qS~j84Sy#l@}Ja`So3YhSzE@4ojP zUkZ$BRBshsTFsnjpO5*KKqfC#({Sq(mcmJ1=WvQc0w*DR_=?9mPm+1~uzkl-;%TvDm$(tYhKYv&W zeLNixCNG9u5d84WzkA~wmlwV0#mn#h(X*D9zUcYe<)qKpoOhqI^=UxBZ~4(!81=JegGe*$>D*8cRx8iNC#?w2k8KEUS4BM#sG4~o>wU%)(4`=HXx!x-bC%G2eP~O49 zLr!($5o}d|?6id5uK=uxjx#xu5ds4n!M<$GU>$m)2=oH1p1lcL*{vY9qqacR%tI_2 zc!iNoQgBYtagB>V{kZZKr#FFmHu@xmE|XvTpa1Mb_xVR1XdXm9=4boM zFTY~B@TD(Ze*X{uWcj_{`E9(T=#1sT4?Y)fCq52;$m6Dk-+<%S?Nd|!=tvf|a;npgP zP*`xD`i2h~&!YhV}{e9Y+YtT0#*SU%9Ck1tbW4vmIPUX>-%_3Q-OHGv< zh&G4c^_+YB5T;Cf{No(P%1(rwU-qS&r#|JYbs^^&Tk9mmnba#+S_qv{vbbDu+6rA!^3=xmoLgnd?Az5a2{C_mFmoY$ThDrLw}lQFe3{CE!f zIwQq(Td0aV}r}-ucC^e%bPvM?F&S`{yD4Xe|ew7eC*4^O6fMT)y+W zzI(avegE0=y+8GfoBN#o8Os+w<_Y|fB0lr~I{gJ69#*a@y2^PKrFBe9IHky0Re_Q5 z@KT&V5zwzC^T&V2c0F=1Gb}Ef+><_sy$&d>lQCkA7?iUalO$_--}^tfJnWH=UHZnJw8idvz&BCT>Lj7+fF@V_PYZ1#hY^GM6_aXY!Vr3 z79gh~k8T=;-m!aXo`d3AXX4!r$$_zV0-3S6w9~4yL9}$KbACGt)9V;DE_rTQ+F6VS6N#Z^9xLItlcu83q39D@t~$Rm#2@W)**f7K<+o8S1V z&71L;gFbTPQ479-hz}?^Oz&I-wh2jwra8KU^wepswWbGeW?`6({-Ypq={*P6;+=?h zIrH@8vbS8ZT=1d`md8K#F`NEHsl8N`&nLBGxm>K1PC9Wp@tDIlPyf|lTJC(;bNIIl z6DM`=WW%Xcs=vUy7^rzoX^pZvS}N#@H}qks(e}h>rTpyDjwHsv%sJ|He_;{Np?ktN%0xJP9J4?>g#%}-cn%PKqmZ|)EV3#KcQ`PwBaac2 z-0{e5XAfbMf1C;dTS1l4)Or0%A&NHg8TGyI|G@I44}b7-`e~=NeplcjPq3x5uRT{~rit*0)^p9Q09>4>*b^SR@r6peg zwJ2euTGda)32&Bmq$kh4t`DF8AbD04LIZ7VxjsmpD;I2r7RE@S8zbG}ce$Is2cQYS z{%`nTaEhWV(FjLLUmUDcTTOp9j^@&I#1POr_FANdOnxg|ClJ~`RV^r*h?EN#Bk>1@ zcA1BbA3*u~%P!x1$>SfjdDuh0;J`!6XMJAytne*wee3cce)?yYr+oE4UvAhQx!mu5 z_vgn}ZLY&-+vD9iiA5;?Ws8|hTFVf$*)d?G4HxTz55_zKf0g&h<%Q3C;d0CgCv1M? zhrf6E$)Eg*%{P4gQx|@`IR1hV-l_N5%cJoTWKY2j;T>;~+ke{f;PW0-jEAC`7(YQV zweb(5UiI#)m%n`JE4QC^+mkl8_^r^_A}qTu7{~VB%`OG#oP#4K@~F{UMDFeT@#V?GAN9EH zcYWt~EEimWS1gFdb-OhhTC$Hp0XI1kUT*^wAs6OIxts^`F(N2%OeW5=G_Z9KcgX#zx)XSw(JuWte(VOz?s zAw`5>cZA(9Rdx+EN1@DpR9+&>O!+l5(Z6`2cE3x?E`k~3Y zd$nFt$Hb8r7vC1EFA?7RzUBM>?GJ6g_=}#r{j7W3d3(Qm+-37&yzHf2tizGHcR;JP zm()dnsQL)s;;-v&|Khn9E%&G&(a%!h|O7kw^d&e`}A2)Bf( z=@{l5sLeMgW`|X7b)y&z-kWuelLv1C{9OP0pZAdEyZ-kd&|ehh`X$Gi=#wocSH3A| zIq43|_4qOC`YO`;yH@wfe1=8m^lD`$B}F{SWwP&!T_H_*P?+cnQ_jUrez{Cn5mf`# zZu;xQH7olHwKtI>H-K1`5GMRTFNWk`Q>jG|3>X;yNUbH8f=sAy$Zju`{h=OrFm_8CH>{&iomdG#f4)~`M@x604?CXaE}s(x0g$3T=c>LavQ#D4Tz z;doI-gYB?LY{fC2mI)ALkzjVvD?0&^z@R7{M;-614s z)hKoS^UcFQh2SR*KmR$;+CJm|edgwSzWZOT-dK~v-APYEY;S!lejWIT(|NO-7?x;1TZC=;HAn7hgl?FpCve&pB_o@m+7(^2fV7jrp#tDFBpAu#y~*>@7813F6AiVe%1ClY6UcS`MNR zEO9h(OgmJ3*~4!Sh9ADcK{KsC5fvEHglT8#_)`Ej2e88qd>G4+WJnO1B4ntjNn3@b ziC?Q^%_^xy{-noZ22n@$1( z<9~q8g9!di|M`FZr(67Cj14~6sloKQQ?!=N6 zm;xV4f-?Lif0PT9C_>^Z!sdaITT%bDI{bQkdG|jofBxL_mv8#UuLtzjYxla>JsqsK zNmDO}vSZCEfy<-R_p>Xw4Vg^!OT}(lO@q_hsc=T-smmsKj!Pk4`(tCw;Ztu|<(cUkL~^lHXf+t&OuF zX_mF~%GxoXoz`9>52*BPKTN8yYS96pNnHF40DkTqf82KU`#->6%Hb!_F2@~v%od-x zv*F8H-Rp?gmC^?&i6rn;f3I!gXao=={$oE#bpqZf#9u)A{Xh7l!$uuEsAJJ?TroQol7=Uvqm05QTKER>Z9bq4FVdV$M41(SpH9QGC&Hp0=_x9`f4o zXYqLJ^Y%~v;J<86#``OhZ=62aWBA|uzV|JUf6|w3`3+j`D}SRB=_~I_wAP{ah!!;3 zn7V*9#{d=9&Y1F>pLXS03_Kr&l%K-F<{c2%j$PjD6uo_^V5~H7wBxLo+W={gIqf{f z=oxd=b*QHm==|RleYwtI37~H`mX|gRRbUJl%~se!As2SM_}K=>JXvW6vM&j4QeRzg z9Jx>F0uvtR;n~Q4vV$3~1a9W<#4o4c{?z66w>?E~thp9H)8{ksM9W&4Ia%jc>yD0QkURtuO+FgA?<}%dQMYsZ|j& z4vTUk_wmOcyF3>c?T`HEzhA!Ysb5P9KF=U~Icff}c30wK!j|Pd+r#mhe`q04tZ5!S zF|l#9em^d4!L=`7N^u`fTISDAVtqNXS^oN>S4i>k)MloSz2~;^ot^i%$KCO(%WvaN z-Pzz0pHfR*7@@9wccL6vKd=X&cT_u5^D6ulcNI-fYNhehN6h3ZK8Eh_c|kDQ3BLgVJS$&rc3f>}v(+rXQgW+lDOWafSuwwASnWZxP-y1}8DX0?f})d;9iv6| zmL~kTN!SETau^CK*;K#O?3DkiX6@k0&0zE^t+)V=GMi34pF%hM=G2w%eE0GdPkQL` zo%l^UHonsMcrTF4@r^b#z1+vRs-K3m;%8pTEhdiou^=&e7&GHaj>@=$x$vEEG`t;p zx!3(ZdwKCo{%ZN~hd(S{-&g0bpIkZoXPtExiTN>U4xrtW$O6X9R`x#svPwxz;SO*q z+`tqO_2$Y6(EeL3I*SFbomlH)^TEECh#yue}+H80b!}dWbEyITyl+ zNmP=nPH91gt0pIoNzUz@a}p1BPLwXz4_`_{S7&K}xw?<+FDg%QqGkqkOF)YAR-j zhnO9LQkk8;kva(~%p-{oWNBbFgoVzr4Mgu8HC^R1$7(QziQM|Gf8|f&a5FVD*{Aw< z7t$DJ%-^Md;rY*A{`BcTvz(1j;{8~^+pjQFmuI@`uDfoz`0p-R?se8__$ct)0F+j8 zRPeZZtt#y($G9?JWmD5i4|s92ZkgBxOSZ=I$8yW^LA;;h?bP#2D~+G3PNxCnx5f8y zmcu?xf7GS+$04z&NseP=OY41xS;+$9{{zj-jprz*nvQc}gVs^m?;R5AWbSiTGYxw( z(Uk{-c_E=9htKpnD)YfZrcoGT)oUV{4|JeX1{cKMxFS*2<%z)y0g#&$(z^wrAgrKe z=b$<|In4;lg^7s62a;?~h6ROy>fp5P!ik&_|3>b>vaW1&^E z2xqxsI?y;3jhnHvOh6a7l5s`v@DSI&x!~V=Io_vmD>nYEg9kqNp8PXn`ruQCt`g=- zV5li`#)C6yavtRhO~GUzhl%HZ)wCMLQwF(MHi`Q3lgutW<;xH|wh>F4JdzMF92t|< zIu~ep0{}?mERqjp9c6h6V3;&YkV@ZuYTKE`NUSi$?Lgf#j{b>`7>B4a6IrXvVyIv_ z5H;e>*jXOrzQU9j0WdJ}N?x_A{@omi5utmE%~7%}g)5uB{*v1cUS#}RcgGxg)CTYC zM*@DIywi)z$3Eu5dgqnzTrPRtMXTQdP)E!Enl#Ow4n`Hv&oEL{3vj z1&sKgg(@h|HbpcBzh)eP&76xVyf@qBjh4|vQGfp15&ETFijs&@h=S}a#GtXY$hA#m= z-Y<7{;@;x4ZdUj!NQdj)l-FI)-wCj`60SjOGOitHnef2Su9Z=|EQIZv6;vp@*7^5@ zzQPUGpiC@Yc1<+Fsq=LF?#*Tb>QK^l*OWWvX4#% zV@k<|^|g_VilgiTGZ+LSN*t7s_^Z9k+u!-F<*DEJ&6~$P=Fu{C7Axq-K8gR|UwRo{ z(|tPMufSZ`lru-odW=~G2v_!lhJbq=5s$j)=dooV_Uh-Ga85n(Hu|eZ`GuvtdO0ZY zCrig41s-=CK8@-68}bd$B#(TRGICAov!o1S==uSrE{hO5MycpTUDq$Ll@+I4Jk*44 z9lL!QYoJ$9!pC`LPR+*+(uDSrckjO=5i!08V51W>5gpYq%_N=@Ow zT;)iQm{prHkd3Jvg-`AI8+^9@zkJ%a;v=??{)B$ym%!X^{?5YRUVQO#_j}(_?_H=` zrqY=Z7FOxV^ML$alR>FZ6vPfsPR2I{MTRbXH3BhKOFHi8(fF|^-j%m{n{o&~RU>~w z!Ve|+z_m9_DRsUH%N(7%O15nAV>|!BdZn}fqBpPCu){!DpMOEwY2o6NQ3iHY>^ZK_ zD^a)(#|F?(PL(79jKja@GM$OZA;66CC(G1qb3UZ61)MXM)-F+NoC@GwivOq&hKfWE zblmO82Wt$bS08_jahJeJD}-$4#F06ZiE>|TA`6TKiI2W%4W|Zgw@2ag`(FKbmu`RX zhks=Gtoz+hnEd!|IQ-+JJcGUu-vGSm)qk_S9X=9FZ&w~P%zy`9nJ~jrB(se4nB`)~ zlGb#8AV8ED_rMb&zbwGVnH{yg8oyG_KV*9AHa)30RcD*Mo>F8TV>+Y*3LDAm$&rpI z9{*>r0fLmZDNN(2=Y*p$oM5{G@W|_`q0Hbo9uacyX2 z?5u_d^RC<)Q5fn&L71L3Bmjv3xZC1(`>xC1w|w#zOmmn_HN zRfTUu%tduE-#peC&U=(9jMcNZ?i#C-l&$KAL`*GQ$B|Gq83zqeoebZP|Nakr2p?B= zW5I5%0jttkbegG!Nib86&@p3cT1$%??UZ~xEwT5xq2#v19jEf1F`|>*alHpX*pT56 zyrmXA{?t{Hz4voIp~jB^D+U~LflM0mpqW+#FqU1zd@;%rXX7$M5)r2qiJ7L3HG0J3 z>lz>Dp)RH_C&UvX8Oy}3PU@&J;5j@P+aY$3UB9_v#B9_>rQF*(&$j%r-}5hg-SRX4 z;ooe|Is0r>H9k`?9-qj_k0)c(8E3vqwHcF3uUcWDj|sK74Mi_KS@-RePM*EWD<0AL z;sYOkxoUIGb=NN+!8ZhNt;V(Hmq;fbedPK$VU@brgX+tQc#(FlkE-jCMQA6oyz@Dc zqvIAP98)q-A-WP6SrF%)jmN=b_Fq;xgn5rEuK*el0g*y8oXUuSIy|QJTPG%a;gaMY zPYmYL%$PM-!$xjU?Mygjyc*kQ2+Fm+S}>rdJnN2%X>s7FW>_y*0JASGK-vF+`pEEmRT>lD+G;?7(E#2@c zAJh-KtK?c(vOw9!Xs55y3mXfjJDRfW0}QPm8^YDpzC;y3_NX)LDvR3YLv#TCV~ZTZeuF@J*O2%B|{PxT!DHhea|CM?~B)La9sIjl2J+8 znX0Iz;W6;PPCzxw2gnt8=Afa7BO0q-9R5xNz65vzKBSUu=M+l!@pR#NFTSbvvRA%V zA54l*zYSF~z({fR{gz-{m@4-x7U1MZ2RyQ7E+m%rUJ1ch(Xvsu@?w7Y+=K1m_;u?~ zb<6tjPp)5i)w?z);75V{yoXhDc2w$tX%>JM=r};7VR&-t))Ix)69p7>=y3x`y`@{*i(9r@jKX=r;zZkQPhzq= zlUB6=BW0U4TCALRaLJR_+!^IdTs?+MahO~#9Y;C2Q@jLSWfD-5s~E;u*}*X7CiUI5 zvHy*@H-WnKI;sP|i{^QrEL)a5NV1J5j4{R-uJ9Vmd?W#K8`G!0E_d?(=_q_kwPb@$F_y5*%>7`FUqE~+}@Z0b!JRkWl@7

      @yY_cFP4z=pbCLG08a#n>H1~Gt96We) z4=Dj{0A%mjI<>hN_ackInqSWG6hJ2d@@EWsaTE$WW?!8I8^a^L%rnkVFc8VDVt5j$ zbfJAhi4JPHq&%>23%2Y6RWO;003*i;!@Q*}l5@zkge8_DyyK`rB-vQ9fYL)|;KHWo}9 z!E-eN*y>MnERE2|8uGel9?7jf27$3bSQ}a_s&;mW6P@#DTEz2H0BVr{^Kz^LW`eqf zjKpoqOwwbv1t!u@Qs5F(G2)h~hO!H@HaKMV#5kUNr#{Ac+q=q-)P)_Pi!VY91Nc-1 z=fOLxV~lKZ!^|J__|&IwUH+&4`EPHoyaHcJf%X@D-#?gR>x1V{KlbrubN(~&2SEG_ z!0A@Ma$@f3rFxR5>=>8Kg3R6Yv=;_4LE1`Q+rr+?1*jdbDL(w@p#>)Zd|}D{KLyCV zmb>q|o1(uDpzlM}O-9?D5xtNiRJ&c#Mb*O=TJ++N2&DD%<2HG}1DbBVu&Q4U@J3_UWSW zq{;`aN!d%bg1j{)Wp%y+2UT-Oj(+B3o;_C#s}*Zf1g<7lG|+{WMt<4Hr>^-RUip8M z4t&2tUyOeNfmbpfq@O$iiO2;hb>F8<$=KNU_K0LVR<|0csqo!5;I$P79|1sr?{dKf`ht#q zKLI#3eMt&_1{0r9bA_svWlJB(SpDpKguM2cNQ_J{qNgqpu$cQ0EY^ z$<_YRM?~AwZuXVe=dN3QBFG|DfIXvN z$Fz6!VViXraXsr_oBRY74_zZfVCCQ)xMIvyl2ndx=X3w7KYru#H{Sd$%f%NzMYp=X z3a$wL+(W;Z_|cDkY&q|;=dJ&`PW3B0ZZgd#4UIAoXr-&vppP&1EX_(lZE8>_#|{<$ z5JJBdc-7auVRJ$L^g5hYOh<0$JETwJ+lOwy{<`=ZiOSD;Mm%PL$6=DmwOi|B_>`3U zzjGvKK!V$AxgYtqk3Ql!7w<>(QgIx%xHqGpv4bNH^kD%aKsDjzgA)Lh?Tlj!dquCV zLWMek(dp_-y&q0yudzdn2@zUq;N2^pvF>4QV$UrLu|0dnj~0qChBh(mn%?~EHOs>m zrZEW{^XU3cGb-SXPkyjln^Mh%X@#(aEx>rbw}X1Vk!=kpVQPP|8`y8=zm zJYT}WiN|5>i|(BA`lG~&`(Kd`UwK(=kPjuQ7;K~J-hQ^-c zy$Dkil`Y*dBB!%0bw>2QzL2LZ}QVCqs=kUxe@Dzwf{U%eQ>{o0sQ4=Sq2d zF?OmWA>V!XJkv!G5o|^8LL)n08ZUbWr7SX zBo5XsbY3n4LE;>-QygoIPOgHEJn1q<^e1*`$S_72WGJGd4aJ1CS9}g2DS!=lzVK5F zgCtZVWLnS-j*ML0z$D0Y*$=jOrs*u=^%T<#RBEOqsWYvnAtzdLnK(a2xu>Vk=(a|z zLbO#Jx{*s^qBIWqg%=-q*R{*nzw!0;qn^RQP)DZu4nV&FaK|S%$HtFhap+!V} zo|gfHUG>0$cET~Hswjq#c6K3_spcf~q{)^F-JzWDl+E*>|HU$lR17?Fz2}GDKKu*6 z^y|yhF2WrW-T^==PS`zzX6}_yy^xonfek6Hs*s1FIEIqO1T@^P62?pbog~9U&Cz`D zLeW~-OTiLjN1A43iXn|!_xeH*4hqI_;oEN?Xa=V5-WEU}8aJM1ALO*p7{em#3{53t z*;qM|NlL(d;0~iRC#qU;P{W$2a1Q8IlgGrErR%6?yorp;Xt8+UfW?FD*{3dF{<1H# z@rd_cs`2*Lneq8{W~R&!lcLP5f2x-?(xGaF75|{pqMNvk1w7j@Tk=WV2$3I$lj0|C zx^??Me9xP=mt1m*Y_6ezM^Nwy;F@dkGh~Nu)6);pW9O){QLk%?`dLL(pY=~k0i)TO zl;OfMDPbPPBsp+Rl)Wx&G=woFbVH|D!N6?*W1LBF{Wo=pO+lw=7}3Hz)7Wz*=_Oa#Z&%uv?;OEPj zMx_!_c5|Kd^DE&rr9TgnkXM9I%SJ3)m`lxN}g|8eCzPHakYkNHvR>kD7_#uh%Uye7gNqdK!CSNTbRl6oF| zK357CsM=a5Y-sbKp<}@$==BFr$4%%CQ z;_wkB3;+$&DQ0;UEZBpI{x&0s#ik`yQ%{4?bK4N5w9bmmRpr~(9nFHT{5o!P?FavO z``TAurK`?E-!fYrF{NB1;`@y ztOq4RFO!xPMy@CEE;EOtv%z@8OfE1HhSo5tp=xmKPO#jJtwHTLSSF(o*jVY_`c;pg z1|!2jQR)SdiaP5Zc#Sb{*=I_bO9i1wLzyOaL%|q|lUB+U;|!fjjM-W~7>%7KqwTpL zx+l4c7Y3eAXRe4DabZgiVLA~5;d$=%;w!G)y!b^gQr!Jm=w9IbeEZw~;6vL}@asa` z{t6(IQcVy>C6+kvUf2X?{n{PG(A!uIQfK`R2KL@|?EH$d_rL3%%Xj^^Z{D19&N;dz z*pGQ}5}uzAeBckULvGivJj3RiSib7dMbGtGYZf@ynRFaVXFYg0SH61NobZTaY$+wo zi%-M>pxA~nGKcdfl>3VRx{i7(XWb6QPnWfyBUo(fDS#$IK}5OQjQpIKH5nKkQ#))+ z(d|Z zfB19j?RPDI^&7rc@BPb7^G)f7oDE$XK>_Bo`2jQW{YEGtTERZk4P z6%hs^BgSL{f0(0McR^=9efiq2d9BIzt>?kd+kgJ~?_2)A|G2&Kg)h~YkM`mb967TN z7Opnd%31*oK%Mndsu`dhtDYWwpZlX9x_Y_lt6sVAk6!lU_J2fN zmg}#-0mF0iE3U>BAhUPf(T|cufsOQ-2_Lo`6E!1=Mgz`^CKO{^_!5$v5M2GY|M_?S zc==zy|L-oB;um^(fI8ryIC7G&{(tf(A70+_EC0`O;d$q5`Sb2nX=0?dBEI9g=GtqQpZtj*+rIR<&)Ob(?6Isx znHlPSRT42$<^ErlOw-E4MAgS?t*i0M#k^eMl)06z(NYW?x#C~Zrx2KoC0z>ywdo>; zZK;hRO@Z?rKyuGN=mw>Vfs;Jobl9sv@V6-R$sx%ndkmX3i_R<(9TVZ}e4~ycb$}PM zT#3Pha|7q*QN$Ezf=vrO(Fu(@J6Jh@kMlrKuPO3_lDGfYe(MCVF?OOO zA-m$c?!J3@+xxDL7XYnf0F_a-l;GH@$oe(sYYc6Gvox7pqZH7f{&GpI*`ueG2l~Sg zKeBzoz@|(!Px^ja;DoH=3|r0h9gRrvp)u%PxZn#k8WMo9y6|z#i`cObx`a$sAx?+b97p zp;-c4iV`v~vre6Fv6J3h8rn^89&lDT7flG%)ZCAkaM0oJXFh%9@^PK^k&; z50b=`A_Q!CbZJngAj1iXKYsdwcmLkFAmUGTITPMVwgE5JZMCTLk)z@6J{K!B3 zC(Bh|@*I8lAh=s{ac82;=b)|r@n;Xsk?0(Tw^k-~94420X*lpaCuVe_W6ZdiB$i#Y zP=J6!?89LsB=ePhScViddK#OVhQ@UgDKs})LCqH+I1NRYlbBXud}XF~;Cm3u;g=Y6 zT|YdNoeDov#hfM%43fhql09kYLmbZ3JNConKz+c&We?X(FYCuaxZHzp<^5}KylQ#c z)1JndIyNNi)8@vTZU*yN_yl0oS7EA5Ee@(xKZP=JFy@bPH}ME)V_rntkmx9{_P@-D z!BZ66m7Ki1{kPt``H>&}vE{0-{wg{6>a4*&Y{<`(!2k7&|8_a+X_w5@RmdD56Ez^irl#2ycv$69+4h zS;HVVyNiQ1P6ZY_qgSQ*WRex|M*!ht)Zegl7bJUkAL!$%f**p z63_ozfGT!m-BeM$N@nhw{^s07nq)>F&oJag1O?U4$)s6sIY%d)aQx=(d+*zP?bp3x z`P+Z%Z_3H9TL`xg8(;n3{hs$OKmC(GvAp;>_~akHc{oEc2j$Uvt_1B!8+Ovt1mqlm zso^LFHyLy;32z$ka2Hqi@FYIRfla8nB7!|5Z1@PyWab8iePL*3iZS#7o*H%7gb^M8 zsU2&=|}sVDb!@ z2IdltinLh;_O3AlmIl&i%wFw4ikj)y+;A~1__4d?g)ex4$hqL9t58QqFz>?;Ka6(( zK7mgFp6%}dV19elSn9MXc_mW?2*M3p6qiEOAD#)Az2s6G{N$Hj``9iY{-aNBKlbr| zvpEZY^2>wMC#`}WL4k8Ze!eLBV?Xgz%L`xn75I+CgP8xmhxVGAD3+;A)q91yZ}k(G zdtGAAS1^p#Ldu-zWY(dUE(1**nlK5hJQX!Pl53_U(v0Xcx~dM^+$OR3s7jVD@?C(0 zktr}#WC)7nk48H+PuAp7q~@VVdNu-x93>|U0G>xr-r6R##gs>?i?Ir%A?Mp?xXK+S zwKSMxJ`pGvy^P&rvIexil>)KQ_@$h$e%)6rm*G4A+4ke$&v5GQ!}kpSmuvoXIqlT? zkqc(#dW69Y=GZH97m}Ruq*rKd42=4r!vBzIX=@?z!{~KJbUXvAO)& z&))ZgpYeTn@yoyRtIKcy=6_ty#@CI<`~KWBRgY8ceOzF;B~DP8t9~h^=Nv*%{kau% zIPEdCF?0JQK?f;k9F!s3{00@UWP7>8m%`^Tts3Gg^h6rR>_ z-r&{$?TxqIxm@+imoI0ZeYT?S*9pLj{Z9M}@C_gNFy47M&UZ;Wr9>i9XZ|juPUe08 zw25f*AFOi3T=>;76ETE7goN)R)H@%)_x9gf-uZjKzkJzCUwTvye*OUzul^st`s(Gs z|L*^8x$3oVSnxLo^9i`^FD8sO_W#~Hs@DfN=YuX-|B&K8Y1G;f;%v?3Bb;M~*Vu}9 z49PK(BNNn77k7lh77n7oCXE9_vN19NXj2(ij$M$D zsTS6F8yaiH07l7A0Xf*+$;~|(1IIzSt9tPzBD%5$5CCJ+5)AaF4R85vZoKYO%a`UK zx%m0$#Ce1VpTVyH;Ts1dFV*Gg)?kll&<|4%1aoa;Vu|w<1(Pu4RCatA31_5}PdaJy zFz$eU{~hmL-t*q~Ew8%jt94c0&)a^c#d+3OjN|Y9|K30NUzQhr*(>k|KaWMmZR@4M zV_m7w#i6#;qNn6hqeu+rxc=MBxmme@r$W`*F+TeA2)4<; zE$#tnqPW@#fTl2GYn=NGj4KHKQAtc1nV27GNqCN6ob6$5y5JjLDRDAK29oGB(komF zJ&sgyrlS~+QZjc4en>ZOVux#Y&IZ*_6>a>TyVIY3@%D0j0x+6VO!>%mzF^&O<4wzQ z&NFZT)^7mz=~&O{p7p~)wPRBWmoOJHsWAZm7C*4DSbH?RNljchL4m8>_P_%VF5mE~FJCUY=%O$sP=h19VHUjY z{nYh0Y_ELU`H|1QtLSD*2~teHB(wUdrdfqd{^cil&quX_Do+Vbt!i!VHHIf!3JR#J1^ zRH1`2rVkIPSgY$5bsOuc4pDdr93o+wDr)Y`5nO!cbf4rXBH|UH3@z_UQU+0O_@dX< zH-2XM@-KVI1_y-}=zbjlT>NYgJ@nA>@lRgAoPEY=eg}ZbgmLtQLO05U#0f}6pIg?h z#xCbR6kw?NWL+nnc!FN&d&gVfiJ$j6xcRN$e(UCkf9MA{=bn2`9hm8P#5>l{9Qf4Y zeeeIk^1K(kdVAqHXDsKOb;k1O!9!dA-bkAV#`l~=F4{4yTk0%%N>la6G?hLNk{UxG zj2AC*X=JVzPwSp$>Nr^Q*eB@-4G|sS3&=&}W?783xuluavRAdDY<@`=7bDi{m@)e2|)8Kl=OcKd}7awIAP{eDX>B8YJWq zE0GCtpqiAOHlZE+a#g=E%ye?1LhSsAGrwGZJb0MjWLTpA2AvdhtSnV@k4fd6xTh;q7# zfFj{6*s_cyFCq4rpwv4AoZ^g}wUVAN>L|-_NcY&g`Y=ldB7bs93}9-AIhM?LG!@m- zWv9uE=rY+>y|lqRaan~P93zS*6#-k!VFVfVRPezLy>bXWcgNv8!@;rG*TD(n!*I zX8l?xgv)#k7cClpyO3XD&LRKdgtk5K;6uwFUw`Ye#WxLKa^;JcZ~cbXFR%TXA75Vb zC10}eR-ets)_z{~dknto@k2lSquZbR*?+#g_VsVtJcK_ovRw)7ZmNEkmMf2_oSxiM zoCYncBCwya;S$m8+ijZ1@(y7aH%<~xfN?r*J@T1d{Md1tZ1Om! z3U|y6J_!iUoCtz*7Mx_}N>(3NT3{lbYEBIZ$U*<4B1%DHOdQAtoc4xo%tI^Xu;gM+ zJM}G=`1-~+B%u%a*hW2>>Zs>9hT;Qny3P@{xJquWx#_m$Z+z#sEhpf2?m2&XT$%fb z_U8Wdr*FZZ09?Yi;4)2wsofIUMylJmk{_$TOw{hhX2T!HkHFER0_DwheJnO0F;y}(n1In}_ zZdA`yaDv+2areEO>#n|eIq&IbZ*bM$o_5Mf+p|tPb-D2Tb2sOleb#cp`R6T9!Ef~O zr_1nLeVdCex)6W4caDC@wAbP1;QLu0Ns~v)k7w2mK+cD`ptc5%j49OD(H6|HW#eq63jjf45dp!aM z0}o2^B~PqU9-!lN#DHGf6ayMhmm`>HLp`D=eKHaPPnsDshN6m*P5^YNNFxOzGO9eo zBXqX8Cj&r=Au5byvr|NniV=c04$PcEPh{i>_rL@X6HovOYPOD1a}d6L^xSt9wtH@f?%KknaFG z=19tn#pXDCmH!|A(2p$d`0aP{mLK2mcW{dr`*?z_8j0u7d7__ew4=rTqg%!ZwYJ2w z3Dcb+_Y;P3#mlq928AP(HZ zPMhkb+TMHN2`8k-Ax_JImg3<=?c61Z94o8eZN)-;;K7GBul%wX;rai0VmTTcehv6X zK7Rdj?pb^bFwb>fB1)BWg0m*N+YdaveD`<#_2sh5E`{pwjq8;UHm%F-Ez7V^oAsT= z4fvJgU;L&2d-=hC{Qb*IUj9|vSHJEmJ>O^e*jGwKH8$1f+5ht4oZz}DsP@0KvGFnx z0LGk+3Q2ro=nxA9Yo#ybV3Ik~)9TEHJdEV&ZVIKHMvSu4y4J{X>!OwzbD)<;xWyoX z6R4EwDpjq2I>8}*WUDU(0SLL|gFu>FqZ8Fl6`E8u13kgT11d;HAO6G!-X|R30xCAz zhK6$<|76S!FrG}IiAcZXCWYeU9FK#gCOzzg!N*b9XMVdm;f#qte7W)VyO$T@C$3J~ z=lB1WST0Gv1$gzxKaH#SaZHctV`> zwd-U@Eg;@!?hW>uh!q)HV%$83TL0t$)0%@=;1~m4dUTSoCrs|akr*FKb|yoz)Cq^q zZm_8yS52B#IOXHxidNcn#6w7KsRmc-p`{_)W}9~aK>+Q_-gPe9~pS_Z2*&5l4)A zQt~tCw|(q0%k!Rlbe{ib9?L!V+_NnA--rX}Mb2G)CYH0qV;wI59&@Y{)`4b@FGTN? zj*cv3#h&dZe5uJ>-~RUH2Y>vZZEye7^_#0+i!Tp>39s@KqpLP?Lc=G|gV5xDu6;%n z26SSuXmqRnpDKnX#Cl`>cE}wI}NgK&^5i%ANo%)N!dCTyW+@ zu}fu&qmyL}!3a3UY8faen=0B#h<^~6ov=IsP@vIHVU`C>sfC@*BlP-D9#X4bF(z@s zX(yDK=tyG+TS8T2%IPs2DZy=Lr&6gF$9d&1bdEF?CT4;;H*~GjgL$&ANfCJn$}Gwb>P1lY&HUHA;ZvYeS^Fi=&c9ZC(au4m$fz7Kx*BijcacyM##i6`n4gTC4l zv)_%!R~%!=5WCk8#(fB{;(z42>z23w&O5e0@Xvn%Z#Uk#`Ks5ve0lD(F3~#^+||UR z^2`3;j_AV;0+N;{6bL&biLX2wV4NziO7=sGIbxnOXt#1#MhoFE* zQhTp|6J+8!jFNLrQ`h!CLrA4`6)+Igu2N4!I+P~_o&ad=4P)mj#}R-DM6+)A3c8{Z zH@RY>R*>{%k!TsxhbNSBM3*>)rd&DXAnk%{$9S63AbO<|ab|T|qZ4BsS;AryQ!XF8 z`oG1CQp@YU^m*G0F1$dxT(A?%ksO%+w%c#V&j6gAS2^YB35h&nlJ(-=b+_EPee2ua zzI^9*yjgcF%%>li&d=N)v)@Z+yASNW#`NnCV;*?mf#rr9Zp8Nl{L%7TZ~L9)*Z%#l zY)`)U^5v^va5;W9?26^!!9)1^ZhUt?tBCck;yA*CHTIOOgSyrMb!>^%Nx*9)ENu%i z&SBH6L;|#4Sr2eLpG7VN+L1lt2DB$I*rbiM6aiUX5rjX{P>;1Q1vbggo_4AgnjFqv z3fXBEKo?_5yeNc+Ox%bB9Zcy-E$$UHVU*bt6$5OUKxh$mMM|198ZYKG$3%cyV_GA> zhLyUFgB*-=oG3tn7_~W&8XB0g%dFDhJgH?D&YTcoFdQ5K8|QW)_yM5X@4jbw=_|Wq59AbTAE**m6D@1aJw=@-Bmu4K6VlYR-^EYEilWCzj-slG^-i3}cdOH6vgMh}b}$9)-S*J}XUk&)j3 z1vxQnjLHKgIi)KbMv{rCGAm5jFpM*e4>wUv8*uRde98@FR8eR~W2UW*;U31Ir2&lz zu#({cm6R~*c6zeNN0s9ffX8gEz4@-~-@oE=J-6nGeSHuF{K#z0kAr2o<<`$EXP$m) zy@)nP7&TMkk72$P9~b`qpZwY7`+nf3x8Lziui5ZL%cnp6lI1*nqVGh!czGJ0Dx7-i zsd{UW-)ne0AIG1NFV4;E9HCTvTJWyv<1Tvk^5SPcb@SRcd_8`@aJ%96^y6o{+VoCwV*l(e@6acdgLxTF92%?+ za05C|y?{s~=GivpW|<;a1{?IkaOC`rE1%E1{^R0pe-Xzxeadk9K{3E)g0*M(& zXvLLI!)_Jd+e=(>-8a(T-;-n~3}%Pkl`ga>x}F&8XnJoSw2 zg=d|$v6-qi#mA80M^)9leV~3s&cWar$GY(1i6xp2)zAXp8njY zE>GRZU;lAJy?^wPN0v|Abn9}(Wlvo`8$WfOGm=RXtV&r%l+1}gbO^tUgZ}hWPg%b5 z1-NT@(Uo$*LT20WMMKua1NGkf4lK9dc{jdk_;VY4*+@Q5PClFrI4S(=z!UI6qYKVC zYkA7~=YsEw4Nnv#qt6qM<3s_zg9rKTJeoOfNW!MONbDBqN)?v9wsjd-4xL9_;wOe& z5z3^=hSIedLyZ)Bl!*^G`&#d@eKaO&rs;*i%2fk~7Rh{(GXrt5Fd|{YIZkO|7ggfy zVqCb!F=8%4v!$2sYpI2Y0T4OD5bqeJ2MJ>qsLpdIb!i_RG|UXm39=_Hv@%H{dk)zp zR}t8!VndJ&q;1r25wn!A1)()s;Db9(IE2KtP&^unBP1yq3nW)(EBvtQsLUX54YMk-*or(xzD_0lfQKDv^*<0x11yH#;k`ZG#r%MCmzFV z2UVs7Ze(W+eu5BR>+MR6G%pWw+1TsEffEJdn1eV0?3mmbmPuSwcFNw%DCp(KgsO7>)!j9=RM~NJ%6UDhi^PbTs&~#z_L7Y>w=ff8MUW42C=FtdskixW@RP!QM9OE zhthV76NSF!40i##<@c>Wdmi+9O!wZNM$MzyV-_n!Mj9P0#3HuRNVx$@ls#co<~Z#L zr20dvbNLJ?9($JA!nFUfKiQhso}wZ2C78WsrbK(O?7;>V&B~Vqg!DXu78)AVQmAn$ zGYky)uj6rGDESdIZJRKBmqRLDKn!^(v{q^Ck;%0SS+U+p92iHv&ptg~VeZNoWrYNA132 z=xg0jh5b(sQD_5YG>)thM(V~db2w@Z8Jzx=M~x#?=sTF48t0u(x7pb>sYk}d*stTM z>qk)fi6&)Ty(1p55T>0WB(05=80jM>c#_KVqWTjtx`DGUi1N6d?*IrPD|d*ZdAB%} zIU*On5`jiSrxyNW6cV?Z5D3GTzOhHB4(k9&H-^MVlOd=ykw~v#HSy3$8J5a0N(p71 zm;x(h*54vo|~q+gr&GLgRq!UdbLlZ_do66tcA)ImZs72J&LyO7dD&3Jr7i>DMG8N+e# zaNt;!(V}A>{BL*~0}{%iqJ&5Mcjx*O zrux&}L5fG7kq1Nwl6eQ<35AX^A;pQ5i-6a|8=L8{vfazSa3lF!R&k941s z&-G6O9?foX&K;}?;x7xXeoksx*{LQ>OkrJHQ@ z7YDV2z%ChQ7&^ZET38+k{MWb?FDE{N;H7T9|Gjz1bDp`JjbFQEi*hCI+lH&_alEq5 z4*}ury5$L-0bD=Jsq~dYmeGru>aSUN1@>!fmAqOY3Op(?+LYOr3q)Q_UUC zMqQ$ZlPru36#&He5vCa1bEFv7hD}rO$O_Sch+}h4nGSw*n{olt*yK<*@$u`k?mzI* z@|-K4weY?2AT>n8ecL?o#N!L^0Pq)be6LNR6-?7msXG}f+$X-5-|7vo#0sN{gjyCD zI*)6l&iZkMrY^i_lf(@lO%Zb*s?Gyca)zh2RAwtI3_6@Lgzd%?M29<4Qll=~VQ32jJFw?%zJ+vP&h8bEavIeD4?!<1+xa;pf2cMIL%@ zUYSL>R*FyJ+C!R)RYs~m-ALiKQ@;(3JXGVgf$qq6Z{!JR0`er>qpa*X<7h)U6Abm$1swdPafFPRe z$ic#i3z-IIC56r2Vs+2F8Q zPCj;f(S`9P8=*Zq+k=M=E}yyQ0Dg|^i?aS$)rjtDJTHe!h;>9Qv2P2{8uLNlsz2f3 z6VB;Rm|AgQL|Jxn<(Mky!)@pwp{17a0)!>DH1u)GjwzckbZ@u2Yaap=M-kB!&pc8E zL}JuGa*_`%X!a)u$DM<6U}yd{hJL+~Dg3%tas*ka%~!D!W&H|X)D;H;mBypr#0S39 zlg7y_^>&zSH3$$f`Cu4Xx!LhePISW5Wqjx@!A=MsBoR9KQl_>a{*J{HPjg8=JH;fV zlDJBN2%}_A1wJ18#PXbHT(mjwymLbz^_gQ|df#R6n}817d?3HrqjGhkJ>RMyWnd0+ zsWQ8{vdM=NkOj;rM;LQ1zi?hb14ACpy=R!9&YfYVXtvKbj5NiuX%59Fonj47b14r} z(8PfRYy&XuJYxxk0dp2$j@`n|G}g|&dC-$XB-|XbHzy6>=?|KhACUy*z@8nkvr$^Bwq@IM02*TZ_8Hz>Og~xZ@1Oxvse@yL1c&fru1?F1IoNfk~C? zO3Kj6ml`pVvEoszrdw`K4d(|9hS(&+7X!!5UVMaDusz+Tu49CAphVfuzGP%Utj8wY zi37kILu~n~v>@6WM}l~$e2M`ljd;MtyD>HQ6|}tuU@(E;7|$`Na6%-{7Nkw#MdTnb zamN6jXF4hDu3o7tTnx)dujIj+Gvh!eFvxQ-p)iQ6kxC_wP1%IlS*=mb%2IrM2jD^c z7{#TRJZ-^GatRp=Eu8jy%Wu)izuIOf7qVB_sJ{?+K8kudEY&2oSq(P&4~}_$pbx6z z+P!)a!&u@#uR(;Y1z7G3Nz6LINQI`#Z{!p%37I>98ctz2ezJIhA2b|Gm-{#E6Iby8 zvzI^F><37}jV(ol1%Ur!P(6lJ*{5#%pfof+*rm$*Yk=rKMuN6r!LO$Popi{NTk+F> zrvZbO2bxYZPI`ty3uIhY2J6eOlZe-XY;8_&U)OYyh#{Cfc3nn$?(+j{Zb!;b-5 z6#OWl>xU_U>O2^@J*0F9)`$faU2ClluL0(MrrtRUg8|1hus&mG6Brwp8THd5lgt`< zlUy)Qc@W6ylmjiPFoAp0bUA66-jg;0M2UU}+z4%RpQPHan!J@iTtyp8VO&Jz*LX2b zDC2`Y{wKY26H8h|8#}(=0hp5srX0wk3W0XEq@kqQ^@%`6Y>cCw0N`^k7|}826K(Sq zcFLnIga8MfFp44V2*o`7fM_m3M~-126?EJmXxQ?%?{2^IfsOwJ_-LH~6d#+1c?WQ^ zz6sc>seV_J#>yMxkVoxxQnUextY4ZeI#1|S`B7AgA|IH_n&vTYkxa#dJ+Ry+I3RJN zPIbp*UV#cjdNAjqkSi^z8aqz=P-b%Z;XP}z9>-kNVZ|cpd?eVNeTb1ycJea_ec*r~ z4aNy;h*)bhQQ0w$kzkn;mKQg;uSM-LV486;98ZjY82z~wRGth|8BkRVyr2ZPZEAK&tq zbiNRcUj}l{$tUz{Yh>))S^+ITA97G>2E1onqoGs%IZb0mW)va@*HB}II=ai=PXQh{ zMJ!+mgmEwwb&EY!3VT4L9q0%XTVZG#W=q9IWbA#LYHtrk-AHKq>|1tFSVubWb(5n@ z7jF*&9We!$%OuIac8R&&GeQJGSE&_2qgy2sjsh}+;ek-P0}ySfTd;@*_0Ww1spEsL z;W-DjefTQn91gGWtr#qenAJ2HRej62bP`%T=M{hqnMykq-1>fia8K|{Gqz88`Z;(9 zz$XAh&9Of{rxU*csBhpoFTV-nJu(^Hn3I~aD5->zZ@|oBefh(TU7#oW?Y(`& zM*ZARY>AbO4SD>am9tSN!D2C5SZY;%kPX|OQifgIM*gJ3qs2;%UBbc>01_iIn#O?{ zWWdl$b+Tj^z}yN?n3$&6%~N2;+W{mEsntY7IxAWqxrI@Q?EwO&w63Ke;GmN|b`0Z0 zEMr*n@>%{2_$3!Dr`MN&wk-Bpd;+l#9JqgT(n-7nU29c2-bgF7H%1;^M%ZsFM72O?=w z5xLDeV{83qtO=Xs#Pm3n`O1kXu1UmL((o9Z+t?rH7c(;=_dO?Py)hQD!!XBpDxAVh&pX@d+Cwh?ON39fWv6Z^WPQu+p-39Q%Y7Ohe)5 zMdsS8eqi}^SNa<8%Px6peF;c;90h@2z=4kfZ;w0nm}zfj=*T&W;+84*tUPc}d^W1A zmWtP>_~+S*eIXwpCvcDi2e(OVF|gWde})uJV;d-pOW^*QuxTNEfd+y0XB@nd>lzbW zs)yoUQ<%i6TxVFssx?TbEG+}9BeY}~An~K<(Cz6}Q3l6cXR^R~*3Wp|odCla>o}oC z{b_V9g8>rn047JBcJ{~)xHUn$HIl8_^HydGRfC3`iktGNc%h|Fw^R0mHa|)UT{gLK z8FYUe(XWa%D=d5g@WF>4#jodHq;JfnQ=Z`|?pyN1LB-^hVB*Ub#FXCq25u>|^EAj*rMM=rV^IsQkOpjIf8MoxWxGi!Q6on$Al$E zCPLBjgrQwH&pvkikrB{yz}2|a;h zj@H=VkDNlbUr~`wd2nM)w^|l=2UymNfQecsFgasD`;0-@7I?OWx6*$S419uwaNu@h zh-WacQh+*+9D$0CHqVCS9EHpY4;*1>r)b(?#4*3z_P`@s{|fNYJ^}C>fbYj00Dq7) zPV~w%bFJJ*4Xyq_##J#ZGR{w%#51ZbzI2TaTli@|*HykO;cN=?ce5Pfzk^8yeQcx1 z@x()8cuO+8<8(&>L)xZ0f#QO9%CuL=vctLLh`EEIy)cZ{660vLgS647vc%ZSi4O6gEgK3nGua84FmR!MZi%E)A-KUKfsAtR!R7pV2Vi#I?-Bn7;Q)Rt zv;GihR8VqG zrh_>AX|DQrcR$RT2jOUhWE=`;d99?Bk1i1r9F0dDVc7$lR^vIeY#;YsPkAP;x=P>i zBw&4z%XAXo)YaCM8VLWVVV9Ih=JI;lV&aEQnsF0Qshi~B-p(1Y0%s)zz|~+ zcy*#~=!;6Kh(BA$Xh`w`Sa_(@Qk4`B40%Q*L@;A@%YV{^r!8lmc}8V%Gz8xtA3S() zx$mKaxpK3lO4FIt$urW=?9&=`YR^k!Yt;`Y$Yat05T-UYWzr;{KvIAey~QCoyNn6| zT}?LdB?Sp{p{l8aDHZMRMSL_4tUb{eesZq_+CJYoXp1j0sUexFe#VW8T$2J#U}<7w zy?dK-td1KOwZ_3DmFiy^YgjW!O=z93F_V^q{2)-BaSgO%_Hpt6zBgkO3yYRxuicK5 z%;fN&XEFv8b^_5~YZ+!@oyh>fCt0YY9ao!8=uZ0-picJoUo!mXl75KLRTBQ4)9uu-rG@0WdOah!*=T$3FOE8uJxX<#{@6 z{W+ho%hmqTM+Dm(+?X6&Jr8r_gPT6Vwq7Z)G{SZgkhV4u#))UDKX?hmL-;{h>yEMg zh}33e=2o7$Vx_h%{2arhC+~G|_w^5WL{7g5R0FR=vnEy@<_0|;+ydadvZqP_`D!$9 z#NffT5*D2R!bOuLr`3k$D4-dr94#`^QA1@U*DDl9;E{O1yS-6mW}(T2Fcq1hc@=?3 zy5S8;BNl2o#Mm0@e%O+Sjx^%d2)|kX*mChj7i><&PiuW4ntlfCaohnYC#CH4m`>EF zb+D6N*1y(s=JjtiXTTND2oYFW;s9RLDYNtq|9C|}sYcdxfy9CH#V9p2W+R}99=eX+ z%hoPP#@e5~@G@{S5SHAhk3cJ3nj-z3^M7mXOpt%sdz%x6sL9x-L2Lt7}TL^pbHYzxAc735~mJ)IBTb8iH0V{QQ=q{{t zrQZI+neA{q1d~fUG-KPRh>$e1MyxWGP@sBBMmA0IPE5ZIn9ji$>um=sUIiWzEID{H zvj7ckBX%WY82`IX#hY0DD3ZgL7!8A9@`(YAZsRivAZQ%4D?sSzfd^iBU+#b4Vf+rj zgwea6g4H0uTBkJWm#py7A2)ghIA-2#=bQj^%GQx*vlG*ZtRP~ z#Qqt>j56_r&KUNRtr+{*FJ_E5!`6srz7^SE9UiDpyPukFR~#s4rwwDO3NnPWvkS3I zm22oplWj*)1_>jjTH_{7P7XaK_U*mwBik^UqX7}gdpL>{Kkontt^znt@2(>e$9oXd z!7dXIebky0Io7-i*f`Q_iZxOnIqdMjV`O5Mx##T}XVZ(GJ=5!4ibbOPZ~{2 zN8!= z*pN=-aO}Y|b6DS9m2?`cpLvvc%g8Lf$5jK)^mi@zPQXqb;F-7+?2&w%PbcP{p21ZY z`AX19Bzt!W)gBsU3VnM{CT!+Q4_cFwxDqW$6Z(;pjp)N3{bu{vfrHE0XP?#VM@RH7 zIrP|L%W=p17u;*^Mup0l9{`zDPO>Tc@w2l}g2i5a25SOKXq@R#rpOvYX;N)`_O47A z>B@b?UlVH_yhQI@4IQH_AEoQY+P3wy46BUi5hh|)Iohzp_+VYO|QpwtXVp$ASpSR%Q-FcX&p zbdmzl$hADqWHi|&V1WtcYzh1DNaRo_L3&|d;-@Y={S!b2eK07Z7js@ zxz2f9B@*T{H-;`&7IN{9f`ch{-twP+`pL_wr+i`F0%Uc37vNaD7@5_L{FtrMCrYi) z6K(T28BpfhQ}u&E^<$%_N6G2VKIFta<~~R#gR&nvt`ZD5snklC6r`4gg6^iP4hX@$ zQ=1$LCx2l`VfKTd-lr5MK+9F#&!Qk%hpQ7jYc0nOLcX>dCfIK*pQ=n-}-IPR+nM zj?FMd=1?%U4(u5xmoeF_cZ}#VID$PL6oQ-~0Cx7NI02k?s>aAXEl0284}%`3I{>D| z_}cm2y{bR6QHib0Av4V_yO(!5(Zll<-Z4*<@vthS z9JRxQl*Yu4^eEK;l%~rJPm}i=2LKk9lJ_S>oPoEdzp#ZwUJ z>8%|;)t^MI1E$sA3@!N~ibUE0y{{qxH;#QY zGVoE9$!t3f=0Hr+h>F|I_KC-z*q(jn>G&d$Mp=?mF(cpuMWBE~-T4a|&)TLagh!?S* zbp5BtI*$3kfERyhonls;FnA&Lj5-7y?G>h+BNa-IV4mjBE{sE!^kL*^vQl%#cx`5J;5_`0a;bAD-sEM?37zYM(ehhyHz!SiUC!P?FM|sP= z%NGHUJ@%MYWKIZcg#_l2LYPO+PB@u3ZxRYf%rvmmss{!+y;GH;lpLNq(rT6@@m^OeX+2h_>=lGC?GY z{uW#v=z}w)JaJ={?M6*34P}JjIGrkWTF8QzL-5A7F}4|Z!uW1sAA#k*eOLST^GR|i+y_y zAb{!AeJPKbCoIo60{P72{V99IE|SEEh;}pvcOoJbr%bgW9+)|H^Xq)&)C3i{8iP*% zq|O9K9*hMgH%~nAIb8iuJnTuX@$QSrq<9iK=9qY+rUg;H$T910={FGUIDou&WC$RO zQ_C**L#oT#s3>YyN*9q2hYc954iP;$Bw@o`M&bk6Ll8?$Ii=Blw3{ykp%az9HFCV& zSmq;CeANx-)Z2n#E!Z*@nhE29fBJ7)0u5%&T3ev9zBm%AiWEu^!JKdB6I|fIuo}jl z37p6zB0_NoF!AV2UkGLqS^Dq{8^6MMK2R8kiPk2qwqj=kmd z;mjA)o^~eNLPd$;4Lq`hhF=Gc-vZq5r@_7;4Hsyf0NT%jBa4xA*4&?~PgxqN`ZXhy zd73k0i6B1Uq20q(S=0`1Ing!qlGZYLTkeIKv@?%9v_Tr;8A(zq4%$YX0@W@pdzped zeWdLs-r=@!tc7r?Etf~tuSgZHa?z)=NL0z~Vn{e*4SNMjp;44*fxYD*3m)@McJaXu zW%;zH0QMR2OEZ$AO3n~U4i63mTy?AveT#fRmF?5B)F!-nsC&w`BV5(9^9zmDe5w!c- z-#x;xMKS!Fmym*kBRadUVg@_*%mxRgv4&pQPNf5;GxfMPdVje`Nos*fFG?b7apI6a3-RFkz~u4qH>O|VMe0i zKE{+V$4!wk4{+MBQC~QY_)rTB#KCL3Fsnlbo=}H(Z7ECxGMkUN!KgUYSCdD%hChrH z>|0p#qlc}qvSSo@sktdT1={Guo7$KsL3S{~K}MOdiIj&vO!6iy?L{PAdPDX}Lh*@C z`{(P3n_{jU_Oe-59|UqZ2RDFRO|Dz7Rg9gXlW)F(;eu|vwkMx5tZ~HI*L??Jf}n58D(_C1m)%-U84@K83#6oLa5 zX`}lY1Z^$^1EFy|^wx^au3f3`1hC;~_e}KhCmzQF#V*RMqt2|h7WrP89TwB-U(M}A z9wDJhB4j|R#k4Kd>l}FAt*O)jWFjGBz+9Y<1C^7aiDU9Kj`VXj>l7lfbT&sFz|6_Y zA&i`zrZ7k{P87{2@{6DZ6Zl0_D(j1)Wr1j^81 z;9F5T5}^EHPJSuK7q%(?+(fc1#i+?8wnQfk^;Cp1O?0Y*VR)7`;BA7^5Gm8a=X0O=_iZk38TZye4GkaY7kSMV4*~ z5*)$PYBV@wWbE{e7or;E=!%a#`si}UUH2>}op5}7=$mO}YSDSBR*N^%)SM6(larGi zwq)^u3r+SSlx3=aav32FTS6^4BLZnM`R-IyBuB>oiiRdEhYf z2@ClKr)o`?DuAS1@9d*Zd54NdJO-}Z=h((2d@46|$tNH;)rd{^(qYV5n{Z`>V1D*b8&G+KgpEozpqEryVU4 zjcsUhYaaG>G9u2T*?UO0Ej|IXd=Br!AMNI3@4xT<<(g02xSVjp3B10+?>>W1y_TD_I-;nJ2HsGF4CWxI-%rh1v^3;xkQ%thGM?atS zn?6MnKUo1)1mgj#F`eetXu`OLXzWRNveF6U3xP+yWz0`}@{`Lgx894V0Gv81l{yph zqf(0^V+&;ol(}|7LAS}a9??Fx@wA~h&6Yq8+rh%zbQK>w^bC}QVNm$k6+v1tMq*O2 zc&{l_fUX!b%Q5tW)6BlYsiNQBk{lrJiv*&#^%A)8BC*vOzUiyDha;$%pZ@XPXzF zb8k;R@%ZJThaRTdIZNKp4Sx-o?E`=KN6SC^x4*tzaNarkIB*s-D&j(j+7DCzlx5Wq zr@>M6Yo;_I@B)AsPDz6{5g1{aKsAbflw+Mth#%mPGM-{hNj09LPoZ-}{j2?7fd-PH zsa8CwyCrf^A-*0e6=IB!(DDknZD9Z*ZN)0VBRc2-OzPN4G+8N#jEMj^1cz`R9N230 z$37wt^@>x#@|R1u1xEmJQugNntPVUKb{nIr5V8|!r%E8SQjbj|vXj#*f=1SLzJimY z>nT@`Ols9q5r)conxxsMMj_~R%M(vHetF=*hwyRSqw_idU-ducm}8c^?z(&V;UE90 z?Q33g<@Par8j&gCkyUEMO^NB$Cu}MfMMlH!1R^$+i zZ2}VlMci%4!c7Um7@#r=d9rBCy{D zz#x@QWyKC_5D3N$6UBu z!`3m-?{JVa)ybBMa1XAOWoa8F1>1N^V2WIrz(y{^iQ}FJEyhHVTsW1cY#ccS9W)xK zGMVg8E-K>W8+!+1p))Qa;*^ilgd%$Zg&3RQW@fvMN*QzlfE1I>0{BlmEfO-&9P(sT z5g&$~YVSTdDwa0pL62fVG*gJ4w#3!dD97e7F4V{wG`1zQ#!=6(liQE<$t1FV?5WKO z_$sjb?z?|`=+GhY#aY?ZN3Qq5{~+!*aPTj``|b~HF23-*xcbj0NEX!d?e(&rK4yZ3 zb5YV}yU*S+FM%u@hUVfKT>FTSYQbbYdXkUH6)vpCST&8IbY7i0R!-zVJ#*<-f|wjRj*aB>!#Z>2`mbe2Twn&0DvYGC7P=AeFvo`TNkY%_OhFnv7?)D?8l)y< zV!GqVa~I1y>5eDXkNPMuD<(`20m?^lb^=JNjUv+C8&mfIt1wj0Ej$lSHe)I{bs|oH zP=OoFnN`$~h*p3!GRC*oz|nDN5`B2Z)e82(J+N3LuAZMd+HUa_U~|iDcPx9od5tZ8c9S!R7_?jUt-Za3j5S&2FA4^RP%^&h;!qBoNUf##IlZu8=G+4NYGl8 zK5S)ZF^DlA)%?dXu|prSNW(6w7)JnOBc|s-bK7A&5sEv!%2a}QoIqf?v}JF-+zD%Q zLv!&EK)V#Nk#Pbf#>W?zF75VX?`9oCSl_woZ9o$gDj5jVoHyv0JXH`gpC(bzzQ01S`f0tq-iG?kO7>CWX8?t2HEbhGTM8sh|75KDU-3W z4I0p)9K>q60Th4{kx&I5W~$%^Ur0PSufO-f<@Vd}NW|eN2f^o)c;NHOPi}t9_m_Y5 z-z_iw#_!O{<~;li`J;yp@(Vy1-sz#|{;7S$BsAv%;I`GuArW~{39MnDC1PWCYsC^; zyA+0SHy9luRE!fO+UBedj>x8AatVf>9N|4lRK-e##KDTs^+q%pX^%G8hOU{CFQXDX z9C9#X$z;2GP4+lZRQ-`}hAIwth;gfWrxi?K!&Z7zWdE*Z@s7>b*W+04atzoWAv zdjSdsB~AeJqN>zIlbQ^mk%PIHlAChMNZBPt?xY!HoBK>bAoH^q{fdu6W9%PT&O#k8 z={0qcgqR8)le8TF*Eag_pyz{)2R_sL_$NNO{KN16f#uu3?+2GR zz3llq0X&9p0L~rA_+DfP%6ubd=#?9}(2Pl)4h$X@u}lDyU zQy9;=ddH5488)e$L{^!BCX5Ey#BS#(%-lLL)dUVtRv;pVG1ev4&`f02A(+pgvS3Aa z#Ex?mT9^{(>j$+D?se~z1*v(^>xz#9{JQHty8Pt-_P;N${Y!7&zUzH| zwEd=6yl6Ry7a2eIIUFDJeo?F}BXeVF(qxW;)Iubr$UTAf6A%GWj5aN^S6kol5y}BahIeXzj2Ji9j}Cz$=UR3nMc|)BcZv zJ<&%_a^hz4F1|9;F@t8WF_#(s5zmK7f}035C^a83sx7e-F7quw6U^IG67BDPqKKcK z9bpLSM3%V_SOUg8frx9^(g)M07tk^T+B+X#3m}7E`bk)I;^X1Cy4X6-00QKLtdx@g zm-ruKf$u!XYYdq;gJxke#4iJ#y7}OTKeGK7KmV^c-~O%NvYdC`xtct}KVReL2OfOz z!R0fz-M)MT2mT+t`#sAq|EG6u&prK=<;7P%LkIn%2l0Gg6CyT{@;~xu*@ZG^+(8+h zGuzr2?qLjC8ql}{@V{RNMiN|vvn8C`{^vp!RpPX_f;)IJ6;4w8agP#9DiweX_FhRte)tpikvJdU58xDA^ZW+1bS({U#&*F4uGRgB^J-awn>E7P_Iw<<_8$JLS<`fgn zKDeF&f$`ui7@at2znqVoNWG&|8$mGm)Z^li)mIaE@Aj*T)*?@PM69BB&rC5Uir(DA z^>PW^zHNFo(JnvmM*ltiMBrck7reRu>c9W^AOHKWfBCQf3;&l^bdajmp}WHKgPc;_=msz{lEA7%Hx}UKk%1)BF?3A#497byQLnvn0}ge ze0jbG#CpVFe7YfK^dVvUS+_3a^_cx=z`N)tT|Hj2m5;RPJ>Fb!j_rFTe$9S zYcDV);#SVL_4VVIE1wSmrL;kmdNHGCkW_1;TNBlxo8-Cpqrj@V4A#Lv(e-~t{B!(l z{y+HhKTH2Ilm|}kmqJW_{P;Wm-I zN;_iYeWp%XoD}EIwO?{^28C2Hh}*&Yg(>yyivy=QGf_@mk&Bs#AE&bH5|9&Zj862{ znwfqftCb5x2hQ7_=jvYXHDO3n$;%QgX|pC{N|AxL1nYYh_aeDY%9+mf!!ws?atQhW zP(hp|K8p;OL-#}+PVmxZ7f4|sia>C4M@pZf($hgJiI)gHc^^6>gKKCxIL*g#qt`Y4=rr!V-e?7Njb^__#DO20U zFZ7sD#KKvL*lcn1!8bLD31o;y_|t9a_IZ#9zb7k4KLP(3ki2Pt0S+Y{CSwj$d*gEP zdedl4rkiJxT@W*vI`U8gDZY`Qp0{32K1UGjcKuCi9wV>Kb4>F$3l7(CspRdPZ-sMY zQZJ3{8I<~5K5@Jz<^8hX@yL4kAfcD(BRb_Bmf@Q4snzVuciNKR@xaV0;Vf^ShwzZy zz^tjeLr!&SA}un*~n#`pX7B#U}vBv|V5S?fX07^l`1=hJ5$!OF!%+ z^s0tK%$};oH-DB+1P7SJ&Ec$F3vGVx8&a`;dZ>m@rsB+5Ge5ci0gC|#{3>}I(#OnQ z%KeG#?_jNxH|yT8q)czqirmN>nXGhTK?NeYJmGrX4I?`3Sy4NpFu@Zq0%Rz=={zn*c79n+Kj(FDk5iEwJZCb_X5*Qt4@_h)fm^UEX z8&&pM86}O3kC)=)TxU%EpO-owYiojK(}le_U4XspjF{cRT}&jN`nG*kGns%^se|0S z8{Yf1)l42O1xk5+oo)ZgfW&UI{;Db+k67J(9}YcdBI2xH=?CL(U?m1VU``3sL-9C^ zuRI`TcO86~ZuxR*!7C$fN-E|9pavXQv=I%6;icpt2%c_8ya&N5I$ELht$SqpH2Mi< z+Fbrsm9NafRTjzOorBVFFmfjOHs1ByUT2>{>pn%WQnnRtP<>rNWO9%)R}%_`yoX~R<*>D2j$uPqh+q%)zu zi$VB>H;J@+`A26r^vnkVkJ!%uZgV7Q-H1cfoQJR(bl(Lx<3A@<+i@;BC+;j ziWb<^@SEt!+T{1ec`@YhHPL=oQNASLXdJGnMy#(#M_~Ba@A)gm>g}wxW1?PC z%zb%+GlL*-N3?y@Qrj@85}W8K=DYmkV^z4?qE;0G;QG*u2XoEur#Ev}5mUqyUnlXb z|M(z`rpYpVY z2XaH3U_{@1IO;CHv z;P!Cq*|@jCM*&Zz_WAhiSdz zBs{f5c?Ca9Wic>GPqK@rMLOpM(~GqpbN8Wysc7wy>d_(i@jEjsqNc{$R=^yW#te#ZI^mW@$|v7~axm|56XV*L5So-H z{_=ZqV%G;#rrxXf!MU2zrpUqOQ&=qphgAx&uFH%^>zI2KRdMt|4PNAkXAhnu&cG55 z3G7z^axvEL{F4@{P@l3BaCW<3kd!w;dnnhKn<0in2G?5`y&gnE7dvsPDwPuzIuwwn zdpT+Acy{8l@BXLn3vYd9h3rWcS*t-Pop&rurE)kKd+vYHR0b#Xg4VuWf9?E_gQ}ev z(-iZ13{f0qopSMwi}RyDjd4_(tjo6wAdkaoo@0a@zIZetIVQ*ZgzJ_%E{OCc-2%w- z)3-PD7TzX?emxkcCu;r1M0B6Tm+#JSX~6lm7&|q|#+<;Q9$Smidx6`CfV9P%KpNJw zRS?x-Ey28b`BL#F!RH}D&YY_kCh?v}oPO!QzoiH#-k&Dq@|O+{2|adV*k{%uFU!D$ z)2(;8HlmGnwHMuWls36DauJ(aLtvLLyF z_J5Yb5H;P=nxT%{jMPJYK6yp&x(-M1*Y&%vfLiyvej-8@w0GS{$Nb?WPmZ6K?MOzo z@Px&{BO~GCs?B3YEeN8Xv%Zv+RvgtzbW~z-KLPPk=lfqCIt{LC`*Hn`Pk$1Sd={Ms zCw6V*wNTAS#^KFR2%H?}mCKDS+4x>PSw@+~YbP>lFZ+FZvP^P?_gp?G)5n*3m7MSX zPYOXiAj_9lF<_qI@$(lSC()azeE>?kdH5>PY8u(-$s)|bC_cF7>iE8F0A2+SXb zzW1O7PwK5-|9Wt~9=EFUwi>T**RSQs1H7z_3g0UXT8tw(pA7~lul;RLmW1*SARV5{ zaQxVNWPVZIk6S`9i%B4kg-Sd$T7s_!O3TYb|SyC`Wm>H0@Dy_D+x zs~^S!k#IOQN>pE*OhWt-w~pXWMETiij2xgQWqf^e|1X(5TDC{oW5PKBuCE+oBIDFf zd;bIyOx_&vg5v3eMBeKX5J^Jw`!@n90kRqriAvcQ(u6ng=vCvJ_xWzUqf^-Pi9VAkle%^nkGdDaUKSB*6!w0(jd;| zftekE5hXX1=`GQ($j4S;aH zz3eZGe>m2bBP}OQuwag7{o91l+mGX2``kALV4fb8>CNQp$W&hnTHYE!g9e6IEySIA zz|G}3rlnk`QpX*W{zT$@V;>+B6ST1?+p}(^ z5-*xA+!SPD49Fa%vc)vY>$r{X1cIyD{MQWYxE3Yfx(?&^D6WL-xji$-7p1QLysw3o zV_f?Yt5pT--e})w+v`#MV>}(dND467zD!8TBr6(v^XFQt2j+)#ESbY=Hw0KcXf7Oy z)!z6r$zII-*UJo?AKAx*Q@qsw1Fbp~Cq6ita{nFT%z&?5gCQC)$Jb`2XUTy1{@2Wk z51*Bi%vnYMA6NfYrhAX6F?F}aO_h!DcUUxYE`eVZb*?dO@(Jc}&w;ESA7=Sxc;65a zo4dk|h_o(>5n>`Ds?$oKR>v(pG0TSi$ZWGXQbJQ*&9 z6E?O8ubrp#cn*@ienp%~%i!Z+Uqd>W`gMgZdGKoZMnV_!CDox!xa;3q)HBbcUWgFV z&-r^U-;ipG_6>C{4~SYc?~%~o&^!6!bG_Id@lQ_YZFX+xZ^&QP4-RQr|LNDd%>Ca?M%p*EdXz;H4<E5a{$=G)0XD%%N~Jc!w3|`f zPfqcKO#uWG8-C6gJ5N?E;t~%}Z{FLCRs=Ff^7^{^8;4)ng}NN)^00UanVf!<>Hqx0 z$wz&C`4`!j;rcLUQ#?9));)Cg^2+UET3fzN)+DyP4LIbiVYAL+0N#={ZyjIfX%2ATHd1!D1ZK!F}OtvG1HYdltDTb-u zj0-(`Bk?)uK`aY@6Vh&VUEf?dH9yd3b zY)Lq-(T39o=Fh~p6W7=#;1bd6Hod?LztV^}pN*(CSwBBMz2&}jY2Q~&m`QRojG{`t z%nDfLc1fMOrt_?&IPYXR-3OJ65k34%+4XZlRWD;CrnXaYTBFb%iILRT!Mg2A$!I|L z9@*gH;3Od&zpG15KOyJ>j${v)9;wB!@xvi5UUwjZl{x`VbhU{R!^fWjj9{uGlLqyK znFhvcHljuBk+a`N^KSd{l+wdzi@h~or#fn6AMK?hwn<&(yBLYrq(3#q-_JKY+T&NO zV>uif8-ov=YW8Ab@Y?+f2O1Md2k&bQ`K$w52kG+YVU`DCZAx)wj(NkGM_O=(wOvqI zL&)0m^H}Lp?@3{vrQm9 zqD_;mIzw#2e5TdrHAgOHdP|ZcYo4wTC)g;Z6k@tP(4@u75_vY&3~>0pK4$v@Akz?T z>{K34HNeQaQ~Nw9NTL3El-H41WAf)f^5z*|A5Oa%jQ}s7KA!h>qQEa=Ik0DSraK7_ z2NLGrBTOb$f+xI|sH`=ItFVwpWSIQ887;Ku#^io9LoFRV9-pN8rY+7z5fNz{;<|-%VqZ`{&ipo)k_~L`}{@(6` zidDcF|7ndNiu;hLcQd-kc`Vlq_QPZNo~qByh7gi! z9FQLMk=(pmDn*=$;SQ?xvuR+HlqM2s7IBn%TIgc!J!o+AfUC7oFgHxq=5_d;VYZe+RAxq%CFrA}< zJ}6SJY4M6_0zx?B@oPbE?%VIte{p*r0v{;X;A5{V=5rqqTW?0o`|0{40WN9v9$m2* z{c${d>YBigrxXTSkR;F zeFKwsj`FCTU&IG!7>{Da4~OYZ zvxu0=W#qdIM4Yr=wlPxVb&!yQVW-wqd)9wGkjkx|qjUnU+xm_MKM17T@iZ5oq3jzs zZMCUO2W<{ax1QPoH2+>llqK z^f34=M~+@|VIW7M`B-UQV`6iqLr@MfjG(EY?#yo%#}s)!$ZmW_`v3x)xcDzo$n}wY z$k9x)^O$(hr!PJF68$IhmhYQ8jVld(N2uL1y{b7W<)&|PNUtR0;!f;*?TMUxOL5c< zyqKY#gOMhg<9a+QuhY!q%6SVg&a|m{uNh-!f_SapW3H!h`h4La+4oWL)LgIkw*ZA{ z)p)s%($Ys-)gco~xw`QJln(!P=~zUejlNXAA}}xRGCWtELK$xM>TXObdC1`!BKrBW zLfG|8nW+wGVJu$9V6AgBEau`!R){_thB}^_pWfB&7kUdEPlodqm==0Sz*x|}j8cBP zc#_}U0i`ZxiOvRfGnB{bO*7^MO(>Q19csejax&M*p>`Sdl(|o5-?-LC%E_*OM5)+0 z87^LVk#?{GW;Dw+(lkY_T5jha&zsf>t6Cy`0z$^gfx_Qm5Ondeev|kB5Fn=MyAe)~ zNqo1#LH74wlLGn1pR;(KVLU4Pw&5dqLW?TZ4gKJl`0c3dgSQTGqWV~6oOw;9B;Fu6 zr;{tT6I7S}v=7KY4CSbWjeA-@?Q;$PS zxSSM9q6OBiU(STkseG0dTYqs`FC-_NWh%*ZAOVpN8}mLGcl{&{!&g~T=eC#OcxgLL zmB+`qayTk(Vy?q{Gh^#4c8p)Y53_Y$1=i;qJf-E&2LQh)va)RL>yQ8zeM5TV;{H~b`EgyH#M_$Pipsbiru2- z&xicOIbK&{<8LzU)_+VoEp;EWmUVru)p2!xds-*A2Zy)%nFTwUgcuraxYtHq6~Kig zH=Q=SZ4l&($J~{hif(W`&7YKk@n4q!CO_+Ul?S&hsdn>Cp@DpFW2#KjZ7icXFeR*9 zc&T%T7s1T`y&u*Tw1x|>#pE}osJ&?NehW@a^f!U*z~0khsk+IvJJIgTg8E4{<|Lxv>m5_7K1x{h$!`$thQ3 z1dquO2y!QJ$0IDYqiN@tizzMSP4^_ z5o=r@&YO3HL=IwefRs;nressMAA*97Of(bx{w1R zKZ*&8D?#fC^xM?w1%bW4tWAR9NiPoan{DI@EaN)!SAvm{7ZIWD&7;#igEyVln4E7! zmi7#S^=eS%a9WEP@GCkdNlz*R$V|qM+K9_*r4hPQzO$-w!JVxi#oNqSnc#P?>ZCUj zh7bID9`y~$((hfX>v&0Al-3EuPftKohg$NqQEMQ{u9r*S871ps_Xy-b&##Ah%rhdV zneb^jIr2V^(8=))+&UVKhU06`JQGRMPE+Tt=GhTITMvD^vC9C|VB&etgZldloK6by znJ^u_7_CoEB#)Bn0_8w659rm4iPNl~*I6$ibj53XC(|z?pGDn`L_H0q9@OWr1Vf|+ z%p#mnNro;o4o>mBg$0`7MLB`^i;RgRp_j#QJaZrYtw+jDEiQluwKx=g)^QKBK`kgH zPsL+}xtyj3{qI4(Yu#*ZlM6xKH-07Vdn7N2ezx`sxk4d@#DU|0<;Cle_xD>`D#ANWyWpm;y1*XQt;VIy7wDFo@@4mU)=xegi zr;a>pMCrw{5rv2QCZ5?{V{UxoJk$I2f9Drdv7SCw^;SF{TK?A!pszHB{1pxpF{&TN zeu^lyr#9l73;D4elTZNE1NL-~i_R4Bl|$WVZpy{VDRo`I6+IdfSkuJ!KB<^BmhMl( zU<78v$XPU3-^9wr?c{~vghH&f4}xVP(!Qiu0X*dmsX4WCaH6a;4s~w7(_rgC0Bl4P z94q8@g{`oLFA6d}?30LGC)k&woic@EehYBqS?Fnx%#lv;H3^95ZVqS5pF9G_`cfBT z4iQI>Knw5*l!2$l<(@L#BiE?=i~}FZ?SQ?Bv&7LVP$O?@XX>d>HclENob@Nx9=O&R z%$mCV>_XNrUO63+M3{CN#m)XRb+({IVQL`aH-@7+mUEO%NwEbpz3aT-&8Ii+war=+ zGxK==`PcPe2~xqq=-*DP0nxAlwTAKM%(Cao6mu`G|GE5fzKm^Bz}pj3_GBdAnDedu z(VvJsnPOX>uLpg&0eq0C7U2($Qpn1mlO`Ozv-~N5lTi4AxCL4#nlBMOANm(}YI>}T zGE~ug6mmArL8O-D@$+Cj%-%r7?E#$`UzEGjVAk=y?97PElxo^>PBsE(*C zdp6WwpL!n`a@u#{REd0xI+4A!M>yJhIn`tDH&qC)XtrO@ny*UuDd=1&2_K-!!z zm1eBIKA^K+sRZu=Fil4Kdf3EQuQwNoD@-p@Y2zuX5D^;Je!XdMw4&92Of8btm?@B1 zWI=`?I%?hoW@tC>{yqfW?GSx5rN)eTu5^L5_{aIr=e)wdf=>&>FO5(=J7i1$BqMV+&kRW zId=U@4N^a5PamUmzO82_=2$#jPv}(KBhGFI0c&pK%N!$;!x>S)>WK5DlL8_Nn3ey| zTFPsFU1dBL|UXu$lZ@RPJNM*L`zv}xvmFY31hv)nMGyAngGays1BX{}s&$02YdN1kV ztC#O+&QAiSrL4a*jic7RA~90T-Ww@fXU<66;LCG^($j-AIFW|$68{AqZE~zmfbiK! zTI`{(0I#i`OQ4v=lx^~xad0h31g2^{v89}f_>mXCYcbWO%R3mCE)(XOC+|7PL8AD< zLe=_}W}^CzY|{?NG}+N+oV{Rh4zBB`nd5X41&7U;pSj&*UN2w_oz0p2dITh4j%tyZ zr3{Fm^~jT++iK=WrtB3y@u|YRJ-UARwoYZbe30Ed<2#oXIN&P3?+w;dx(_za-M^we zk@@K-od+P z%T4rHw4Y_csqF%+@8ZhEgG0hZxkfH4^?;iJI>2MI(?&twzrw6!q$9udX7 z6(665q--zBKBuhVBe%xwi)H17Q#{p+XTvwgHRDOFuY7M}=s*yAI%fvYghuT%>z{og zrbCL6S`UChwI(i`aQ0>)2+IG_e;B0w;Eln;`lpp^vu~CauG^Q0{dCQJ^O;0M#|Dhr zpkkc*qAA9#{eN` z@zlEX@PmrYwN^)a^xCeY7J{kF1oPxN#GWHSyWpGc9;oG?!8mDq-1Aj@iK+B8LL}AG z#4!%9FcH7`v;J5YZ>2aet#E=NboIJ+guhb6g`EF1*d7$dKE3GbgJar*?~O=FU+L*q zL_DTj%bxb#>=NAx=9^j?veV0_g;`XMcr4~-zWqrc%GVFxDpf=^x1VCSEj5P3_5Y?p zNtyq|2FRQE`x+3U)wuxQlaS5TED@R3!`Lj_ABUR^pf;_G9|0UAa=25F`KE2c+AA?4 zW2TpI%Fp$e@Tg<^_OhhI?D`MbQXJc#Vb3NPLg#)^oSFcH@l?{*nXjUm(gW<_c)}9x zrygemnBw$N?u?gzpb54GriM{`?|)>Jg6KAOur~O3z*6&%J$yKA zj@IzgF`L1Zvit;}2HE^@t3fIo5y1kDY!GF8Be?ZK{l>kVfzCz{n|v&oXzp9QylBg1 zy0x?oKm$HnW1c{zxtUI8@%`m!_PsXPmh&^Je%WB#AE+Y|ZElP)!UY@@5Z#pmL=2A^pK| zMJE+Ytp~+Sl~R2~#x46ew?z8*KrxNne)Srfz6U_ecmgegoVt&i8+8V*M z=Br14K7b(e9gBCAhLz+pLt&2Uqn{w52~RzyXkaMA?S+^@eJEK=#UoTYsQ^lumyiSA zH2C!)X1!Ar91=tpm+!QT3&iQci8!b-I;`{bSo)37u}$23a8N`JF{I0X9Tm;VR3 Wg@8bp?walZ0000~2vS2g64D^Z5K@AGl!(MIBV7VY*AUVI zL-#lSp67j@@BQzc>pIt7XYaMw+WXAeb+7v*80cw`5i<}2001&A%_l|x02W5X0ubV3 z5=);-M@)k2q^zq90DMU$xq;we?%C`#jdTHkARYi9JQ@JF!eoVS0RVoY0Kkqd03eqO z0ML0Av>Adh1T8_H900E3l2*AUl2H;>Mtbbmx7y$pQ{qy$}i}8PCBP_oE*1-k< z;#>f@|E==^lm7c@Vy=I6{wu{P!unr}McDsG8w*f`^S|=HYMDR%pJEasFHQ5;000Ti zzY7cSz5s}^X72LL%-2j;N6yaET^M5T`O-l+z}@R#EdVG$4kNld_(IqM+}%80%LOQK z{6|9$Bmc`5;b8lZim$5zhncPco2sXe1KVR^NnueAMPfEKHjt0Kqnyzb_5ZGpxl`b9 z_Vx9W6A|(E_ZRk;5cc$O5)qS?l@$>c7ZDeKgwc5PI?%%x67b05HRpdB`9F4^IJ~y= zaq;qX@$_K(XBYC))6Z9dgX5p0|M~q_JAGXo|JRep>;LW+rh_8?N<_qjMMeI{Hl`}* zU#^_KkBbAw^FRBFVxa$M{$F|j?FS_C&-wqaG5^)m|Kwu2sz?kH`Jcz8NUVe4H3tBc z09sF!p9Ns;cMvr>nD`xZR96%Q5q~OD;!`T4%2YQr#NzH{i9HjwOH`_^W*7)*N=nuo1M6{eE4n{roD<#aLIMJ&K$_DH)%q* z4%_0rvjZG``bf3yY5pg8Hvf0|-16JSqeraOPhrm^Mnpc-Rdwu!@gd}s>|t$f z{o?ECZtQbw^Niw2a_Nz`65*l*gk`SWN@k;RSv)o}7m*nU5Zd0cKiBQ;qJHR;h=GYi zZ`S9*4Ze75A&5xRAZzo&Y_G!@P8+WetC51}{4?p>gAEc{7hYpUeRM(AqwZX=Bj8Ev zW16yh{?rMzq}J#RN!I6u6Gt1Mf{Aw6qd3sc3WQKlxf87h&aZ_+ZQG5Rm{0?rbIT`P zIV1yQF6oaapk{$j`*M!Go*s9uk5-(T-Z@pM9FTCkk;&4Ya#|ea=Bg2T!-UoQ>2wcB zmZU8qS%G|Cg1%WsXEK&cF7&1 zOpnvy`*}=pL0w(hmWV`Y`RyuxD1Bj2Xv>;6Mx{x7<4R7z^2yL9&Dp6*;bq5GSY_P% z3l+3LcFxp`yo4_vUPai21$A^TixX~f`DJ;@UyXIWD5NL7wLa+z zCjR-tCBCAz8p5V_U|jiqyvowy{aLW$tN7Eo_8f(bYkuViJ-}oVA=`H z3sUL}K6P!76P?fwACT(o_LLD_lr?C@&HbC?GPmqyE9X^|jbG$BfTde9aVR(aZL!chP}FIDgOQaxpT3av;H#2LN9IuRJW)&@s)Dv{V?$ z*XR@Qc8&ejB*U{PZd!CAjLuEuuCl z=W-BGcqOWPt?{`p$YNRU{9cI^E?OZIXeGNv?lK3PCP8YuUV%448gVrP$DzuO z?eRsO-&%aNcAK;L%0llJva@hMLTX#z@H2DDtLQlsu%EQ(`6Ca3$$ztt3;~ZjUET3j z=<~^@F1;6$gJ>HB!1rOx$@S_7NbschUGQnA4(nfCEtE-lO7#1)YOvh#Cr$}%tV&RL zNS>l)q5)CSsHDcXdlJ%c&nBmqi;d%~*aJuef8?=DWSV{UnnrGte#MKQ@()_XR&+(+#9E2K-i?y_Vk8U6{ z2r7h?sV-C~3tC8T1prqCj62aAo2Yj@IgfBKYIH)O7&Q}up7~32xgQ}6O$~lgg>me) z;v0fCp)BMsKC|L*np$Z0>Sh_gjh{jLhyOJe`2TK<0s^2tQhG|$FvdwnkQ8@}B3wZq zqjA?JgDqx)A`LEuh3NI*IW>n% zUy3?8z7gc5_^PI$V=L3uT1_S!lRe|=f&y(015c@$L=}Y!IKU+HO)#n!#oL4H4XeC+@I)2YF!@Nl9fn@UF&v9 zH=jHUasz<2Lt`76=f@g$G{1N5!(?Bp`y8^J9$%9m8c0OD1%)S#pi=oiwYX0B9;$lu z|I~?^?H$fLqZ}H<;V2^$_Uo=vghx%o@}3I4QVQchs+fzrEz-%C;1^xvOXuEh0G>J# ztIHBr5>>k+%vmnW*LmR9D6(l*WAvVtpCECBmZk@^F;7FECFG z`$rl4;^SC>tf0Wv-fUy~Y@<`3WG3B3$n_bw{2LJL;ZGh(r_lxb`@37LRP!IhqJnUl zrm0jp-OgKg0YhX>5>|g*v7cV(lCP%wT&hp@u1i2x%8U-ucteU9P_*^1v8z0w(QzcH z^b!)s{4m4NDD%zcC^JhdH}vnfO>W)~zDC%i5jX^^IskxI6@mI%dA`R}DK|4#(t$m1 z%MtQknmOEZpZf|X7bHN=RY0Oxchc_pOHSh6uWuOd;DkQZT*Unc>|a1*^CLw zUq_VTHHX5yt7b{byff@cDWWNKbM(W&pOO5G1L&swK-bNXv>iR>X%XEOJA(|i+S-)= z^64w=OsqlTfyRKLwFUMtVd?c~z2ma{C_?u2AMVW${?4B83SQ=lAf4sB!0_!=H``aAT}- zgIV)1xsxypoOceIG_3CAY(M9)D!2`+A|L*E)G9WjqE(X8{6kqs`fqOohazWZ@)ZG+ zu&W|Q+3CY6S`=F(dGc~nAFL2~Ib@S2WD{y1%_;)UUW!y7iS(J%14Gn3jjbJlQbDEt zElV(}L4|hDGok|0tMTKbkM9(g&oN2YknzwGR>rP*^#Ac zBu{~Nma%-54}5PRbT>ktnAEUOvFr1Ud?v~}lhoKLIhW{Z-@-#)>cmL-{+uUpN(Mp)VB!T?9(y5<6U{Yu8)mJ@ggt zFUPnAO<6MB=35kgx%!7Uix>GHvT3JhN)3hg(qpzVqPkpIYPqt=%%F#{Y;NWIOC9n8 zqU!7dq2URfo|0I-x#r5VVt`?Q0etbhfAVY6_q;HukLC9|%WvYc`%RPSB*Lw1DeXXF z@~uN4MGSAJe;qxG`X4iL-0xm9#N~&LsvQUI$F=KU!>+#~CSDrm675kq>=8N424bBt z@l6+!N4Lb8N6|Al0<363c!rqv;K@I((;5fhs{Klkv2e* zCYB$x>ne2+AnAWL>lD}L#rwlWG4XE}qXQC96uq8@F5~pJRv7vyc4c9;8BNyd?)~+C z&b5m=hb@j-3Ji=0@#axp6eAu6G%?ldDv@J99s&d`0>j0rrPXYKUWOj@IGN0N%3_8O zGY88zA>NeXT24loLK%U_Ho8vXju2)&Q`w`0DBnN4v*IsTY5v(C7RN-}W!n8C_ zTyG4VO=oag<-c9+RNKuKP<~{}CfH+T`y)hGSwT;*hU53)Z><<$QU}{WQ)*1d&=6pZ zJvD4(KpSwdw76DqnF0PL7x=r{`oV(~mk#=bU+?T6X!RncR%Axyy+^=$?JohGEn!`s z@9BH01W(I{30R?gmn#HdN-2iaM14SihVoMdN^l zyXLnAhrqw}t=7v88{3-Bvkj%`f^|1uK7YSC#TjNmgZ0Lohjf&mmW?y1t;MCg45q52 z$EIQ(4ywPHO4DzHqC;ko86IHyS8hXedUT^YEMYfa)~ju9hXQW=2hw{Wmkko5in;p+ z(o)j=ECr6(@P*1h`dC{v4a_EZQzXwmAou4oM}~Ssz8k1u22OU=K#3YC6_x|KT>s-; ze}4n3)3H8&KOLRn{}wquhc~d=LlV_6Oqv+=MbnAI$k{p2AzL}TC^H92Pk4BtJ2gJq z5xh^!t{&G=3HvRmC4+sl@41`_-PWGw(qQ)UmBe-n7|oZK779GWV>v8@KbcMmqbVlH zFe=kCu{F7N27F?B9$~`ncV698MeO!rPPb#0&7wWP(4eqmKw``-`SzpLtbPC2TpkUkSIXaEYQ5b8i-YX-=yVWKu4S3W|Z^D zqJ^jHq9U%-!A`1Tr!%H>=o>PTjU#d}qo!ZL4`4njbG*Ci%IY&t;#)E6>`{Q8Nz zSwh%Nm&Va++s(?bcicgrj9Y|1PCD+SV6F6tb2o9gVgJ=C4B8o3PZX>r#7Aw5Hkv;? z!*9{x?5@FofmqunY=3Dqyr!B>yt*6xRJS;~7x1fH;_)h5jn1qr6d9D=EXygI+G+s6 zwXXYKLR;|JrhX+pd;Ct7^~wOf+jX~Vi1kp!nh658|JWxcJ`_)x)1XD9mBBeyLGt`^ za45>S(DoQ=d$BR{(Cs8gSyE=|{t#Y%{;=FFTQpVi${Br>8V0)D);~x*!1sDGlP!|z zCc%{DkI^-L;Jl z>Pf_`9v6ercHiDUe59EIzPs>d+7d5?14OU1X5q)=G6(%* zN-o{}`O4)PJU_omBF!`>i|*%)LhrHKOh-kD4`^LJU@aHv>FYxs8#Cu&nYHO&YB~Ku z;>LTj=DJ$Z)R$X^TW*ZdHm8bzVIxFDlIt-|OZ?`({kJ)iBvMw3~ zW!ezOjFAFxkagrKa!+TgDEyvN(8%!nbN#XR)h@zM*?XJ>Qh&Ps zxL@Z5GcUEs3wA`42d;? z8X>bdfjdEo zDDCiPi?2`qSiT;~NvF{Vi3J|L)hFV-8#nZl{mT&KVY#)fsxDQ=zQ7l)9!ekC1_bbf z@xx)Hm<70z|7HYQEI1!n@!tTazGS|T8@psLTIU)2TOG^Tt^F=M%%PXy?P$5j47agu zVlr6%m}+y~n;1b!-k!&QcUA_s7BI3Am~kp0Tpp%}^nHlpfp9tDMxh9SjgaqHSbwwq_deizEpmiQ-i$IOR$Yiw}Ws4e3g~L^a3vif(|BI0Wb18Zr6a z6eME}({*7&doM(uDqf9K@KzLFO|0vB1{uptw8;>&CyH=J8bk`J8nhX4l4@GGYuV+z zYYNm$rd|MPQ3WN-x5^9pm<_2yPK38r;l{BP<6lgFJ<+aRXJ_lHZCB2nle3`(PElF<(SQ_VAl=LTxj3Zu6C2{V z*iPD%r*(wdb?$2tk8HQWgGhj=M7)Fyr+9jps|z49g5ra8`b~j>%N&Br3KuU%&GwRA zNk?$a7hKS@+%zz{-E}$ARbUykZGnux?_GBgk>_k5I8zBneaR(a<$PB_+g-u0?-FSk zMBl~i@g3ysKX@)0eY``E-0q7i2@wB8jMNAqWogfH)sM4y7f^v5X}bijS4UKi39V1Q0F`>paDe|F2--;6hiP!c<_9zFbChVy}| zKB7I(zZyWzKbE->`!0LRY1gm0=(J=4u%3S6&%KAjp zD!C?+C0Y)smkTz~RdzP8gu3&5`F@X?qhd%Nr;?W5au1l8TG9Jo=*w=b6Asb--f`(v zmv%nPs9zJ*32rZ;Iy-7VBkn~$h*1bZC6uRLi(dZH*9%04$U(}6Ogo_yJtW<4d08|Z z(s?TC$3=0lnSud7*F%WWTh$Ij+0pV8`pMp-L_#l`WX?Wp?bK7^EBTt}Er#?_pTTy; za4O{|KmDS>4|YunKWs$uORO?v34R5hE}zy8tyPW@J(ePzEkL)v-fVy>nHejW3ls8# z3uxKY%g0%dl#D|iu^j?YfjVIj+<=7mHN@eZBlhc(w7ZKwaN5m=P3U6=tZX76)*!+; zsVzTSB0SXZJuNfJD7S&Ko-;*;Bbq$s@$KuQ9}J$GM{njFaylLnPDNG@FZdvXV5}+4 z{DWh!L*@HlntGiAk*!-LPK^bP&`HxZneWve6m%U`KBqcpOO4{hN#oD6P-2iz|=CW{dV6omCi>qp2s-Ousa5Ps5+QPeQ9U` zs?iQsIaPtZ{}O^8s7TijMbiw}-2V3S=7GER3T=A5cu0A6t98BemjUNz6w6Cm6~b1P ze0^()Iq>yfqqi?d>e_cG!>)r!usPbI>(t^%iQ@3afVkj>Ove!s&0RutS{+1Jx-DmbHMlfzr#HSQNDrzpR}j zp-&KF)EseSCaov-VWrrdY!Y4e^LCHz_O z%IT{gxe(#a*2C|hrObJpaPKHzUrFMm!`0Wo7)f>Msp}l;AQzBb=#;rrjG>+3@R~RE zQ?{Nlnm7DNw)u(O2J{@;27D8q5&!^;;$N8C&FltcmBp%4+QIQc z?r)-(VNb8u(VuIi+>z^1hwsvgY7tdHC?9~F$txj4A2h~ppr&G-DJ=H^jkg(s>OT)u z)CuJUQs@H%<_1U!W1L!|$8^Fa&JVHhqV#?C2Qetle>Lu>2#B~qVZN4e(#~vmC=XQt zpE%5GGVQ}r1>YT|mKd&lz}mGT51q}!9zS;Y#lHXy*E+$Md#iMqK8lFZh+b=Fq*1Kx zR$un+W2W=m*!V(?J-QX^rFp~+{84uEk$*9+s$>;yvM6mgL>(*ttNHtpSXpbMFv4U1QDIEHQKF`JNMbfZgT1TAv6_KJ8g;?dHruvdR!zDwU>YRP5Sb-n zHjM`~F@VCRZZjprfxfSH>=2tmrqT@3K^J z=K~)H%QR;xLVo?R3L7!fTq7XehsTlU#0y)55qoG=HY97iyP^R*=i*rqv?Y)n_xWea<8%Mht8dSmo?vQ>{+wf2F$K%zJhz zFnzqNUccJC*IyaiJDfc-8Nh6d?}5pK4@{wKfw#Lh(&e^$88bWuQ>b*BosVe3YdND9 zCcky3!)-N|A9*3;;1`kgbjn>QvrmTpNl{m$=iH(zaepbuIYarD=6;;I$#lP16qSL~ z$~RX7OS)un^00nFO7~8Z7&gGDXd1+eFk@Qh@|%OevEUNr6+_AosVi&&K*ECZtEg9D zX(}fT(80q&*o2g8ih+be`Lbc{NWOF&KYC;UcDD`V`MMOOy@Evfytz)S1Rsw)fBW{$w?6a>wl}MEq8FVX}UsE&C6hs-$QWYBO$#PpV zTx#C5KO_jYK5v`u5iIxryC5s&Gt-+L)?VhLV>`kBs%tfKT4e60+EG-JGu($DSZy2@t)k2)n9S_YXU_JKAxlEuiqV)$y*$!{8?mN#XA=#>tmbqG8phbt%13 zhVONyu9EKH<_de;3F?9Tk2?MNIKbU$74@f{)vGvfS4s3BgHQ0i5O32C2H={~Ef3xQ%mE;6iL<}=YxP4FUG{b)Htx4Hzzm+dDDoh=B|-46hB}C; z&x*+O0k-p>-`&$rW{?Y>CH5zY#!iSmvK0x&Rlhm;zZZt+&9FPV0WxVz)(6oVc6{I= z0e&Ik7QbBy_WOQYnKLff#gD#>hQO!MjPxWP_`yKVvokq+tpt^rlVT@AZ6*^8aon&$5 zJ|}`pNT8{uI-2R|p zeD-AJ(kbdlL28s%6almrHo~IV4Ah>L;pZFd!0hN+?bq0{(N%)##B0f8$H6Sy%)xtK zsB#u>{sAW5E`57ZK`+^gs^wIp#2gW&2f^E(1@ zoOeY(ma4X4Vwdh!%&Er#En~V03*x~8+&MqCnN=c0SGe2=xm3FQBU90wLeY5hD(xyC zmoL;#8n-3$B$H2~U2HBWcvqk0>-#K+-G>Z>U5c=3v0xh0x@6N8s%oHUeWJYZ!e;t$ z(3?%H*bEv!l7~Wx=bVVH`?KXx{{mwSzE|yC`fli%0d#Pb0kE~*x7Le+R7FAF7uS{R zYteGJMFV%EF?7~IC%ltKy*O(~h(#@xz0e&i*!c#D+h&kbXz6 zPk71x=nPyc=1CMB>NFMggcWk0Yq4fB+^4~m? zV)~9CSq|Y{y(|&m{`p02jx;)iRI%so!vT~RShGx$8p}$apHG7L&L;md zA6`|Re?qGC!L$$mY3sJATmdUN3?%nKl<_(B@VD0#Br2l30{2;_){oC(7BfmGqN40* z57hw>Hhr+W96NmQZ9MZ`WhgWJMT0^L1qq*sZs3Ipy4gEUB|pNBwk6d|yr*lwWggKV zW^!Xh)o$wqoe~PLO+Dp%3%juEjY@mGPtqMf-5y5)@^-{0p%ad8H)ZT?dor%1tt=Qf zJD0*Nzm~T6s}&Ia1v2G$xB|)KgNZzHpFeX$W9AfpLt)`>>p2M1sOND~yAR88yhRX6 zy#oNnX%-&e9$!$z>Ed%EPky$Wa$xhPl0bUVpeaTFMnu@d> z;UJbAN!B<|Al4%+dnLm=%o_9PvR|W?SYPK)Ut0dSzC&V5#pYxz)o3;2DI0TCvu!t` zRk=SW3w+UiFKxMaRx3&);{oOA-owLbdA*quK>f}iT>JfRTjk9H9t5A8**A8)SKL7_ z5C@*1AS6w$8ou$>&*BsO;}`|&8hmF>@i-4m=z3>E;pso}wv@t!8bdwMm5wuTJ#oyA z_MU0KtXkIqUl|(Q2_l>PAv$))pJ$3`d%i^tx=g3e_~YXiKCkB=c#LXYzP|+%>hq0~ zq3!d-fbi4ZXuiNdWYi8|?kh*?P+PuM0BZokG-_o_9g z=~;{OAg>j~I8^@Oh|bF8CQQ2%a|DX>JGiIQP)xb@5i}Cb;n=(h;_DPxzczMR;)Ugr zf4{Cd2(<7%{-euc4;rQitbAKql#+8VA4uo0l1h%677#t82Tb`HaE8-njj9HG>9@Qc zCJlGFy}68wb7Ap6Wll7Geay`we3&bSjOAOYtlL@8a(?x@F{F|-HoVhrf0(zmw(IWd zaAx;>&2iaSU*W-V_<$UY$J!Bs&wTJJhm?|(ynqV+MYexUqoajXQFL8m4T6)I$0b2v zPqvm;apULGb)n#eQxr*nLb?gbkh9yXhnxIyyGO(<9FOuhTA}QhuMt7_ABeu5{rpmc zB}O|8G*j`V&Telpu$B%8Y>Le)m(q-&a*k%{T=bnBIWk=SWYQPIFFxqGYt?P!#LDuV zF>&zGq%;rstO-XB%AMPUqbz(;%eg;U%+tv+JjqE5Lq2Wg;G~prMOX0R1Ilr&e~q%& z@Z^Gw-phN8%Z8==Ug`?-ya4uj#*!8K_eyLTy&0k1Qd$;{=FzWwJ5eqAkxuecrYT;w zltcqWiRv%w&B}86^3BLHq3hDx8a_}0+d`tk2JHBJBha+0T^asH96-u+a^G!x;!3@c|3qC+! za9!(aVn9=lzSEkoc#0^L$`h`kWl*vt|190+e6(Jzv^8ZNz#X4gY?X9%jmU&;a5Z90 z-6Y)!Q8|M#;oG(T>P8ZGMqQk6XdwH$m4sQsqVAcKtTCT){yodEyJJ{tUl7$R(kE+1 zjkijuht;q%Rh*SbZ=fEC(`IZoBfK6*>ll!m{#$jj6 z{L*!^>Bl$;yD2HHOvaa~)-mImqTO@<30|z-pC4<`)p~@iHfw6*vmG1Z_%_gvl}M5j zgIAevu^HT<*W=8s?G2=??DhP14|~@x>vzn1527oeP|FtbS#ezbHZQmHxij653pLkY zJr>_DV0MZqldU-9)>vDZv1Gws-f%&;S_P^g%uJ&6=8$23hOwgSO;b)gj@|CYJNl%! z,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 T|0R&U00000NkvXXu0mjf)KbQX literal 0 HcmV?d00001 diff --git a/ui/test/assets/bitwarden.png b/ui/test/assets/bitwarden.png new file mode 100644 index 0000000000000000000000000000000000000000..04d8a90525b91a0f14b2beb0795b444c72310ad4 GIT binary patch literal 12435 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 literal 0 HcmV?d00001 diff --git a/ui/test/assets/btc-rpc-proxy.png b/ui/test/assets/btc-rpc-proxy.png new file mode 100644 index 0000000000000000000000000000000000000000..78e57d65e11087fb63419cdb8ae4ef4bf902fa9f GIT binary patch literal 58548 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 literal 0 HcmV?d00001 diff --git a/ui/test/assets/c-lightning.png b/ui/test/assets/c-lightning.png new file mode 100644 index 0000000000000000000000000000000000000000..9b53c1a5cc120f02ca5577ca002f1ad6a462b71d GIT binary patch literal 52891 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%0AF<_^d!&f z<<)2ghYP?D4iZg|1f&ke?o9{15!<=btI|b?N+;YSMNE2`onyYUD-Zm+JKAOZbxL9c zqxtgV5(H<5)m>V7hBPm9Q}(f z&`@22^fkQvpYo3Em+ZyyB)_26PgWac0b641>@CcENb0hXRV)~%N1Lfd71(9Bh-W$5 z)l@gwkG$2wxd)1pt0kOlYNZbXB_5!nBY<6)AA9fxs<4xHpCdYQv?@4kSw|O)odwmbb|(xIjt84os)icZ`^yLO z*I=iyGX$~y+!!CTk#I=ouZAw?8nd0v%4aD8lUGyQ+PbYm-lbbNacRm8_i zV#jPTHO0sF`Y zEFwNFjb2=2dAYv8z`Gz1zWAwX;**x`UWd2$R6s+zR%znp1W4{-`ZBVQ%3fFg!x;!K zgSP`jODGwg0ue146kyh7!&+k`Vb504ar?tb1mW;s(|odQV!Fz)Lhv5*ijpT`$rj>G zt`mDD4{hk+M|oCsT7#oN#{xtx3^v3G_85ls;PS*}&83#lx>cOZZX;Dc-|PFx6&}eZ zYGt*vS&v>1l%K5ddh<`$TU4GEquak7TrkkL)Q=RF zG1?IT*R)ca$_EbMC5UAKK)U=BA0u~XB0;i3s-SvJE^T4E zk3f*?e!azLhh;&-U+(#1T&#(MP7C#7oBhsGv9(pmLX`bFD@oliexepiOR#pIyDYHx9LA-N;m#E!hr%0lsJ9Kv_g``I4 zBNx~s13?c&2G^@ZYsN$X@u1H-W@-KuX~f{zHR`UGyh`t6s?5Msp9r_8I3c%PXxHIi z(Z2DAK^~YQ0c2-NvV92Zi~fFk=emU6tjWY}_uHrU*)4>ZD?K<5)ur-^J~%E8MayL> znF_waRTPlCzgSl}LKkn*B8nQio!t<1Z3HhF-u~UB$?lm3_OvEao@(>1KS7aI4^kHsCM>p&Aur$lf|n%A|fgOh1mjRDqh0@XwDH3g_wFBv}&+O9?agNn7+uD^s7gre$i@Ui0BkVP|^3=n%RlVSglrHlIU*hEk@be-rqre>Xxa6ew)%J$Y;YlzP zT%cmNYRZ`@=1zQ9lUF%Lu_x#mq}4)^o-H~^J`D-_%(Gz+Mzw;j<>g(TIsWzHcUzGB zoro`GW3zlDz3UBl{??V|W0-=?1_BVFl=FNy^5WktqwCV{=mL0@BV_BI z!F!=+mmP;1*^m7#b^Dk}DxTcg%an#um5X2-Y(B!Up242KP>!Ih14c1ZAs;5-6SAe# z6!z1HidvA*noq;td_!DF2Q_3FSWPoziN}qCx|^v0{uEP)TCegk!OKI?3~I~@G!6*UhoH4GrN5oF=rH?s9w z2t%#6G&uRg6hyC=8h)@s*f9X3meNzj^`ywo*T!>X@ph$#B*(npdVg8z3G^P={X_F9 z-}^Fv5Cy)Gaxv6vPjCi2YInorE>zV88^*%pNb3Xdmskf=mCq^HS+`UNuk2=Qi*a2u zu|_rVWNW!~*C%fL){Q&}Xvl^FW*CRp#KMIMSD%u(+k_O6;%R1<#c9V`lR^r(bnpt>ydz~2h< zYQwb^xqgOLCiVCG*zxs$qFjWgOgc*7?UY8OV7~U zF{%Y|)eq;@(XDH{jZSDxPgoj3b2+jwlNf#Rm(L1pZ}U_jZ=+^XP5~bg2w|wS1qBh5{(msf$w`#W-_nc z5(zusr_ab>jZJbAmNx{>sWygp_eGa`O!_ADjD=IzH7kVPeO}0-!eu$H`-4Mo{Zgp2$pS7y6>%0lBk$L~2W> zE@jhUq!bQ$5gsOHqWL}w6Iu)-{7XXf| z6&8j+n%3}>?6z2b8nT*{3So)Y^RlNnQl__l{7S>Log5=)*B;@Kt5HkTIE<;c-sBjW z_lf3sy_o%nahTU~>UGGw#LaW#Iea_zmjfZhCd}f`YDu|CV#j0{?#`P))iN`uuDK;02CvTN%Z?l z4?pN8fWIlyVdt4-vL6Y-c}>NO$PstN-Ib7-)jaY)(or%knX9RIw>IY4%YX6h4$3>2 zf33}vL*W$|S88+lKWflV6hN<5>O)mN4SukJ)s;Qy|0Ya-%I>0@xTp5zO{4R=i|ty( zWIJOz*uU&7`j@WhRs-tknuAlg6t5d)n_Ld&#rcezkv8w?)vjs)QrcSk-asB$D}F9P1Od}`57Dc)Lhn$mOlIjh!x_kwC|h)D>vy&^y`C7|NN>Eb7*a{&F@;M-)l>S zPxQtjEHr(L9Nbr8O!>jeyx8<%BJr7L|7?luqkH8KW09I8F~iIDNPLvQ!v+?f2-#8d zOO&sJ;P&NDDyJrGI@1HeiBh!Nv&H}R3(67Fr!>;>)F{uBh zbH{6+8cg^~_;Sa?quRyxa5Oe=+d^UJaz=BJ`13^7Y!(z<)^QPM7R_pV4hb@gNI3mk zIG6+QHVL?*$Ub}NT}z+5D5*@bYAxP~Ssf>}I}h#>q5VUKK#lEfh7eL~Yi7*yng)ZT z@Ok*Bu;A6H0;=?LY)KR^jJrsWB1bsB4$L= zTn@f*;)`AZg!9EeAGuDcCq_B5BIOxfj5P!V%5oQv%KPy7@f$@xBO3&!{)>WJ#JUZZ zab0$$e7s~jV@<#~EbQF(09J9d2%)*!aJXix^Z{uPunL?HF8JEnp{=!>$Fil}4jhh% zk~V9vKCbAgWrllvacep}wD}4?JyT<(McKANo**1H$LNC`4>am!#Ob;MQUs>#@ha`g zJK?$8Cck_uI%dgWzsq!Nd6Acb9B;ojtlA9qxt;pcsv(xL-XB8nc!d=Y7SfB@$^rev z*BwR$i}-Vo0I}@~1Yu zNG7QS9mFhgt{crYZsaYH*L64_KCv63uqz-nkw3)NE@>TXbIKZm!XaOY*y~yj-~7w) z$t`fdvvak9gx$1d^s$FS+A|ZqT*g&QkbJH$l%(?TP^5OirnE!t`KB)Dj$iR>E_TrC zkKf0*ywh|&n4w3s-(my&GVy85@Il#H?}N0Z%>&iJZu^9D@2*ABVU(#qRWxDbhQQ!x zdyBSgg$F1L750NyVVXi@i!`M!t0?c=y>A5F0$(9 zF|NyiB3NHmy`)_d zLJ^kzxk+E8tEaOe5&^_a3l%{p6sQ^`BN-H|jry1@6_MmJfPq)&*yI?d_5^k5JrQ;M zB2JfMzy4xsG?4L8brh%`M`cHgow6;HY(vRo*Z)Oob8#XXi z({W&cZi8H@6(-#R1W@|aNOLw6z58KbVgNzYg(t@PWJ~u6J+e-#g?cMpA0IbeMLo-5 z&tSo3(^r3{o^v@PuzYs8Yj;JPO*_c`_19|2bvIpP*uL3qWf#Ts=U*4;tH3JU8(LjJ zPgsk;nMQnR->P9A6C__;dF50gXzsCaxq^kBZ*i*@y{Ukgt7wvEv><$P4M?`g?ZU^c zI`#Q(gvA*Mqd67IE7%b2IFSnd(|e(`fxhF z1x@Z@G)qcfG>;fvV1Xnbj8Ua(?T9SD&Pza}c1P6vs&X4h$9WNgj)!A=l#^T2`<|qI zGYcTC6kU#uyst_v@WQdYsXD8JX2et!Zm_o~xD)ZJ&hkK>KYRj3eQzL9;u<|d9agr< zuWLWRdFfU9`c*%6-JB7(jf~We|I8T35WG>^%qt;pNGna;E6MtJNo6bPS?x+WQ=@A^I0g~9)~aM*9{d(h%##Mc`KMgq^+F9YkmmtTZNJfBeI!%xLwoSI zG*=g(TEyR@H1xtM9X1oH>Mh z`e^zy7+N@xqJ1H6X^U=hbi!<3ByhooyU7ENqXwf6RWgp#=&Qd|K%NdhF{9qUW_!U; zm1!((4_a*VP+8Z>O{XNfEN8;v*>WSt)g*)IK>5d0oNkEzzbN+m{2dRjp&k9&bwZIN08cFQw z@k7nzKzX1|g{n`@INQVA_>6yQ{wT$esbVATERE2Q7+e%71sa`AOrh<1b$I=3rn~OQ z+4A)5>0vv$=R>GKM`drv4}i%FGeQp)h_YHb?;iDb>nHVzNvR6yCuT~q;GuUKc$5xx zVZ}{9Aw*LoIIX+kgBq$F;k^&TkauD?R_5Kv4RQe*ylk+Z8YAb&$@``q0ideU#sl)r zu^Z;haUu?Wdx#J&Z?0~&t}A!1>>0P-;o{BphIZ!%Z{!-o3sZdqlYI569W{<(E#lse zRt!|aZnca)N-uQqiA0G`BF?^ds*3*dJ@KCE#>&~}Y5Yz5?!^d*RiVB(qt~$Eh?JxQ z)ArrFzjM`1tS^w@wCLOIV*|hwpHzbP7Q~DK*R2&v-_q4isbgBt#W^Cb@e7ZP9G=%8 zI`Wx7^@A;7s)S0FE@{OXG)dc+i^+n@!`9LU1H4n;CcX@#MHa?zTs9E=wIhYd754L& z2$@6WOwdtHK@mKvPu54lRq3ND5m~;tOyoJvD{DS^;xZRWy)kPg$ww$EOSk^S+Q0<1 z!(_Dj`+)m8w3Y#+!^QRbP_s1XJVpZhV)VVlIZ!`h)ML*#E0+&m#pl8Kjo;Qa?JR%R znguB5IeWl(Dh0TwA)vN#VrJjmF9vZ3*E&l^c`3gTD!54YILb=ZLrmsMxlU161G-^* z`EZV0!XY6aEEKv!(Y!?dzwUngeR1@PEK6&Do^#HV`girKL{K4f-Gr6*+Y=L*M zUGc#LgW$W4>fOPp-yOYGw{=TA2P!(~emIZB-lXZ`<5G?e3a1SUl!sSbjqL~@J?>l3 zqF0#FP!y@HN(i3lQ9v&y*GsLSubQ;lPO>#lvVW=p;{(cVmh-L8{$epXGj-|sj)g*k zBGxxHPiF!511kGs9%k5(t|xtunRy+B&rve~nRH+`yq`mU3bV@eU+R|6)J_8;)Z3l1Y7p1lA&**UDmGk}WT zTEb0|j#|@Z`-GQ+3V!7C!LRJBcGj(h`p25y6Rwt7HpqgWg)V>iS@bM{vjf`A_->sw zpV=DxV;(+fMBNM6(46WJCRx(PxyP<-`|3v(yW2_82MwAI@Wr5 z!?eSlZwYz%piFdLKXUp=nP_ux)mJOr|3A2+NaCn(Bn8^zM%VO}c0K#jXalK*p3cax zqV`-I9fORD8Zp1ObJhe+A^@J*Aa4JOmxn6CGMK%Q!*<6k6MXhGO4{E~hmkiPt!ens zscVULwiACqco$8A)gq-E-$IsHvWfWuzIP%*@Ez@>F}onV9xy6!xIm7L{C4bbyTV7d zAA^Q;g*lT?CB^fmIHNxUV&p3aU`5vJU?ttmvWK<07Q@?h(zB?$bBd4T#1?cHIX`c4 zwBgCT2Zk2 zlK4EO&1W7gndZ7@LBuN}Dh@fPvP531z_iiP>`NmA30XKd9V@~@mYeaSbS*WLIR1rO ztOr!r76C3|LDmOcoK`CJI#m$L)wH_Db2T_(?OImZ`I_%_M~~rC;0F4-NOLMk{eMg?u+*p;%CMQQ*arQGHZo3{TFkvpn84u-D()>$ZpDn>ruCiNA$)^vOdkThY0-Ftdh>JuhNt3ae{b{Fs}TO`{h>VI zRTG+z4U@G(cuTY)0du`~R{&YC!%if?B6;$^vBRehU>K5bnUTG2_VonLM zq|a&LYmDtXs23*QozYStTiB$WV};g1oy{eJ3|Gd^gWlU&*RU7VYS(6lK$hT=f+Z49 zpSB&;FOfLv5^6qYd$lTiD~g2bZQc(5i6&sek%v<&mA;=-GEEU_=XX=pauD;r`Gd|j zw6VZl+XkHH5uc7dw)L<&D9f-Jj8N?WdeWUsr)?SXJ*`Ixk~83M!VMQ`TD$k92e--v zqqB!8o&^FS7LgAK>!3>bqp@(YfEo|9ObviY^ZFZncV$m9g&ZnMKIU$x2outmF{1MI zj>lP525u{pqd(x~0TU5Y$G6Ud|KuF!vj2hu_vE)k=r7Hz-`v@4jEk#EInrpiTBAUw z=+lS2L=hGLv_0`Cg}bD}#;=UOpxyzcLR5d>`+56ho`>g6SlET8Yuxlt@>E;U;>>)UX?JD9!ILZUQ)X=gQHmaYfnUj_HB0A(|MyxA3d6}rc0 zrbLDB8MV#(_OOsU{MtAXM2c(* zn?6!IS)hysEiYTosp#RXk*dp-W<5m-|4i2w&u1ida-2r^z?0yMnh!_W##TzyLid3k zY5pvwtC_WNN4Pf6wpHj=QMSfx;hi;%(=d1N_Ug9rrIgafA1~}C4o0WvsHf(ZO}iJU z@C-sYfBP>AWE-RM*9NDcm~n}?0S}po?;DR&gkpxf6hA|1r=Xw*()=*JGf1B@6u(Ro z4qy#Buhn;=a9Wqe_CX#UTD`mznhm?_Q2z^BK|Puu^$6SEg2H(?kz&g_8Zr&9bMI>( z3WBq8=r!5yUL7cNKbD+0{B)2if3(`V0R9WT{mES(*ckD@k3M!JEr3fU7ud3je_5 zXw!#Hp{E38w$BQ+5#cmFl(wFDJpN7eSQSo%pR=KI@$6WK{)z@y{1yFPn%MD!<&}V2 z-@^y8ik;Tl=`opg$NTA3VI4&_DI)JRK8TM%ir&30I>wOt#LvzxLng-{vQ~H5 zC{xgnx+ln~Kpj?bN9Tl^K2Iuib<{uIci55>Fk0(c5Nv37d({+Xyu9+4?mXb{^2!_@ z-+-L%T1nqyXdvj3ovh2#G9(QYLM%{f=&dhoUp%>Id^lId+L0cm>H+cd4F^9*-H$V! zwdy~7(=N~c)F-W={J88buq)uGh5GGl#}L!D2i4=kuzNq@BL*_+OcVvS&l)wGA1sLp zZ-1`nGM^#L?L_h+EmG|$LAq?aK8kf5)e-aLYCZ^z;;o28ACq-@0KlB|mI>L2_meY? za@-T{d6IR(8FnrHLi3|CPSt6+=SDspjjSwiB8ikfTtBD>4-%R`hPN(yvcmIe((6ImPn9SINxn zEr8#{m_xG{;|ITG!kh)|KxR!#-Spyj-Cy5o9?%WgwXe%&CSRi zj<^AWrpmDpVN11I{32?pLB9T!JXdObv#Av?LNBc^W0@XIsZ<${Y!9hb67AWZ>*gV3U-9NQg^KDZ)kv!p#MO4rg9pUEhg|pJDkJ7%PQ|~l7yJ7Eho|M-jhesSIBeO}jbzK?^_kOw43GRf0H@NqBWe7mhaQ75O- zxD}$3zVQexc1DVf);B*TE-fiN=VlcN>Vha%)ev7#2LVy{ByuywI0mKp15f<_TQe4+ z5rnprpF=H!#s}TTg#phNfTbX)wrEQvG|Z!=3Y<#UlxFD-Uk79thQ+2+{xb$ zL#;mXe${buZBDK2H`IG*8GqzHK-0Os|6i9+Sj%eL_Uy2}q9HP184fL#UffXbO(4|t zD~JyJ*-x$_`;|ilSKQPD;Q=?^)~8iYZ@PJBJ>)gqdFJVGON>N9;0y8=UFtTvQHoq< zcv>#txG5=L2aGw2=8*8>QEs8MkNMP}D6niRz!egPGTCJ7!)$)mq{A5d0 z&SOl&3&M|@T_xv}Bl%K&OZ!I8^_EXcPr6A{4VQNg@7vQv69KBWoyWvHko zpy(mltTCo#`t5Zs3iHb`td?Lq5n)EsNTNG0U}Ef?ZeYBjsMQ)9e`k*$zXjFGX-yyZ zv$esxlT2{s_r&*KwDwDwU0K9xgh;P}CrsR{uX3RZAkK_`QzfNbdxY+U$L0TX)yxL# z?CBQVRgY;gStJEs$>XQ#Gzv(HqLADqxJV@-g&kJ$^9uXOFjfE0%%1pfX42V$C`3?N zHMLPulwv22d(BZ}s7(n+)t5^*{GZtd{_FaM+e@+n=#8Z^9r783*rD@Ex3w;}!^EJ@ z!L^i~NeW;r*1x5`FqY9y11WH1t&HR zC+G2V5pjPH+4+z=XnSwumfJc%yE#1Lv#iT@k9UJQEgd^pES%|*f9WL2z&Q1=nK@u- z2^KGr=^{DdY%}*$;YgI4J8SjKPsXjNrc*cAm7eif{wpFmr3Rhso}Zdgf5EK>efwh% z#s(1FOpeni1g7J5!8su3!4bDvXhGfpD~fvlOo&GdHTMMHWCN%44#`&e6oOHUQ(0Kl zJ?_36Z+#;>O8Pe)iC%KDKhn?xqyDWxzNKfn&GK^I`5_;zp7Kq%V+US3DjKq~mi9D$ z)wShJ7jc-bk3mQd;`e|%IL${yQg6K`n!k_N#KI&VV6l&!s}LoCEYjbYncApte@SAb zHkb&N;#!sZFq5O_Br+7jlIEv97JwX7hPh78|r| z{@}!+Po6Aqql-@B*_2dnQlnZZQ_XFl+SkXk^tpT}h~qVZ1M!56DB)NFJ|_s`9E z1M<)O_1!7|E)@K4(ClXi_&726l57QuDR#1Lk`_JT_Ls+90XMH3>2$|_NgN#s1N7uP z4YWymQwiwEPeOd^jVZbGQa@i5~z({>?>Z6V-AJxLxY*d0qP4p z=3ffKcUJ&1Yxm&cGr6T%eC|CJ{I`yqsNyvbqq%bXj`p**l8$qmp1z|8GX8SfrQ<&% zlEOpV?17Ln;jNNeB|Z8sOYuK@=QbsUbDuO+c0$Wi>7YR+1k}GxpRfGehz#i->V}cj z6UV>a^6>hYf238Gxljj$NHv8EGY3mJdOS}wO$YU~Qsy>~h@fmr%J|}K>iX{hE7#Xm zLh_(In*QKCla%`XN_c$Ep2Fc3Ar@ersGcrp&AtvRr>Lts?X9?rk57B_su;@tcUKB+ zB}d0|^`lCdU5X-)^thRr%rUT}y?Ol(qlaUOAA8?wG_Zme))|<24EzkVrzjr8-Cf+m zZPLlarLQN5KIo?v1Wi=1Ezo{Kb{s={ErIS6xSmzA2 z;`&`K1UglWBN*-CYXLe+l?<1xKKg=}B;jDxoRhKvwgBoWge3O?L`Os`iKheFBg2q7 zGj>aq*0?@7Tb>YncoNcMlAb&znlF{_$dc0k~eU00! zP0lNQuZue54>da&(ZDDsavmyvkQcz%7rvg$p$aU*&Hx3bpvY)S`ttZ(*jy0Ja^-`t z2#vE_gWOjn^}xZldHQ9@6yv4|9UU#B-^8^yoRjr-;@9eUxRuzNRg>9GAG>lsvSkgS zI?di{D$qPG8!C-^=Vx@mXzFdRs#(>0Aq0p}9a6iG-jEcY3Fr~Rs8+i?_8;|2_5q5e zn)0p+nmZze9-U!?RZr-}*zZoraKugg^)7Q=H4c1s;g?X7_k zK>7TXMPVtZ(@JU!&bM&eL-5!`bgd8RnFyIP1moWt$L;K@o81DWYCeo;S^alw0{iU| zhaOn=i`eM@H14iR87(#Q%uO~i`ZVyN!PQ&{AF^7ulC?Tls`$H%H-)~Z+YJQ`8agjT ztPCLe6RQ;MqCK<>8KHxvXjZm{AI_lRqVtLR;ljrLf_(SA{8t?zs*olaQo_Vhs+~}> zKVnV%T?$({D?BOFku{{r07WDx48xJBT=)_+6X?%B{UT^p3z7cAPe5ZPv7+=ejYRHh zhfS&UHf1U|y~3eM>yh;T0Xrnb<`QSg{PH5&BjU-U5}?h6K@@(X1?S) zAlC9YnUs%RdK)YXS<{B~1e6t7m)N^e?TCpaCFTCl4)gWV0HVSjF#3PanFjed5R*$M zG%rp}r@4WjkrdqJYQ>F0R9{2mVHF7ksvNJ4H#HoKhb7){2V<%de7PCc&PbiweMf^i z*%Rp3{oFK!>Ye8wQnP62M;!G5I$FV_&%`k5br$tZ-!2IM!&-E}DLoXEfoiD5Cu3UR`D)93z*1L`o zdxjr7v6PjSHJh`4U$ZRinc4P6&czi$lYirfp6U83#?>QvW4MtTlh8`R8V(PR z8x0>BHN(rOa5kSmWftHpOQ$Ma{kp_vaoXXd$Qx!*`2V`a@&%wBW~na)e$s$-XZ*-8 z@iAboJ&Z6rp{S;*6Mv|#zJ(=W!%?a{_}uvHItr@pIQP6$2-q2dH;ShN7w`_oLgOx< zblYsk$g{>P19iuqJ{@Q5O;L8p+Zdlc5pa$q6}6Gqnj52|1j%(zy zxDqHxsRq4}YMu=*U^Q|jtoS0k%Ajmkdi;wpSr_68?DWE{$pVJF^W~TV*asoO%n{mA zOQTYEA72)l5v#*`GHpNOV6DgtxP*H*%R0nn?J95XZMdhs9M z@MX(VlK8-njpuffZdnOR+x-%bnURh#cLUl6&-SeGy*QVOZ*VGKw4X$@Nk0REqgq%i zZshJTghV$2AKr7ea3%ikwXRP^Y-AhJ@yib20EA*r0+cV4-cY3}A@mC(*fLj|@^oxZ zlb7!sai5BukGPHC=;O?71rw?WKrwZX+rVh+$*su zA1TmjS6RVlR?G7^&CA$5SmZne>MGiUT^rm4&rx&_B|sT|{t`yzD#2Z!!X2XMEk6c5 zw~qQ@%AX}x0NOIkmI1o#m>`#EW|ICcXIuR>$?`9Xpfv#vk*VL#-Rdi08RiAa4K`oZ z+OxkDetG+&HQEE_hl2-;kmNPTR#WVeiWBnrZasMySN2 zn&{-Yy_VnMWqp?IDzXYA@3+l3M5e@%@G>5Wq~z6Wf|X3uZjXStc{wvinSpP0^yU&J zY9t9=4roo4&wnzF#>;^_L<(RL_N5-@`54#ebMc z*X=>1PY*g-2b~$AHX|g`n(by)_D>6d*4OXmhDc08xZFFc#sF@Ly@4Ar>Y!H0(%HVs z#*6X~(Eyb7YZ0P7Dw#H2C)oSK2()^pOT#bhz0sa8@5)&=?>k}=XpW=jOu{Xq>h-gn z^4s)U9W6ZUD2q}TX8I=9E4*JsW3qVJ9)gwBdI}cBDj67|_$6V1coh{M==s0WaZD80 z2cOIXZDNL~EHUi<=_j5*d*ndG0nAy?7~h zq218W{-8r*UP`pa3x^RSk+U{ttYHe0*XK zU_V`GvDo18%$e2TX75_w6zpypgWKp)yN%pi{Q;os8=F^W%XO^H>(qH8JKy{|OCj&TBy-0I8TKVN^N1i}73#w{WNE=f^`l$5qV@4RR{a7lU)*|CWrY z6(PDCMpDo&WOSISrYoPvKiwCd#aK;qase^&ck30dBr|Be2PqDLMH;!FuN}?rUI5a% zt!ra`2Ki;7dIZNxRsWoO3_;+sQCAFkH@_{f&Bxz+nSw~J!M`u*&Y*ehXxngi`NH-v zc*LF*W>MCgL;E$K5EY-B0$Dw3RkhCM-Rc)so=LD)Q|2s3vt@lP zL9b~%{Hjm&t$G4X0_W`A{=HM+^y|D+ho#OSMLTyV@-*#` zyRKkX*Lv7*djQ)v*co@1e&Nqh!S|xaeedHY{{|c;wAtDc0_;KcQT9zQpmD0pIssTJ}NHojP~@@xW;Q#GxkAFN)UWUc$_M z#jg#h7Ph+^SNxT|SFk)aj-PJ{JN4d`8KQS2dPSJ~r}u!NEl6}Y#eS(^y9LCCIG#Q# zVeFV29-7iEsXHB;m)MJ78^IRUJCmuw%VWqVqWHK%K)xInPR@_Z z{f4~h!Y!}Q$RMF<8Qom@a0X-SE$^fR_PjO6`ND;`#_EGBgsWiiji^TRYdgpfoINF4 z9<-t?GNtBQgP313Ezt+q%Xk}b=7gp$l?md-@>z#AO_pjlKh$e3&#q=mpbgmmo*tF3EaAu9eDdQZyQTxq-d&2S!uOIs>#DX##B8n*WEDb{aZX^_KR6YpNIcK@KD$2@FnhzZf|U9lrG_w(?+L$=?eTBbTq zhKdvQHjFKOwKRa@U$x@~rxlFXKm#K2kj6+8H@vV;&7QO_Je{(_e@bKP63o z;;_P0wg5yOZq)h82Z2<+O5u5t0HaB-Z@$scYRMbA?7}l0PoX}6^Fln|0F?|We_n@v zUNzn;z&Ax7v(quJ4)=3JikB;=71fqRw}*D&{bBW$-zprqL8bxV6HLDxgQ%>K3wwS) z-}}xvI&b#ZSubuvKFoa;Y=XsTfW-kB3DvW!{mc#Rkd5yX%${mnB-8>trGaa_GtNH` z%Krj4Fxu7M>rE<%hB}Y~8?w{N0=Vpx$_gt0vt(JXQak<5(;?n zyvZiM@$#x9(s$J~uDQ{#URS-zMsq=Y$Ainjx1r#c;g}8(1OjC`0 zO<$KREjthG{KnA~{30%`1q?cu+_bi9tL#fM$X&AJIvs#_B_c-4_EDW|%`WwRdFD<^ zS_bB(5Mq!IkTX|uF{A8uPYX*G3opNk;D5m@b5I;^jIyAoaa+w!`3HJ3!B(&iNKH#_ z4q5z@#Cxoo9h$D^X{+XOVTVDI_7Z_DHvm*0&weMshWk6pW(fX?;Y&Pi(rRWL5p>4@ zbYSux*E*VTxj~!xOyTpzs&p}q^wu2hT4tAvi@Td-%UQvG{)oFNGAL4eh3(`M?!>wyZ|>)iMpU%|gAbb~O(2XjcWv5yIaCck|C#tQnWQ zj$AT&8qx9AJ-Gqm;0kydxi<7q400qFdda*}_t?ZR|bQ6Oe#;Qep6uv zKtLtkmZ(D)C6lsd&Z5ioAqbFKB(S+RpJEU?;3AjY=D(6fjJd zudyRZ?ugj}i^Q+`QxWUuwHodG_~=!gy=VWE_wVngFf|R$b~DBZlad14*9_z=yUDqx=K0 z?JM=GFCVXsu~uT97IkY8z+INJytRa~DYGN=LAXcCD%PvjtW5Sc_9oXRyRHqJDUY@$ zE}wCKK6W$4u8_V2 zQPMNB+P-TSDE*PpGeT#waE|7AJp7~C*TKmjCscDM2Ws%0Yk;l-W@Xw?TW_BwnHh&+M0dpw# z0e$mEUl?vK=JOAp|AlTDZKZ5@6ETw&b@W;i-fMQvo3_|nUfiWb51+~Dq`Q5sk`ggr z%)?TBlyf>XC}te@s_5FQY*m)d_XYnbI2M;mg9xhW8R2N{ z2iVnlE9Tl{sM9RLoQqVwuIO&~Iemc9Ek*q#m<3&8F3%bIghG3rV7az^S*#!z(oJS^ zM7?WC?PS*InWdYHj8iwYZ!oszKpM(%DYGBKkK__X%DqZ! z^!N5PAFga(wI*QA!MAIlC4_1C{I~Vb*1WZ=pUFBbZ^(l?a%-dTr~5y1jYICVCByU0 z0{bez{mrTs?dV^K8=3gm>iXbpnT_4b3i>DJsY@*q{?^m-^BlV;!d((>y>mAZe zEjnUd!)KBwX=lO`?_YxuB;oCvKU5|l5fvdKs|GNf!kD^{NI!ka%Y0idOJ}E&Rz+Nh7=qf4kz`qR05?1P)x+PlDbqYe7Ua>@h3P2(F`nplvz^F)ce=LfHm58ZD72&xU%I5C@z>1O+;>fVnp_) zd$28ypXy#6tE+5$V^{*1{GxxR?UIg0%Bp=i+duc7>9*%qt$&)uJ=3FW5gfVK-$sv7ZC6iKBfB0PZk{6SSN zUiLT2Xo9oYAB`^4Y`n_k&D`Nfrc;-9jHmrPmC4E{X4Z5}dsfpx?{?dS3Cv7iQzSA~jXsf=BN5s9y ze*vq>PS7Z4pi5)OHu^=zOEU|yG0(*?VE!C1#?rD$xZvjRqRbBukk2L2S?Ew=0=m+1 zk-CA!&<43A=?KN(hfVxxH+3%qhzBcCbj~$={V_C@)7M>3>$VlSEH5V&It!NWnYf8M{w2x$$j^M`_LJ3~@lyahvkY@%xI8Ccy#Cqb^=0l5Bi2UYce^ zaLQz9YMj(RS%%9$JwlT{GBLv%_#FwI$uTW$uGWZ2$k-A%lq9ih>9|qvSrJ}k?V#fi zDdpMdblRzBOgiKM1ams2StZ2C2c}AqP1`{tOgL4DyMeQ0H?~&zM`Ec>s8%ur@w7Qs z+!n$~23ew6Q+?vY%1GXHj*Q!^h*(H`H0l7PoDj!{ zKWlBV@$2i|Vd-C9OT4R)HLGOpw#|~>!A3!!bkEI~u_DX?uZc6qa+dg-N_ z2)hFHJ7+|P8yT2gIqCtQtAaB{Q4rkv>jZD`#>N*o#Lvu}^lEQuBAAd2y3G4Xpu~#t zAk}PAA;=ufQ31v!-UqeJFRBYNTo$H&c+Hz0z=%_He6lS^IXyac2#oBRUVz=VoW(DF z7}N2lz^gcv*)qE^xcC-&n*4jvMCp{8dxCR7W zspGMI55$psw)TBh2P8kS59prO;RH0I@e|#!#y7Zc2p4s-lEK?u=l|?f4*@>2R{57zo_|@^1FnqE1vnUgS4mboGKL z_IB~}*=B2=!lz5WIySGo?DTA=_|yRSa!T~}^Ed0)rS$&`*=@Np=23e3joe~#;NMkt z0%n){^JNd+*q08Uhn)*{g@m0w<89NRew`fWpdAr^{>mp}wrU?MyJ)}yXq>_vjyU|-;6v!q_T=m8RB%)G{YG0) zS1^ifF(

!u<*C}x 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 kRuT^hQZ&Ghj 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 A00000 literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Montserrat/Montserrat-LightItalic.ttf b/ui/src/assets/fonts/Montserrat/Montserrat-LightItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..209604046b343269618c3a857bc5c00238db7171 GIT binary patch literal 246276 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 z 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�k#^Pd-;#Bnxj|=t##>C%}>QZ9Nz`Y*gyluuysr~ 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Ø`NFt| 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 literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Montserrat/Montserrat-Medium.ttf b/ui/src/assets/fonts/Montserrat/Montserrat-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6e079f6984098cc53f68a24390936a73a6dcd944 GIT binary patch literal 243180 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%0A#Vs)3q-KcATfdA75QVQ2KP!cRF_fZ&%s|(a6 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
0`*Dw7>D1{RG}=A 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 f-b|Q17=L_kP##>h2xea+7Vq4I6`P2$&iI1V|&< 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 z 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
rKeyu10 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 Lg_BF?GlRba@aD!@ literal 0 HcmV?d00001 diff --git a/ui/src/assets/fonts/Montserrat/Montserrat-SemiBold.ttf b/ui/src/assets/fonts/Montserrat/Montserrat-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f8a43f2b203054676b64e38e2b78af5468c39b6d GIT binary patch literal 243816 zcmbTf2Vhj!l|TIMeN$8@8kJE&b!Id|5|U6CAYcGB)WD($8H8v8Y)o+h7ZAoGHtx8^ zajIjdZtOU=*G}xjampr+lQ?a6lig%DA&G-4EH=rK7|iJZJLkUl=DpF#-tS9nWRA{l z=bn4|y-yRGrup!POH1o)YwvjKihtgq$-NOxlZQK3u2@yNKkph%Uin>3WFP5VwPxv^ z4-R!``fd1qO?btsn!2@Dec@6~TzCb&Y}&ee^S+VdXD`#l`*SocV1HxVZ0XnOxkh9_1nddx=(4E$k)Wr?%6rI zdE1OjpFOIH-#>}pH|+$#^SfzH81KvYduZqGYpy$Y=H8X~{TrHA@ZBr+Zrwc4cH+mH z_&Me?yl3<7(M@;Vx=)k-R!!4i+qd`XYu0|V^_V8}LYlTF zW8YPy`+nB*_;)p#c?9^s)}%HYbO_29G+py*<&iL;QrG0DOXx!AYw$xC!y5k5=W@Bc zE^oRo%{@K4GNZ&-QtB)5%@!A;Zt+<33-X1FZ5?v%#b2WR#0C6u7JYiP6s)lLGNOj=uJvWN=Zub`Fv@fl$^@a5^qq{i(smhq3EOSw}=HtMC+|r ze&pz*k5d04Nz_GuJ~5&C*AHs}>?xM%O_z^qS^{{k1OASIU*@d^{6XRMR?A1R55A|Q zc=Ev~>noqq#d9Jb|G|AtG|IEq7(vej^@XuMtk0?s>XYcAPfVIe1KK3V%_G^I2e6x8{!9;>GAk=OZ$Npon> zYqU3 z;(G%Q_{|nPJC$|t{Qql#;`h4F4; z4E-i+%sd)Xom%~G7;~nUp|wSpXl~7u?DmYNf;ELVS&SwLmrEbkbbV=03J#ApEFn~v zX}xJ_kZ>7k8R)Z^NtXJ5nJ=j8f4lhC=(!EIhzI4G=ut5c zePZ1I&E31{fbahLuJ3(PbVi?7^ws~yr>{_*aD5g1)HY(GuV9Wdv}~(b1nkwrO)F&dKNGOWG{0I#QXFotgr# zyRM2vuIk#`ySn!H+LYnX@7VGA;nsO81{Uw@?A*6_)yjFT6BB9{OuG`I8KmQniFYQ! zvn_Z&&pMzfdVbU5T>POrl)32%L*5}Q~Xdfb$;3%>{Dr76Kzj881!uvb^D&!wCRa`(VvSs zeft+L-rx5X`NH7CJ9j=jxM#ucuCCn+qQ$fVjOf0bR{$-i1+{l{uqsxN?Y@Us=*C}i zFr$DrJB8q-#L=pqK0_ZPIJVX6&6b}7G#PU6xrqrSNpL!*Xgkr!tK_zt4vFza)#pUN z9qx6TaLlnvzM;m_g7SKOKF!f{+I4Vnn&9Ri5#0T>18#Ny~kY%daRnd zN6cZDPMXI#hXy@|HIHo$O7o~a(Mj_-Thz%rSo6eMJSPmzW3(a7qbMD;QDB!&nn%G? z9B?{C3O>Vx)B2fb8Lrl^c-BT2-J53O^Xf<=seS?uIB6sW4>{nZkrcep4tGfdUgoU_ zT-i`}h-zqC`8AzGv-wQncE9|>G}cV z@!yG~>F;#bCCOfOj)sAkY*@KMYGM>Nsj1R%q?SpN%E?+X9U-zuGe~jyf;dHgWKAU| z;^>+vmHzIw&Fduj((UfF&1k|kF!A6O)|N8hZh zRw`hA%gU9D_H}jai-f=lq=mlAXS$mykSn2_62P;kfcs5&^zV|^7tmBcLVn-Y4{@e~ z&oJ?MT;d!BFO0$U46`56=`GbSpE%yyviR4Kr~(r8IB|=yL!{eNwX#SEmc7tiV$|c7 zWN;X!2G(PjaDw&*|JLJA`O0|o!SQi%IeQ9oqW>;mh@KE7ST{-P7Urmd6q4p%eT#Mw zHWN7ZAlpokDV1zh1hfIBm`i@o;<;Ctk_w(Z1>A4KaW-iMMn5>4=tr$g`y=4GmJvw< zWND95cD^)8O0M1)+&B)Nzt{#X*#j!x09>-d>LYV?P(cc*$!=nvVRD<$8s}=n4XwGH zI2MLi8qjB?mwM2fKU~&KwnHPRLW)yI@6qwv+NzyRPmTB9K73|;JY{xZw6OTc;?C&7 z9rtw0m!daDW2>3=D+;70Y0C=?x9#n9wOcSjv z=T!eG2HXpHH_Hfumw77zXSpJNs$_(W`DUhEA+2?rrq1X zU&WTTg69#wCMNzmaZY@L_ZT`IJ1nGt&rOD+9EPCa4YnJK*j!(Fhzv#EUE17WV+po5 zc&5|{6e&OLY#J4d5D&#T^vQFX6hl6S8p;U6%1s#X-q zPlm~ial0Y6z*v|I*~{tazH}GlpYUeU;etypf?~y9oUTjni~dfuJS0l5`e&T4kBc4A zA4SK&JtXP>z++v`V`WS50l^_dXsm#y;DX@B9QpxwYq=3WAbcX^Ml2pe7|{S7YsI;M z_}w@z_C(WgIG)}^{Y{*6kqsHpcGEc8PC3Zq^kDpc9-rYR_wu~@<)2J^&)f13*1TwZ zqaUx3cPlvcW5VHI%@flmUN_{_>!w!2DYtOg!ZX@VH0uj>m(gcXyhC#X-OF9Ms_%(@ zdplTw+-~B1jJZyY$?_>I9+>!tG3GyFvQggvoN44)B*TS(qJfkp$si8vV7{e2ZgMtY zL1WBm+BEE7I;pS{T@UIcB88~Wkbe@d&42CCF5wrxT|)dadPLk1ZNf&*6~Bb=Vfr@m zI05Zin!9I0PsUHhGbGuPwNRuaNrybbq17dg3-5+_256)?(|yFI5X>Z->jlK}uIS;L zb_o`5;&;(7MhlDIsj<$v{>1CPp2pI4>J`==D5=YE_%HF&Sivo63?5TbSHXn?pY)W1 z&oJSZlxBELN>4O%KN(tcq#=F!G+pXRIFVkQPrVz|B|St8O2S*)gemv&sx!0JZ(#@Mh0wb*wIXd!q#RQ>+)y_>Pys)b4H5Ry|o|G(`H>!NEMUova(=8SAVU9e$i;R-Tcfsa}?CVf}rVM{!`}QvkE1Tr1#aDK8 zT)9~NiPiCJ_=J9hSCuY*#jA>k=S~6lJK$uMP(S1`{L1hc?noS~!pMz!p*1pj3>cZ^ zp?wCEd#uu@?h%w_kHI;I27P1VSe3DQ@)(>g>g2D)6tSvF6bm{iKpumlWQqg+nl(nH zL794tLDn{6L>%RGAZE8+uQSG`pR{Y)B*}ScjshF(KUvvFb(UckwvSdcVA4JOCS-?b@* z-}=Pv>ZJ|YmDQQOg$rArvGKlKa(p#{F*pJEGYLHx73EhnG<|X;7nJmfAW+RJkPNYvb8CBK<40G;2|M``f1ibjDUHGXz z|0ed9yk|wrGJUBb{RnRENzlu1$R?+Bq`g$_9D8Y_C*+9XjT>iu$~~B7^i}3H+dxhz z`Czt@@$w-iQ_MD&OflP-GKKaHskUb5^>m!<`H^NbX63>D7(uIKZ;~F1&Sqr5hbhR& z_h+I>I$ZB?Ns0Fi&s++@T*tK8xhu875(Z>2URF=_wK=mckFz4 z9fgyH_+#ttuFl;HNZyc*`enAEvb4F8Dliea$EA%D_Y4#Fun`IiYWj5K?y{z5X82%9 zrTW4)7D8kgE@wIiipjqD?Xj+|W9vUNE{a#ITes$+hvW;b`}%sXZ2bw$oI_p9mUTtn zvW-kp>xM`zncN)4LyQ_zaAOLw!Dr6YG>TGZWoR?B=^%!RRVz(Qqt|DFVJT2;AAkHa z#`u@FUfGNBuahqfSQFs0v_oG4nLSIZBwJvXACYJnkh)94iaQJh{Ik^zPjtBuo+vL5 zP$<+ppIED;<0WTzcNts7&mYOr-Kuj@6c{%%dayo6<`eR*vU5^~6eOt5cX9BhrHgCmM z`L9V&SM<&0%OFdMXP)8n`4vM}KVsRac6hcl;IKt$)&Wi73lkpKPtb(J7Pa9+=G*%x znXLK=nQ-_JHhlOHz=sSBB5E*z{jDVa%7H(bOEx;Wm3lY*R63ECV9P&LY89nbrIuT% zRA4w9+iWBw!Z>l1jL0sO9EX4HV{@u1#}@bZRW6;ka%<<}8#hD_Rh3t7tLf_jq<>rI z;v*YUs>7p!%DVExGXIQ>@Fnf@M_P&tM`z_XR2GK)Gt$dew$0zzLQ;`u&D4F`pzc1V zF2h|jv3i1+Ay2!HrQ002PsIcbse^dDvSdJkZc(oN6qHvn7N`lz{VWx|W{gD-cHiXN zhhw=r(a6~tAqM}4HS%2B$k}mG&TPXT3L;`jv{$p$z0%Pa$#%6mzX=DA*ztu4r#?g4(3wX<#nbY7j8hNlRue@yck}ErhS~F`GF6r!w%n4>cKY!__ z9pioXZ*MzVb(45t@6fW%b-9=MTbi5Zr!M%l|BBJ*esTBayLy8q1NV^(Axq1RoymbI z5Q!|z5>n5EM@Nws2w=f^6n%t}hFvOOXv{V@SJQHfatrfkp=ow7(;NaBXe88r3nX* z+Tp^4Ltfe7;5oCOemfj;32=i4zm5K9Y9*0ES{dtDyAYzlWgtTdA&yy^q08X;N5`Lj z>c}JarhM)paYyuqpZ{Fk65an0W#Wjlzs;-p5w9j)KF6zxhv!ZK&z=JAp8_6qz{&Gc zF`Mht%T3w_jYns&b>Fi%< zq&#)Yy+G^-_8EoRwPLL}kW)I_4EA_QH^K%-*_h&8X9Q-wf7Y_EX&SI_AX4FwqS0gHuaIaOb)lWn`%6;LU6%5SP9j52(!k+ z;D3|4x|gYHwq&n>sSXSOIm0V}o{ZC8?3p1JO|@DSq4m%SbweSDZp8JBEQ5;cc{GpD z=Yk(aVc`0V4EcxXFOEcie%G6CQ_cea{zami4YsA`q72(K%HO0WA-xah-R**P?T8Yp z;3VhQ1Y(o;2VLSH*YF#+fAz^b-Z=Kev)4U^=rVftTs)7Tr)1{EH)S@~$0IQJ{}Fou zuGcT)a~}`)JK%I)6@H2XPNzu0(+G|gAl50riWQ`4s82}oLI)B#DB6G`1@MFs=R^uB zJw2U77DZQuUZ34uj~HzBi!VGNT<7lp=cn%aU*Q!g(Q{%{48HeX^ob}^m}27Z=>0S3 zJxMEw(B6NFB1VL|AFcKeZrZOXeN+YQE!xtYDpNj61OQPHM>=_h) z-!m9Z2H$YsOtW_knjK-jiHB!PJDg~v@MoBC(1zw{z(Jdjpg$LKcJJwK^iMUE+2GP; zkw~g=C8Y?DOM-o{x}ykdxy4Z}Dak!dl}S*8E|+Ihvha9%J*a}5m6w~7l%3>H50kb} zfsvF^?+upXUzs4E_m}Y}*2^&d;Kbhc`e%=-#GZcmw%cyI=qe9xD=PkpxHWp1(tH0B zy%D6P%#?fywh;NCkapyHl1nv;c_U8$O93-~7A2ivfRKTf zK@KQ9gDi3S&c5;J14sJq-1zLKwQD!Ym%8uW5k2(GGvXsV?(L4Q-@AG1*3ElKHqrRJ z2j`4E_?FVyaqwJehf~ca;Zx1#w+vbKt*L4@Ar~8MV~|CRzHml9tj{X>0e$lPCMM0J z0d1zJ*)-NlHJi@4*L~`j; zGx2#9B*9ca0SBBc5Cso8;3U};ywHThmi~QgTvV>SYvXXz=fG!u{w>z$R?Vj37p~b< z81JG-M^&f6Q6x3hn0YiNPW4KNA0H%AIvkb5Jx`XvT`NbBWQxMgVq4)R4*IM}jh5tc zyOQ=zYC=+hNN(WvNxA(;Qc;LndH-mWq>*EhvxFJg|23uC7Q^dCjt0wk$nd zQ@U>V+QG=8=fB(8zj0*gSjDo^*$o?7=daE5uc&QV-<+Sbqq@1es^*H?xpP}W#k3}# zGt(kd(L&zCYmJBJP65xh;Q8{1)eqI>p&yoriTm?g?as*`lPnN4K4sbNQPLOTB&rCH zRePCrc~v-dwvlk^)JXOok0j`^>H~VjzEPGfZVnB4!4!3QiaL-kaV_fPJuF>fvyRo} z#ZxqBqref8F5DMYgxe_w+rWU&u;5rfoqh#Z>rb$gX%;@M4pPVHC*XiX>KO2l0}iQU zzzgkgviTWK*%)J|u;zp|zd5G_ZK|ef!>0(Gg!Q#(gOSxp)5$`dpbVU#I^l8Gr%2(E zFnVFMdA%rA(%c@G8x`YT4JOf6im+1!9FCU9!?DOP*D17U&3wR0L&*>zE^?z(VupTD zMf8UqwQTmkWL-&WR(aFH_WHTiQ=hvfW0e&jFP`;TcwLmMX-Jy#2$mL&j;zd?6+4HJ zy9U+si0YsQ>7+HFM!JekyYw`w)9R+*S#^aYSTI-Mt?E>x#O)n%gPrah_tf56{Uva>o?w;mwS07#zZuW>+y=TD9lPl!aa68|7Vh3H{=9oPGO$|-DN>8{W}xQ`Q#V%^5`tkht}~F??eOdM7qqzPx5L$ z>hNk1L7l>@alwyqdA3>JO>xp>mj;~l|J$W`|Fecmb1Iq#mqstM=KZ*B-nleyV?B1b zU%@9}jR`wE=)fmQuhySphqII(k8oOdf`#x}|l;T^`8CEl_()HQGA-t$zJxTm3($`XIR`{FAH z4`OW8CEh2#&imHR{N|TIp3}yO`&{KTS5@05+U0(l6WMpJE9pFHYrkHUE8$0X8~F^X zhINl5c|FJ`7xy4ar)g}~=0V&Q^A$r6ek(nmQtOvPT!0(UN`k(OApTE^2RDHz?+_*v z&i)_uS@3jmB?o`%uirjC*wH^ceo4oQk@3UDd%C*!>%su%WiGrM|ueltxXen!V_v)uN(~?klK@x*xIz>3tSe4aml-MP-1-`Usbs zDM`XBqPmx2O1rpF_v><5zWPuExoSuXD3+j7EzY%I3H7q&uJNH2Ye&ZqFaM}~=@ZAJ zTg5}eBct1*`{fJkwh%WE<$uKzk2IJr+F@Za99r&&yi*KEtm(ys@N5%~tO2blK(&dG z=|XKcK}C2-I-J8n0Wa2yH>f`FT^%|hi~sMHI=Ogs=P-fN6;gF(S-uWsHH zSTwiu3I`?cIe4%%xM|)|u{TCgre`z4o~Q)n^-?7t=m~n1yG|IK-fv$wvL$vp(Wz8) z$|E{KC(N0+o-1L}wV+lS2?UEh=$!NS=vCW{g|bmqDtoibXJ@+D!tkJWx6zii_rwzQ znf~m?`YgS0#og=2*WbNDCF|eZu9EcIS6wgULtCbgk5Aw7&<2&G|NZ!SRm!*iri@Q~ zl4i8X$gE{)MU-()hg`_<`%+Wfh=Xz+GqQth?;&PK+X7b#^v=W0uguc08=A@}$)Re= zQcf~+E-j9n!uOJ!BzHC;wF?Vad`{E*{R2}Zi7`V%q;*CT=!;+%Xv)r=MlvFtAu$ONMn#EFrSWjiW!u(W<5z60>Ud<$ znnye2jFxE^pO6F7TDDc-eihM)6YG;_n*h_CcMOx~p8%62jkC`@T4_9{{FXJk?#+tP0&ucK6pca-I9VbJ zUTB9?eol=DKlK?SKle=H{2cR9zWi6VUQ}PYj+}wTUx=ttUmQ_0_Q8=M`<8C5k1}Mo z9cP=4dZZe-XAGO}8D-NYs4M~3x~SeCb*hmHFCQ(hhl<~eQG!bHjZPH{IG_{+aCAb! zByyY#g~EX&^ZZ!ZL0A9%w{>3~2wvHJ+XLe(dOtn>nNK1$IC9TNYs$-O9y~4{iEbTP z_YIt@t>3_(#;RR>$3Yyx+$sBY*rbL7?svfHG${NO2b}mx!P5v139@S9qw@bYHz0A*dIzxZ&sKJJiun$6zLpO&DikCgYA(1La-xx4#zyEFPLMV>%5VPD zN7vm`*EoF3i=D@AzHfYJ<(g3}IPa5RtgqR&`p1ozK6LlnCpV0YZv9VME6)Y<3W$Sh zt@59Ft?_Wb15RsI_$dxJSsn^L!-6-;|6tByIIJ>cOcRWoX5oW29Ia9P1RQYUb_FkV zz={79JdfZYT{Se*QH<-Oiq>fY7X%S7k$4+JdW7&wq+?(=C@&Jh6Wp;!E2t~{>4S|& z#gXYgGFd6-)f{ZBZ>GGL7tu$rJbLl5uOIrw1JRvw$rIQ7=u^9QulVzhZ|v^>&mG^# zx_Dfs=gkH^$9cW+@N8*^6WtX43=UE6YX- zuMn{zE(WUGBi+2r5icy+o}MJ+z|2eQ|+wq9Dh>+0K=Ev*_X ztgSe(v~c;%o33b@EAy|sD*B@(!P4^O)m?*0Ev@;v>x%=?mde?SIs>yoOSRTFK!e+f zmY&z;8m47D{EQv0Uuxh7k;wu+Hn$o-Z-K1U#gn&~k%~r8(d?P>S1Wjg59_HaK~LBZ zWVO{CV`DY|^J+Eb)#jLlxp5L^UE)5i+2MvdFzC$0ultk@ez!i?>bZvCv~GQ-wn5Ed zgE@!9>$dk)o1mwv1U=Dex+aa;ApeZJolNTib4?v@M$J>7XEoVT%NJu?>pc>w&3S1c)pw+8yEQ}+;23;)tfE+ zcPxAwcie)%Ylq9XE%;f2!_UAz>)%5EbF_MGq4spolW927nWe?j?I{v2w-;(~MiN{R zswm8Mf<-Fc?vbf(Dk-E^rFcsu1^yhWucswTx7!0*;PLeIOix9zg&ctsfjixlpPB+s zv#@%mi_}!B#ZV-#p`og(VPQk-yymLCyEm8#>o6XbbOdUw&+m|h=W&yI~ zuKA%It$l|&qu&@z7S%~>TcV%qyy=SO+H=0vj`@9+bLQ4HRIl%DTa#?al!3C!_Jb=P zYg@RmE&8cQV}5&Rwy|HJGf9EZ8}elWKczMR8GD<24HkZ}_L!2VDKim-2O-@OG&lYt z@E4Fd7i2DgXV^xS1}ekfV-z`(z0wO=tNI86Ny*>dsZk>;tW2enJrvUB@aD2u(ImPX z8j56ca?4SU&Efu0D# z`$UP2-=4zbxDQ(?T*mdck92n*UA^Mk!cE!j^V#T43NNY=J z>H6N@^`)gPtxIUX)GTPfzGUndJl+KG(+ICCcs|eCz=tQe!3H<`p1!Kl0Y>&r43mn5LKD}IKd?7u^rF`IXU!%lRpe$PQ-NzbMyHmOK!_9868d? zZeKTVS!hrDx?7fa9$wLZus! zXL;7ItN0C{COiDh6!6m)JRftQ(@Oo&X+|6fRG6yWDXZOk@>6WY9emwVynqHyE=^Rw3-;xTEFhO zU|U}oTTP0-Cme8+VhaAM1*cV#HKpLZ$^`p#(!!@1k~O99&)eZ_O)2>M4mep;3Jz&u zaxwb3!hi=6uQ2ujKOa)|;X~&6pb;lyRyi@5^NA<&aZ9I8>xpy`=NBYNm&ky#oe8;u zViXTH+d~(^Q2eNGB_EKlT<}S7jX(nTx_al#nNv5X7CNl7Jm5>lLu;|KU|w;IRU|hx z+ofxw^WpO^sxBIf1a-{6G&Nf2EIj>B#}*AF~Wp7iu

{{error.moreInfo.buttonText}}