From 29886f7421a079a1d408400b2f46c4dee340bca9 Mon Sep 17 00:00:00 2001 From: Scrublord MacBad Date: Mon, 11 May 2026 16:24:06 +0200 Subject: [PATCH] init with v1.7.12 --- .dockerignore | 9 + .editorconfig | 23 + .eslintignore | 2 + .eslintrc.js | 23 + .github/FUNDING.yml | 2 + .github/ISSUE_TEMPLATE.md | 46 + .github/ISSUE_TEMPLATE/bug_report.md | 56 + .../suggestion-or-feature-request.md | 20 + .../user-interface-or-usability-bug-report.md | 58 + .gitignore | 21 + .modernizr.json | 38 + .npmignore | 0 .stylelintrc.js | 26 + AUTHORS.rst | 18 + CHANGELOG.md | 4491 ++++++ CONTRIBUTING.rst | 4 + Dockerfile | 40 + LICENSE | 177 + README.md | 388 + __mocks__/cssMock.js | 1 + babel.config.js | 23 + config.sample.json | 54 + contribute.json | 17 + docs/app-load.md | 81 + docs/conferencing.md | 52 + docs/config.md | 194 + docs/customisations.md | 34 + docs/e2ee.md | 63 + docs/feature-flags.md | 107 + docs/jitsi-dev.md | 100 + docs/jitsi.md | 73 + docs/labs.md | 113 + docs/memory-profiles-and-leaks.md | 53 + docs/native-node-modules.md | 60 + docs/review.md | 84 + docs/skinning thoughts.md | 68 + docs/theming.md | 98 + docs/translating-dev.md | 63 + docs/translating.md | 64 + element.io/README | 12 + element.io/app/config.json | 40 + element.io/app/deploy.py | 191 + element.io/develop/config.json | 40 + package.json | 173 + release.sh | 68 + release_config.yaml | 1 + res/css/structures/ErrorView.scss | 101 + res/decoder-ring/datatypes.js | 107 + res/decoder-ring/decoder.js | 336 + res/decoder-ring/index.html | 79 + res/manifest.json | 85 + res/sw.js | 1 + res/themes/element/img/backgrounds/lake.jpg | Bin 0 -> 610431 bytes res/themes/element/img/download/apple.svg | 97 + res/themes/element/img/download/fdroid.svg | 135 + res/themes/element/img/download/google.svg | 70 + res/themes/element/img/logos/element-logo.svg | 6 + res/themes/element/img/logos/opengraph.png | Bin 0 -> 11311 bytes res/vector-icons/1024.png | Bin 0 -> 17323 bytes res/vector-icons/120.png | Bin 0 -> 1464 bytes res/vector-icons/1240x600.png | Bin 0 -> 10967 bytes res/vector-icons/150.png | Bin 0 -> 1826 bytes res/vector-icons/152.png | Bin 0 -> 1952 bytes res/vector-icons/180.png | Bin 0 -> 2220 bytes res/vector-icons/24.png | Bin 0 -> 434 bytes res/vector-icons/300.png | Bin 0 -> 3948 bytes res/vector-icons/44.png | Bin 0 -> 629 bytes res/vector-icons/50.png | Bin 0 -> 732 bytes res/vector-icons/620x300.png | Bin 0 -> 4572 bytes res/vector-icons/76.png | Bin 0 -> 1030 bytes res/vector-icons/88.png | Bin 0 -> 1146 bytes res/vector-icons/apple-touch-icon-114.png | Bin 0 -> 1444 bytes res/vector-icons/apple-touch-icon-120.png | Bin 0 -> 1528 bytes res/vector-icons/apple-touch-icon-144.png | Bin 0 -> 1903 bytes res/vector-icons/apple-touch-icon-152.png | Bin 0 -> 2045 bytes res/vector-icons/apple-touch-icon-180.png | Bin 0 -> 2299 bytes res/vector-icons/apple-touch-icon-57.png | Bin 0 -> 803 bytes res/vector-icons/apple-touch-icon-60.png | Bin 0 -> 837 bytes res/vector-icons/apple-touch-icon-72.png | Bin 0 -> 974 bytes res/vector-icons/apple-touch-icon-76.png | Bin 0 -> 1050 bytes res/vector-icons/browserconfig.xml | 12 + res/vector-icons/favicon.ico | Bin 0 -> 15086 bytes res/vector-icons/mstile-150.png | Bin 0 -> 1942 bytes res/vector-icons/mstile-310.png | Bin 0 -> 3993 bytes res/vector-icons/mstile-310x150.png | Bin 0 -> 1954 bytes res/vector-icons/mstile-70.png | Bin 0 -> 940 bytes res/welcome.html | 200 + res/welcome/images/icon-create-account.svg | 3 + res/welcome/images/icon-help.svg | 16 + res/welcome/images/icon-room-directory.svg | 4 + res/welcome/images/icon-sign-in.svg | 4 + res/welcome/images/logo.svg | 6 + res/welcome/images/matrix.svg | 153 + scripts/build-jitsi.js | 31 + scripts/check-i18n.pl | 1 + scripts/ci_package.sh | 17 + scripts/cleanup.sh | 19 + scripts/compare-file.js | 10 + scripts/copy-res.js | 291 + scripts/deploy.py | 191 + scripts/docker-link-repos.sh | 39 + scripts/docker-write-version.sh | 22 + scripts/fetch-develop.deps.sh | 107 + scripts/genflags.sh | 70 + scripts/issues-burndown.pl | 136 + scripts/issues-no-state.pl | 112 + scripts/make-icons.sh | 117 + scripts/package.sh | 35 + scripts/redeploy.py | 308 + scripts/yarn-sub.js | 22 + src/@types/global.d.ts | 47 + .../structures/CompatibilityView.tsx | 118 + src/async-components/structures/ErrorView.tsx | 61 + .../structures/VectorEmbeddedPage.js | 36 + src/components/views/auth/VectorAuthFooter.js | 53 + .../views/auth/VectorAuthHeaderLogo.js | 44 + src/components/views/auth/VectorAuthPage.js | 85 + src/customisations/README.md | 1 + src/favicon.ts | 255 + src/header | 15 + src/i18n/strings/ar.json | 36 + src/i18n/strings/az.json | 16 + src/i18n/strings/basefile.json | 1 + src/i18n/strings/be.json | 4 + src/i18n/strings/bg.json | 36 + src/i18n/strings/bn_BD.json | 1 + src/i18n/strings/bn_IN.json | 1 + src/i18n/strings/bs.json | 35 + src/i18n/strings/ca.json | 35 + src/i18n/strings/cs.json | 32 + src/i18n/strings/cy.json | 17 + src/i18n/strings/da.json | 21 + src/i18n/strings/de_DE.json | 36 + src/i18n/strings/el.json | 33 + src/i18n/strings/en_EN.json | 35 + src/i18n/strings/en_US.json | 16 + src/i18n/strings/eo.json | 36 + src/i18n/strings/es.json | 36 + src/i18n/strings/et.json | 36 + src/i18n/strings/eu.json | 36 + src/i18n/strings/fa.json | 36 + src/i18n/strings/fi.json | 36 + src/i18n/strings/fr.json | 36 + src/i18n/strings/ga.json | 11 + src/i18n/strings/gl.json | 36 + src/i18n/strings/he.json | 13 + src/i18n/strings/hi.json | 11 + src/i18n/strings/hr.json | 8 + src/i18n/strings/hu.json | 36 + src/i18n/strings/id.json | 8 + src/i18n/strings/is.json | 22 + src/i18n/strings/it.json | 36 + src/i18n/strings/ja.json | 34 + src/i18n/strings/jbo.json | 36 + src/i18n/strings/ka.json | 8 + src/i18n/strings/kab.json | 36 + src/i18n/strings/ko.json | 28 + src/i18n/strings/lt.json | 35 + src/i18n/strings/lv.json | 25 + src/i18n/strings/ml.json | 7 + src/i18n/strings/mn.json | 18 + src/i18n/strings/nb_NO.json | 18 + src/i18n/strings/ne.json | 1 + src/i18n/strings/nl.json | 29 + src/i18n/strings/nn.json | 22 + src/i18n/strings/oc.json | 14 + src/i18n/strings/pl.json | 35 + src/i18n/strings/pt.json | 17 + src/i18n/strings/pt_BR.json | 36 + src/i18n/strings/ro.json | 20 + src/i18n/strings/ru.json | 36 + src/i18n/strings/sco.json | 3 + src/i18n/strings/si.json | 4 + src/i18n/strings/sk.json | 36 + src/i18n/strings/sl.json | 36 + src/i18n/strings/sq.json | 36 + src/i18n/strings/sr.json | 35 + src/i18n/strings/sr_Latn.json | 16 + src/i18n/strings/sv.json | 36 + src/i18n/strings/ta.json | 16 + src/i18n/strings/te.json | 5 + src/i18n/strings/th.json | 13 + src/i18n/strings/tr.json | 30 + src/i18n/strings/uk.json | 36 + src/i18n/strings/vi.json | 16 + src/i18n/strings/vls.json | 17 + src/i18n/strings/zh_Hans.json | 36 + src/i18n/strings/zh_Hant.json | 36 + src/vector/app.tsx | 262 + src/vector/getconfig.ts | 73 + src/vector/index.html | 92 + src/vector/index.ts | 230 + src/vector/indexeddb-worker.js | 21 + src/vector/init.tsx | 169 + src/vector/jitsi/index.html | 24 + src/vector/jitsi/index.scss | 107 + src/vector/jitsi/index.ts | 241 + src/vector/mobile_guide/index.html | 341 + src/vector/mobile_guide/index.js | 110 + src/vector/modernizr.js | 3 + src/vector/platform/ElectronPlatform.tsx | 568 + src/vector/platform/PWAPlatform.ts | 29 + src/vector/platform/VectorBasePlatform.ts | 89 + src/vector/platform/WebPlatform.ts | 214 + src/vector/rageshakesetup.ts | 74 + src/vector/static/incompatible-browser.html | 475 + src/vector/static/unable-to-load.html | 183 + src/vector/url_utils.ts | 46 + test/.eslintrc.js | 5 + test/app-tests/joining-test.js | 235 + test/app-tests/loading-test.js | 745 + test/jest-mocks.js | 14 + test/skin-sdk.js | 9 + test/test-utils.js | 39 + test/unit-tests/README.md | 2 + tsconfig.json | 30 + webpack.config.js | 415 + yarn.lock | 13303 ++++++++++++++++ 218 files changed, 30825 insertions(+) create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/suggestion-or-feature-request.md create mode 100644 .github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md create mode 100644 .gitignore create mode 100644 .modernizr.json create mode 100644 .npmignore create mode 100644 .stylelintrc.js create mode 100644 AUTHORS.rst create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.rst create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 __mocks__/cssMock.js create mode 100644 babel.config.js create mode 100644 config.sample.json create mode 100644 contribute.json create mode 100644 docs/app-load.md create mode 100644 docs/conferencing.md create mode 100644 docs/config.md create mode 100644 docs/customisations.md create mode 100644 docs/e2ee.md create mode 100644 docs/feature-flags.md create mode 100644 docs/jitsi-dev.md create mode 100644 docs/jitsi.md create mode 100644 docs/labs.md create mode 100644 docs/memory-profiles-and-leaks.md create mode 100644 docs/native-node-modules.md create mode 100644 docs/review.md create mode 100644 docs/skinning thoughts.md create mode 100644 docs/theming.md create mode 100644 docs/translating-dev.md create mode 100644 docs/translating.md create mode 100644 element.io/README create mode 100644 element.io/app/config.json create mode 100755 element.io/app/deploy.py create mode 100644 element.io/develop/config.json create mode 100644 package.json create mode 100755 release.sh create mode 100644 release_config.yaml create mode 100644 res/css/structures/ErrorView.scss create mode 100644 res/decoder-ring/datatypes.js create mode 100644 res/decoder-ring/decoder.js create mode 100644 res/decoder-ring/index.html create mode 100644 res/manifest.json create mode 100644 res/sw.js create mode 100644 res/themes/element/img/backgrounds/lake.jpg create mode 100644 res/themes/element/img/download/apple.svg create mode 100644 res/themes/element/img/download/fdroid.svg create mode 100644 res/themes/element/img/download/google.svg create mode 100644 res/themes/element/img/logos/element-logo.svg create mode 100644 res/themes/element/img/logos/opengraph.png create mode 100644 res/vector-icons/1024.png create mode 100644 res/vector-icons/120.png create mode 100644 res/vector-icons/1240x600.png create mode 100644 res/vector-icons/150.png create mode 100644 res/vector-icons/152.png create mode 100644 res/vector-icons/180.png create mode 100644 res/vector-icons/24.png create mode 100644 res/vector-icons/300.png create mode 100644 res/vector-icons/44.png create mode 100644 res/vector-icons/50.png create mode 100644 res/vector-icons/620x300.png create mode 100644 res/vector-icons/76.png create mode 100644 res/vector-icons/88.png create mode 100644 res/vector-icons/apple-touch-icon-114.png create mode 100644 res/vector-icons/apple-touch-icon-120.png create mode 100644 res/vector-icons/apple-touch-icon-144.png create mode 100644 res/vector-icons/apple-touch-icon-152.png create mode 100644 res/vector-icons/apple-touch-icon-180.png create mode 100644 res/vector-icons/apple-touch-icon-57.png create mode 100644 res/vector-icons/apple-touch-icon-60.png create mode 100644 res/vector-icons/apple-touch-icon-72.png create mode 100644 res/vector-icons/apple-touch-icon-76.png create mode 100644 res/vector-icons/browserconfig.xml create mode 100644 res/vector-icons/favicon.ico create mode 100644 res/vector-icons/mstile-150.png create mode 100644 res/vector-icons/mstile-310.png create mode 100644 res/vector-icons/mstile-310x150.png create mode 100644 res/vector-icons/mstile-70.png create mode 100644 res/welcome.html create mode 100644 res/welcome/images/icon-create-account.svg create mode 100644 res/welcome/images/icon-help.svg create mode 100644 res/welcome/images/icon-room-directory.svg create mode 100644 res/welcome/images/icon-sign-in.svg create mode 100644 res/welcome/images/logo.svg create mode 100644 res/welcome/images/matrix.svg create mode 100644 scripts/build-jitsi.js create mode 120000 scripts/check-i18n.pl create mode 100755 scripts/ci_package.sh create mode 100755 scripts/cleanup.sh create mode 100644 scripts/compare-file.js create mode 100755 scripts/copy-res.js create mode 100755 scripts/deploy.py create mode 100644 scripts/docker-link-repos.sh create mode 100644 scripts/docker-write-version.sh create mode 100755 scripts/fetch-develop.deps.sh create mode 100755 scripts/genflags.sh create mode 100755 scripts/issues-burndown.pl create mode 100755 scripts/issues-no-state.pl create mode 100755 scripts/make-icons.sh create mode 100755 scripts/package.sh create mode 100755 scripts/redeploy.py create mode 100644 scripts/yarn-sub.js create mode 100644 src/@types/global.d.ts create mode 100644 src/async-components/structures/CompatibilityView.tsx create mode 100644 src/async-components/structures/ErrorView.tsx create mode 100644 src/components/structures/VectorEmbeddedPage.js create mode 100644 src/components/views/auth/VectorAuthFooter.js create mode 100644 src/components/views/auth/VectorAuthHeaderLogo.js create mode 100644 src/components/views/auth/VectorAuthPage.js create mode 120000 src/customisations/README.md create mode 100644 src/favicon.ts create mode 100644 src/header create mode 100644 src/i18n/strings/ar.json create mode 100644 src/i18n/strings/az.json create mode 100644 src/i18n/strings/basefile.json create mode 100644 src/i18n/strings/be.json create mode 100644 src/i18n/strings/bg.json create mode 100644 src/i18n/strings/bn_BD.json create mode 100644 src/i18n/strings/bn_IN.json create mode 100644 src/i18n/strings/bs.json create mode 100644 src/i18n/strings/ca.json create mode 100644 src/i18n/strings/cs.json create mode 100644 src/i18n/strings/cy.json create mode 100644 src/i18n/strings/da.json create mode 100644 src/i18n/strings/de_DE.json create mode 100644 src/i18n/strings/el.json create mode 100644 src/i18n/strings/en_EN.json create mode 100644 src/i18n/strings/en_US.json create mode 100644 src/i18n/strings/eo.json create mode 100644 src/i18n/strings/es.json create mode 100644 src/i18n/strings/et.json create mode 100644 src/i18n/strings/eu.json create mode 100644 src/i18n/strings/fa.json create mode 100644 src/i18n/strings/fi.json create mode 100644 src/i18n/strings/fr.json create mode 100644 src/i18n/strings/ga.json create mode 100644 src/i18n/strings/gl.json create mode 100644 src/i18n/strings/he.json create mode 100644 src/i18n/strings/hi.json create mode 100644 src/i18n/strings/hr.json create mode 100644 src/i18n/strings/hu.json create mode 100644 src/i18n/strings/id.json create mode 100644 src/i18n/strings/is.json create mode 100644 src/i18n/strings/it.json create mode 100644 src/i18n/strings/ja.json create mode 100644 src/i18n/strings/jbo.json create mode 100644 src/i18n/strings/ka.json create mode 100644 src/i18n/strings/kab.json create mode 100644 src/i18n/strings/ko.json create mode 100644 src/i18n/strings/lt.json create mode 100644 src/i18n/strings/lv.json create mode 100644 src/i18n/strings/ml.json create mode 100644 src/i18n/strings/mn.json create mode 100644 src/i18n/strings/nb_NO.json create mode 100644 src/i18n/strings/ne.json create mode 100644 src/i18n/strings/nl.json create mode 100644 src/i18n/strings/nn.json create mode 100644 src/i18n/strings/oc.json create mode 100644 src/i18n/strings/pl.json create mode 100644 src/i18n/strings/pt.json create mode 100644 src/i18n/strings/pt_BR.json create mode 100644 src/i18n/strings/ro.json create mode 100644 src/i18n/strings/ru.json create mode 100644 src/i18n/strings/sco.json create mode 100644 src/i18n/strings/si.json create mode 100644 src/i18n/strings/sk.json create mode 100644 src/i18n/strings/sl.json create mode 100644 src/i18n/strings/sq.json create mode 100644 src/i18n/strings/sr.json create mode 100644 src/i18n/strings/sr_Latn.json create mode 100644 src/i18n/strings/sv.json create mode 100644 src/i18n/strings/ta.json create mode 100644 src/i18n/strings/te.json create mode 100644 src/i18n/strings/th.json create mode 100644 src/i18n/strings/tr.json create mode 100644 src/i18n/strings/uk.json create mode 100644 src/i18n/strings/vi.json create mode 100644 src/i18n/strings/vls.json create mode 100644 src/i18n/strings/zh_Hans.json create mode 100644 src/i18n/strings/zh_Hant.json create mode 100644 src/vector/app.tsx create mode 100644 src/vector/getconfig.ts create mode 100644 src/vector/index.html create mode 100644 src/vector/index.ts create mode 100644 src/vector/indexeddb-worker.js create mode 100644 src/vector/init.tsx create mode 100644 src/vector/jitsi/index.html create mode 100644 src/vector/jitsi/index.scss create mode 100644 src/vector/jitsi/index.ts create mode 100644 src/vector/mobile_guide/index.html create mode 100644 src/vector/mobile_guide/index.js create mode 100644 src/vector/modernizr.js create mode 100644 src/vector/platform/ElectronPlatform.tsx create mode 100644 src/vector/platform/PWAPlatform.ts create mode 100644 src/vector/platform/VectorBasePlatform.ts create mode 100644 src/vector/platform/WebPlatform.ts create mode 100644 src/vector/rageshakesetup.ts create mode 100644 src/vector/static/incompatible-browser.html create mode 100644 src/vector/static/unable-to-load.html create mode 100644 src/vector/url_utils.ts create mode 100644 test/.eslintrc.js create mode 100644 test/app-tests/joining-test.js create mode 100644 test/app-tests/loading-test.js create mode 100644 test/jest-mocks.js create mode 100644 test/skin-sdk.js create mode 100644 test/test-utils.js create mode 100644 test/unit-tests/README.md create mode 100644 tsconfig.json create mode 100644 webpack.config.js create mode 100644 yarn.lock diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ced0256 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +# Exclude a bunch of stuff which can make the build context a larger than it needs to be +test/ +webapp/ +lib/ +node_modules/ +karma-reports/ +.idea/ +.tmp/ +config.json* diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..880331a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,23 @@ +# Copyright 2017 Aviral Dasgupta +# +# 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. + +root = true + +[*] +charset=utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..fabbe10 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +src/vector/modernizr.js +src/component-index.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..4009da4 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,23 @@ +module.exports = { + "extends": ["matrix-org", "matrix-org/react"], + "env": { + "browser": true, + "node": true, + }, + "rules": { + "quotes": "off", + }, + "overrides": [{ + "files": ["src/**/*.{ts,tsx}"], + "extends": ["matrix-org/ts", "matrix-org/react"], + "env": { + "browser": true, + }, + "rules": { + "quotes": "off", + // While converting to ts we allow this + "@typescript-eslint/no-explicit-any": "off", + "prefer-promise-reject-errors": "off", + }, + }], +}; diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..afc29f0 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +patreon: matrixdotorg +liberapay: matrixdotorg diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..944c129 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,46 @@ + + + + +### Description + +Describe here the problem that you are experiencing, or the feature you are requesting. + +### Steps to reproduce + +- For bugs, list the steps +- that reproduce the bug +- using hyphens as bullet points + +Describe how what happens differs from what you expected. + +Log: sent/not sent? + + + +### Version information + + + +- **Platform**: web (in-browser) or desktop? + +For the web app: + +- **Browser**: Chrome, Safari, Firefox? which version? +- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? +- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web? + +For the desktop app: + +- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? +- **Version**: 1.x.y diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..ffeaf9a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,56 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + + + + + +### Description + +Describe here the problem that you are experiencing, or the feature you are requesting. + +### Steps to reproduce + +- For bugs, list the steps +- that reproduce the bug +- using hyphens as bullet points + +Describe how what happens differs from what you expected. + + +Logs being sent: yes/no + + + +### Version information + + + +- **Platform**: web (in-browser) or desktop? + +For the web app: + +- **Browser**: Chrome, Safari, Firefox? which version? +- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? +- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web? + +For the desktop app: + +- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? +- **Version**: 1.x.y diff --git a/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md b/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md new file mode 100644 index 0000000..b27af8f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md @@ -0,0 +1,20 @@ +--- +name: Suggestion or Feature request +about: Suggest an idea for this project +title: '' +labels: suggestion +assignees: '' + +--- + +**Is your suggestion related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md b/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md new file mode 100644 index 0000000..4e090d1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md @@ -0,0 +1,58 @@ +--- +name: User Interface or Usability Bug report +about: Please include screenshots in UI/UX bug reports +title: '' +labels: bug, ui/ux +assignees: '' + +--- + + + + + + + +### Description + +Describe here the problem that you are experiencing, or the feature you are requesting. + +### Steps to reproduce + +- For bugs, list the steps +- that reproduce the bug +- using hyphens as bullet points + +Describe how what happens differs from what you expected. + + +Logs being sent: yes/no + + + +### Version information + + + +- **Platform**: web (in-browser) or desktop? + +For the web app: + +- **Browser**: Chrome, Safari, Firefox? which version? +- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? +- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web? + +For the desktop app: + +- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? +- **Version**: 1.x.y diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c7f99f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +/build +/cert.pem +/dist +/key.pem +/lib +/node_modules +/packages/ +/webapp +/.npmrc +/*.log +package-lock.json +.DS_Store +electron/dist +electron/pub +**/.idea +/config.json +/config.json.* +/config.local*.json +/src/component-index.js +/.tmp +/webpack-stats.json diff --git a/.modernizr.json b/.modernizr.json new file mode 100644 index 0000000..e6fde5a --- /dev/null +++ b/.modernizr.json @@ -0,0 +1,38 @@ +{ + "minify": true, + "classPrefix": "modernizr_", + "options": [ + "setClasses" + ], + "feature-detects": [ + "test/css/animations", + "test/css/displaytable", + "test/css/filters", + "test/css/flexbox", + "test/css/objectfit", + + "test/es5/date", + "test/es5/function", + "test/es5/object", + "test/es5/undefined", + + "test/es6/array", + "test/es6/collections", + "test/es6/promises", + "test/es6/string", + + "test/svg", + "test/svg/asimg", + "test/svg/filters", + + "test/url/parser", + "test/url/urlsearchparams", + + "test/cors", + "test/crypto", + "test/iframe/sandbox", + "test/json", + "test/network/fetch", + "test/storage/localstorage" + ] +} diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..e69de29 diff --git a/.stylelintrc.js b/.stylelintrc.js new file mode 100644 index 0000000..7296210 --- /dev/null +++ b/.stylelintrc.js @@ -0,0 +1,26 @@ +// Copied from react-sdk +// TODO: Only keep one copy of this for synchronization purposes +module.exports = { + "extends": "stylelint-config-standard", + "plugins": [ + "stylelint-scss", + ], + "rules": { + "indentation": 4, + "comment-empty-line-before": null, + "declaration-empty-line-before": null, + "length-zero-no-unit": null, + "rule-empty-line-before": null, + "color-hex-length": null, + "max-empty-lines": null, + "number-no-trailing-zeros": null, + "number-leading-zero": null, + "selector-list-comma-newline-after": null, + "at-rule-no-unknown": null, + "no-descending-specificity": null, + "scss/at-rule-no-unknown": [true, { + // https://github.com/vector-im/riot-web/issues/10544 + "ignoreAtRules": ["define-mixin"], + }], + } +}; diff --git a/AUTHORS.rst b/AUTHORS.rst new file mode 100644 index 0000000..a92ca06 --- /dev/null +++ b/AUTHORS.rst @@ -0,0 +1,18 @@ +Vector is written mainly by the Vector team, building upon the Matrix React +SDK. Vector also welcomes external contributions. Third party contributors +include: + +* Nolan Darilek (https://github.com/ndarilek) + Accessibility and semantic markup contributions + +* https://github.com/neko259 + Improved scrollbar CSS + +* Florent VIOLLEAU (https://github.com/floviolleau) + Improve README.md for a better understanding of installation instructions + +* Michael Telatynski (https://github.com/t3chguy) + Improved consistency of inverted elements in dark theme across browsers + +* Alexandr Korsak (https://github.com/oivoodoo) + Improved multiple file uploading diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5441e8b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4491 @@ +Changes in [1.7.12](https://github.com/vector-im/element-web/releases/tag/v1.7.12) (2020-10-28) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.11...v1.7.12) + + * Upgrade to React SDK 3.7.1 and JS SDK 9.0.1 + * [Release] Fix Jitsi regressions with custom themes + [\#15577](https://github.com/vector-im/element-web/pull/15577) + +Changes in [1.7.11](https://github.com/vector-im/element-web/releases/tag/v1.7.11) (2020-10-26) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.11-rc.1...v1.7.11) + + * Upgrade to React SDK 3.7.0 and JS SDK 9.0.0 + +Changes in [1.7.11-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.11-rc.1) (2020-10-21) +========================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.10...v1.7.11-rc.1) + + * Upgrade to React SDK 3.7.0-rc.2 and JS SDK 9.0.0-rc.1 + * Update Weblate URL + [\#15516](https://github.com/vector-im/element-web/pull/15516) + * Translations update from Weblate + [\#15517](https://github.com/vector-im/element-web/pull/15517) + * Jitsi accept theme variable and restyle + [\#15499](https://github.com/vector-im/element-web/pull/15499) + * Skip editor confirmation of upgrades + [\#15506](https://github.com/vector-im/element-web/pull/15506) + * Adjust for new widget messaging APIs + [\#15495](https://github.com/vector-im/element-web/pull/15495) + * Use HTTPS_PROXY environment variable for downloading external_api.min… + [\#15479](https://github.com/vector-im/element-web/pull/15479) + * Document customisation points + [\#15475](https://github.com/vector-im/element-web/pull/15475) + * Don't fatally end the Jitsi widget when it's not being used as a widget + [\#15466](https://github.com/vector-im/element-web/pull/15466) + * electron-platform: Pass the user/devce id pair when initializing the event + index. + [\#15455](https://github.com/vector-im/element-web/pull/15455) + +Changes in [1.7.10](https://github.com/vector-im/element-web/releases/tag/v1.7.10) (2020-10-20) +=============================================================================================== +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.9...v1.7.10) + + * [Release] Adjust for new widget messaging APIs + [\#15497](https://github.com/vector-im/element-web/pull/15497) + * Upgrade to React SDK 3.6.1 + +Changes in [1.7.9](https://github.com/vector-im/element-web/releases/tag/v1.7.9) (2020-10-12) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.9-rc.1...v1.7.9) + + * Upgrade to React SDK 3.6.0 and JS SDK 8.5.0 + +Changes in [1.7.9-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.9-rc.1) (2020-10-07) +======================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.8...v1.7.9-rc.1) + + * Upgrade to React SDK 3.6.0-rc.1 and JS SDK 8.5.0-rc.1 + * Update from Weblate + [\#15406](https://github.com/vector-im/element-web/pull/15406) + * Update Jest and JSDOM + [\#15402](https://github.com/vector-im/element-web/pull/15402) + * Add support for dehydration/fallback keys + [\#15398](https://github.com/vector-im/element-web/pull/15398) + * Remove riot-bot from sample config + [\#15376](https://github.com/vector-im/element-web/pull/15376) + * Switch to using the Widget API SDK for Jitsi widgets + [\#15102](https://github.com/vector-im/element-web/pull/15102) + * Remove workbox + [\#15352](https://github.com/vector-im/element-web/pull/15352) + * Disable workbox when running in webpack dev server, not in dev mode + [\#15345](https://github.com/vector-im/element-web/pull/15345) + * Update Riot -> Element in contribute.json + [\#15326](https://github.com/vector-im/element-web/pull/15326) + * Update Riot -> Element in redeploy.py + [\#15336](https://github.com/vector-im/element-web/pull/15336) + * Update Riot -> Element in docs/feature-flags.md + [\#15325](https://github.com/vector-im/element-web/pull/15325) + * Update Riot -> Element in element.io/README.md + [\#15327](https://github.com/vector-im/element-web/pull/15327) + * Update Riot -> Element in VectorAuthFooter + [\#15328](https://github.com/vector-im/element-web/pull/15328) + * Update Riot -> Element in VectorEmbeddedPage + [\#15329](https://github.com/vector-im/element-web/pull/15329) + * Update Riot -> Element in docs/review.md + [\#15330](https://github.com/vector-im/element-web/pull/15330) + * Update Riot -> Element in welcome.html + [\#15332](https://github.com/vector-im/element-web/pull/15332) + * Update Riot -> Element in issues-burndown.pl + [\#15333](https://github.com/vector-im/element-web/pull/15333) + * Update Riot -> Element in redeploy.py + [\#15334](https://github.com/vector-im/element-web/pull/15334) + * Update Riot -> Element in index.ts + [\#15335](https://github.com/vector-im/element-web/pull/15335) + * Update Riot -> Element Web in issue templates + [\#15324](https://github.com/vector-im/element-web/pull/15324) + * Give the Jitsi widget an icon to help with discovery + [\#15316](https://github.com/vector-im/element-web/pull/15316) + * Jitsi widget wrapper updates for hangup button + [\#15219](https://github.com/vector-im/element-web/pull/15219) + * Tidy up Service Worker, only run Workbox in production + [\#15271](https://github.com/vector-im/element-web/pull/15271) + * Remove conference handler + [\#15274](https://github.com/vector-im/element-web/pull/15274) + * Rebrand the webpack pipeline for Element + [\#15266](https://github.com/vector-im/element-web/pull/15266) + * Replace dummy sw.js with pre-caching and runtime-caching workbox SW + [\#15196](https://github.com/vector-im/element-web/pull/15196) + +Changes in [1.7.8](https://github.com/vector-im/element-web/releases/tag/v1.7.8) (2020-09-28) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.8-rc.1...v1.7.8) + + * Upgrade to React SDK 3.5.0 and JS SDK 8.4.1 + +Changes in [1.7.8-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.8-rc.1) (2020-09-23) +======================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.7...v1.7.8-rc.1) + + * Upgrade to React SDK 3.5.0-rc.1 and JS SDK 8.4.0-rc.1 + * Update from Weblate + [\#15262](https://github.com/vector-im/element-web/pull/15262) + * Upgrade sanitize-html + [\#15260](https://github.com/vector-im/element-web/pull/15260) + * Document config for preferring Secure Backup setup methods + [\#15251](https://github.com/vector-im/element-web/pull/15251) + * Add end-user documentation for UI features + [\#15190](https://github.com/vector-im/element-web/pull/15190) + * Update git checkout instructions + [\#15218](https://github.com/vector-im/element-web/pull/15218) + * If no bug_report_endpoint_url, hide rageshaking from the App + [\#15201](https://github.com/vector-im/element-web/pull/15201) + * Bump node-fetch from 2.6.0 to 2.6.1 + [\#15153](https://github.com/vector-im/element-web/pull/15153) + * Remove references to Travis CI + [\#15137](https://github.com/vector-im/element-web/pull/15137) + * Fix onNewScreen to use replace when going from roomId->roomAlias + [\#15127](https://github.com/vector-im/element-web/pull/15127) + * Enable Estonian in language menu + [\#15136](https://github.com/vector-im/element-web/pull/15136) + +Changes in [1.7.7](https://github.com/vector-im/element-web/releases/tag/v1.7.7) (2020-09-14) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.6...v1.7.7) + + * Upgrade to React SDK 3.4.1 + +Changes in [1.7.6](https://github.com/vector-im/element-web/releases/tag/v1.7.6) (2020-09-14) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.6-rc.1...v1.7.6) + + * Upgrade to React SDK 3.4.0 and JS SDK 8.3.0 + +Changes in [1.7.6-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.6-rc.1) (2020-09-09) +======================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.5...v1.7.6-rc.1) + + * Upgrade to React SDK 3.4.0-rc.1 and JS SDK 8.3.0-rc.1 + * Update from Weblate + [\#15125](https://github.com/vector-im/element-web/pull/15125) + * Support usage of Jitsi widgets with "openidtoken-jwt" auth + [\#15114](https://github.com/vector-im/element-web/pull/15114) + * Fix eslint ts override tsx matching and delint + [\#15064](https://github.com/vector-im/element-web/pull/15064) + * Add testing to review guidelines + [\#15050](https://github.com/vector-im/element-web/pull/15050) + +Changes in [1.7.5](https://github.com/vector-im/element-web/releases/tag/v1.7.5) (2020-09-01) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.5-rc.1...v1.7.5) + +## Security notice + +Element Web 1.7.5 fixes an issue where encrypted state events could break incoming call handling. +Thanks to @awesome-michael from Awesome Technologies for responsibly disclosing this via Matrix's +Security Disclosure Policy. + +## All changes + + * Upgrade to React SDK 3.3.0 and JS SDK 8.2.0 + +Changes in [1.7.5-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.5-rc.1) (2020-08-26) +======================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.4...v1.7.5-rc.1) + + * Upgrade to React SDK 3.3.0-rc.1 and JS SDK 8.2.0-rc.1 + * Update from Weblate + [\#15045](https://github.com/vector-im/element-web/pull/15045) + * Document .well-known E2EE secure backup setting + [\#15003](https://github.com/vector-im/element-web/pull/15003) + * Add docs for communities v2 prototyping feature flag + [\#15013](https://github.com/vector-im/element-web/pull/15013) + * Update links in README.md to point to Element + [\#14973](https://github.com/vector-im/element-web/pull/14973) + * Make kabyle translation available + [\#15027](https://github.com/vector-im/element-web/pull/15027) + * Change Riot to Element in readme + [\#15016](https://github.com/vector-im/element-web/pull/15016) + * Update links to element in the readme + [\#15014](https://github.com/vector-im/element-web/pull/15014) + * Link to Element in F-Droid as well + [\#15002](https://github.com/vector-im/element-web/pull/15002) + * Settings v3: Update documentation and configs for new feature flag behaviour + [\#14986](https://github.com/vector-im/element-web/pull/14986) + * Update jitsi.md with Element Android details + [\#14952](https://github.com/vector-im/element-web/pull/14952) + * TypeScript: enable es2019 lib for newer definitions + [\#14983](https://github.com/vector-im/element-web/pull/14983) + * Add reaction preview labs flags to develop + [\#14979](https://github.com/vector-im/element-web/pull/14979) + * Document new labs tweaks + [\#14958](https://github.com/vector-im/element-web/pull/14958) + +Changes in [1.7.4](https://github.com/vector-im/element-web/releases/tag/v1.7.4) (2020-08-17) +============================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.4-rc.1...v1.7.4) + + * Upgrade to React SDK 3.2.0 and JS SDK 8.1.0 + +Changes in [1.7.4-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.4-rc.1) (2020-08-13) +======================================================================================================= +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.3...v1.7.4-rc.1) + + * Upgrade to React SDK 3.2.0-rc.1 and JS SDK 8.1.0-rc.1 + * Update policy links to element.io + [\#14905](https://github.com/vector-im/element-web/pull/14905) + * Update from Weblate + [\#14949](https://github.com/vector-im/element-web/pull/14949) + * Try to close notification on all platforms which support it, not just + electron + [\#14939](https://github.com/vector-im/element-web/pull/14939) + * Update bug report submission URL + [\#14903](https://github.com/vector-im/element-web/pull/14903) + * Fix arm docker build + [\#14522](https://github.com/vector-im/element-web/pull/14522) + +Changes in [1.7.3](https://github.com/vector-im/element-web/releases/tag/v1.7.3) (2020-08-05) +============================================================================================= + +## Security notice + +Element Web 1.7.3 (as well as the earlier release 1.7.2) fixes an issue where +replying to a specially formatted message would make it seem like the replier +said something they did not. Thanks to Sorunome for responsibly disclosing this +via Matrix's Security Disclosure Policy. + +Element Web 1.7.3 (as well as the earlier release 1.7.2) fixes an issue where an +unexpected language ID in a code block could cause Element to crash. Thanks to +SakiiR for responsibly disclosing this via Matrix's Security Disclosure Policy. + +## All changes + +[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.3-rc.1...v1.7.3) + + * Upgrade to React SDK 3.1.0 and JS SDK 8.0.1 + +Changes in [1.7.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.7.3-rc.1) (2020-07-31) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.7.2...v1.7.3-rc.1) + + * Upgrade to React SDK 3.1.0-rc.1 and JS SDK 8.0.1-rc.1 + * Make Lojban translation available + [\#14703](https://github.com/vector-im/riot-web/pull/14703) + * Update from Weblate + [\#14841](https://github.com/vector-im/riot-web/pull/14841) + * Remove redundant lint dependencies + [\#14810](https://github.com/vector-im/riot-web/pull/14810) + * Bump elliptic from 6.5.2 to 6.5.3 + [\#14826](https://github.com/vector-im/riot-web/pull/14826) + * Update mobile config intercept URL + [\#14796](https://github.com/vector-im/riot-web/pull/14796) + * Fix typo in https:// + [\#14791](https://github.com/vector-im/riot-web/pull/14791) + +Changes in [1.7.2](https://github.com/vector-im/riot-web/releases/tag/v1.7.2) (2020-07-27) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.7.1...v1.7.2) + + * Upgrade to React SDK 3.0.0 and JS SDK 8.0.0 + * Update from Weblate + [\#14778](https://github.com/vector-im/riot-web/pull/14778) + * Capitalize letters + [\#14566](https://github.com/vector-im/riot-web/pull/14566) + * Configure eslint package and fix lint issues + [\#14673](https://github.com/vector-im/riot-web/pull/14673) + * Riot → Element + [\#14581](https://github.com/vector-im/riot-web/pull/14581) + * Remove labs info for the new room list + [\#14603](https://github.com/vector-im/riot-web/pull/14603) + * Convince Webpack to use development on CI + [\#14593](https://github.com/vector-im/riot-web/pull/14593) + * Move dev dep to the right place + [\#14572](https://github.com/vector-im/riot-web/pull/14572) + * Bump lodash from 4.17.15 to 4.17.19 + [\#14552](https://github.com/vector-im/riot-web/pull/14552) + * Update all mobile links to match marketing site + [\#14541](https://github.com/vector-im/riot-web/pull/14541) + +Changes in [1.7.1](https://github.com/vector-im/riot-web/releases/tag/v1.7.1) (2020-07-16) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.7.0...v1.7.1) + + * Upgrade to React SDK 2.10.1 + * Fix SSO session ID paramater + [\#14544](https://github.com/vector-im/riot-web/pull/14544) + * Run pngcrush on vector-icons + [\#14488](https://github.com/vector-im/riot-web/pull/14488) + * Fix hosting signup link + [\#14502](https://github.com/vector-im/riot-web/pull/14502) + * Use the right protocol for SSO URLs + [\#14513](https://github.com/vector-im/riot-web/pull/14513) + * Fix mstile-310x150 by renaming it + [\#14485](https://github.com/vector-im/riot-web/pull/14485) + * Update blog and twitter links to point to Element + [\#14478](https://github.com/vector-im/riot-web/pull/14478) + +Changes in [1.7.0](https://github.com/vector-im/riot-web/releases/tag/v1.7.0) (2020-07-15) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.8...v1.7.0) + + * App name changed from Riot to Element + * Upgrade to React SDK 2.10.0 + * Remove redundant enum + [\#14472](https://github.com/vector-im/riot-web/pull/14472) + * Remove font scaling from labs + [\#14355](https://github.com/vector-im/riot-web/pull/14355) + * Update documentation and remove labs flag for new room list + [\#14375](https://github.com/vector-im/riot-web/pull/14375) + * Update from Weblate + [\#14434](https://github.com/vector-im/riot-web/pull/14434) + * Release the irc layout from labs + [\#14350](https://github.com/vector-im/riot-web/pull/14350) + * Fix welcomeBackgroundUrl array causing background to change during use + [\#14368](https://github.com/vector-im/riot-web/pull/14368) + * Be more explicit about type when calling platform startUpdater + [\#14299](https://github.com/vector-im/riot-web/pull/14299) + +Changes in [1.6.8](https://github.com/vector-im/riot-web/releases/tag/v1.6.8) (2020-07-03) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.8-rc.1...v1.6.8) + + * Upgrade to JS SDK 7.1.0 and React SDK 2.9.0 + +Changes in [1.6.8-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.8-rc.1) (2020-07-01) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.7...v1.6.8-rc.1) + + * Upgrade to JS SDK 7.1.0-rc.1 and React SDK 2.9.0-rc.1 + * Update from Weblate + [\#14282](https://github.com/vector-im/riot-web/pull/14282) + * Show a download completed toast in electron + [\#14248](https://github.com/vector-im/riot-web/pull/14248) + * Add the new spinner feature labs flag + [\#14213](https://github.com/vector-im/riot-web/pull/14213) + * Fix loading-test for SSO plaf changes + [\#14212](https://github.com/vector-im/riot-web/pull/14212) + * Fix spelling on startup error page + [\#14199](https://github.com/vector-im/riot-web/pull/14199) + * Document fonts in custom theme + [\#14175](https://github.com/vector-im/riot-web/pull/14175) + * Update from Weblate + [\#14129](https://github.com/vector-im/riot-web/pull/14129) + * ElectronPlatform: Implement the isRoomIndexed method. + [\#13957](https://github.com/vector-im/riot-web/pull/13957) + * ElectronPlatform: Add support to set and get the index user version. + [\#14080](https://github.com/vector-im/riot-web/pull/14080) + * Mark the new room list as ready for general testing + [\#14102](https://github.com/vector-im/riot-web/pull/14102) + +Changes in [1.6.7](https://github.com/vector-im/riot-web/releases/tag/v1.6.7) (2020-06-29) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.6...v1.6.7) + + * Upgrade to React SDK 2.8.1 + +Changes in [1.6.6](https://github.com/vector-im/riot-web/releases/tag/v1.6.6) (2020-06-23) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.6-rc.1...v1.6.6) + + * Upgrade to JS SDK 7.0.0 and React SDK 2.8.0 + +Changes in [1.6.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.6-rc.1) (2020-06-17) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.5...v1.6.6-rc.1) + + * Upgrade to JS SDK 7.0.0-rc.1 and React SDK 2.8.0-rc.1 + * Update from Weblate + [\#14067](https://github.com/vector-im/riot-web/pull/14067) + * Update from Weblate + [\#14032](https://github.com/vector-im/riot-web/pull/14032) + * Attempt to fix decoder ring for relative hosted riots + [\#13987](https://github.com/vector-im/riot-web/pull/13987) + * Upgrade deps + [\#13952](https://github.com/vector-im/riot-web/pull/13952) + * Fix riot-desktop manual update check getting stuck on Downloading... + [\#13946](https://github.com/vector-im/riot-web/pull/13946) + * Bump websocket-extensions from 0.1.3 to 0.1.4 + [\#13943](https://github.com/vector-im/riot-web/pull/13943) + * Add e2ee-default:false docs + [\#13914](https://github.com/vector-im/riot-web/pull/13914) + * make IPC calls to get pickle key + [\#13846](https://github.com/vector-im/riot-web/pull/13846) + * fix loading test for new sso pattern + [\#13913](https://github.com/vector-im/riot-web/pull/13913) + * Fix login loop where the sso flow returns to `#/login` + [\#13889](https://github.com/vector-im/riot-web/pull/13889) + * Fix typo in docs + [\#13905](https://github.com/vector-im/riot-web/pull/13905) + * Remove cross-signing from labs + [\#13904](https://github.com/vector-im/riot-web/pull/13904) + * Add PWA Platform with PWA-specific badge controls + [\#13890](https://github.com/vector-im/riot-web/pull/13890) + * Modernizr check for subtle crypto as we require it all over the place + [\#13828](https://github.com/vector-im/riot-web/pull/13828) + +Changes in [1.6.5](https://github.com/vector-im/riot-web/releases/tag/v1.6.5) (2020-06-16) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.4...v1.6.5) + +* Upgrade to JS SDK 6.2.2 and React SDK 2.7.2 + +Changes in [1.6.4](https://github.com/vector-im/riot-web/releases/tag/v1.6.4) (2020-06-05) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.3...v1.6.4) + +* Upgrade to JS SDK 6.2.1 and React SDK 2.7.1 + +Changes in [1.6.3](https://github.com/vector-im/riot-web/releases/tag/v1.6.3) (2020-06-04) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.3-rc.1...v1.6.3) + +## Security notice + +Riot Web 1.6.3 fixes a vulnerability in single sign-on (SSO) deployments where Riot Web could be confused into sending authentication details to an attacker-controlled server. Thanks to Quentin Gliech for responsibly disclosing this via Matrix's Security Disclosure Policy. + +## All changes + + * Fix login loop where the sso flow returns to `#/login` to release + [\#13915](https://github.com/vector-im/riot-web/pull/13915) + +Changes in [1.6.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.3-rc.1) (2020-06-02) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.2...v1.6.3-rc.1) + + * Upgrade to JS SDK 6.2.0-rc.1 and React SDK 2.7.0-rc.2 + * Get rid of welcome.html's Chat with Riot Bot button + [\#13842](https://github.com/vector-im/riot-web/pull/13842) + * Update from Weblate + [\#13886](https://github.com/vector-im/riot-web/pull/13886) + * Allow deferring of Update Toast until the next morning + [\#13864](https://github.com/vector-im/riot-web/pull/13864) + * Give contextual feedback for manual update check instead of banner + [\#13862](https://github.com/vector-im/riot-web/pull/13862) + * Add app-load doc + [\#13834](https://github.com/vector-im/riot-web/pull/13834) + * Update Modular hosting link + [\#13777](https://github.com/vector-im/riot-web/pull/13777) + * Replace New Version Bar with a Toast + [\#13776](https://github.com/vector-im/riot-web/pull/13776) + * Remove webpack-build-notifier from lockfile + [\#13814](https://github.com/vector-im/riot-web/pull/13814) + * Add media queries and mobile viewport (#12142) + [\#13818](https://github.com/vector-im/riot-web/pull/13818) + * Fix @types/react conflict in matrix-react-sdk + [\#13809](https://github.com/vector-im/riot-web/pull/13809) + * Fix manual update checking, super in arrow funcs doesn't work + [\#13808](https://github.com/vector-im/riot-web/pull/13808) + * Update from Weblate + [\#13806](https://github.com/vector-im/riot-web/pull/13806) + * Convert platforms to Typescript + [\#13756](https://github.com/vector-im/riot-web/pull/13756) + * Fix EventEmitter typescript signature in node typings + [\#13764](https://github.com/vector-im/riot-web/pull/13764) + * Add docs and labs flag for new room list implementation + [\#13675](https://github.com/vector-im/riot-web/pull/13675) + * Add font scaling labs setting. + [\#13352](https://github.com/vector-im/riot-web/pull/13352) + * Add labs flag for alternate message layouts + [\#13350](https://github.com/vector-im/riot-web/pull/13350) + * Move dispatcher references in support of TypeScript conversion + [\#13666](https://github.com/vector-im/riot-web/pull/13666) + * Update from Weblate + [\#13704](https://github.com/vector-im/riot-web/pull/13704) + * Replace favico.js dependency with simplified variant grown from it + [\#13649](https://github.com/vector-im/riot-web/pull/13649) + * Remove Electron packaging scripts + [\#13688](https://github.com/vector-im/riot-web/pull/13688) + * Fix postcss order to allow mixin variables to work + [\#13674](https://github.com/vector-im/riot-web/pull/13674) + * Pass screenAfterLogin through SSO in the callback url + [\#13650](https://github.com/vector-im/riot-web/pull/13650) + +Changes in [1.6.2](https://github.com/vector-im/riot-web/releases/tag/v1.6.2) (2020-05-22) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.1...v1.6.2) + + * Upgrade to React SDK 2.6.1 + +Changes in [1.6.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.1) (2020-05-19) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.1-rc.1...v1.6.1) + + * Upgrade to React SDK 2.6.0 and JS SDK 6.1.0 + +Changes in [1.6.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.1-rc.1) (2020-05-14) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0...v1.6.1-rc.1) + + * Upgrade to React SDK 2.6.0-rc.1 and JS SDK 6.1.0-rc.1 + * Update from Weblate + [\#13673](https://github.com/vector-im/riot-web/pull/13673) + * Add notranslate class to matrixchat to prevent translation by Google + Translate + [\#13669](https://github.com/vector-im/riot-web/pull/13669) + * Added Anchor Link to the development of matrix sdk + [\#13638](https://github.com/vector-im/riot-web/pull/13638) + * Prefetch the formatting button mask svg images + [\#13631](https://github.com/vector-im/riot-web/pull/13631) + * use a different image in previews + [\#13488](https://github.com/vector-im/riot-web/pull/13488) + * Update from Weblate + [\#13625](https://github.com/vector-im/riot-web/pull/13625) + * Remove electron_app as we now have riot-desktop repo + [\#13544](https://github.com/vector-im/riot-web/pull/13544) + * add new images for PWA icons + [\#13556](https://github.com/vector-im/riot-web/pull/13556) + * Remove unused feature flag from config + [\#13504](https://github.com/vector-im/riot-web/pull/13504) + * Update from Weblate + [\#13486](https://github.com/vector-im/riot-web/pull/13486) + * Developer tool: convert rageshake error locations back to sourcecode + locations + [\#13357](https://github.com/vector-im/riot-web/pull/13357) + * App load tweaks, improve error pages + [\#13329](https://github.com/vector-im/riot-web/pull/13329) + * Tweak default device name to be more compact + [\#13465](https://github.com/vector-im/riot-web/pull/13465) + * Tweak default device name on macOS + [\#13460](https://github.com/vector-im/riot-web/pull/13460) + * Update docs with custom theming changes + [\#13406](https://github.com/vector-im/riot-web/pull/13406) + * Update from Weblate + [\#13395](https://github.com/vector-im/riot-web/pull/13395) + * Remove docs and config for invite only padlocks + [\#13374](https://github.com/vector-im/riot-web/pull/13374) + * Revert "Add font scaling labs setting." + [\#13351](https://github.com/vector-im/riot-web/pull/13351) + * Expand feature flag docs to cover additional release channels + [\#13341](https://github.com/vector-im/riot-web/pull/13341) + * Optimized image assets by recompressing without affecting quality. + [\#13034](https://github.com/vector-im/riot-web/pull/13034) + * Add font scaling labs setting. + [\#13199](https://github.com/vector-im/riot-web/pull/13199) + * Remove encrypted message search feature flag + [\#13325](https://github.com/vector-im/riot-web/pull/13325) + * Fix `default_federate` settting description + [\#13312](https://github.com/vector-im/riot-web/pull/13312) + * Clarify that the .well-known method for Jitsi isn't available yet + [\#13314](https://github.com/vector-im/riot-web/pull/13314) + * add config option to tsc resolveJsonModule + [\#13296](https://github.com/vector-im/riot-web/pull/13296) + * Fix dispatcher import to be extension agnostic + [\#13297](https://github.com/vector-im/riot-web/pull/13297) + * Document more config options in config.md (fixes #13089) + [\#13260](https://github.com/vector-im/riot-web/pull/13260) + * Fix tests post-js-sdk-filters change + [\#13295](https://github.com/vector-im/riot-web/pull/13295) + * Make Jitsi download script a JS script + [\#13227](https://github.com/vector-im/riot-web/pull/13227) + * Use matrix-react-sdk type extensions as a base + [\#13271](https://github.com/vector-im/riot-web/pull/13271) + * Allow Riot Web to randomly pick welcome backgrounds + [\#13235](https://github.com/vector-im/riot-web/pull/13235) + * Update cross-signing feature docs and document fallback procedures + [\#13224](https://github.com/vector-im/riot-web/pull/13224) + +Changes in [1.6.0](https://github.com/vector-im/riot-web/releases/tag/v1.6.0) (2020-05-05) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.6...v1.6.0) + + * Cross-signing and E2EE by default for DMs and private rooms enabled + * Upgrade to React SDK 2.5.0 and JS SDK 6.0.0 + +Changes in [1.6.0-rc.6](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.6) (2020-05-01) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.5...v1.6.0-rc.6) + + * Upgrade to React SDK 2.5.0-rc.6 and JS SDK 6.0.0-rc.2 + +Changes in [1.6.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.5) (2020-04-30) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.4...v1.6.0-rc.5) + + * Upgrade to React SDK 2.5.0-rc.5 and JS SDK 6.0.0-rc.1 + * Remove feature flag docs from docs on release + [\#13375](https://github.com/vector-im/riot-web/pull/13375) + +Changes in [1.6.0-rc.4](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.4) (2020-04-23) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.3...v1.6.0-rc.4) + + * Upgrade to React SDK 2.5.0-rc.4 and JS SDK 5.3.1-rc.4 + +Changes in [1.6.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.3) (2020-04-17) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.2...v1.6.0-rc.3) + + * Upgrade to React SDK 2.5.0-rc.3 and JS SDK 5.3.1-rc.3 + +Changes in [1.6.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.2) (2020-04-16) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.1...v1.6.0-rc.2) + + * Upgrade to React SDK 2.5.0-rc.2 and JS SDK 5.3.1-rc.2 + * Enable cross-signing / E2EE by default for DM without config changes + +Changes in [1.6.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.1) (2020-04-15) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.16-rc.1...v1.6.0-rc.1) + + * Enable cross-signing / E2EE by default for DM on release + [\#13179](https://github.com/vector-im/riot-web/pull/13179) + * Upgrade to React SDK 2.5.0-rc.1 and JS SDK 5.3.1-rc.1 + * Add instruction to resolve the inotify watch limit issue + [\#13128](https://github.com/vector-im/riot-web/pull/13128) + * docs: labs: add a pointer to config.md + [\#13149](https://github.com/vector-im/riot-web/pull/13149) + * Fix Electron SSO handling to support multiple profiles + [\#13028](https://github.com/vector-im/riot-web/pull/13028) + * Add riot-desktop shortcuts for forward/back matching browsers&slack + [\#13133](https://github.com/vector-im/riot-web/pull/13133) + * Allow rageshake to fail in init + [\#13164](https://github.com/vector-im/riot-web/pull/13164) + * Fix broken yarn install link in README.md + [\#13125](https://github.com/vector-im/riot-web/pull/13125) + * fix build:jitsi scripts crash caused by a missing folder + [\#13122](https://github.com/vector-im/riot-web/pull/13122) + * App load order changes to catch errors better + [\#13095](https://github.com/vector-im/riot-web/pull/13095) + * Upgrade deps + [\#13080](https://github.com/vector-im/riot-web/pull/13080) + +Changes in [1.5.16-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.16-rc.1) (2020-04-08) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.15...v1.5.16-rc.1) + + * Upgrade React SDK to 2.4.0-rc.1 and JS SDK to 5.3.0-rc.1 + * Update from Weblate + [\#13078](https://github.com/vector-im/riot-web/pull/13078) + * Mention Jitsi support at the .well-known level in Jitsi docs + [\#13047](https://github.com/vector-im/riot-web/pull/13047) + * Add new default home page fallback + [\#13049](https://github.com/vector-im/riot-web/pull/13049) + * App load order tweaks for code splitting + [\#13032](https://github.com/vector-im/riot-web/pull/13032) + * Add some docs about Jitsi widgets and Jitsi configuration + [\#13027](https://github.com/vector-im/riot-web/pull/13027) + * Bump minimist from 1.2.2 to 1.2.3 in /electron_app + [\#13030](https://github.com/vector-im/riot-web/pull/13030) + * Fix Electron mac-specific shortcut being registered on Web too. + [\#13020](https://github.com/vector-im/riot-web/pull/13020) + * Add a console warning that errors from Jitsi Meet are fine + [\#12968](https://github.com/vector-im/riot-web/pull/12968) + * Fix popout support for jitsi widgets + [\#12975](https://github.com/vector-im/riot-web/pull/12975) + * Some grammar and clarifications + [\#12925](https://github.com/vector-im/riot-web/pull/12925) + * Don't immediately remove notifications from notification trays + [\#12861](https://github.com/vector-im/riot-web/pull/12861) + * Remove welcome user from config + [\#12894](https://github.com/vector-im/riot-web/pull/12894) + +Changes in [1.5.15](https://github.com/vector-im/riot-web/releases/tag/v1.5.15) (2020-04-01) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.14...v1.5.15) + +## Security notice + +The `jitsi.html` widget wrapper introduced in Riot 1.5.14 could be used to extract user data by tricking the user into adding a custom widget or opening a link in the browser used to run Riot. Jitsi widgets created through Riot UI do not pose a risk and do not need to be recreated. + +It is important to purge any copies of Riot 1.5.14 so that the vulnerable `jitsi.html` wrapper from that version is no longer accessible. + +## All changes + + * Upgrade React SDK to 2.3.1 for Jitsi fixes + * Fix popout support for jitsi widgets + [\#12980](https://github.com/vector-im/riot-web/pull/12980) + +Changes in [1.5.14](https://github.com/vector-im/riot-web/releases/tag/v1.5.14) (2020-03-30) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.14-rc.1...v1.5.14) + + * Upgrade JS SDK to 5.2.0 and React SDK to 2.3.0 + +Changes in [1.5.14-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.14-rc.1) (2020-03-26) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.13...v1.5.14-rc.1) + + * Upgrade JS SDK to 5.2.0-rc.1 and React SDK to 2.3.0-rc.1 + * Update from Weblate + [\#12890](https://github.com/vector-im/riot-web/pull/12890) + * App load tweaks + [\#12869](https://github.com/vector-im/riot-web/pull/12869) + * Add review policy doc + [\#12730](https://github.com/vector-im/riot-web/pull/12730) + * Fix artifact searching in redeployer + [\#12875](https://github.com/vector-im/riot-web/pull/12875) + * Fix Jitsi wrapper being large by getting the config from elsewhere + [\#12845](https://github.com/vector-im/riot-web/pull/12845) + * Add webpack stats which will be used by CI and stored to artifacts + [\#12832](https://github.com/vector-im/riot-web/pull/12832) + * Revert "Remove useless app preloading from Jitsi widget wrapper" + [\#12842](https://github.com/vector-im/riot-web/pull/12842) + * Remove useless app preloading from Jitsi widget wrapper + [\#12836](https://github.com/vector-im/riot-web/pull/12836) + * Update from Weblate + [\#12829](https://github.com/vector-im/riot-web/pull/12829) + * Fix version for Docker builds + [\#12799](https://github.com/vector-im/riot-web/pull/12799) + * Register Mac electron specific Cmd+, shortcut to User Settings + [\#12800](https://github.com/vector-im/riot-web/pull/12800) + * Use a local widget wrapper for Jitsi calls + [\#12780](https://github.com/vector-im/riot-web/pull/12780) + * Delete shortcuts.md + [\#12786](https://github.com/vector-im/riot-web/pull/12786) + * Remove remainders of gemini-scrollbar and react-gemini-scrollbar + [\#12756](https://github.com/vector-im/riot-web/pull/12756) + * Update electron to v7.1.14 + [\#12762](https://github.com/vector-im/riot-web/pull/12762) + * Add url tests to Modernizr + [\#12735](https://github.com/vector-im/riot-web/pull/12735) + * ElectronPlatform: Add support to remove events from the event index. + [\#12703](https://github.com/vector-im/riot-web/pull/12703) + * Bump minimist from 1.2.0 to 1.2.2 in /electron_app + [\#12744](https://github.com/vector-im/riot-web/pull/12744) + * Add docs and flag for custom theme support + [\#12731](https://github.com/vector-im/riot-web/pull/12731) + * Declare jsx in tsconfig for IDEs + [\#12716](https://github.com/vector-im/riot-web/pull/12716) + * Remove stuff that yarn install doesn't think we need + [\#12713](https://github.com/vector-im/riot-web/pull/12713) + * yarn upgrade + [\#12691](https://github.com/vector-im/riot-web/pull/12691) + * Support TypeScript for React components + [\#12696](https://github.com/vector-im/riot-web/pull/12696) + +Changes in [1.5.13](https://github.com/vector-im/riot-web/releases/tag/v1.5.13) (2020-03-17) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.13-rc.1...v1.5.13) + + * Upgrade to JS SDK 5.1.1 and React SDK 2.2.3 + +Changes in [1.5.13-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.13-rc.1) (2020-03-11) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.12...v1.5.13-rc.1) + + * Update from Weblate + [\#12688](https://github.com/vector-im/riot-web/pull/12688) + * Fix Docker image version for develop builds + [\#12670](https://github.com/vector-im/riot-web/pull/12670) + * docker: optimize custom sdk builds + [\#12612](https://github.com/vector-im/riot-web/pull/12612) + * riot-desktop open SSO in browser so user doesn't have to auth twice + [\#12590](https://github.com/vector-im/riot-web/pull/12590) + * Fix SSO flows for electron 8.0.2 by re-breaking will-navigate + [\#12585](https://github.com/vector-im/riot-web/pull/12585) + * index.html: Place noscript on top of the page + [\#12563](https://github.com/vector-im/riot-web/pull/12563) + * Remove will-navigate comment after Electron fix + [\#12561](https://github.com/vector-im/riot-web/pull/12561) + * Update loading test for JS SDK IDB change + [\#12552](https://github.com/vector-im/riot-web/pull/12552) + * Upgrade deps + [\#12528](https://github.com/vector-im/riot-web/pull/12528) + +Changes in [1.5.12](https://github.com/vector-im/riot-web/releases/tag/v1.5.12) (2020-03-04) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.11...v1.5.12) + + * Upgrade to React SDK 2.2.1 + * Revert to Electron 7.1.12 to fix Arch Linux tray icon + * Fix image download links so they open in a new tab + +Changes in [1.5.11](https://github.com/vector-im/riot-web/releases/tag/v1.5.11) (2020-03-02) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.11-rc.1...v1.5.11) + + * Upgrade to JS SDK 5.1.0 and React SDK 2.2.0 + * Fix SSO flows for Electron 8.0.2 by disabling will-navigate + [\#12585](https://github.com/vector-im/riot-web/pull/12585) + +Changes in [1.5.11-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.11-rc.1) (2020-02-26) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.10...v1.5.11-rc.1) + + * Upgrade to JS SDK 5.1.0-rc.1 and React SDK 2.2.0-rc.1 + * Change Windows signing to warning when missing token + [\#12523](https://github.com/vector-im/riot-web/pull/12523) + * Modernizr remove t3st/es6/contains + [\#12524](https://github.com/vector-im/riot-web/pull/12524) + * Switch out any eval-using Modernizr rules + [\#12519](https://github.com/vector-im/riot-web/pull/12519) + * Update from Weblate + [\#12522](https://github.com/vector-im/riot-web/pull/12522) + * Notify electron of language changes + [\#12487](https://github.com/vector-im/riot-web/pull/12487) + * Relax macOS notarisation check to print a warning + [\#12503](https://github.com/vector-im/riot-web/pull/12503) + * Clarify supported tier means desktop OSes + [\#12486](https://github.com/vector-im/riot-web/pull/12486) + * Use noreferrer in addition to noopener for edge case browsers + [\#12477](https://github.com/vector-im/riot-web/pull/12477) + * Document start / end composer shortcuts + [\#12466](https://github.com/vector-im/riot-web/pull/12466) + * Update from Weblate + [\#12480](https://github.com/vector-im/riot-web/pull/12480) + * Remove buildkite pipeline + [\#12464](https://github.com/vector-im/riot-web/pull/12464) + * Remove exec so release script continues + [\#12435](https://github.com/vector-im/riot-web/pull/12435) + * Use Persistent Storage where possible + [\#12425](https://github.com/vector-im/riot-web/pull/12425) + +Changes in [1.5.10](https://github.com/vector-im/riot-web/releases/tag/v1.5.10) (2020-02-19) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.9...v1.5.10) + + * Get rid of dependence on usercontent.riot.im + [\#12292](https://github.com/vector-im/riot-web/pull/12292) + * Add experimental support tier + [\#12377](https://github.com/vector-im/riot-web/pull/12377) + +Changes in [1.5.9](https://github.com/vector-im/riot-web/releases/tag/v1.5.9) (2020-02-17) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.9-rc.1...v1.5.9) + + * Automate SDK dep upgrades for release + [\#12374](https://github.com/vector-im/riot-web/pull/12374) + +Changes in [1.5.9-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.9-rc.1) (2020-02-13) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.8...v1.5.9-rc.1) + + * Upgrade JS SDK to 5.0.0-rc.1 and React SDK 2.1.0-rc.2 + * Update from Weblate + [\#12354](https://github.com/vector-im/riot-web/pull/12354) + * Add top left menu shortcut + [\#12310](https://github.com/vector-im/riot-web/pull/12310) + * Remove modernizr rules for features on which we only soft depend + [\#12272](https://github.com/vector-im/riot-web/pull/12272) + * Embed CSP meta tag and stop using script-src unsafe-inline + [\#12258](https://github.com/vector-im/riot-web/pull/12258) + * Add contribute.json + [\#12251](https://github.com/vector-im/riot-web/pull/12251) + * Improve Browser checks + [\#12232](https://github.com/vector-im/riot-web/pull/12232) + * Document padlock flag + [\#12173](https://github.com/vector-im/riot-web/pull/12173) + * Enable cross-signing on /develop + [\#12126](https://github.com/vector-im/riot-web/pull/12126) + * Switch back to legacy decorators + [\#12110](https://github.com/vector-im/riot-web/pull/12110) + * Update babel targets + [\#12102](https://github.com/vector-im/riot-web/pull/12102) + * Install deps for linting + [\#12076](https://github.com/vector-im/riot-web/pull/12076) + * Update from Weblate + [\#12062](https://github.com/vector-im/riot-web/pull/12062) + * Change to minimal Webpack output + [\#12049](https://github.com/vector-im/riot-web/pull/12049) + * Remove docs for new invite dialog labs feature + [\#12015](https://github.com/vector-im/riot-web/pull/12015) + * ElectronPlatform: Add the indexSize method. + [\#11529](https://github.com/vector-im/riot-web/pull/11529) + * ElectronPlatform: Add the ability to load file events from the event index + [\#11907](https://github.com/vector-im/riot-web/pull/11907) + * Fix the remainder of the cookie links + [\#12008](https://github.com/vector-im/riot-web/pull/12008) + * Use bash in Docker scripts + [\#12001](https://github.com/vector-im/riot-web/pull/12001) + * Use debian to build the Docker image + [\#11999](https://github.com/vector-im/riot-web/pull/11999) + * Update cookie policy urls on /app and /develop config.json + [\#11998](https://github.com/vector-im/riot-web/pull/11998) + * BuildKite: Only deploy to /develop if everything else passed + [\#11996](https://github.com/vector-im/riot-web/pull/11996) + * Add docs for admin report content message + [\#11995](https://github.com/vector-im/riot-web/pull/11995) + * Load as little as possible in index.js for the skinner + [\#11959](https://github.com/vector-im/riot-web/pull/11959) + * Fix webpack config (by stealing Dave's config) + [\#11956](https://github.com/vector-im/riot-web/pull/11956) + * Force Jest to resolve the js-sdk and react-sdk to src directories + [\#11954](https://github.com/vector-im/riot-web/pull/11954) + * Fix build to not babel modules inside js/react sdk + [\#11949](https://github.com/vector-im/riot-web/pull/11949) + * Fix webpack to babel js-sdk & react-sdk but no other deps + [\#11944](https://github.com/vector-im/riot-web/pull/11944) + +Changes in [1.5.8](https://github.com/vector-im/riot-web/releases/tag/v1.5.8) (2020-01-27) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.8-rc.2...v1.5.8) + + * Fixes for alias display and copy / paste on composer + +Changes in [1.5.8-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.5.8-rc.2) (2020-01-22) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.8-rc.1...v1.5.8-rc.2) + + * Fix incorrect version of react-sdk + +Changes in [1.5.8-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.8-rc.1) (2020-01-22) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.7...v1.5.8-rc.1) + +This version contains an upgrade to the cryptography database +version. Once users run this version, their session's indexeddb +store will be upgraded and older version of Riot will no longer +be able to read it. Users will have to log out and log in if +the version of Riot is downgraded back to a previous version. + + * Fix webpack config (by stealing Dave's config) + [\#11994](https://github.com/vector-im/riot-web/pull/11994) + * Fix webpack to babel js-sdk & react-sdk but no other deps + [\#11947](https://github.com/vector-im/riot-web/pull/11947) + * Update from Weblate + [\#11934](https://github.com/vector-im/riot-web/pull/11934) + * Fix rageshake post-sourcemaps + [\#11926](https://github.com/vector-im/riot-web/pull/11926) + * Fix yarn start concurrent commands + [\#11895](https://github.com/vector-im/riot-web/pull/11895) + * Run the react-sdk reskindexer for developers + [\#11894](https://github.com/vector-im/riot-web/pull/11894) + * Update labs documentation for feature_ftue_dms given new scope + [\#11893](https://github.com/vector-im/riot-web/pull/11893) + * Fix indentation on webpack config and make sourcemapped files legible + [\#11892](https://github.com/vector-im/riot-web/pull/11892) + * Remove spinner check + [\#11891](https://github.com/vector-im/riot-web/pull/11891) + * Don't minifiy builds of develop through CI packaging + [\#11867](https://github.com/vector-im/riot-web/pull/11867) + * Use Jest for tests + [\#11869](https://github.com/vector-im/riot-web/pull/11869) + * Support application/wasm in Docker image + [\#11858](https://github.com/vector-im/riot-web/pull/11858) + * Fix sourcemaps by refactoring the build system + [\#11843](https://github.com/vector-im/riot-web/pull/11843) + * Disable event indexing on develop + [\#11850](https://github.com/vector-im/riot-web/pull/11850) + * Updated blog url + [\#11792](https://github.com/vector-im/riot-web/pull/11792) + * Enable and document presence in room list feature flag + [\#11829](https://github.com/vector-im/riot-web/pull/11829) + * Add stub service worker so users can install on desktop with Chrome + [\#11774](https://github.com/vector-im/riot-web/pull/11774) + * Update from Weblate + [\#11826](https://github.com/vector-im/riot-web/pull/11826) + * Sourcemaps: develop -> feature branch + [\#11802](https://github.com/vector-im/riot-web/pull/11802) + * Update build scripts for new process + [\#11801](https://github.com/vector-im/riot-web/pull/11801) + * Make the webpack config work for us + [\#11712](https://github.com/vector-im/riot-web/pull/11712) + * Updates URL for Electron Command Line Switches + [\#11810](https://github.com/vector-im/riot-web/pull/11810) + * Import from src/ for the react-sdk and js-sdk + [\#11714](https://github.com/vector-im/riot-web/pull/11714) + * Convert components to ES6 exports + [\#11713](https://github.com/vector-im/riot-web/pull/11713) + * Remove now-retired package.json property + [\#11660](https://github.com/vector-im/riot-web/pull/11660) + +Changes in [1.5.7](https://github.com/vector-im/riot-web/releases/tag/v1.5.7) (2020-01-13) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.7-rc.2...v1.5.7) + + * Enable and document presence in room list feature flag + [\#11830](https://github.com/vector-im/riot-web/pull/11830) + +Changes in [1.5.7-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.5.7-rc.2) (2020-01-08) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.7-rc.1...v1.5.7-rc.2) + + * Update to react-sdk rc.2 to fix build + +Changes in [1.5.7-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.7-rc.1) (2020-01-06) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.6...v1.5.7-rc.1) + + * Update from Weblate + [\#11784](https://github.com/vector-im/riot-web/pull/11784) + * Add docs for feature_bridge_state flag + [\#11778](https://github.com/vector-im/riot-web/pull/11778) + * Add docs for feature_ftue_dms flag + [\#11758](https://github.com/vector-im/riot-web/pull/11758) + * Fix version file for Docker images + [\#11721](https://github.com/vector-im/riot-web/pull/11721) + * Add accelerators to context menu options like cut&paste in electron + [\#11690](https://github.com/vector-im/riot-web/pull/11690) + * electron-main: Provide a better error message if Seshat isn't installed. + [\#11691](https://github.com/vector-im/riot-web/pull/11691) + * Update from Weblate + [\#11672](https://github.com/vector-im/riot-web/pull/11672) + * Remove babel-plugin-transform-async-to-bluebird + [\#11662](https://github.com/vector-im/riot-web/pull/11662) + * Clarify which versions of what we support + [\#11658](https://github.com/vector-im/riot-web/pull/11658) + * Remove the code that calls the origin migrator + [\#11631](https://github.com/vector-im/riot-web/pull/11631) + * yarn upgrade + [\#11617](https://github.com/vector-im/riot-web/pull/11617) + * Remove draft-js dependency + [\#11616](https://github.com/vector-im/riot-web/pull/11616) + +Changes in [1.5.6](https://github.com/vector-im/riot-web/releases/tag/v1.5.6) (2019-12-09) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.6-rc.1...v1.5.6) + + * No changes since rc.1 + +Changes in [1.5.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.6-rc.1) (2019-12-04) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.5...v1.5.6-rc.1) + + * Update Lithuanian language name + [\#11599](https://github.com/vector-im/riot-web/pull/11599) + * Enable more languages + [\#11592](https://github.com/vector-im/riot-web/pull/11592) + * Fix Docker build for develop and publish a /version file + [\#11588](https://github.com/vector-im/riot-web/pull/11588) + * Remove unused translations + [\#11540](https://github.com/vector-im/riot-web/pull/11540) + * Update from Weblate + [\#11591](https://github.com/vector-im/riot-web/pull/11591) + * Update riot.im enable_presence_by_hs_url for new matrix.org client URL + [\#11565](https://github.com/vector-im/riot-web/pull/11565) + * Remove mention of vector.im as default identity server on mobile guide + [\#11544](https://github.com/vector-im/riot-web/pull/11544) + * Clean up and standardise app config + [\#11549](https://github.com/vector-im/riot-web/pull/11549) + * make it clear that seshat requires electron-build-env (at least on macOS) + [\#11527](https://github.com/vector-im/riot-web/pull/11527) + * Add postcss-easings + [\#11521](https://github.com/vector-im/riot-web/pull/11521) + * ElectronPlatform: Add support for a event index using Seshat. + [\#11125](https://github.com/vector-im/riot-web/pull/11125) + * Sign all of the Windows executable files + [\#11516](https://github.com/vector-im/riot-web/pull/11516) + * Clarify that cross-signing is in development + [\#11493](https://github.com/vector-im/riot-web/pull/11493) + * get rid of bluebird + [\#11301](https://github.com/vector-im/riot-web/pull/11301) + * Update from Weblate + [\#11488](https://github.com/vector-im/riot-web/pull/11488) + * Add note in README about self-hosted riot installs requiring custom caching + headers + [\#8702](https://github.com/vector-im/riot-web/pull/8702) + * De-dup theming code + [\#11445](https://github.com/vector-im/riot-web/pull/11445) + * Add eslint-plugin-jest because we inherit js-sdk's eslintrc and it wants + [\#11448](https://github.com/vector-im/riot-web/pull/11448) + +Changes in [1.5.5](https://github.com/vector-im/riot-web/releases/tag/v1.5.5) (2019-11-27) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.4...v1.5.5) + +* Upgrade to JS SDK 2.5.4 to relax identity server discovery and E2EE debugging +* Upgrade to React SDK 1.7.4 to fix override behaviour of themes +* Clarify that cross-signing is in development +* Sign all of the Windows executable files + +Changes in [1.5.4](https://github.com/vector-im/riot-web/releases/tag/v1.5.4) (2019-11-25) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.4-rc.2...v1.5.4) + + * No changes since rc.2 + +Changes in [1.5.4-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.5.4-rc.2) (2019-11-22) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.4-rc.1...v1.5.4-rc.2) + + * react-sdk rc.2 to fix an error in Safari and some cosmetic + bugs + +Changes in [1.5.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.4-rc.1) (2019-11-20) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.3...v1.5.4-rc.1) + + * Add doc for custom themes + [\#11444](https://github.com/vector-im/riot-web/pull/11444) + * Use new theme API in react-sdk + [\#11442](https://github.com/vector-im/riot-web/pull/11442) + * preload warning triangle + [\#11441](https://github.com/vector-im/riot-web/pull/11441) + * Update from Weblate + [\#11440](https://github.com/vector-im/riot-web/pull/11440) + * Add entitlements file for mic & camera permissions on macOS + [\#11435](https://github.com/vector-im/riot-web/pull/11435) + * Fix error/exception in electron signing script + [\#11429](https://github.com/vector-im/riot-web/pull/11429) + * Merge the `feature_user_info_panel` flag into `feature_dm_verification` + [\#11426](https://github.com/vector-im/riot-web/pull/11426) + * Let the user's homeserver config override the build config + [\#11409](https://github.com/vector-im/riot-web/pull/11409) + * Add cross-signing labs flag to develop and document + [\#11408](https://github.com/vector-im/riot-web/pull/11408) + * Update from Weblate + [\#11405](https://github.com/vector-im/riot-web/pull/11405) + * Trigger a theme change on startup, not just a tint change + [\#11381](https://github.com/vector-im/riot-web/pull/11381) + * Perform favicon updates twice in Chrome + [\#11375](https://github.com/vector-im/riot-web/pull/11375) + * Add labs documentation for Mjolnir + [\#11275](https://github.com/vector-im/riot-web/pull/11275) + * Add description of user info feature in labs doc + [\#11360](https://github.com/vector-im/riot-web/pull/11360) + * Update from Weblate + [\#11359](https://github.com/vector-im/riot-web/pull/11359) + * Add DM verification feature to labs.md + [\#11356](https://github.com/vector-im/riot-web/pull/11356) + * Add feature_dm_verification to labs + [\#11355](https://github.com/vector-im/riot-web/pull/11355) + * Document feature flag process + [\#11341](https://github.com/vector-im/riot-web/pull/11341) + * Remove unused feature flags + [\#11343](https://github.com/vector-im/riot-web/pull/11343) + +Changes in [1.5.3](https://github.com/vector-im/riot-web/releases/tag/v1.5.3) (2019-11-06) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.2...v1.5.3) + + * Remove the 'auto hide menu bar' option on Mac + [\#11326](https://github.com/vector-im/riot-web/pull/11326) + * Expose feature_user_info_panel on riot.im/develop + [\#11304](https://github.com/vector-im/riot-web/pull/11304) + * Upgrade electron-notarize + [\#11312](https://github.com/vector-im/riot-web/pull/11312) + * Fix close window behaviour on Macos + [\#11309](https://github.com/vector-im/riot-web/pull/11309) + * Merge: Add dependency to eslint-plugin-react-hooks as react-sdk did + [\#11307](https://github.com/vector-im/riot-web/pull/11307) + * Add dependency to eslint-plugin-react-hooks as react-sdk did + [\#11306](https://github.com/vector-im/riot-web/pull/11306) + * Update from Weblate + [\#11300](https://github.com/vector-im/riot-web/pull/11300) + +Changes in [1.5.2](https://github.com/vector-im/riot-web/releases/tag/v1.5.2) (2019-11-04) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.1...v1.5.2) + + * Fix close window behaviour on Macos + [\#11311](https://github.com/vector-im/riot-web/pull/11311) + +Changes in [1.5.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.1) (2019-11-04) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.1-rc.2...v1.5.1) + + * No changes since rc.2 + +Changes in [1.5.1-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.5.1-rc.2) (2019-11-01) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.1-rc.1...v1.5.1-rc.2) + + * Updated react-sdk with fix for bug that caused room filtering to + omit results. + +Changes in [1.5.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.1-rc.1) (2019-10-30) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.0...v1.5.1-rc.1) + + * Add ability to hide tray icon on non-Mac (which has no tray icon) + [\#11258](https://github.com/vector-im/riot-web/pull/11258) + * Fix bug preventing display from sleeping after a call + [\#11264](https://github.com/vector-im/riot-web/pull/11264) + * Remove mention of CI scripts from docs + [\#11257](https://github.com/vector-im/riot-web/pull/11257) + * Fix skinning replaces being broken since being rewritten as React FC's + [\#11254](https://github.com/vector-im/riot-web/pull/11254) + * Update config docs about identity servers + [\#11249](https://github.com/vector-im/riot-web/pull/11249) + * Remove unneeded help about identity servers + [\#11248](https://github.com/vector-im/riot-web/pull/11248) + * Update from Weblate + [\#11243](https://github.com/vector-im/riot-web/pull/11243) + * Update sample config for new matrix.org CS API URL + [\#11207](https://github.com/vector-im/riot-web/pull/11207) + * clarify where the e2e tests are located + [\#11115](https://github.com/vector-im/riot-web/pull/11115) + * Update from Weblate + [\#11171](https://github.com/vector-im/riot-web/pull/11171) + * Prevent referrers from being sent + [\#6155](https://github.com/vector-im/riot-web/pull/6155) + * Add darkModeSupport to allow dark themed title bar. + [\#11140](https://github.com/vector-im/riot-web/pull/11140) + * Fix the label of Turkish language + [\#11124](https://github.com/vector-im/riot-web/pull/11124) + * Update default HS config to match well-known + [\#11112](https://github.com/vector-im/riot-web/pull/11112) + +Changes in [1.5.0](https://github.com/vector-im/riot-web/releases/tag/v1.5.0) (2019-10-18) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.0-rc.1...v1.5.0) + + * Upgrade to JS SDK v2.4.2 and React SDK v1.7.0 + * Port Windows signing and macOS notarization to release + [\#11158](https://github.com/vector-im/riot-web/pull/11158) + * Sign main Windows executable + [\#11126](https://github.com/vector-im/riot-web/pull/11126) + * Notarise the macOS app + [\#11119](https://github.com/vector-im/riot-web/pull/11119) + +Changes in [1.5.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.0-rc.1) (2019-10-09) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.2...v1.5.0-rc.1) + + * Update from Weblate + [\#11104](https://github.com/vector-im/riot-web/pull/11104) + * Bump Olm to 3.1.4 for olm_session_describe + [\#11103](https://github.com/vector-im/riot-web/pull/11103) + * Enable Webpack production mode for start:js:prod + [\#11098](https://github.com/vector-im/riot-web/pull/11098) + * add settingDefaults to sample config + [\#9919](https://github.com/vector-im/riot-web/pull/9919) + * Add config.json copy instruction to 'Development' as well + [\#11062](https://github.com/vector-im/riot-web/pull/11062) + * Revert "Run yarn upgrade" + [\#11055](https://github.com/vector-im/riot-web/pull/11055) + * Run yarn upgrade + [\#11050](https://github.com/vector-im/riot-web/pull/11050) + * Request persistent storage on Electron + [\#11052](https://github.com/vector-im/riot-web/pull/11052) + * Remove docs for CIDER feature + [\#11047](https://github.com/vector-im/riot-web/pull/11047) + +Changes in [1.4.2](https://github.com/vector-im/riot-web/releases/tag/v1.4.2) (2019-10-04) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.2-rc.1...v1.4.2) + + * Document troubleshooting for memory leaks and getting profiles + [\#11031](https://github.com/vector-im/riot-web/pull/11031) + +Changes in [1.4.2-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.4.2-rc.1) (2019-10-02) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.1...v1.4.2-rc.1) + + * Custom themes MVP + [\#11017](https://github.com/vector-im/riot-web/pull/11017) + * Document permalinkPrefix setting + [\#11007](https://github.com/vector-im/riot-web/pull/11007) + +Changes in [1.4.1](https://github.com/vector-im/riot-web/releases/tag/v1.4.1) (2019-10-01) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.0...v1.4.1) + + * Upgrade to React SDK 1.6.1 to fix critical + [blank screen issue](https://github.com/vector-im/riot-web/issues/10983) + * Upgrade to JS SDK 2.4.1 to to ignore crypto events with empty content + * Update from Weblate + [\#11010](https://github.com/vector-im/riot-web/pull/11010) + * Update from Weblate + [\#11001](https://github.com/vector-im/riot-web/pull/11001) + * Upgrade deps + [\#10980](https://github.com/vector-im/riot-web/pull/10980) + +Changes in [1.4.0](https://github.com/vector-im/riot-web/releases/tag/v1.4.0) (2019-09-27) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.0-rc.2...v1.4.0) + +* Many improvements related to privacy and user control of identity services and integration managers +* Upgrade to React SDK 1.6.0 and JS SDK 2.4.0 + +Changes in [1.4.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.4.0-rc.2) (2019-09-26) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.0-rc.1...v1.4.0-rc.2) + + * Upgrade to React SDK 1.6.0-rc.2 + * Work around Yarn confusion with `react-gemini-scrollbar` package + +Changes in [1.4.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.4.0-rc.1) (2019-09-25) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.6...v1.4.0-rc.1) + + * Upgrade to React SDK 1.6.0-rc.1 and JS SDK 2.4.0-rc.1 + * Update from Weblate + [\#10961](https://github.com/vector-im/riot-web/pull/10961) + * Don't log query parameters as they may contain secrets + [\#10929](https://github.com/vector-im/riot-web/pull/10929) + * Document more shortcuts + [\#10906](https://github.com/vector-im/riot-web/pull/10906) + * Point to #develop and use the same gemini-scrollbar version as the react-sdk + [\#10893](https://github.com/vector-im/riot-web/pull/10893) + * Tweak lock file to pull in only one React version + [\#10874](https://github.com/vector-im/riot-web/pull/10874) + * document disable_custom_urls + [\#10844](https://github.com/vector-im/riot-web/pull/10844) + * Install guide tweaks + [\#10838](https://github.com/vector-im/riot-web/pull/10838) + * Switch to React 16 + [\#10480](https://github.com/vector-im/riot-web/pull/10480) + * Update install guide + [\#10810](https://github.com/vector-im/riot-web/pull/10810) + * Clarify that HTTPS is not just needed for VoIP + [\#6146](https://github.com/vector-im/riot-web/pull/6146) + * Bump eslint-utils from 1.4.0 to 1.4.2 + [\#10692](https://github.com/vector-im/riot-web/pull/10692) + * Add docs for tabbed integration managers labs flag + [\#10641](https://github.com/vector-im/riot-web/pull/10641) + * Change integrations_widgets_urls default configuration + [\#10656](https://github.com/vector-im/riot-web/pull/10656) + * Add docs for the CIDER composer flag + [\#10638](https://github.com/vector-im/riot-web/pull/10638) + * add cider composer labs flag + [\#10626](https://github.com/vector-im/riot-web/pull/10626) + * Upgrade to Electron 6.0.3 + [\#10601](https://github.com/vector-im/riot-web/pull/10601) + * Upgrade to Electron 6 + [\#10596](https://github.com/vector-im/riot-web/pull/10596) + * Update from Weblate + [\#10591](https://github.com/vector-im/riot-web/pull/10591) + * Upgrade electron-builder to 21.2.0 + [\#10579](https://github.com/vector-im/riot-web/pull/10579) + * Set SUID bit on chrome-sandbox for Debian + [\#10580](https://github.com/vector-im/riot-web/pull/10580) + * Load config.json before loading language so default can apply + [\#10551](https://github.com/vector-im/riot-web/pull/10551) + * Bump matrix-react-test-utils for React 16 compatibility + [\#10543](https://github.com/vector-im/riot-web/pull/10543) + * Add --help to electron app + [\#10530](https://github.com/vector-im/riot-web/pull/10530) + * Allow setting electron autoHideMenuBar and persist it + [\#10503](https://github.com/vector-im/riot-web/pull/10503) + * Upgrade dependencies + [\#10475](https://github.com/vector-im/riot-web/pull/10475) + +Changes in [1.3.6](https://github.com/vector-im/riot-web/releases/tag/v1.3.6) (2019-09-19) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.5...v1.3.6) + + * Fix origin migrator for SSO logins + [\#10920](https://github.com/vector-im/riot-web/pull/10920) + +Changes in [1.3.5](https://github.com/vector-im/riot-web/releases/tag/v1.3.5) (2019-09-16) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.5-rc.3...v1.3.5) + + * Updated js-sdk and react-sdk for some more minor bugfixes + +Changes in [1.3.5-rc.3](https://github.com/vector-im/riot-web/releases/tag/v1.3.5-rc.3) (2019-09-13) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.5-rc.2...v1.3.5-rc.3) + + * js-sdk rc.1 to include report API + +Changes in [1.3.5-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.3.5-rc.2) (2019-09-13) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.5-rc.1...v1.3.5-rc.2) + + * Pull in more fixes from react-sdk rc.2 + +Changes in [1.3.5-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.3.5-rc.1) (2019-09-12) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.4...v1.3.5-rc.1) + + * Cosmetic fixes from react-sdk rc.1 + +Changes in [1.3.4](https://github.com/vector-im/riot-web/releases/tag/v1.3.4) (2019-09-12) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.4-rc.1...v1.3.4) + + * Updated react-sdk and tweaks to mobile install guide + +Changes in [1.3.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.3.4-rc.1) (2019-09-11) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.3...v1.3.4-rc.1) + + * Update install guide + [\#10831](https://github.com/vector-im/riot-web/pull/10831) + +Changes in [1.3.3](https://github.com/vector-im/riot-web/releases/tag/v1.3.3) (2019-08-16) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.2...v1.3.3) + + * Linux-only release to fix sandboxing with Electron 5 on Debian + [\#10580](https://github.com/vector-im/riot-web/pull/10580) + +Changes in [1.3.2](https://github.com/vector-im/riot-web/releases/tag/v1.3.2) (2019-08-05) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.1...v1.3.2) + + * Updated react-sdk for deactivated account error message on login + +Changes in [1.3.1](https://github.com/vector-im/riot-web/releases/tag/v1.3.1) (2019-08-05) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.1-rc.1...v1.3.1) + + * Updated js-sdk for notifications fix and react-sdk for registration fix + +Changes in [1.3.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.3.1-rc.1) (2019-07-31) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.0...v1.3.1-rc.1) + + * Upgrade to JS SDK 2.3.0-rc.1 and React SDK 1.5.0-rc.1 + * Update from Weblate + [\#10436](https://github.com/vector-im/riot-web/pull/10436) + * Describe our existing features better in documentation + [\#10418](https://github.com/vector-im/riot-web/pull/10418) + * Upgrade to Electron 5 + [\#10392](https://github.com/vector-im/riot-web/pull/10392) + * Remove edits and reactions feature flags from docs and config + [\#10363](https://github.com/vector-im/riot-web/pull/10363) + * Cachebust config file requests + [\#10349](https://github.com/vector-im/riot-web/pull/10349) + * Convert install-app-deps to subcommand + [\#10334](https://github.com/vector-im/riot-web/pull/10334) + * Add riot.im configuration files + [\#10327](https://github.com/vector-im/riot-web/pull/10327) + * Require descriptions in mxSendRageshake and remove infinite loop in issue + templates + [\#10321](https://github.com/vector-im/riot-web/pull/10321) + * Remove unused disable_identity_server config flag + [\#10322](https://github.com/vector-im/riot-web/pull/10322) + * Verify i18n in CI + [\#10320](https://github.com/vector-im/riot-web/pull/10320) + +Changes in [1.3.0](https://github.com/vector-im/riot-web/releases/tag/v1.3.0) (2019-07-18) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.0-rc.3...v1.3.0) + + * Upgrade to React SDK 1.4.0 and JS SDK 2.2.0 + * Message editing and reactions features enabled + * Remove edits and reactions feature flags from docs and config + [\#10365](https://github.com/vector-im/riot-web/pull/10365) + +Changes in [1.3.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v1.3.0-rc.3) (2019-07-15) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.0-rc.2...v1.3.0-rc.3) + + * Update to react-sdk rc.3 to fix a bug where a room admin could generate a room + that would cause Riot to error, and some stuck notifications. + +Changes in [1.3.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.3.0-rc.2) (2019-07-12) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.0-rc.1...v1.3.0-rc.2) + + * Upgrade to React SDK 1.4.0-rc.2 and JS SDK 2.2.0-rc.2 + * Fix regression from Riot 1.3.0-rc.1 when listing devices in user settings + +Changes in [1.3.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.3.0-rc.1) (2019-07-12) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.4...v1.3.0-rc.1) + + * Upgrade to React SDK 1.4.0-rc.1 and JS SDK 2.2.0-rc.1 + * Update from Weblate + [\#10328](https://github.com/vector-im/riot-web/pull/10328) + * Upgrade dependencies + [\#10308](https://github.com/vector-im/riot-web/pull/10308) + * Upgrade dependencies + [\#10260](https://github.com/vector-im/riot-web/pull/10260) + +Changes in [1.2.4](https://github.com/vector-im/riot-web/releases/tag/v1.2.4) (2019-07-11) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.3...v1.2.4) + + * Upgrade to React SDK 1.3.1 and JS SDK 2.1.1 + * Upgrade lodash dependencies + * JS SDK 2.1.1 includes a fix for ephemeral event processing + * React SDK 1.3.1 includes a fix for account deactivation + +Changes in [1.2.3](https://github.com/vector-im/riot-web/releases/tag/v1.2.3) (2019-07-08) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.3-rc.1...v1.2.3) + + * Upgrade to React SDK 1.3.0 and JS SDK 2.1.0 + * JS SDK 2.1.0 includes a fix for an exception whilst syncing + +Changes in [1.2.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.3-rc.1) (2019-07-03) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.2...v1.2.3-rc.1) + + * Change update URL to match new host + [\#10247](https://github.com/vector-im/riot-web/pull/10247) + * Update from Weblate + [\#10219](https://github.com/vector-im/riot-web/pull/10219) + * Extract configuration docs to separate file + [\#10195](https://github.com/vector-im/riot-web/pull/10195) + * Add e2e/warning.svg to preload + [\#10197](https://github.com/vector-im/riot-web/pull/10197) + * Fix Electron vector: links + [\#10196](https://github.com/vector-im/riot-web/pull/10196) + * Display a red box of anger for config syntax errors + [\#10193](https://github.com/vector-im/riot-web/pull/10193) + * Move config-getting to VectorBasePlatform + [\#10181](https://github.com/vector-im/riot-web/pull/10181) + * Update from Weblate + [\#10124](https://github.com/vector-im/riot-web/pull/10124) + * Fix default Electron window and tray icons + [\#10097](https://github.com/vector-im/riot-web/pull/10097) + +Changes in [1.2.2](https://github.com/vector-im/riot-web/releases/tag/v1.2.2) (2019-06-19) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.2-rc.2...v1.2.2) + + No changes since rc.2 + +Changes in [1.2.2-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.2.2-rc.2) (2019-06-18) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.2-rc.1...v1.2.2-rc.2) + + * Update to react-sdk and js-sdk rc.2 for registration fixes, + redaction local echo fix and removing unnecessary calls + to the integration manager. + +Changes in [1.2.2-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.2-rc.1) (2019-06-12) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.1...v1.2.2-rc.1) + + * Update from Weblate + [\#10012](https://github.com/vector-im/riot-web/pull/10012) + * Add funding details for GitHub sponsor button + [\#9982](https://github.com/vector-im/riot-web/pull/9982) + * Do not fail on server liveliness checks during startup + [\#9960](https://github.com/vector-im/riot-web/pull/9960) + * Hide guest functions on the welcome page if not logged in + [\#9957](https://github.com/vector-im/riot-web/pull/9957) + * Add Albanian and West Flemish languages + [\#9953](https://github.com/vector-im/riot-web/pull/9953) + * Update from Weblate + [\#9951](https://github.com/vector-im/riot-web/pull/9951) + * Add docs for defaultCountryCode + [\#9927](https://github.com/vector-im/riot-web/pull/9927) + * Use the user's pre-existing HS when config validation fails + [\#9892](https://github.com/vector-im/riot-web/pull/9892) + * Low bandwidth mode + [\#9909](https://github.com/vector-im/riot-web/pull/9909) + * Fix Twemoji loading on Windows dev machines + [\#9869](https://github.com/vector-im/riot-web/pull/9869) + * Base Docker image on nginx:alpine, not the larger nginx:latest + [\#9848](https://github.com/vector-im/riot-web/pull/9848) + * Validate homeserver configuration prior to loading the app + [\#9779](https://github.com/vector-im/riot-web/pull/9779) + * Show resolved homeserver configuration on the mobile guide + [\#9726](https://github.com/vector-im/riot-web/pull/9726) + * Flag the validated config as the default config + [\#9721](https://github.com/vector-im/riot-web/pull/9721) + * Clarify comment on is_url and hs_url handling + [\#9719](https://github.com/vector-im/riot-web/pull/9719) + * Validate default homeserver config before loading the app + [\#9496](https://github.com/vector-im/riot-web/pull/9496) + +Changes in [1.2.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.1) (2019-05-31) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.0...v1.2.1) + + * Upgrade JS SDK to 2.0.0 and React SDK to 1.2.1 to fix key backup and native emoji height + +Changes in [1.2.0](https://github.com/vector-im/riot-web/releases/tag/v1.2.0) (2019-05-29) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.0-rc.1...v1.2.0) + + * Upgrade to JS SDK v1.2.0 and React SDK v1.2.0 to fix some regressions + +Changes in [1.2.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.0-rc.1) (2019-05-23) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.2...v1.2.0-rc.1) + + * Update from Weblate + [\#9802](https://github.com/vector-im/riot-web/pull/9802) + * remove emojione + [\#9766](https://github.com/vector-im/riot-web/pull/9766) + * Make Dockerfile work for develop and other branches + [\#9736](https://github.com/vector-im/riot-web/pull/9736) + * add description of new labs feature for message editing + [\#9728](https://github.com/vector-im/riot-web/pull/9728) + * Remove karma junit output + [\#9628](https://github.com/vector-im/riot-web/pull/9628) + * yarn upgrade + [\#9626](https://github.com/vector-im/riot-web/pull/9626) + * Respond quickly to buildkite pokes + [\#9617](https://github.com/vector-im/riot-web/pull/9617) + * Delay creating the `Favico` instance + [\#9616](https://github.com/vector-im/riot-web/pull/9616) + * Add reactions feature to config sample + [\#9598](https://github.com/vector-im/riot-web/pull/9598) + +Changes in [1.1.2](https://github.com/vector-im/riot-web/releases/tag/v1.1.2) (2019-05-15) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.1...v1.1.2) + + * react-sdk v1.1.2 to fix single sign-on and GIF autoplaying + +Changes in [1.1.1](https://github.com/vector-im/riot-web/releases/tag/v1.1.1) (2019-05-14) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.0...v1.1.1) + + * react-sdk v1.1.1 to fix regressions with registration + +Changes in [1.1.0](https://github.com/vector-im/riot-web/releases/tag/v1.1.0) (2019-05-07) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.0-rc.1...v1.1.0) + + * Add Dockerfile + [\#9632](https://github.com/vector-im/riot-web/pull/9632) + * Add Dockerfile (part 2) + [\#9426](https://github.com/vector-im/riot-web/pull/9426) + * Add new scalar staging url + [\#9601](https://github.com/vector-im/riot-web/pull/9601) + +Changes in [1.1.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.1.0-rc.1) (2019-04-30) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.8...v1.1.0-rc.1) + + * Convert redeploy.py to buildkite + [\#9577](https://github.com/vector-im/riot-web/pull/9577) + * Add package step to buildkite pipeline + [\#9568](https://github.com/vector-im/riot-web/pull/9568) + * Don't fail if there's no local config to remove + [\#9571](https://github.com/vector-im/riot-web/pull/9571) + * Change jenkins script to package script + [\#9567](https://github.com/vector-im/riot-web/pull/9567) + * Remove config.json from package dir + [\#9555](https://github.com/vector-im/riot-web/pull/9555) + * use the release version of olm 3.1.0 + [\#9550](https://github.com/vector-im/riot-web/pull/9550) + * Fix default for --include arg + [\#9517](https://github.com/vector-im/riot-web/pull/9517) + * update installation instructions with new repo + [\#9500](https://github.com/vector-im/riot-web/pull/9500) + * Use packages.matrix.org for Olm + [\#9498](https://github.com/vector-im/riot-web/pull/9498) + * Add separate platform electron build commands + [\#9412](https://github.com/vector-im/riot-web/pull/9412) + * Add support for custom profile directory + [\#9408](https://github.com/vector-im/riot-web/pull/9408) + * Improved mobile install guide + [\#9410](https://github.com/vector-im/riot-web/pull/9410) + * Remove vector-electron-desktop from README + [\#9404](https://github.com/vector-im/riot-web/pull/9404) + * Update from Weblate + [\#9398](https://github.com/vector-im/riot-web/pull/9398) + * bump olm version to 3.1.0-pre3 + [\#9392](https://github.com/vector-im/riot-web/pull/9392) + * Add expiration to mobile guide cookie + [\#9383](https://github.com/vector-im/riot-web/pull/9383) + * Fix autolaunch setting appearing toggled off + [\#9368](https://github.com/vector-im/riot-web/pull/9368) + * Don't try to save files the user didn't want to save + [\#9352](https://github.com/vector-im/riot-web/pull/9352) + * Setup crypto store for restore session tests + [\#9325](https://github.com/vector-im/riot-web/pull/9325) + * Update from Weblate + [\#9333](https://github.com/vector-im/riot-web/pull/9333) + * Add "Save image as..." button to context menu on images + [\#9326](https://github.com/vector-im/riot-web/pull/9326) + * Configure auth footer links through Riot config + [\#9297](https://github.com/vector-im/riot-web/pull/9297) + +Changes in [1.0.8](https://github.com/vector-im/riot-web/releases/tag/v1.0.8) (2019-04-16) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.7...v1.0.8) + + * No changes in this release. This is the same code as v1.0.7 from our new clean-room + packaging and signing infrastructure. + +Changes in [1.0.7](https://github.com/vector-im/riot-web/releases/tag/v1.0.7) (2019-04-08) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.6...v1.0.7) + + * Hotfix: bump js-sdk to 1.0.4, see https://github.com/matrix-org/matrix-js-sdk/releases/tag/v1.0.4 + +Changes in [1.0.6](https://github.com/vector-im/riot-web/releases/tag/v1.0.6) (2019-04-01) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.6-rc.1...v1.0.6) + + * Add "Save image as..." button to context menu on images + [\#9327](https://github.com/vector-im/riot-web/pull/9327) + +Changes in [1.0.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.6-rc.1) (2019-03-27) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.5...v1.0.6-rc.1) + + * Use `on_logged_in` action in tests + [\#9279](https://github.com/vector-im/riot-web/pull/9279) + * Convert away from `Promise.defer` + [\#9278](https://github.com/vector-im/riot-web/pull/9278) + * update react-sdk version in yarn lockfile + [\#9233](https://github.com/vector-im/riot-web/pull/9233) + * "Render simple counters in room header" details + [\#9154](https://github.com/vector-im/riot-web/pull/9154) + * Use medium agents for the more resource intensive builds + [\#9238](https://github.com/vector-im/riot-web/pull/9238) + * Add log grouping to buildkite + [\#9223](https://github.com/vector-im/riot-web/pull/9223) + * Switch to `git` protocol for CI dependencies + [\#9222](https://github.com/vector-im/riot-web/pull/9222) + * Support CI for matching branches on forks + [\#9212](https://github.com/vector-im/riot-web/pull/9212) + * Update from Weblate + [\#9199](https://github.com/vector-im/riot-web/pull/9199) + * Declare the officially supported browsers in the README + [\#9177](https://github.com/vector-im/riot-web/pull/9177) + * Document some desktop app things + [\#9011](https://github.com/vector-im/riot-web/pull/9011) + * Use Buildkite for CI + [\#9165](https://github.com/vector-im/riot-web/pull/9165) + * Update version number in issue templates + [\#9170](https://github.com/vector-im/riot-web/pull/9170) + * Remove node 8.x from the build matrix + [\#9159](https://github.com/vector-im/riot-web/pull/9159) + * Update Electron help menu link + [\#9157](https://github.com/vector-im/riot-web/pull/9157) + +Changes in [1.0.5](https://github.com/vector-im/riot-web/releases/tag/v1.0.5) (2019-03-21) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.4...v1.0.5) + + * Hotfix for [\#9205](https://github.com/vector-im/riot-web/issues/9205) disabling jump prevention for typing notifications, while we're reworking this functionally to enable it again soon. + +Changes in [1.0.4](https://github.com/vector-im/riot-web/releases/tag/v1.0.4) (2019-03-18) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.4-rc.1...v1.0.4) + + * No changes since rc.1 + +Changes in [1.0.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.4-rc.1) (2019-03-13) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.3...v1.0.4-rc.1) + + * Update from Weblate + [\#9152](https://github.com/vector-im/riot-web/pull/9152) + * Use modern Yarn version on Travis CI + [\#9151](https://github.com/vector-im/riot-web/pull/9151) + * Switch to `yarn` for dependency management + [\#9132](https://github.com/vector-im/riot-web/pull/9132) + * Update from Weblate + [\#9104](https://github.com/vector-im/riot-web/pull/9104) + * Don't copy the 32 bit linux deb + [\#9075](https://github.com/vector-im/riot-web/pull/9075) + * Change olm dependency to normal dep + [\#9068](https://github.com/vector-im/riot-web/pull/9068) + * Add modular.im hosting link to electron app config + [\#9047](https://github.com/vector-im/riot-web/pull/9047) + * Nudge karma to 3.1.2 + [\#8991](https://github.com/vector-im/riot-web/pull/8991) + * Add support for localConfig at $appData/config.json. + [\#8983](https://github.com/vector-im/riot-web/pull/8983) + +Changes in [1.0.3](https://github.com/vector-im/riot-web/releases/tag/v1.0.3) (2019-03-06) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.2...v1.0.3) + + * react-sdk 1.0.3 to fix ctrl+k shortcut and room list bugs + +Changes in [1.0.2](https://github.com/vector-im/riot-web/releases/tag/v1.0.2) (2019-03-06) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.2-rc.3...v1.0.2) + + * New react-sdk for minor hosting link fixes + +Changes in [1.0.2-rc.3](https://github.com/vector-im/riot-web/releases/tag/v1.0.2-rc.3) (2019-03-05) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.2-rc.2...v1.0.2-rc.3) + + * Add modular.im hosting link to electron app config + [\#9051](https://github.com/vector-im/riot-web/pull/9051) + +Changes in [1.0.2-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.0.2-rc.2) (2019-03-01) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.2-rc.1...v1.0.2-rc.2) + + * Update to react-sdk rc.3 + +Changes in [1.0.2-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.2-rc.1) (2019-03-01) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.1...v1.0.2-rc.1) + + * Set a require alias for the webapp directory + [\#9014](https://github.com/vector-im/riot-web/pull/9014) + * Update from Weblate. + [\#8973](https://github.com/vector-im/riot-web/pull/8973) + * set chrome path for travis CI explicitly + [\#8987](https://github.com/vector-im/riot-web/pull/8987) + * Updated install spinner + [\#8984](https://github.com/vector-im/riot-web/pull/8984) + * Allow disabling update mechanism + [\#8911](https://github.com/vector-im/riot-web/pull/8911) + * Allow configuration of whether closing window closes or minimizes to tray + [\#8908](https://github.com/vector-im/riot-web/pull/8908) + * Fix language file path for Jenkins + [\#8854](https://github.com/vector-im/riot-web/pull/8854) + * Document and recommend `default_server_name` + [\#8832](https://github.com/vector-im/riot-web/pull/8832) + * Cache busting for icons & language files + [\#8710](https://github.com/vector-im/riot-web/pull/8710) + * Remove redesign issue template + [\#8722](https://github.com/vector-im/riot-web/pull/8722) + * Make scripts/make-icons.sh work on linux + [\#8550](https://github.com/vector-im/riot-web/pull/8550) + +Changes in [1.0.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.1) (2019-02-15) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.0...v1.0.1) + + +Changes in [1.0.0](https://github.com/vector-im/riot-web/releases/tag/v1.0.0) (2019-02-14) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.0-rc.2...v1.0.0) + + * Add snipping lines to welcome page without guests + [\#8634](https://github.com/vector-im/riot-web/pull/8634) + * Add home page to fix loading tests + [\#8625](https://github.com/vector-im/riot-web/pull/8625) + +Changes in [1.0.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.0.0-rc.2) (2019-02-14) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.0-rc.1...v1.0.0-rc.2) + + * Update from Weblate. + [\#8615](https://github.com/vector-im/riot-web/pull/8615) + * Replace favicon assets to ones with transparent backgrounds + [\#8600](https://github.com/vector-im/riot-web/pull/8600) + * Refreshed icons + [\#8594](https://github.com/vector-im/riot-web/pull/8594) + * Fix order of fetch-develop-deps / npm install + [\#8566](https://github.com/vector-im/riot-web/pull/8566) + * Revive building dark theme + [\#8540](https://github.com/vector-im/riot-web/pull/8540) + * Update from Weblate. + [\#8546](https://github.com/vector-im/riot-web/pull/8546) + * Repair app loading tests after welcome page + [\#8525](https://github.com/vector-im/riot-web/pull/8525) + * Support configurable welcome background and logo + [\#8528](https://github.com/vector-im/riot-web/pull/8528) + * Update from Weblate. + [\#8518](https://github.com/vector-im/riot-web/pull/8518) + * Document `embeddedPages` configuration + [\#8514](https://github.com/vector-im/riot-web/pull/8514) + * README.md : Syntax Coloring + [\#8502](https://github.com/vector-im/riot-web/pull/8502) + +Changes in [1.0.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.0-rc.1) (2019-02-08) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.9...v1.0.0-rc.1) + + * Update from Weblate. + [\#8475](https://github.com/vector-im/riot-web/pull/8475) + * Add configurable welcome page + [\#8466](https://github.com/vector-im/riot-web/pull/8466) + * fix app tests after force enabling lazy loading + removing feature flag + [\#8464](https://github.com/vector-im/riot-web/pull/8464) + * Allow Electron to zoom with CommandOrControl+= + [\#8381](https://github.com/vector-im/riot-web/pull/8381) + * Hide sign in / create account for logged in users + [\#8368](https://github.com/vector-im/riot-web/pull/8368) + * Fix home page link target + [\#8365](https://github.com/vector-im/riot-web/pull/8365) + * Add auth background image and update Riot logo + [\#8364](https://github.com/vector-im/riot-web/pull/8364) + * New homepage + [\#8363](https://github.com/vector-im/riot-web/pull/8363) + * Spell homeserver correctly + [\#8358](https://github.com/vector-im/riot-web/pull/8358) + * Merge redesign into develop + [\#8321](https://github.com/vector-im/riot-web/pull/8321) + * Disable room directory test because it doesn't work + [\#8318](https://github.com/vector-im/riot-web/pull/8318) + * Tweak auth overflow on Windows and Linux + [\#8307](https://github.com/vector-im/riot-web/pull/8307) + * Clean up Custom Server Help dialog + [\#8296](https://github.com/vector-im/riot-web/pull/8296) + * Cache-bust olm.wasm + [\#8283](https://github.com/vector-im/riot-web/pull/8283) + * Completely disable other themes for now (#8277) + [\#8280](https://github.com/vector-im/riot-web/pull/8280) + * Remove support for team servers + [\#8271](https://github.com/vector-im/riot-web/pull/8271) + * Add target="_blank" to footer links + [\#8248](https://github.com/vector-im/riot-web/pull/8248) + * Fix device names on desktop + [\#8241](https://github.com/vector-im/riot-web/pull/8241) + * Fix literal </> in notifications + [\#8238](https://github.com/vector-im/riot-web/pull/8238) + * Fix registration nextLink on desktop + [\#8239](https://github.com/vector-im/riot-web/pull/8239) + * Add returns to fetch-develop-deps + [\#8233](https://github.com/vector-im/riot-web/pull/8233) + * Update electron builder + [\#8231](https://github.com/vector-im/riot-web/pull/8231) + * Try fetching more branches for PRs + [\#8225](https://github.com/vector-im/riot-web/pull/8225) + * Use content hashing for font and image URLs + [\#8159](https://github.com/vector-im/riot-web/pull/8159) + * Develop->Experimental + [\#8156](https://github.com/vector-im/riot-web/pull/8156) + * Update from Weblate. + [\#8150](https://github.com/vector-im/riot-web/pull/8150) + * Correct the copying of e-mail addresses in the electron app + [\#8124](https://github.com/vector-im/riot-web/pull/8124) + * Start documenting keyboard shortcuts + [\#7165](https://github.com/vector-im/riot-web/pull/7165) + * Update issue templates + [\#7948](https://github.com/vector-im/riot-web/pull/7948) + * Added new colour var to all themes + [\#7927](https://github.com/vector-im/riot-web/pull/7927) + * Redesign: apply changes from dharma theme to status theme + [\#7541](https://github.com/vector-im/riot-web/pull/7541) + * Redesign: ignore setting and always show dharma theme for now + [\#7540](https://github.com/vector-im/riot-web/pull/7540) + +Changes in [0.17.9](https://github.com/vector-im/riot-web/releases/tag/v0.17.9) (2019-01-22) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.9-rc.1...v0.17.9) + + * Bugfix in react-sdk for setting DM rooms + +Changes in [0.17.9-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.9-rc.1) (2019-01-17) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.8...v0.17.9-rc.1) + + * Merge develop into experimental + [\#8003](https://github.com/vector-im/riot-web/pull/8003) + * Electron: Load app from custom protocol + [\#7943](https://github.com/vector-im/riot-web/pull/7943) + * Fix the IndexedDB worker + [\#7920](https://github.com/vector-im/riot-web/pull/7920) + * Make clear that the Debian package is for desktop + [\#7919](https://github.com/vector-im/riot-web/pull/7919) + * Run the Desktop app in a sandbox + [\#7907](https://github.com/vector-im/riot-web/pull/7907) + * Update to new electron single instance API + [\#7908](https://github.com/vector-im/riot-web/pull/7908) + * Update the tests to match https://github.com/matrix-org/matrix-react- + sdk/pull/2340 + [\#7834](https://github.com/vector-im/riot-web/pull/7834) + +Changes in [0.17.8](https://github.com/vector-im/riot-web/releases/tag/v0.17.8) (2018-12-10) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.8-rc.1...v0.17.8) + + * No changes since rc.1 + +Changes in [0.17.8-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.8-rc.1) (2018-12-06) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.7...v0.17.8-rc.1) + + * Update from Weblate. + [\#7784](https://github.com/vector-im/riot-web/pull/7784) + * Add a function to send a rageshake from the console + [\#7755](https://github.com/vector-im/riot-web/pull/7755) + * Re-apply "Run lint on travis builds and use modern node versions" + [\#7738](https://github.com/vector-im/riot-web/pull/7738) + * Revert "Run lint on travis builds and use modern node versions" + [\#7737](https://github.com/vector-im/riot-web/pull/7737) + * Run lint on travis builds and use modern node versions + [\#7490](https://github.com/vector-im/riot-web/pull/7490) + * Fix missing js-sdk logging + [\#7736](https://github.com/vector-im/riot-web/pull/7736) + * Add $accent-color-50pct as a CSS variable to the Status theme + [\#7710](https://github.com/vector-im/riot-web/pull/7710) + +Changes in [0.17.7](https://github.com/vector-im/riot-web/releases/tag/v0.17.7) (2018-11-22) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.6...v0.17.7) + + * Warning when crypto DB is too new to use. + * Fix missing entries from js-sdk in rageshake logs + +Changes in [0.17.6](https://github.com/vector-im/riot-web/releases/tag/v0.17.6) (2018-11-19) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.6-rc.2...v0.17.6) + + * No changes since rc.2 + +Changes in [0.17.6-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.17.6-rc.2) (2018-11-15) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.6-rc.1...v0.17.6-rc.2) + + * Update to js-sdk 0.14 and react-sdk rc.2. rc.1 was broken as it was built against + js-sdk 0.13 which does not use the new Olm 3.0 API. + +Changes in [0.17.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.6-rc.1) (2018-11-15) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.5...v0.17.6-rc.1) + + * Update from Weblate. + [\#7708](https://github.com/vector-im/riot-web/pull/7708) + * Add Japanese (#7599) + [\#7673](https://github.com/vector-im/riot-web/pull/7673) + * Allow Webpack dev server to listen to all interfaces + [\#7674](https://github.com/vector-im/riot-web/pull/7674) + * Remove the request-only stuff we don't need anymore + [\#7637](https://github.com/vector-im/riot-web/pull/7637) + * Correct the author of the electron app + [\#7615](https://github.com/vector-im/riot-web/pull/7615) + * Mock fs, tls, and net to support request in the browser + [\#7552](https://github.com/vector-im/riot-web/pull/7552) + * Update chokidar to transitively get newer fsevents + [\#7598](https://github.com/vector-im/riot-web/pull/7598) + * Support WebAssembly version of Olm + [\#7385](https://github.com/vector-im/riot-web/pull/7385) + +Changes in [0.17.5](https://github.com/vector-im/riot-web/releases/tag/v0.17.5) (2018-11-13) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.4...v0.17.5) + + * Include change that was supposed to be included in orevious version + +Changes in [0.17.4](https://github.com/vector-im/riot-web/releases/tag/v0.17.4) (2018-11-13) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.3...v0.17.4) + + * Add banner with login/register links for users who aren't logged in + +Changes in [0.17.3](https://github.com/vector-im/riot-web/releases/tag/v0.17.3) (2018-10-29) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.3-rc.1...v0.17.3) + + * Fix for autocompleting text emoji from react-sdk v0.14.2 + +Changes in [0.17.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.3-rc.1) (2018-10-24) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.2...v0.17.3-rc.1) + + * Update from Weblate. + [\#7549](https://github.com/vector-im/riot-web/pull/7549) + * Don't set tags on notifications + [\#7518](https://github.com/vector-im/riot-web/pull/7518) + * Update to latest electron builder + [\#7498](https://github.com/vector-im/riot-web/pull/7498) + * Fix Tinter.setTheme to not fire using Firefox + [\#6831](https://github.com/vector-im/riot-web/pull/6831) + +Changes in [0.17.2](https://github.com/vector-im/riot-web/releases/tag/v0.17.2) (2018-10-19) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.1...v0.17.2) + + * Update react-sdk version to "Apply the user's tint once the MatrixClientPeg is moderately ready" + * Electron: don't set tags on notifications + [\#7518](https://github.com/vector-im/riot-web/pull/7518) + +Changes in [0.17.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.1) (2018-10-18) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.0...v0.17.1) + + * Stop electron crashing + [\#7517](https://github.com/vector-im/riot-web/pull/7517) + +Changes in [0.17.0](https://github.com/vector-im/riot-web/releases/tag/v0.17.0) (2018-10-16) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.0-rc.1...v0.17.0) + + * Phased rollout of lazyloading + [\#7503](https://github.com/vector-im/riot-web/pull/7503) + * Update to latest electron builder + [\#7501](https://github.com/vector-im/riot-web/pull/7501) + +Changes in [0.17.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.0-rc.1) (2018-10-11) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.5...v0.17.0-rc.1) + + * Revert "also commit the lock file when bumping version as it is now + committed to the repo" + [\#7483](https://github.com/vector-im/riot-web/pull/7483) + * Update from Weblate. + [\#7478](https://github.com/vector-im/riot-web/pull/7478) + * Fix riot-web Promise.defer warnings (#7409) + [\#7444](https://github.com/vector-im/riot-web/pull/7444) + * Use HTTPS cloning for riot-web too + [\#7459](https://github.com/vector-im/riot-web/pull/7459) + * Disable webpack-dev-server auto reload + [\#7463](https://github.com/vector-im/riot-web/pull/7463) + * Silence bluebird warnings + [\#7462](https://github.com/vector-im/riot-web/pull/7462) + * Fix reskindex on matrix-react-side not being called if using build script + [\#7443](https://github.com/vector-im/riot-web/pull/7443) + * Fix double-closed tags + [\#7454](https://github.com/vector-im/riot-web/pull/7454) + * Document how to turn off Piwik and bug reports (#6738) + [\#7435](https://github.com/vector-im/riot-web/pull/7435) + * also commit the lock file when bumping version as it is now committed to the + repo + [\#7429](https://github.com/vector-im/riot-web/pull/7429) + * Update a bunch of deps + [\#7393](https://github.com/vector-im/riot-web/pull/7393) + * Don't show mobile guide if deep linking + [\#7415](https://github.com/vector-im/riot-web/pull/7415) + * Don't show custom server bit on matrix.org + [\#7408](https://github.com/vector-im/riot-web/pull/7408) + * Update Webpack to version 4 + [\#6620](https://github.com/vector-im/riot-web/pull/6620) + * Webpack4 + [\#7387](https://github.com/vector-im/riot-web/pull/7387) + +Changes in [0.16.6](https://github.com/vector-im/riot-web/releases/tag/v0.16.6) (2018-10-08) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.5...v0.16.6) + + * Update to matrix-react-sdk v0.13.6 + +Changes in [0.16.5](https://github.com/vector-im/riot-web/releases/tag/v0.16.5) (2018-10-01) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.5-rc.1...v0.16.5) + + * Don't show mobile guide if deep linking + [\#7415](https://github.com/vector-im/riot-web/pull/7415) + * Don't show custom server bit on matrix.org + [\#7408](https://github.com/vector-im/riot-web/pull/7408) + +Changes in [0.16.5-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.5-rc.1) (2018-09-27) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.4...v0.16.5-rc.1) + + * Update from Weblate. + [\#7395](https://github.com/vector-im/riot-web/pull/7395) + * Reduce the number of terminals required to build riot-web to 1 + [\#7355](https://github.com/vector-im/riot-web/pull/7355) + * Small typo in release notes v0.16.3 + [\#7274](https://github.com/vector-im/riot-web/pull/7274) + +Changes in [0.16.4](https://github.com/vector-im/riot-web/releases/tag/v0.16.4) (2018-09-10) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.4-rc.1...v0.16.4) + + * No changes since rc.1 + +Changes in [0.16.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.4-rc.1) (2018-09-07) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.3...v0.16.4-rc.1) + + * Update from Weblate. + [\#7296](https://github.com/vector-im/riot-web/pull/7296) + * Fix config not loading & mobileguide script being loaded in riot + [\#7288](https://github.com/vector-im/riot-web/pull/7288) + * Instructions for installing mobile apps + [\#7272](https://github.com/vector-im/riot-web/pull/7272) + * Tidy up index.js + [\#7265](https://github.com/vector-im/riot-web/pull/7265) + +Changes in [0.16.3](https://github.com/vector-im/riot-web/releases/tag/v0.16.3) (2018-09-03) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.3-rc.2...v0.16.3) + + * SECURITY FIX: This version (and release candidates) pull in an upstream security + fix from electron to fix CVE-2018-15685. Electron users should update as soon as + possible. Riot-web run outside of Electron is unaffected. + +Changes in [0.16.3-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.16.3-rc.2) (2018-08-31) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.3-rc.1...v0.16.3-rc.2) + + * Update js-sdk to fix an exception causing the room list to become unresponsive. + +Changes in [0.16.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.3-rc.1) (2018-08-30) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.2...v0.16.3-rc.1) + + * Update from Weblate. + [\#7245](https://github.com/vector-im/riot-web/pull/7245) + * Revert "Remove package-lock.json for now" + [\#7128](https://github.com/vector-im/riot-web/pull/7128) + * Remove package-lock.json for now + [\#7115](https://github.com/vector-im/riot-web/pull/7115) + +Changes in [0.16.2](https://github.com/vector-im/riot-web/releases/tag/v0.16.2) (2018-08-23) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.1...v0.16.2) + + * Support new server notices format + +Changes in [0.16.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.1) (2018-08-20) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.1-rc.1...v0.16.1) + + * No changes since rc.1 + +Changes in [0.16.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.1-rc.1) (2018-08-16) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.0...v0.16.1-rc.1) + + * Update from Weblate. + [\#7178](https://github.com/vector-im/riot-web/pull/7178) + * CSS for MAU warning bar + [\#7152](https://github.com/vector-im/riot-web/pull/7152) + * CSS for user limit error + [\#7139](https://github.com/vector-im/riot-web/pull/7139) + * Unpin sanitize-html + [\#7132](https://github.com/vector-im/riot-web/pull/7132) + * Pin sanitize-html to 0.18.2 + [\#7129](https://github.com/vector-im/riot-web/pull/7129) + +Changes in [0.16.0](https://github.com/vector-im/riot-web/releases/tag/v0.16.0) (2018-07-30) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.0-rc.2...v0.16.0) + +* Update react-sdk version for bugfixes with Jitsi widgets and the new composer + +Changes in [0.16.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.16.0-rc.2) (2018-07-24) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.0-rc.1...v0.16.0-rc.2) + + * Update to react-sdk rc.2 to remove Jitsi conference calling from labs + +Changes in [0.16.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.0-rc.1) (2018-07-24) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.7...v0.16.0-rc.1) + + * Update from Weblate. + [\#7082](https://github.com/vector-im/riot-web/pull/7082) + * Sample config for jitsi integration URL + [\#7055](https://github.com/vector-im/riot-web/pull/7055) + +Changes in [0.15.7](https://github.com/vector-im/riot-web/releases/tag/v0.15.7) (2018-07-09) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.7-rc.2...v0.15.7) + + * No changes since rc.2 + +Changes in [0.15.7-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.7-rc.2) (2018-07-06) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.7-rc.1...v0.15.7-rc.2) + + * Update react-sdk and js-sdk + +Changes in [0.15.7-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.7-rc.1) (2018-07-04) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.6...v0.15.7-rc.1) + + * add override for colour of room tile text within memberinfo (unreadable) + [\#6889](https://github.com/vector-im/riot-web/pull/6889) + +Changes in [0.15.6](https://github.com/vector-im/riot-web/releases/tag/v0.15.6) (2018-06-29) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.6-rc.2...v0.15.6) + + * Pull in bug fixes from react-sdk + +Changes in [0.15.6-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.6-rc.2) (2018-06-22) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.6-rc.1...v0.15.6-rc.2) + + * Update to react-sdk rc.2 for fix to slash commands + +Changes in [0.15.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.6-rc.1) (2018-06-21) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.5...v0.15.6-rc.1) + + * Update from Weblate. + [\#6915](https://github.com/vector-im/riot-web/pull/6915) + * [electron] Fix desktop app --hidden flag + [\#6805](https://github.com/vector-im/riot-web/pull/6805) + +Changes in [0.15.5](https://github.com/vector-im/riot-web/releases/tag/v0.15.5) (2018-06-12) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.5-rc.1...v0.15.5) + + * No changes since rc.1 + +Changes in [0.15.5-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.5-rc.1) (2018-06-06) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.4...v0.15.5-rc.1) + + * Update from Weblate. + [\#6846](https://github.com/vector-im/riot-web/pull/6846) + +Changes in [0.15.4](https://github.com/vector-im/riot-web/releases/tag/v0.15.4) (2018-05-25) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.4-rc.1...v0.15.4) + + * Add cookie policy link to desktop app config + +Changes in [0.15.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.4-rc.1) (2018-05-24) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.3...v0.15.4-rc.1) + + * Update from Weblate. + [\#6792](https://github.com/vector-im/riot-web/pull/6792) + * Hide URL options for e2e blob: URL images + [\#6765](https://github.com/vector-im/riot-web/pull/6765) + * Fix right click menu in electron + [\#6763](https://github.com/vector-im/riot-web/pull/6763) + * Update to electron 2.0.1 + [\#6764](https://github.com/vector-im/riot-web/pull/6764) + * Add instructions for changing translated strings + [\#6528](https://github.com/vector-im/riot-web/pull/6528) + +Changes in [0.15.3](https://github.com/vector-im/riot-web/releases/tag/v0.15.3) (2018-05-18) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.2...v0.15.3) + + * Fix right click menu in electron + [\#6763](https://github.com/vector-im/riot-web/pull/6763) + * Update to electron 2.0.1 + [\#6764](https://github.com/vector-im/riot-web/pull/6764) + * Hide URL options for e2e blob: URL images + [\#6765](https://github.com/vector-im/riot-web/pull/6765) + +Changes in [0.15.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.2) (2018-05-17) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.1...v0.15.2) + + * Update to matrix-react-sdk v0.12.5 to fix image size jumps + +Changes in [0.15.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.1) (2018-05-16) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0...v0.15.1) + + * Fix package-lock.json which was causing errors building the Electron app + * Update Electron version + +Changes in [0.15.0](https://github.com/vector-im/riot-web/releases/tag/v0.15.0) (2018-05-16) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.6...v0.15.0) + + * No changes since rc.6 + +Changes in [0.15.0-rc.6](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.6) (2018-05-15) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.5...v0.15.0-rc.6) + + * Update to matrix-react-sdk 0.12.4-rc.6 + +Changes in [0.15.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.5) (2018-05-15) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.4...v0.15.0-rc.5) + + * Update to matrix-react-sdk 0.12.4-rc.5 + +Changes in [0.15.0-rc.4](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.4) (2018-05-14) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.3...v0.15.0-rc.4) + + * Update from Weblate. + [\#6726](https://github.com/vector-im/riot-web/pull/6726) + * Update to matrix-react-sdk 0.12.4-rc.4 + +Changes in [0.15.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.3) (2018-05-11) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.2...v0.15.0-rc.3) + + * Update to matrix-react-sdk 0.12.4-rc.3 + +Changes in [0.15.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.2) (2018-05-09) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.1...v0.15.0-rc.2) + + * Update to matrix-react-sdk 0.12.4-rc.2 + +Changes in [0.15.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.1) (2018-05-09) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.3-rc.1...v0.15.0-rc.1) + + * No changes since 0.14.3-rc.1 + +Changes in [0.14.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.3-rc.1) (2018-05-09) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2...v0.14.3-rc.1) + + * Update from Weblate. + [\#6688](https://github.com/vector-im/riot-web/pull/6688) + * Don't show presence on matrix.org + [\#6638](https://github.com/vector-im/riot-web/pull/6638) + * Enforce loading babel-polyfill first + [\#6625](https://github.com/vector-im/riot-web/pull/6625) + * Update hoek + [\#6624](https://github.com/vector-im/riot-web/pull/6624) + * Fix args in the release wrapper script + [\#6614](https://github.com/vector-im/riot-web/pull/6614) + +Changes in [0.14.2](https://github.com/vector-im/riot-web/releases/tag/v0.14.2) (2018-04-30) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2-rc.3...v0.14.2) + + * No changes since rc.3 + +Changes in [0.14.2-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.14.2-rc.3) (2018-04-26) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2-rc.2...v0.14.2-rc.3) + + * Fix CSS dependency versions to be the same as those in react-sdk to fix + left panel header positions. + +Changes in [0.14.2-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.14.2-rc.2) (2018-04-26) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2-rc.1...v0.14.2-rc.2) + + * Fix Download of attachments in e2e encrypted rooms in Firefox + +Changes in [0.14.2-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.2-rc.1) (2018-04-25) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.1...v0.14.2-rc.1) + + * Update from Weblate. + [\#6602](https://github.com/vector-im/riot-web/pull/6602) + * Add readme bit on cross-origin renderer + [\#6600](https://github.com/vector-im/riot-web/pull/6600) + * Update from Weblate. + [\#6573](https://github.com/vector-im/riot-web/pull/6573) + * Copy media from react-sdk + [\#6588](https://github.com/vector-im/riot-web/pull/6588) + * Fix favicon + [\#6580](https://github.com/vector-im/riot-web/pull/6580) + * Update from Weblate. + [\#6569](https://github.com/vector-im/riot-web/pull/6569) + * move everything not explicitly riot (or status) branded into matrix-react- + sdk + [\#6500](https://github.com/vector-im/riot-web/pull/6500) + * Remove presence management + [\#5881](https://github.com/vector-im/riot-web/pull/5881) + * change vector-web repo to riot-web in changelog + [\#6480](https://github.com/vector-im/riot-web/pull/6480) + * Update from Weblate. + [\#6473](https://github.com/vector-im/riot-web/pull/6473) + * Bump source-map-loader version to avoid bug /w inline base64 maps + [\#6472](https://github.com/vector-im/riot-web/pull/6472) + * Add CSS for new group admin radio button + [\#6415](https://github.com/vector-im/riot-web/pull/6415) + * Rxl881/sticker picker styling + [\#6447](https://github.com/vector-im/riot-web/pull/6447) + * Stickerpacks + [\#6242](https://github.com/vector-im/riot-web/pull/6242) + * Force gemini on HomePage + [\#6368](https://github.com/vector-im/riot-web/pull/6368) + * Rename the Riot-Web Translations Room + [\#6348](https://github.com/vector-im/riot-web/pull/6348) + * Add disable-presence-by-hs option to sample config + [\#6350](https://github.com/vector-im/riot-web/pull/6350) + * Reword the BugReportDialog.js as per @lampholder + [\#6354](https://github.com/vector-im/riot-web/pull/6354) + +Changes in [0.14.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.1) (2018-04-12) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0...v0.14.1) + + * Remove presence management feature from labs + * Fix an issue where Riot would fail to load at all if certain + extensions were installed on Firefox + * Fix an issue where e2e cryptography could be disabled due to + a migration error. + +Changes in [0.14.0](https://github.com/vector-im/riot-web/releases/tag/v0.14.0) (2018-04-11) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.6...v0.14.0) + + * Cosmetic changes for group UI + +Changes in [0.14.0-rc.6](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.6) (2018-04-09) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.5...v0.14.0-rc.6) + + * Bump react-sdk to [rc.6](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.12.0-rc.6) + +Changes in [0.14.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.5) (2018-04-09) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.4...v0.14.0-rc.5) + +* Add CSS for new control to set group join policy + +Changes in [0.14.0-rc.4](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.4) (2018-03-22) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.3...v0.14.0-rc.4) + + * Fix tagging rooms as direct messages + +Changes in [0.14.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.3) (2018-03-20) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.2...v0.14.0-rc.3) + + * Fix a bug where the badge on a room tile would not update + when a room was read from a different device. + +Changes in [0.14.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.2) (2018-03-19) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.1...v0.14.0-rc.2) + + * Take TagPanel out of labs + [\#6347](https://github.com/vector-im/riot-web/pull/6347) + * Add languages (czech, galician and serbian) + [\#6343](https://github.com/vector-im/riot-web/pull/6343) + +Changes in [0.14.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.1) (2018-03-19) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.5...v0.14.0-rc.1) + + * Force update RoomSubList after reading a room + [\#6342](https://github.com/vector-im/riot-web/pull/6342) + * Ensure entire LeftPanel is faded when settings open + [\#6340](https://github.com/vector-im/riot-web/pull/6340) + * Update from Weblate. + [\#6330](https://github.com/vector-im/riot-web/pull/6330) + * Implement a simple shouldComponentUpdate for DNDRoomTile + [\#6313](https://github.com/vector-im/riot-web/pull/6313) + * Remove og:image with status.im URL + [\#6317](https://github.com/vector-im/riot-web/pull/6317) + * Add change delay warning in GroupView settings + [\#6316](https://github.com/vector-im/riot-web/pull/6316) + * Correctly position mx_TagPanel_clearButton + [\#6289](https://github.com/vector-im/riot-web/pull/6289) + * Fix gap between avatar and border + [\#6290](https://github.com/vector-im/riot-web/pull/6290) + * Fix bug where cannot send group invite on GroupMemberInfo phase + [\#6303](https://github.com/vector-im/riot-web/pull/6303) + * Fix themeing bug with Firefox where "disabled" ignored + [\#6301](https://github.com/vector-im/riot-web/pull/6301) + * Changes for E2E "fudge-button" + [\#6288](https://github.com/vector-im/riot-web/pull/6288) + * Make sure mx_TagPanel_tagTileContainer occupies full height + [\#6286](https://github.com/vector-im/riot-web/pull/6286) + * Add transparent CSS class for RoomTile + [\#6281](https://github.com/vector-im/riot-web/pull/6281) + * Fix crash; fs event received /w langauge file empty + [\#6273](https://github.com/vector-im/riot-web/pull/6273) + * Add setting to disable TagPanel + [\#6269](https://github.com/vector-im/riot-web/pull/6269) + * CSS for my groups microcopy + [\#6257](https://github.com/vector-im/riot-web/pull/6257) + * Add Bulgarian to the list of languages + [\#6246](https://github.com/vector-im/riot-web/pull/6246) + * Make media dropdown wider + [\#6245](https://github.com/vector-im/riot-web/pull/6245) + * Make dropdowns with long options degrade more gracefully + [\#6244](https://github.com/vector-im/riot-web/pull/6244) + * Fix un-tinted "View Community" icon in TagTile context menu + [\#6223](https://github.com/vector-im/riot-web/pull/6223) + * Fix RoomDropTarget and emptySubListTip to have containers + [\#6160](https://github.com/vector-im/riot-web/pull/6160) + * Fix syntax error of wrong use of self-closing HTML tag + [\#6154](https://github.com/vector-im/riot-web/pull/6154) + * Use translucent black for RoomSubList bg to fix tinting + [\#6227](https://github.com/vector-im/riot-web/pull/6227) + * CSS for changing "R" to "X" for clearing group filter + [\#6216](https://github.com/vector-im/riot-web/pull/6216) + * CSS for new global TagPanel filter + [\#6187](https://github.com/vector-im/riot-web/pull/6187) + * Separate the middle panel from the room list + [\#6194](https://github.com/vector-im/riot-web/pull/6194) + * Only use DNDRoomTile for editable sub lists + [\#6176](https://github.com/vector-im/riot-web/pull/6176) + * Adjust CSS to prevent scrollbars on message panel spinner + [\#6131](https://github.com/vector-im/riot-web/pull/6131) + * Implement riot-web side of dragging GroupTile avatars to TagPanel + [\#6143](https://github.com/vector-im/riot-web/pull/6143) + * Fix LeftPanel size being incorrect when TagPanel disabled + [\#6140](https://github.com/vector-im/riot-web/pull/6140) + * Fix TagPanel from collapsing to < 60px when LP collapsed + [\#6134](https://github.com/vector-im/riot-web/pull/6134) + * Temporary hack to constrain LLP container size. + [\#6138](https://github.com/vector-im/riot-web/pull/6138) + * Fix typo + [\#6137](https://github.com/vector-im/riot-web/pull/6137) + * Add context menu to TagPanel + [\#6127](https://github.com/vector-im/riot-web/pull/6127) + * Make room tagging flux-y + [\#6096](https://github.com/vector-im/riot-web/pull/6096) + * Move groups button to TagPanel + [\#6130](https://github.com/vector-im/riot-web/pull/6130) + * Fix long group name pushing settings cog into void + [\#6106](https://github.com/vector-im/riot-web/pull/6106) + * Fix horizontal scrollbar under certain circumstances + [\#6103](https://github.com/vector-im/riot-web/pull/6103) + * Split MImageBody into MFileBody to match JS Classes. + [\#6067](https://github.com/vector-im/riot-web/pull/6067) + * Add Catalan + [\#6040](https://github.com/vector-im/riot-web/pull/6040) + * Update from Weblate. + [\#5777](https://github.com/vector-im/riot-web/pull/5777) + * make FilteredList controlled, such that it can externally persist filter + [\#5718](https://github.com/vector-im/riot-web/pull/5718) + * Linear Rich Quoting + [\#6017](https://github.com/vector-im/riot-web/pull/6017) + * Highlight ViewSource and Devtools ViewSource + [\#5995](https://github.com/vector-im/riot-web/pull/5995) + * default url, not domain + [\#6022](https://github.com/vector-im/riot-web/pull/6022) + * T3chguy/num members tooltip + [\#5929](https://github.com/vector-im/riot-web/pull/5929) + * Swap RoomList to react-beautiful-dnd + [\#6008](https://github.com/vector-im/riot-web/pull/6008) + * CSS required as part of moving TagPanel from react-dnd to react-beautiful- + dnd + [\#5992](https://github.com/vector-im/riot-web/pull/5992) + * fix&refactor DateSeparator and MessageTimestamp + [\#5984](https://github.com/vector-im/riot-web/pull/5984) + * Iterative fixes on Rich Quoting + [\#5978](https://github.com/vector-im/riot-web/pull/5978) + * move piwik whitelists to conf and add piwik config.json info to readme + [\#5653](https://github.com/vector-im/riot-web/pull/5653) + * Implement Rich Quoting/Replies + [\#5804](https://github.com/vector-im/riot-web/pull/5804) + * Change author + [\#5950](https://github.com/vector-im/riot-web/pull/5950) + * Revert "Add a   after timestamp" + [\#5944](https://github.com/vector-im/riot-web/pull/5944) + * Add a   after timestamp + [\#3046](https://github.com/vector-im/riot-web/pull/3046) + * Corrected language name + [\#5938](https://github.com/vector-im/riot-web/pull/5938) + * Hide Options button from copy to clipboard + [\#2892](https://github.com/vector-im/riot-web/pull/2892) + * Fix for `If riot is narrow enough, such that 'Send a message (unecrypted)' + wraps to a second line, the timeline doesn't fit the window.` + [\#5900](https://github.com/vector-im/riot-web/pull/5900) + * Screenshot UI + [\#5849](https://github.com/vector-im/riot-web/pull/5849) + * add missing config.json entry such that scalar-staging widgets work + [\#5855](https://github.com/vector-im/riot-web/pull/5855) + * add dark theme styling to devtools input box + [\#5610](https://github.com/vector-im/riot-web/pull/5610) + * Fixes #1953 by adding oivoodoo as author + [\#5851](https://github.com/vector-im/riot-web/pull/5851) + * Instructions on security issues + [\#5824](https://github.com/vector-im/riot-web/pull/5824) + * Move DND wrapper to top level component + [\#5790](https://github.com/vector-im/riot-web/pull/5790) + * Widget title bar max / min visual cues. + [\#5786](https://github.com/vector-im/riot-web/pull/5786) + * Implement renumeration of ordered tags upon collision + [\#5759](https://github.com/vector-im/riot-web/pull/5759) + * Update imports for accessing KeyCode + [\#5751](https://github.com/vector-im/riot-web/pull/5751) + * Set html lang attribute from language setting + [\#5685](https://github.com/vector-im/riot-web/pull/5685) + * CSS for new TagPanel + [\#5723](https://github.com/vector-im/riot-web/pull/5723) + * getGroupStore no longer needs a matrix client + [\#5707](https://github.com/vector-im/riot-web/pull/5707) + * CSS required for moving group publication toggles to UserSettings + [\#5702](https://github.com/vector-im/riot-web/pull/5702) + * Make sure the SettingsStore is ready to load the theme before loading it + [\#5630](https://github.com/vector-im/riot-web/pull/5630) + * Add some aria-labels to RightPanel + [\#5661](https://github.com/vector-im/riot-web/pull/5661) + * Use badge count format for member count in RightPanel + [\#5657](https://github.com/vector-im/riot-web/pull/5657) + * Exclude the default language on page load + [\#5640](https://github.com/vector-im/riot-web/pull/5640) + * Use SettingsStore to get the default theme + [\#5615](https://github.com/vector-im/riot-web/pull/5615) + * Refactor translations + [\#5613](https://github.com/vector-im/riot-web/pull/5613) + * TintableSvgButton styling + [\#5605](https://github.com/vector-im/riot-web/pull/5605) + * Granular settings + [\#5468](https://github.com/vector-im/riot-web/pull/5468) + * CSS/components for custom presence controls + [\#5286](https://github.com/vector-im/riot-web/pull/5286) + * Set widget tile background colour + [\#5574](https://github.com/vector-im/riot-web/pull/5574) + * Widget styling tweaks + [\#5573](https://github.com/vector-im/riot-web/pull/5573) + * Center mixed content warnings in panel. + [\#5567](https://github.com/vector-im/riot-web/pull/5567) + * Status.im theme + [\#5578](https://github.com/vector-im/riot-web/pull/5578) + +Changes in [0.13.5](https://github.com/vector-im/riot-web/releases/tag/v0.13.5) (2018-02-09) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.4...v0.13.5) + + * SECURITY UPDATE: Sanitise URLs from 'external_url'. Thanks to walle303 for contacting + us about this vulnerability. + +Changes in [0.13.4](https://github.com/vector-im/riot-web/releases/tag/v0.13.4) (2018-01-03) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.3...v0.13.4) + + * Change config of riot.im electron build to fix some widgets not working. This only affects + electron builds using the riot.im config - for all other builds, this is identical to + v0.13.3. + +Changes in [0.13.3](https://github.com/vector-im/riot-web/releases/tag/v0.13.3) (2017-12-04) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.2...v0.13.3) + + * Bump js-sdk, react-sdk version to pull in fix for [setting room publicity in a group](https://github.com/matrix-org/matrix-js-sdk/commit/aa3201ebb0fff5af2fb733080aa65ed1f7213de6). + +Changes in [0.13.2](https://github.com/vector-im/riot-web/releases/tag/v0.13.2) (2017-11-28) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.1...v0.13.2) + + +Changes in [0.13.1](https://github.com/vector-im/riot-web/releases/tag/v0.13.1) (2017-11-17) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0...v0.13.1) + + * SECURITY UPDATE: Fix the force TURN option for inbound calls. This option forced the use + of TURN but only worked for outbound calls and not inbound calls. This means that if you + enabled this option expecting it to mask your IP address in calls, your IP would still + have been revealed to the room if you accepted an incoming call. + * Also adds the Slovak translation. + +Changes in [0.13.0](https://github.com/vector-im/riot-web/releases/tag/v0.13.0) (2017-11-15) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0-rc.3...v0.13.0) + + +Changes in [0.13.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.13.0-rc.3) (2017-11-14) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0-rc.2...v0.13.0-rc.3) + + +Changes in [0.13.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.13.0-rc.2) (2017-11-10) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0-rc.1...v0.13.0-rc.2) + + * Make groups a fully-fleged baked-in feature + [\#5566](https://github.com/vector-im/riot-web/pull/5566) + +Changes in [0.13.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.13.0-rc.1) (2017-11-10) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7...v0.13.0-rc.1) + + * Fix app tile margins. + [\#5561](https://github.com/vector-im/riot-web/pull/5561) + * Fix wrapping of long room topics (and overlap with apps) + [\#5549](https://github.com/vector-im/riot-web/pull/5549) + * Don't display widget iframes whilst loading. + [\#5555](https://github.com/vector-im/riot-web/pull/5555) + * Update from Weblate. + [\#5558](https://github.com/vector-im/riot-web/pull/5558) + * Adjust CSS for GroupView + [\#5543](https://github.com/vector-im/riot-web/pull/5543) + * CSS for adding rooms to a group with visibility + [\#5546](https://github.com/vector-im/riot-web/pull/5546) + * CSS for pinned indicators + [\#5511](https://github.com/vector-im/riot-web/pull/5511) + * Implement general-purpose tooltip "(?)"-style + [\#5540](https://github.com/vector-im/riot-web/pull/5540) + * CSS for improving group creation UX, namely setting long description + [\#5535](https://github.com/vector-im/riot-web/pull/5535) + * CSS for room notif pills in composer + [\#5531](https://github.com/vector-im/riot-web/pull/5531) + * Do not init a group store when no groupId specified + [\#5520](https://github.com/vector-im/riot-web/pull/5520) + * CSS for new pinned events indicator + [\#5293](https://github.com/vector-im/riot-web/pull/5293) + * T3chguy/devtools 1 + [\#5471](https://github.com/vector-im/riot-web/pull/5471) + * Use margin to separate "perms" in the room directory + [\#5498](https://github.com/vector-im/riot-web/pull/5498) + * Add CSS for CreateGroupDialog to give group ID input suffix and prefix style + [\#5505](https://github.com/vector-im/riot-web/pull/5505) + * Fix group invites such that they look similar to room invites + [\#5504](https://github.com/vector-im/riot-web/pull/5504) + * CSS for Your Communities scrollbar + [\#5501](https://github.com/vector-im/riot-web/pull/5501) + * Add toggle to alter visibility of room-group association + [\#5497](https://github.com/vector-im/riot-web/pull/5497) + * CSS for room notification pills + [\#5494](https://github.com/vector-im/riot-web/pull/5494) + * Implement simple GroupRoomInfo + [\#5493](https://github.com/vector-im/riot-web/pull/5493) + * Add back bottom border to widget title bar + [\#5458](https://github.com/vector-im/riot-web/pull/5458) + * Prevent group name looking clickable for non-members + [\#5478](https://github.com/vector-im/riot-web/pull/5478) + * Fix instanceof check, was checking against the Package rather than class + [\#5472](https://github.com/vector-im/riot-web/pull/5472) + * Use correct group store state when rendering "Invite to this community" + [\#5455](https://github.com/vector-im/riot-web/pull/5455) + * Leverages ES6 in Notifications + [\#5453](https://github.com/vector-im/riot-web/pull/5453) + * Re-PR #4412 + [\#5437](https://github.com/vector-im/riot-web/pull/5437) + * fix comma error of features example + [\#5410](https://github.com/vector-im/riot-web/pull/5410) + * Devtools: make filtering case-insensitive + [\#5387](https://github.com/vector-im/riot-web/pull/5387) + * Highlight group members icon in group member info + [\#5432](https://github.com/vector-im/riot-web/pull/5432) + * Use CSS to stop greyed Right/LeftPanel UI from being interactable + [\#5422](https://github.com/vector-im/riot-web/pull/5422) + * CSS for preventing editing of UI requiring user privilege if user + unprivileged + [\#5417](https://github.com/vector-im/riot-web/pull/5417) + * Only show UI for adding rooms/users to groups to privileged users + [\#5409](https://github.com/vector-im/riot-web/pull/5409) + * Only show "Invite to this community" when viewing group members + [\#5407](https://github.com/vector-im/riot-web/pull/5407) + * Add trash can icon for delete widget + [\#5397](https://github.com/vector-im/riot-web/pull/5397) + * CSS to improve MyGroups in general, and add placeholder + [\#5375](https://github.com/vector-im/riot-web/pull/5375) + * Rxl881/parallelshell + [\#4881](https://github.com/vector-im/riot-web/pull/4881) + * Custom server text was i18ned by key + [\#5371](https://github.com/vector-im/riot-web/pull/5371) + * Run prunei18n + [\#5370](https://github.com/vector-im/riot-web/pull/5370) + * Update from Weblate. + [\#5369](https://github.com/vector-im/riot-web/pull/5369) + * Add script to prune unused translations + [\#5339](https://github.com/vector-im/riot-web/pull/5339) + * CSS for improved MyGroups page + [\#5360](https://github.com/vector-im/riot-web/pull/5360) + * Add padding-right to Dialogs + [\#5346](https://github.com/vector-im/riot-web/pull/5346) + * Add div.warning and use the scss var + [\#5344](https://github.com/vector-im/riot-web/pull/5344) + * Groups->Communities + [\#5343](https://github.com/vector-im/riot-web/pull/5343) + * Make the 'add rooms' button clickable + [\#5342](https://github.com/vector-im/riot-web/pull/5342) + * Switch to gen-i18n script + [\#5338](https://github.com/vector-im/riot-web/pull/5338) + * Use _t as _t + [\#5334](https://github.com/vector-im/riot-web/pull/5334) + * fix groupview header editing visuals (pt 1) + [\#5330](https://github.com/vector-im/riot-web/pull/5330) + * bump version to prevent eslint errors + [\#5316](https://github.com/vector-im/riot-web/pull/5316) + * CSS for invited group members section + [\#5303](https://github.com/vector-im/riot-web/pull/5303) + * Handle long names in EntityTiles by overflowing correctly + [\#5302](https://github.com/vector-im/riot-web/pull/5302) + * Disable labs in electron + [\#5296](https://github.com/vector-im/riot-web/pull/5296) + * CSS for Modifying GroupView UI matrix-org/matrix-react-sdk#1475 + [\#5295](https://github.com/vector-im/riot-web/pull/5295) + * Message/event pinning + [\#5142](https://github.com/vector-im/riot-web/pull/5142) + * Sorting of networks within a protocol based on name + [\#4054](https://github.com/vector-im/riot-web/pull/4054) + * allow hiding of notification body for privacy reasons + [\#4988](https://github.com/vector-im/riot-web/pull/4988) + * Don't use MXIDs on the lightbox if possible + [\#5281](https://github.com/vector-im/riot-web/pull/5281) + * CSS for lonely room message + [\#5267](https://github.com/vector-im/riot-web/pull/5267) + * Bring back dark theme code block border + [\#5037](https://github.com/vector-im/riot-web/pull/5037) + * CSS for remove avatar buttons + [\#5282](https://github.com/vector-im/riot-web/pull/5282) + +Changes in [0.12.7](https://github.com/vector-im/riot-web/releases/tag/v0.12.7) (2017-10-16) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7-rc.3...v0.12.7) + + * Released versions of react-sdk & js-sdk + +Changes in [0.12.7-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.12.7-rc.3) (2017-10-13) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7-rc.2...v0.12.7-rc.3) + + * Hide the join group button + [\#5275](https://github.com/vector-im/riot-web/pull/5275) + +Changes in [0.12.7-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.12.7-rc.2) (2017-10-13) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7-rc.1...v0.12.7-rc.2) + + +Changes in [0.12.7-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.7-rc.1) (2017-10-13) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.6...v0.12.7-rc.1) + + * switch to new logos, and use import rather than VAR + [\#5203](https://github.com/vector-im/riot-web/pull/5203) + * Clarify what an integrations server is + [\#5266](https://github.com/vector-im/riot-web/pull/5266) + * Update from Weblate. + [\#5269](https://github.com/vector-im/riot-web/pull/5269) + * Remove trailing comma in JSON + [\#5167](https://github.com/vector-im/riot-web/pull/5167) + * Added default_federate property + [\#3849](https://github.com/vector-im/riot-web/pull/3849) + * CSS for greying out login form + [\#5197](https://github.com/vector-im/riot-web/pull/5197) + * Fix bug that made sub list placeholders not show for ILAG etc. + [\#5164](https://github.com/vector-im/riot-web/pull/5164) + * Factor out EditableItemList component from AliasSettings + [\#5161](https://github.com/vector-im/riot-web/pull/5161) + * Mark and remove some translations + [\#5110](https://github.com/vector-im/riot-web/pull/5110) + * CSS for "remove" button on GroupRoomTile + [\#5141](https://github.com/vector-im/riot-web/pull/5141) + * Create basic icon for the GroupRoomList tab and adding rooms to groups + [\#5140](https://github.com/vector-im/riot-web/pull/5140) + * Add button to get to MyGroups + [\#5131](https://github.com/vector-im/riot-web/pull/5131) + * Remove `key` prop pass-thru on HeaderButton + [\#5137](https://github.com/vector-im/riot-web/pull/5137) + * Implement "Add room to group" feature + [\#5125](https://github.com/vector-im/riot-web/pull/5125) + * Add Jitsi screensharing support in electron app + [\#4967](https://github.com/vector-im/riot-web/pull/4967) + * Refactor right panel header buttons + [\#5117](https://github.com/vector-im/riot-web/pull/5117) + * CSS for publicity status & toggle button + [\#5104](https://github.com/vector-im/riot-web/pull/5104) + * CSS for "X" in top right of features users/rooms + [\#5103](https://github.com/vector-im/riot-web/pull/5103) + * Include Finnish translation + [\#5051](https://github.com/vector-im/riot-web/pull/5051) + * Redesign membership section of GroupView + [\#5096](https://github.com/vector-im/riot-web/pull/5096) + * Make --config accept globs + [\#5090](https://github.com/vector-im/riot-web/pull/5090) + * CSS for GroupView: Add a User + [\#5093](https://github.com/vector-im/riot-web/pull/5093) + * T3chguy/devtools 1 + [\#5074](https://github.com/vector-im/riot-web/pull/5074) + * Alter opacity for flair + [\#5085](https://github.com/vector-im/riot-web/pull/5085) + * Fix ugly integ button + [\#5082](https://github.com/vector-im/riot-web/pull/5082) + * Group Membership UI + [\#4830](https://github.com/vector-im/riot-web/pull/4830) + +Changes in [0.12.6](https://github.com/vector-im/riot-web/releases/tag/v0.12.6) (2017-09-21) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.5...v0.12.6) + + * Use matrix-js-sdk v0.8.4 to fix build + +Changes in [0.12.5](https://github.com/vector-im/riot-web/releases/tag/v0.12.5) (2017-09-21) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.4...v0.12.5) + + * Use react-sdk v0.10.5 to fix build + +Changes in [0.12.4](https://github.com/vector-im/riot-web/releases/tag/v0.12.4) (2017-09-20) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.4-rc.1...v0.12.4) + + * No changes + +Changes in [0.12.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.4-rc.1) (2017-09-19) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3...v0.12.4-rc.1) + + * Fix test for new behaviour of 'joining' flag + [\#5053](https://github.com/vector-im/riot-web/pull/5053) + * fix really dumb blunder/typo preventing system from going to sleep. + [\#5080](https://github.com/vector-im/riot-web/pull/5080) + * T3chguy/devtools + [\#4735](https://github.com/vector-im/riot-web/pull/4735) + * CSS for unignore button in UserSettings + [\#5042](https://github.com/vector-im/riot-web/pull/5042) + * Fix alias on home page for identity room + [\#5044](https://github.com/vector-im/riot-web/pull/5044) + * generic contextual menu for tooltip/responses + [\#4989](https://github.com/vector-im/riot-web/pull/4989) + * Update from Weblate. + [\#5018](https://github.com/vector-im/riot-web/pull/5018) + * Avoid re-rendering RoomList on room switch + [\#5015](https://github.com/vector-im/riot-web/pull/5015) + * Fix menu on change keyboard language issue #4345 + [\#4623](https://github.com/vector-im/riot-web/pull/4623) + * Make isInvite default to false + [\#4999](https://github.com/vector-im/riot-web/pull/4999) + * Revert "Implement sticky date separators" + [\#4991](https://github.com/vector-im/riot-web/pull/4991) + * Implement sticky date separators + [\#4939](https://github.com/vector-im/riot-web/pull/4939) + +Changes in [0.12.3](https://github.com/vector-im/riot-web/releases/tag/v0.12.3) (2017-09-06) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3-rc.3...v0.12.3) + + * No changes + +Changes in [0.12.3-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.12.3-rc.3) (2017-09-05) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3-rc.2...v0.12.3-rc.3) + + * Fix plurals in translations + [\#4971](https://github.com/vector-im/riot-web/pull/4971) + * Update from Weblate. + [\#4968](https://github.com/vector-im/riot-web/pull/4968) + +Changes in [0.12.3-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.12.3-rc.2) (2017-09-05) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3-rc.1...v0.12.3-rc.2) + + * New react-sdk version to pull in new translations and fix some translation bugs. + + +Changes in [0.12.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.3-rc.1) (2017-09-01) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.2...v0.12.3-rc.1) + + * Fix overflowing login/register buttons on some languages issue #4804 + [\#4858](https://github.com/vector-im/riot-web/pull/4858) + * Update vector-im to riot-im on Login + [\#4943](https://github.com/vector-im/riot-web/pull/4943) + * lets let people know that the bug report actually sent properly :) + [\#4910](https://github.com/vector-im/riot-web/pull/4910) + * another s/vector/riot/ in README + [\#4934](https://github.com/vector-im/riot-web/pull/4934) + * fix two room list regressions + [\#4907](https://github.com/vector-im/riot-web/pull/4907) + +Changes in [0.12.2](https://github.com/vector-im/riot-web/releases/tag/v0.12.2) (2017-08-24) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.1...v0.12.2) + + * Update react-sdk and js-sdk to fix bugs with incoming calls, messages and notifications + in encrypted rooms. + +Changes in [0.12.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.1) (2017-08-23) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.1-rc.1...v0.12.1) + + * [No changes] + +Changes in [0.12.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.1-rc.1) (2017-08-22) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.0-rc.2...v0.12.1-rc.1) + + * Update from Weblate. + [\#4832](https://github.com/vector-im/riot-web/pull/4832) + * Misc styling fixes. + [\#4826](https://github.com/vector-im/riot-web/pull/4826) + * Show / Hide apps icons + [\#4774](https://github.com/vector-im/riot-web/pull/4774) + +Changes in [0.12.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.0-rc.1) (2017-08-16) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.4...v0.12.0-rc.1) + + * Update from Weblate. + [\#4797](https://github.com/vector-im/riot-web/pull/4797) + * move focus-via-up/down cursors to LeftPanel + [\#4777](https://github.com/vector-im/riot-web/pull/4777) + * Remove userId property on RightPanel + [\#4775](https://github.com/vector-im/riot-web/pull/4775) + * Make member device info buttons fluid and stackable with flexbox + [\#4776](https://github.com/vector-im/riot-web/pull/4776) + * un-i18n Modal Analytics + [\#4688](https://github.com/vector-im/riot-web/pull/4688) + * Quote using innerText + [\#4773](https://github.com/vector-im/riot-web/pull/4773) + * Karma tweaks for riot-web + [\#4765](https://github.com/vector-im/riot-web/pull/4765) + * Fix typo with scripts/fetch-develop-deps.sh in Building From Source + [\#4764](https://github.com/vector-im/riot-web/pull/4764) + * Adjust CSS for optional avatars in pills + [\#4757](https://github.com/vector-im/riot-web/pull/4757) + * Fix crypto on develop + [\#4754](https://github.com/vector-im/riot-web/pull/4754) + * Fix signing key url in readme + [\#4464](https://github.com/vector-im/riot-web/pull/4464) + * update gitignore to allow .idea directory to exist in subdirs + [\#4749](https://github.com/vector-im/riot-web/pull/4749) + * tweak compact theme + [\#4665](https://github.com/vector-im/riot-web/pull/4665) + * Update draft-js from 0.10.1 to 0.11.0-alpha + [\#4740](https://github.com/vector-im/riot-web/pull/4740) + * electron support for mouse forward/back buttons in Windows + [\#4739](https://github.com/vector-im/riot-web/pull/4739) + * Update draft-js from 0.8.1 to 0.10.1 + [\#4730](https://github.com/vector-im/riot-web/pull/4730) + * Make pills, emoji translucent when sending + [\#4693](https://github.com/vector-im/riot-web/pull/4693) + * Widget permissions styling and icon + [\#4690](https://github.com/vector-im/riot-web/pull/4690) + * CSS required for composer autoscroll + [\#4682](https://github.com/vector-im/riot-web/pull/4682) + * CSS for group edit UI + [\#4608](https://github.com/vector-im/riot-web/pull/4608) + * Fix a couple of minor errors in the room list + [\#4671](https://github.com/vector-im/riot-web/pull/4671) + * Styling for beta testing icon. + [\#4584](https://github.com/vector-im/riot-web/pull/4584) + * Increase the timeout for clearing indexeddbs + [\#4650](https://github.com/vector-im/riot-web/pull/4650) + * Make some adjustments to mx_UserPill and mx_RoomPill + [\#4597](https://github.com/vector-im/riot-web/pull/4597) + * Apply CSS to
 tags to distinguish them from each other
+   [\#4639](https://github.com/vector-im/riot-web/pull/4639)
+ * Use `catch` instead of `fail` to handle room tag error
+   [\#4643](https://github.com/vector-im/riot-web/pull/4643)
+ * CSS for decorated matrix.to links in the composer
+   [\#4583](https://github.com/vector-im/riot-web/pull/4583)
+ * Deflake the joining test
+   [\#4579](https://github.com/vector-im/riot-web/pull/4579)
+ * Bump react to 15.6 to fix build problems
+   [\#4577](https://github.com/vector-im/riot-web/pull/4577)
+ * Improve AppTile menu bar button styling.
+   [\#4567](https://github.com/vector-im/riot-web/pull/4567)
+ * Transform `async` functions to bluebird promises
+   [\#4572](https://github.com/vector-im/riot-web/pull/4572)
+ * use flushAllExpected in joining test
+   [\#4570](https://github.com/vector-im/riot-web/pull/4570)
+ * Switch riot-web to bluebird
+   [\#4565](https://github.com/vector-im/riot-web/pull/4565)
+ * loading tests: wait for login component
+   [\#4564](https://github.com/vector-im/riot-web/pull/4564)
+ * Remove CSS for the MessageComposerInputOld
+   [\#4568](https://github.com/vector-im/riot-web/pull/4568)
+ * Implement the focus_room_filter action
+   [\#4560](https://github.com/vector-im/riot-web/pull/4560)
+ * CSS for Rooms in Group View
+   [\#4530](https://github.com/vector-im/riot-web/pull/4530)
+ * more HomePage tweaks
+   [\#4557](https://github.com/vector-im/riot-web/pull/4557)
+ * Give HomePage an unmounted guard
+   [\#4556](https://github.com/vector-im/riot-web/pull/4556)
+ * Take RTE out of labs
+   [\#4500](https://github.com/vector-im/riot-web/pull/4500)
+ * CSS for Groups page
+   [\#4468](https://github.com/vector-im/riot-web/pull/4468)
+ * CSS for GroupView
+   [\#4442](https://github.com/vector-im/riot-web/pull/4442)
+ * remove unused class
+   [\#4525](https://github.com/vector-im/riot-web/pull/4525)
+ * Fix long words causing MessageComposer to widen
+   [\#4466](https://github.com/vector-im/riot-web/pull/4466)
+ * Add visual bell animation for RTE
+   [\#4516](https://github.com/vector-im/riot-web/pull/4516)
+ * Truncate auto-complete pills properly
+   [\#4502](https://github.com/vector-im/riot-web/pull/4502)
+ * Use chrome headless instead of phantomjs
+   [\#4512](https://github.com/vector-im/riot-web/pull/4512)
+ * Use external mock-request
+   [\#4489](https://github.com/vector-im/riot-web/pull/4489)
+ * fix Quote not closing contextual menu
+   [\#4443](https://github.com/vector-im/riot-web/pull/4443)
+ * Apply white-space: pre-wrap to mx_MEmoteBody
+   [\#4470](https://github.com/vector-im/riot-web/pull/4470)
+ * Add some style improvements to autocompletions
+   [\#4456](https://github.com/vector-im/riot-web/pull/4456)
+ * Styling for apps / widgets
+   [\#4447](https://github.com/vector-im/riot-web/pull/4447)
+ * Attempt to flush the rageshake logs on close
+   [\#4400](https://github.com/vector-im/riot-web/pull/4400)
+ * Update from Weblate.
+   [\#4401](https://github.com/vector-im/riot-web/pull/4401)
+ * improve update polling electron and provide a manual check for updates
+   button
+   [\#4176](https://github.com/vector-im/riot-web/pull/4176)
+ * Fix load failure in firefox when indexedDB is disabled
+   [\#4395](https://github.com/vector-im/riot-web/pull/4395)
+ * Change missed 'Redact' to 'Remove' in ImageView.
+   [\#4362](https://github.com/vector-im/riot-web/pull/4362)
+ * explicit convert to nativeImage to stabilise trayIcon on Windows [Electron]
+   [\#4355](https://github.com/vector-im/riot-web/pull/4355)
+ * Use _tJsx for PasswordNagBar (because it has )
+   [\#4373](https://github.com/vector-im/riot-web/pull/4373)
+ * Clean up some log outputs from the integ tests
+   [\#4376](https://github.com/vector-im/riot-web/pull/4376)
+ * CSS for redeisng of password warning
+   [\#4367](https://github.com/vector-im/riot-web/pull/4367)
+ * Give _t to PasswordNagBar, add CSS for UserSettings password warning
+   [\#4366](https://github.com/vector-im/riot-web/pull/4366)
+ * Update from Weblate.
+   [\#4361](https://github.com/vector-im/riot-web/pull/4361)
+ * Update from Weblate.
+   [\#4360](https://github.com/vector-im/riot-web/pull/4360)
+ * Test 'return-to-app' functionality
+   [\#4352](https://github.com/vector-im/riot-web/pull/4352)
+ * Update from Weblate.
+   [\#4354](https://github.com/vector-im/riot-web/pull/4354)
+ * onLoadCompleted is now onTokenLoginCompleted
+   [\#4335](https://github.com/vector-im/riot-web/pull/4335)
+ * Tweak tests to match updates to matrixchat
+   [\#4325](https://github.com/vector-im/riot-web/pull/4325)
+ * Update from Weblate.
+   [\#4346](https://github.com/vector-im/riot-web/pull/4346)
+ * change dispatcher forward_event signature
+   [\#4337](https://github.com/vector-im/riot-web/pull/4337)
+ * Add border on hover for code blocks
+   [\#4259](https://github.com/vector-im/riot-web/pull/4259)
+
+Changes in [0.11.4](https://github.com/vector-im/riot-web/releases/tag/v0.11.4) (2017-06-22)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.3...v0.11.4)
+
+ * Update matrix-js-sdk and react-sdk to fix a regression where the
+   background indexedb worker was disabled, failures to open indexeddb
+   causing the app to fail to start, a race when starting that could break
+   switching to rooms, and the inability to invite users with mixed case
+   usernames.
+
+Changes in [0.11.3](https://github.com/vector-im/riot-web/releases/tag/v0.11.3) (2017-06-20)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.2...v0.11.3)
+
+ * Update to matrix-react-sdk 0.9.6 to fix infinite spinner bugs
+   and some parts of the app that had missed translation.
+
+Changes in [0.11.2](https://github.com/vector-im/riot-web/releases/tag/v0.11.2) (2017-06-19)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.2-rc.2...v0.11.2)
+
+ * Add more languages and translations
+ * Add a 'register' button
+
+Changes in [0.11.2-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.11.2-rc.2) (2017-06-16)
+======================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.2-rc.1...v0.11.2-rc.2)
+
+ * Update react-sdk to pull in fixes for URL previews, CAS
+   login, h2 in markdown and CAPTCHA forms.
+ * Enable Korean translation
+ * Update from Weblate.
+   [\#4323](https://github.com/vector-im/riot-web/pull/4323)
+ * Fix h2 in markdown being weird
+   [\#4332](https://github.com/vector-im/riot-web/pull/4332)
+
+Changes in [0.11.2-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.11.2-rc.1) (2017-06-15)
+======================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.1...v0.11.2-rc.1)
+
+ * Attempts to deflakify the joining test
+   [\#4313](https://github.com/vector-im/riot-web/pull/4313)
+ * Add a test for the login flow when there is a teamserver
+   [\#4315](https://github.com/vector-im/riot-web/pull/4315)
+ * Remove onload simulator from loading test
+   [\#4314](https://github.com/vector-im/riot-web/pull/4314)
+ * Update from Weblate.
+   [\#4305](https://github.com/vector-im/riot-web/pull/4305)
+ * Test that we handle stored mx_last_room_id correctly
+   [\#4292](https://github.com/vector-im/riot-web/pull/4292)
+ * Ask for email address after setting password for the first time
+   [\#4301](https://github.com/vector-im/riot-web/pull/4301)
+ * i18n for setting email after password flow
+   [\#4299](https://github.com/vector-im/riot-web/pull/4299)
+ * Update from Weblate.
+   [\#4290](https://github.com/vector-im/riot-web/pull/4290)
+ * Don't show the tooltips when filtering rooms
+   [\#4282](https://github.com/vector-im/riot-web/pull/4282)
+ * Update from Weblate.
+   [\#4272](https://github.com/vector-im/riot-web/pull/4272)
+ * Add missing VOIP Dropdown width
+   [\#4266](https://github.com/vector-im/riot-web/pull/4266)
+ * Update import and directory path in the Translations dev guide
+   [\#4261](https://github.com/vector-im/riot-web/pull/4261)
+ * Use Thai string for Thai in Language-Chooser
+   [\#4260](https://github.com/vector-im/riot-web/pull/4260)
+
+Changes in [0.11.1](https://github.com/vector-im/riot-web/releases/tag/v0.11.1) (2017-06-14)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.0...v0.11.1)
+
+ * Update to react-sdk 0.9.4 to prompt to set an
+   email address when setting a password and make
+   DM guessing smarter.
+
+Changes in [0.11.0](https://github.com/vector-im/riot-web/releases/tag/v0.11.0) (2017-06-12)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.0-rc.2...v0.11.0)
+
+ * More translations & minor fixes
+
+Changes in [0.11.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.11.0-rc.2) (2017-06-09)
+======================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.0-rc.1...v0.11.0-rc.2)
+
+ * Update to matrix-react-sdk rc.2 which fixes the flux
+   dependency version and an issue with the conference
+   call bar translation.
+
+
+Changes in [0.11.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.11.0-rc.1) (2017-06-09)
+======================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.10.2...v0.11.0-rc.1)
+
+ * Update from Weblate.
+   [\#4258](https://github.com/vector-im/riot-web/pull/4258)
+ * Update from Weblate.
+   [\#4254](https://github.com/vector-im/riot-web/pull/4254)
+ * Update from Weblate.
+   [\#4253](https://github.com/vector-im/riot-web/pull/4253)
+ * Expect to see HTTP /join/#some:alias when we the view knows it
+   [\#4252](https://github.com/vector-im/riot-web/pull/4252)
+ * Update from Weblate.
+   [\#4250](https://github.com/vector-im/riot-web/pull/4250)
+ * add explicit import to utf8 polyfill and rip out unused imports
+   [\#4169](https://github.com/vector-im/riot-web/pull/4169)
+ * Added styling for copy to clipboard button
+   [\#4204](https://github.com/vector-im/riot-web/pull/4204)
+ * Update from Weblate.
+   [\#4231](https://github.com/vector-im/riot-web/pull/4231)
+ * Update from Weblate.
+   [\#4218](https://github.com/vector-im/riot-web/pull/4218)
+ * Update CSS for ChatInviteDialog
+   [\#4226](https://github.com/vector-im/riot-web/pull/4226)
+ * change electron -> electron_app which was previously missed
+   [\#4212](https://github.com/vector-im/riot-web/pull/4212)
+ * New guest access
+   [\#4039](https://github.com/vector-im/riot-web/pull/4039)
+ * Align message timestamp centrally about the avatar mid-point
+   [\#4219](https://github.com/vector-im/riot-web/pull/4219)
+ * Remove '/' from homepage URL
+   [\#4221](https://github.com/vector-im/riot-web/pull/4221)
+ * Chop off 'origin/'
+   [\#4220](https://github.com/vector-im/riot-web/pull/4220)
+ * Update from Weblate.
+   [\#4214](https://github.com/vector-im/riot-web/pull/4214)
+ * adjust alignment of message menu button in compact layout
+   [\#4211](https://github.com/vector-im/riot-web/pull/4211)
+ * Update from Weblate.
+   [\#4207](https://github.com/vector-im/riot-web/pull/4207)
+ * Fix Tests in ILAG
+   [\#4209](https://github.com/vector-im/riot-web/pull/4209)
+ * Update from Weblate.
+   [\#4197](https://github.com/vector-im/riot-web/pull/4197)
+ * Fix tests for new-guest-access
+   [\#4201](https://github.com/vector-im/riot-web/pull/4201)
+ * i18n for SetPasswordDialog
+   [\#4198](https://github.com/vector-im/riot-web/pull/4198)
+ * Update from Weblate.
+   [\#4193](https://github.com/vector-im/riot-web/pull/4193)
+ * to make the windows volume mixer not explode as it can't resize icons.
+   [\#4183](https://github.com/vector-im/riot-web/pull/4183)
+ * provide react devtools in electron dev runs
+   [\#4186](https://github.com/vector-im/riot-web/pull/4186)
+ * Fix DeprecationWarning
+   [\#4184](https://github.com/vector-im/riot-web/pull/4184)
+ * room link should be a matrix.to one
+   [\#4178](https://github.com/vector-im/riot-web/pull/4178)
+ * Update home.html
+   [\#4163](https://github.com/vector-im/riot-web/pull/4163)
+ * Add missing translation for room directory
+   [\#4160](https://github.com/vector-im/riot-web/pull/4160)
+ * i18n welcome
+   [\#4129](https://github.com/vector-im/riot-web/pull/4129)
+ * Tom welcome page
+   [\#4038](https://github.com/vector-im/riot-web/pull/4038)
+ * Fix some tests that expect Directory (they should expect HomePage)
+   [\#4076](https://github.com/vector-im/riot-web/pull/4076)
+ * Add "Login" button to RHS when user is a guest
+   [\#4037](https://github.com/vector-im/riot-web/pull/4037)
+ * Rejig the PaswordNagBar
+   [\#4026](https://github.com/vector-im/riot-web/pull/4026)
+ * Allow team server config to be missing
+   [\#4024](https://github.com/vector-im/riot-web/pull/4024)
+ * Remove GuestWarningBar
+   [\#4020](https://github.com/vector-im/riot-web/pull/4020)
+ * Make left panel better for new users (mk III)
+   [\#4023](https://github.com/vector-im/riot-web/pull/4023)
+ * Implement default welcome page and allow custom URL /w config
+   [\#4015](https://github.com/vector-im/riot-web/pull/4015)
+ * Add warm-fuzzy for successful password entry
+   [\#3989](https://github.com/vector-im/riot-web/pull/3989)
+ * autoFocus new password input in SetPasswordDialog
+   [\#3982](https://github.com/vector-im/riot-web/pull/3982)
+ * Implement dialog to set password
+   [\#3921](https://github.com/vector-im/riot-web/pull/3921)
+ * Replace NeedToRegister with SetMxId dialog
+   [\#3924](https://github.com/vector-im/riot-web/pull/3924)
+ * Add welcomeUserId to sample config
+   [\#3906](https://github.com/vector-im/riot-web/pull/3906)
+ * CSS for mxIdDialog redesign
+   [\#3885](https://github.com/vector-im/riot-web/pull/3885)
+ * Implement PasswordNagBar
+   [\#3817](https://github.com/vector-im/riot-web/pull/3817)
+ * CSS for new SetMxIdDialog
+   [\#3762](https://github.com/vector-im/riot-web/pull/3762)
+
+Changes in [0.10.2](https://github.com/vector-im/riot-web/releases/tag/v0.10.2) (2017-06-06)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.10.1...v0.10.2)
+
+ * Hotfix for bugs where navigating straight to a URL like /#/login and
+   and /#/forgot_password
+
+
+Changes in [0.10.1](https://github.com/vector-im/riot-web/releases/tag/v0.10.1) (2017-06-02)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.10.0...v0.10.1)
+
+ * Update to matrix-react-sdk 0.9.1 to fix i18n error which broke start chat in some circumstances
+
+Changes in [0.10.0](https://github.com/vector-im/riot-web/releases/tag/v0.10.0) (2017-06-02)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.10.0-rc.2...v0.10.0)
+
+ * Update from Weblate.
+   [\#4152](https://github.com/vector-im/riot-web/pull/4152)
+
+Changes in [0.10.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.10.0-rc.2) (2017-06-02)
+======================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.10.0-rc.1...v0.10.0-rc.2)
+
+ * Update from Weblate.
+   [\#4150](https://github.com/vector-im/riot-web/pull/4150)
+ * styling for webrtc settings
+   [\#4019](https://github.com/vector-im/riot-web/pull/4019)
+ * Update from Weblate.
+   [\#4140](https://github.com/vector-im/riot-web/pull/4140)
+ * add styles for compact layout
+   [\#4132](https://github.com/vector-im/riot-web/pull/4132)
+ * Various tweaks to fetch-develop-deps
+   [\#4147](https://github.com/vector-im/riot-web/pull/4147)
+ * Don't try to build with node 6.0
+   [\#4145](https://github.com/vector-im/riot-web/pull/4145)
+ * Support 12hr time on DateSeparator
+   [\#4143](https://github.com/vector-im/riot-web/pull/4143)
+ * Update from Weblate.
+   [\#4137](https://github.com/vector-im/riot-web/pull/4137)
+ * Update from Weblate.
+   [\#4105](https://github.com/vector-im/riot-web/pull/4105)
+ * Update from Weblate.
+   [\#4094](https://github.com/vector-im/riot-web/pull/4094)
+ * Update from Weblate.
+   [\#4091](https://github.com/vector-im/riot-web/pull/4091)
+ * Update from Weblate.
+   [\#4089](https://github.com/vector-im/riot-web/pull/4089)
+ * Update from Weblate.
+   [\#4083](https://github.com/vector-im/riot-web/pull/4083)
+
+Changes in [0.10.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.10.0-rc.1) (2017-06-01)
+======================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.10...v0.10.0-rc.1)
+
+ * basic electron profile support
+   [\#4030](https://github.com/vector-im/riot-web/pull/4030)
+ * Finish translations for vector-im/riot-web
+   [\#4122](https://github.com/vector-im/riot-web/pull/4122)
+ * Translate src/vector
+   [\#4119](https://github.com/vector-im/riot-web/pull/4119)
+ * electron flashFrame was way too annoying
+   [\#4128](https://github.com/vector-im/riot-web/pull/4128)
+ * auto-launch support [Electron]
+   [\#4012](https://github.com/vector-im/riot-web/pull/4012)
+ * Show 12hr time on hover too
+   [\#4092](https://github.com/vector-im/riot-web/pull/4092)
+ * Translate src/notifications
+   [\#4087](https://github.com/vector-im/riot-web/pull/4087)
+ * Translate src/components/structures
+   [\#4084](https://github.com/vector-im/riot-web/pull/4084)
+ * Smaller font size on timestamp to better fit in the available space
+   [\#4085](https://github.com/vector-im/riot-web/pull/4085)
+ * Make travis run the build with several versions of node
+   [\#4079](https://github.com/vector-im/riot-web/pull/4079)
+ * Piwik Analytics
+   [\#4056](https://github.com/vector-im/riot-web/pull/4056)
+ * Update from Weblate.
+   [\#4077](https://github.com/vector-im/riot-web/pull/4077)
+ * managed to eat the eventStatus check, can't redact a local-echo etc
+   [\#4078](https://github.com/vector-im/riot-web/pull/4078)
+ * show redact in context menu only if has PL to/sent message
+   [\#3925](https://github.com/vector-im/riot-web/pull/3925)
+ * Update from Weblate.
+   [\#4064](https://github.com/vector-im/riot-web/pull/4064)
+ * Change redact -> remove to improve clarity
+   [\#3722](https://github.com/vector-im/riot-web/pull/3722)
+ * Update from Weblate.
+   [\#4058](https://github.com/vector-im/riot-web/pull/4058)
+ * Message Forwarding
+   [\#3688](https://github.com/vector-im/riot-web/pull/3688)
+ * Update from Weblate.
+   [\#4057](https://github.com/vector-im/riot-web/pull/4057)
+ * Fixed an input field's background color in dark theme
+   [\#4053](https://github.com/vector-im/riot-web/pull/4053)
+ * Update from Weblate.
+   [\#4051](https://github.com/vector-im/riot-web/pull/4051)
+ * Update from Weblate.
+   [\#4049](https://github.com/vector-im/riot-web/pull/4049)
+ * Update from Weblate.
+   [\#4048](https://github.com/vector-im/riot-web/pull/4048)
+ * Update from Weblate.
+   [\#4040](https://github.com/vector-im/riot-web/pull/4040)
+ * Update translating.md: Minor suggestions
+   [\#4041](https://github.com/vector-im/riot-web/pull/4041)
+ * tidy electron files, they weren't pwetty
+   [\#3993](https://github.com/vector-im/riot-web/pull/3993)
+ * Prevent Power Save when in call (Electron)
+   [\#3992](https://github.com/vector-im/riot-web/pull/3992)
+ * Translations!
+   [\#4035](https://github.com/vector-im/riot-web/pull/4035)
+ * Kieran gould/12hourtimestamp
+   [\#3961](https://github.com/vector-im/riot-web/pull/3961)
+ * Don't include src in the test resolve root
+   [\#4033](https://github.com/vector-im/riot-web/pull/4033)
+ * add moar context menus [Electron]
+   [\#4021](https://github.com/vector-im/riot-web/pull/4021)
+ * Add `Chat` to Linux app categories
+   [\#4022](https://github.com/vector-im/riot-web/pull/4022)
+ * add menu category for linux build of app
+   [\#3975](https://github.com/vector-im/riot-web/pull/3975)
+ * Electron Tray Improvements
+   [\#3909](https://github.com/vector-im/riot-web/pull/3909)
+ * More riot-web test deflakification
+   [\#3966](https://github.com/vector-im/riot-web/pull/3966)
+ * Script to fetch corresponding branches of dependent projects
+   [\#3945](https://github.com/vector-im/riot-web/pull/3945)
+ * Add type="text/css" to SVG logos
+   [\#3964](https://github.com/vector-im/riot-web/pull/3964)
+ * Fix some setState-after-unmount in roomdirectory
+   [\#3958](https://github.com/vector-im/riot-web/pull/3958)
+ * Attempt to deflakify joining test
+   [\#3956](https://github.com/vector-im/riot-web/pull/3956)
+
+Changes in [0.9.10](https://github.com/vector-im/riot-web/releases/tag/v0.9.10) (2017-05-22)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.10-rc.1...v0.9.10)
+
+ * No changes
+
+
+Changes in [0.9.10-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.9.10-rc.1) (2017-05-19)
+======================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.9...v0.9.10-rc.1)
+
+ * CSS for left_aligned Dropdowns, and adjustments for Country dd in Login
+   [\#3959](https://github.com/vector-im/riot-web/pull/3959)
+ * Add square flag pngs /w genflags.sh script
+   [\#3953](https://github.com/vector-im/riot-web/pull/3953)
+ * Add config for riot-bot on desktop app build
+   [\#3954](https://github.com/vector-im/riot-web/pull/3954)
+ * Desktop: 'copy link address'
+   [\#3952](https://github.com/vector-im/riot-web/pull/3952)
+ * Reduce rageshake log size to 1MB
+   [\#3943](https://github.com/vector-im/riot-web/pull/3943)
+ * CSS for putting country dd on same line as phone input
+   [\#3942](https://github.com/vector-im/riot-web/pull/3942)
+ * fix #3894
+   [\#3919](https://github.com/vector-im/riot-web/pull/3919)
+ * change vector->riot on the surface
+   [\#3894](https://github.com/vector-im/riot-web/pull/3894)
+ * move manifest.json outward so it is scoped properly
+   [\#3888](https://github.com/vector-im/riot-web/pull/3888)
+ * add to manifest
+   [\#3799](https://github.com/vector-im/riot-web/pull/3799)
+ * Automatically update component-index
+   [\#3886](https://github.com/vector-im/riot-web/pull/3886)
+ * move electron -> electron_app because npm smart
+   [\#3877](https://github.com/vector-im/riot-web/pull/3877)
+ * Fix bug report endpoint in config.sample.json.
+   [\#3863](https://github.com/vector-im/riot-web/pull/3863)
+ * Update 2 missed icons to the new icon
+   [\#3851](https://github.com/vector-im/riot-web/pull/3851)
+ * Make left panel better for new users (mk II)
+   [\#3804](https://github.com/vector-im/riot-web/pull/3804)
+ * match primary package.json
+   [\#3839](https://github.com/vector-im/riot-web/pull/3839)
+ * Re-add productName
+   [\#3829](https://github.com/vector-im/riot-web/pull/3829)
+ * Remove leading v in /version file, for SemVer and to match Electron ver
+   [\#3683](https://github.com/vector-im/riot-web/pull/3683)
+ * Fix scope of callback
+   [\#3790](https://github.com/vector-im/riot-web/pull/3790)
+ * Remember and Recall window layout/position state
+   [\#3622](https://github.com/vector-im/riot-web/pull/3622)
+ * Remove babelcheck
+   [\#3808](https://github.com/vector-im/riot-web/pull/3808)
+ * Include MXID and device id in rageshakes
+   [\#3809](https://github.com/vector-im/riot-web/pull/3809)
+ * import Modal
+   [\#3791](https://github.com/vector-im/riot-web/pull/3791)
+ * Pin filesize ver to fix break upstream
+   [\#3775](https://github.com/vector-im/riot-web/pull/3775)
+ * Improve Room Directory Look & Feel
+   [\#3751](https://github.com/vector-im/riot-web/pull/3751)
+ * Fix emote RRs alignment
+   [\#3742](https://github.com/vector-im/riot-web/pull/3742)
+ * Remove unused `placeholder` prop on RoomDropTarget
+   [\#3741](https://github.com/vector-im/riot-web/pull/3741)
+ * Modify CSS for matrix-org/matrix-react-sdk#833
+   [\#3732](https://github.com/vector-im/riot-web/pull/3732)
+ * Warn when exiting due to single-instance
+   [\#3727](https://github.com/vector-im/riot-web/pull/3727)
+ * Electron forgets it was maximized when you click on a notification
+   [\#3709](https://github.com/vector-im/riot-web/pull/3709)
+ * CSS to make h1 and h2 the same size as h1.
+   [\#3719](https://github.com/vector-im/riot-web/pull/3719)
+ * Prevent long room names/topics from pushing UI of the screen
+   [\#3721](https://github.com/vector-im/riot-web/pull/3721)
+ * Disable dropdown highlight on focus
+   [\#3717](https://github.com/vector-im/riot-web/pull/3717)
+ * Escape HTML Tags from Linux Notifications (electron)
+   [\#3564](https://github.com/vector-im/riot-web/pull/3564)
+ * styling for spoilerized access token view in Settings
+   [\#3651](https://github.com/vector-im/riot-web/pull/3651)
+ * Fix Webpack conf
+   [\#3690](https://github.com/vector-im/riot-web/pull/3690)
+ * Add config.json to .gitignore
+   [\#3599](https://github.com/vector-im/riot-web/pull/3599)
+ * add command line arg (--hidden) for electron app
+   [\#3641](https://github.com/vector-im/riot-web/pull/3641)
+ * fix ImageView Download functionality
+   [\#3640](https://github.com/vector-im/riot-web/pull/3640)
+ * Add cross-env into the mix
+   [\#3693](https://github.com/vector-im/riot-web/pull/3693)
+ * Remember acceptance for unsupported browsers.
+   [\#3694](https://github.com/vector-im/riot-web/pull/3694)
+ * Cosmetics to go with matrix-org/matrix-react-sdk#811
+   [\#3692](https://github.com/vector-im/riot-web/pull/3692)
+ * Cancel quicksearch on ESC
+   [\#3680](https://github.com/vector-im/riot-web/pull/3680)
+ * Optimise RoomList and implement quick-search functionality on it.
+   [\#3654](https://github.com/vector-im/riot-web/pull/3654)
+ * Progress updates for rageshake uploads
+   [\#3648](https://github.com/vector-im/riot-web/pull/3648)
+ * Factor out rageshake upload to a separate file
+   [\#3645](https://github.com/vector-im/riot-web/pull/3645)
+ * rageshake: fix race when collecting logs
+   [\#3644](https://github.com/vector-im/riot-web/pull/3644)
+ * Fix a flaky test
+   [\#3649](https://github.com/vector-im/riot-web/pull/3649)
+
+Changes in [0.9.9](https://github.com/vector-im/riot-web/releases/tag/v0.9.9) (2017-04-25)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.9-rc.2...v0.9.9)
+
+ * No changes
+
+
+Changes in [0.9.9-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.9.9-rc.2) (2017-04-24)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.9-rc.1...v0.9.9-rc.2)
+
+ * Fix bug where links to Riot would fail to open.
+
+
+Changes in [0.9.9-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.9.9-rc.1) (2017-04-21)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.8...v0.9.9-rc.1)
+
+ * Update js-sdk and matrix-react-sdk to fix registration without a captcha (https://github.com/vector-im/riot-web/issues/3621)
+
+
+Changes in [0.9.8](https://github.com/vector-im/riot-web/releases/tag/v0.9.8) (2017-04-12)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.8-rc.3...v0.9.8)
+
+ * No changes
+
+Changes in [0.9.8-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.9.8-rc.3) (2017-04-11)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.8-rc.2...v0.9.8-rc.3)
+
+ * Make the clear cache button work on desktop
+   [\#3598](https://github.com/vector-im/riot-web/pull/3598)
+
+Changes in [0.9.8-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.9.8-rc.2) (2017-04-10)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.8-rc.1...v0.9.8-rc.2)
+
+ * Redacted events bg: black lozenge -> torn paper
+   [\#3596](https://github.com/vector-im/riot-web/pull/3596)
+ * Add 'app' parameter to rageshake report
+   [\#3594](https://github.com/vector-im/riot-web/pull/3594)
+
+Changes in [0.9.8-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.9.8-rc.1) (2017-04-07)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.7...v0.9.8-rc.1)
+
+ * Add support for indexeddb sync in webworker
+   [\#3578](https://github.com/vector-im/riot-web/pull/3578)
+ * Add CSS to make Emote sender cursor : pointer
+   [\#3574](https://github.com/vector-im/riot-web/pull/3574)
+ * Remove rageshake server
+   [\#3565](https://github.com/vector-im/riot-web/pull/3565)
+ * Adjust CSS for matrix-org/matrix-react-sdk#789
+   [\#3566](https://github.com/vector-im/riot-web/pull/3566)
+ * Fix tests to reflect recent changes
+   [\#3537](https://github.com/vector-im/riot-web/pull/3537)
+ * Do not assume getTs will return comparable integer
+   [\#3536](https://github.com/vector-im/riot-web/pull/3536)
+ * Rename ReactPerf to Perf
+   [\#3535](https://github.com/vector-im/riot-web/pull/3535)
+ * Don't show phone number as target for email notifs
+   [\#3530](https://github.com/vector-im/riot-web/pull/3530)
+ * Fix people section again
+   [\#3458](https://github.com/vector-im/riot-web/pull/3458)
+ * dark theme invert inconsistent across browsers
+   [\#3479](https://github.com/vector-im/riot-web/pull/3479)
+ * CSS for adding phone number in UserSettings
+   [\#3451](https://github.com/vector-im/riot-web/pull/3451)
+ * Support for phone number registration/signin, mk2
+   [\#3426](https://github.com/vector-im/riot-web/pull/3426)
+ * Confirm redactions with a dialog
+   [\#3470](https://github.com/vector-im/riot-web/pull/3470)
+ * Better CSS for redactions
+   [\#3453](https://github.com/vector-im/riot-web/pull/3453)
+ * Fix the people section
+   [\#3448](https://github.com/vector-im/riot-web/pull/3448)
+ * Merge the two RoomTile context menus into one
+   [\#3395](https://github.com/vector-im/riot-web/pull/3395)
+ * Refactor screen set after login
+   [\#3385](https://github.com/vector-im/riot-web/pull/3385)
+ * CSS for redacted EventTiles
+   [\#3379](https://github.com/vector-im/riot-web/pull/3379)
+ * Height:100% for welcome pages on Safari
+   [\#3340](https://github.com/vector-im/riot-web/pull/3340)
+ * `view_room` dispatch from `onClick` RoomTile
+   [\#3376](https://github.com/vector-im/riot-web/pull/3376)
+ * Hide statusAreaBox_line entirely when inCall
+   [\#3350](https://github.com/vector-im/riot-web/pull/3350)
+ * Set padding-bottom: 0px for .mx_Dialog spinner
+   [\#3351](https://github.com/vector-im/riot-web/pull/3351)
+ * Support InteractiveAuth based registration
+   [\#3333](https://github.com/vector-im/riot-web/pull/3333)
+ * Expose notification option for username/MXID
+   [\#3334](https://github.com/vector-im/riot-web/pull/3334)
+ * Float the toggle in the top right of MELS
+   [\#3190](https://github.com/vector-im/riot-web/pull/3190)
+ * More aggressive rageshake log culling
+   [\#3311](https://github.com/vector-im/riot-web/pull/3311)
+ * Don't overflow directory network options
+   [\#3282](https://github.com/vector-im/riot-web/pull/3282)
+ * CSS for ban / kick reason prompt
+   [\#3250](https://github.com/vector-im/riot-web/pull/3250)
+ * Allow forgetting rooms you're banned from
+   [\#3246](https://github.com/vector-im/riot-web/pull/3246)
+ * Fix icon paths in manifest
+   [\#3245](https://github.com/vector-im/riot-web/pull/3245)
+ * Fix broken tests caused by adding IndexedDB support
+   [\#3242](https://github.com/vector-im/riot-web/pull/3242)
+ * CSS for un-ban button in RoomSettings
+   [\#3227](https://github.com/vector-im/riot-web/pull/3227)
+ * Remove z-index property on avatar initials
+   [\#3239](https://github.com/vector-im/riot-web/pull/3239)
+ * Reposition certain icons in the status bar
+   [\#3233](https://github.com/vector-im/riot-web/pull/3233)
+ * CSS for kick/ban confirmation dialog
+   [\#3224](https://github.com/vector-im/riot-web/pull/3224)
+ * Style for split-out interactive auth
+   [\#3217](https://github.com/vector-im/riot-web/pull/3217)
+ * Use the teamToken threaded through from react sdk
+   [\#3196](https://github.com/vector-im/riot-web/pull/3196)
+ * rageshake: Add file server with basic auth
+   [\#3169](https://github.com/vector-im/riot-web/pull/3169)
+ * Fix bug with home icon not appearing when logged in as team member
+   [\#3162](https://github.com/vector-im/riot-web/pull/3162)
+ * Add ISSUE_TEMPLATE
+   [\#2836](https://github.com/vector-im/riot-web/pull/2836)
+ * Store bug reports in separate directories
+   [\#3150](https://github.com/vector-im/riot-web/pull/3150)
+ * Quick and dirty support for custom welcome pages.
+   [\#2575](https://github.com/vector-im/riot-web/pull/2575)
+ * RTS Welcome Pages
+   [\#3103](https://github.com/vector-im/riot-web/pull/3103)
+ * rageshake: Abide by Go standards
+   [\#3149](https://github.com/vector-im/riot-web/pull/3149)
+ * Bug report server script
+   [\#3072](https://github.com/vector-im/riot-web/pull/3072)
+ * Bump olm version
+   [\#3125](https://github.com/vector-im/riot-web/pull/3125)
+
+Changes in [0.9.7](https://github.com/vector-im/riot-web/releases/tag/v0.9.7) (2017-02-04)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.7-rc.3...v0.9.7)
+
+ * Update to matrix-js-sdk 0.7.5 (no changes from 0.7.5-rc.3)
+ * Update to matrix-react-sdk 0.8.6 (no changes from 0.8.6-rc.3)
+
+Changes in [0.9.7-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.9.7-rc.3) (2017-02-03)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.7-rc.2...v0.9.7-rc.3)
+ * Update to latest Olm to fix key import/export and use of megolm sessions
+   created on more recent versions
+ * Update to latest matrix-react-sdk and matrix-js-sdk to fix e2e device
+   handling
+
+Changes in [0.9.7-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.9.7-rc.2) (2017-02-03)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.7-rc.1...v0.9.7-rc.2)
+
+ * Update matrix-js-sdk to get new device change
+   notifications interface for more reliable e2e crypto
+
+Changes in [0.9.7-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.9.7-rc.1) (2017-02-03)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.6...v0.9.7-rc.1)
+
+ * Better user interface for screen readers and keyboard navigation
+   [\#2946](https://github.com/vector-im/riot-web/pull/2946)
+ * Allow mxc: URLs for icons in the NetworkDropdown
+   [\#3118](https://github.com/vector-im/riot-web/pull/3118)
+ * make TopRightMenu more intuitive
+   [\#3117](https://github.com/vector-im/riot-web/pull/3117)
+ * Handle icons with width > height
+   [\#3110](https://github.com/vector-im/riot-web/pull/3110)
+ * Fix jenkins build
+   [\#3105](https://github.com/vector-im/riot-web/pull/3105)
+ * Add CSS for a support box in login
+   [\#3081](https://github.com/vector-im/riot-web/pull/3081)
+ * Allow a custom login logo to be displayed on login
+   [\#3082](https://github.com/vector-im/riot-web/pull/3082)
+ * Fix the width of input fields within login/reg box
+   [\#3080](https://github.com/vector-im/riot-web/pull/3080)
+ * Set BaseAvatar_image bg colour = #fff
+   [\#3057](https://github.com/vector-im/riot-web/pull/3057)
+ * only recalculate favicon if it changes
+   [\#3067](https://github.com/vector-im/riot-web/pull/3067)
+ * CSS tweak for email address lookup
+   [\#3064](https://github.com/vector-im/riot-web/pull/3064)
+ * Glue the dialog to rageshake: honour sendLogs flag.
+   [\#3061](https://github.com/vector-im/riot-web/pull/3061)
+ * Don't use hash-named directory for dev server
+   [\#3049](https://github.com/vector-im/riot-web/pull/3049)
+ * Implement bug reporting logic
+   [\#3000](https://github.com/vector-im/riot-web/pull/3000)
+ * Add css for bug report dialog
+   [\#3045](https://github.com/vector-im/riot-web/pull/3045)
+ * Increase the max-height of the expanded status bar
+   [\#3043](https://github.com/vector-im/riot-web/pull/3043)
+ * Hopefully, fix intermittent test failure
+   [\#3040](https://github.com/vector-im/riot-web/pull/3040)
+ * CSS for 'searching known users'
+   [\#2971](https://github.com/vector-im/riot-web/pull/2971)
+ * Animate status bar max-height and margin-top
+   [\#2981](https://github.com/vector-im/riot-web/pull/2981)
+ * Add eslint config
+   [\#3032](https://github.com/vector-im/riot-web/pull/3032)
+ * Re-position typing avatars relative to "is typing"
+   [\#3030](https://github.com/vector-im/riot-web/pull/3030)
+ * CSS for avatars that appear when users are typing
+   [\#2998](https://github.com/vector-im/riot-web/pull/2998)
+ * Add StartupWMClass
+   [\#3001](https://github.com/vector-im/riot-web/pull/3001)
+ * Fix link to image for event options menu
+   [\#3002](https://github.com/vector-im/riot-web/pull/3002)
+ * Make riot desktop single instance
+   [\#2999](https://github.com/vector-im/riot-web/pull/2999)
+ * Add electron tray icon
+   [\#2997](https://github.com/vector-im/riot-web/pull/2997)
+ * Fixes to electron desktop notifs
+   [\#2994](https://github.com/vector-im/riot-web/pull/2994)
+ * Auto-hide the electron menu bar
+   [\#2975](https://github.com/vector-im/riot-web/pull/2975)
+ * A couple of tweaks to the karma config
+   [\#2987](https://github.com/vector-im/riot-web/pull/2987)
+ * Deploy script
+   [\#2974](https://github.com/vector-im/riot-web/pull/2974)
+ * Use the postcss-webpack-loader
+   [\#2990](https://github.com/vector-im/riot-web/pull/2990)
+ * Switch CSS to using postcss, and implement a dark theme.
+   [\#2973](https://github.com/vector-im/riot-web/pull/2973)
+ * Update redeploy script to keep old bundles
+   [\#2969](https://github.com/vector-im/riot-web/pull/2969)
+ * Include current version in update check explicitly
+   [\#2967](https://github.com/vector-im/riot-web/pull/2967)
+ * Add another layer of directory to webpack chunks
+   [\#2966](https://github.com/vector-im/riot-web/pull/2966)
+ * Fix links to fonts and images from CSS
+   [\#2965](https://github.com/vector-im/riot-web/pull/2965)
+ * Put parent build hash in webpack output filenames
+   [\#2961](https://github.com/vector-im/riot-web/pull/2961)
+ * update README to point to new names/locations
+   [\#2846](https://github.com/vector-im/riot-web/pull/2846)
+
+Changes in [0.9.6](https://github.com/vector-im/riot-web/releases/tag/v0.9.6) (2017-01-16)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.6-rc.1...v0.9.6)
+
+ * Update to matrix-js-sdk 0.9.6 for video calling fix
+
+Changes in [0.9.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.9.6-rc.1) (2017-01-13)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.5...v0.9.6-rc.1)
+
+ * Build the js-sdk in the CI script
+   [\#2920](https://github.com/vector-im/riot-web/pull/2920)
+ * Hopefully fix Windows shortcuts
+   [\#2917](https://github.com/vector-im/riot-web/pull/2917)
+ * Update README now the js-sdk has a transpile step
+   [\#2921](https://github.com/vector-im/riot-web/pull/2921)
+ * Use the role for 'toggle dev tools'
+   [\#2915](https://github.com/vector-im/riot-web/pull/2915)
+ * Enable screen sharing easter-egg in desktop app
+   [\#2909](https://github.com/vector-im/riot-web/pull/2909)
+ * make electron send email validation URLs with a nextlink of riot.im
+   [\#2808](https://github.com/vector-im/riot-web/pull/2808)
+ * add Debian Stretch install steps to readme
+   [\#2809](https://github.com/vector-im/riot-web/pull/2809)
+ * Update desktop build instructions fixes #2792
+   [\#2793](https://github.com/vector-im/riot-web/pull/2793)
+ * CSS for the delete threepid button
+   [\#2784](https://github.com/vector-im/riot-web/pull/2784)
+
+Changes in [0.9.5](https://github.com/vector-im/riot-web/releases/tag/v0.9.5) (2016-12-24)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.4...v0.9.5)
+
+ * make electron send email validation URLs with a nextlink of riot.im rather than file:///
+ * add gnu-tar to debian electron build deps
+ * fix win32 shortcut in start menu
+
+Changes in [0.9.4](https://github.com/vector-im/riot-web/releases/tag/v0.9.4) (2016-12-22)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.3...v0.9.4)
+
+ * Update to libolm 2.1.0. This should help resolve a problem with browser
+   sessions being logged out ([\#2726](https://github.com/vector-im/riot-web/issues/2726)).
+
+Changes in [0.9.3](https://github.com/vector-im/riot-web/releases/tag/v0.9.3) (2016-12-22)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.2...v0.9.3)
+
+ * (from matrix-react-sdk) Fix regression where the date separator would be displayed
+   at the wrong time of day.
+ * README.md: fix GFMD for nativefier
+   [\#2755](https://github.com/vector-im/riot-web/pull/2755)
+
+Changes in [0.9.2](https://github.com/vector-im/riot-web/releases/tag/v0.9.2) (2016-12-16)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.1...v0.9.2)
+
+ * Remove the client side filtering from the room dir
+   [\#2750](https://github.com/vector-im/riot-web/pull/2750)
+ * Configure olm memory size
+   [\#2745](https://github.com/vector-im/riot-web/pull/2745)
+ * Support room dir 3rd party network filtering
+   [\#2747](https://github.com/vector-im/riot-web/pull/2747)
+
+Changes in [0.9.1](https://github.com/vector-im/riot-web/releases/tag/v0.9.1) (2016-12-09)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.1-rc.2...v0.9.1)
+
+ * Update README to say how to build the desktop app
+   [\#2732](https://github.com/vector-im/riot-web/pull/2732)
+ * Add signing ID in release_config.yaml
+   [\#2731](https://github.com/vector-im/riot-web/pull/2731)
+ * Makeover!
+   [\#2722](https://github.com/vector-im/riot-web/pull/2722)
+ * Fix broken tests
+   [\#2730](https://github.com/vector-im/riot-web/pull/2730)
+ * Make the 'loading' tests work in isolation
+   [\#2727](https://github.com/vector-im/riot-web/pull/2727)
+ * Use a PNG for the icon on non-Windows
+   [\#2708](https://github.com/vector-im/riot-web/pull/2708)
+ * Add missing brackets to call to toUpperCase
+   [\#2703](https://github.com/vector-im/riot-web/pull/2703)
+
+Changes in [0.9.1-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.9.1-rc.2) (2016-12-06)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.1-rc.1...v0.9.1-rc.2)
+
+ * Fix clicking on notifications
+   [\#2700](https://github.com/vector-im/riot-web/pull/2700)
+ * Desktop app: Only show window when ready
+   [\#2697](https://github.com/vector-im/riot-web/pull/2697)
+
+Changes in [0.9.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.9.1-rc.1) (2016-12-05)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.9.0...v0.9.1-rc.1)
+
+ * Final bits to prepare electron distribtion:
+   [\#2653](https://github.com/vector-im/riot-web/pull/2653)
+ * Update name & repo to reflect renamed repository
+   [\#2692](https://github.com/vector-im/riot-web/pull/2692)
+ * Document cross_origin_renderer_url
+   [\#2680](https://github.com/vector-im/riot-web/pull/2680)
+ * Add css for the iframes for e2e attachments
+   [\#2659](https://github.com/vector-im/riot-web/pull/2659)
+ * Fix config location in some more places
+   [\#2670](https://github.com/vector-im/riot-web/pull/2670)
+ * CSS updates for s/block/blacklist for e2e
+   [\#2662](https://github.com/vector-im/riot-web/pull/2662)
+ * Update to electron 1.4.8
+   [\#2660](https://github.com/vector-im/riot-web/pull/2660)
+ * Add electron config
+   [\#2644](https://github.com/vector-im/riot-web/pull/2644)
+ * Move getDefaultDeviceName into the Platforms
+   [\#2643](https://github.com/vector-im/riot-web/pull/2643)
+ * Add Freenode & Mozilla domains
+   [\#2641](https://github.com/vector-im/riot-web/pull/2641)
+ * Include config.sample.json in dist tarball
+   [\#2614](https://github.com/vector-im/riot-web/pull/2614)
+
+Changes in [0.9.0](https://github.com/vector-im/vector-web/releases/tag/v0.9.0) (2016-11-19)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.8.4...v0.9.0)
+
+ * Add a cachebuster to /version
+   [\#2596](https://github.com/vector-im/vector-web/pull/2596)
+ * Add a 'View decrypted source' button
+   [\#2587](https://github.com/vector-im/vector-web/pull/2587)
+ * Fix changelog dialog to  read new version format
+   [\#2577](https://github.com/vector-im/vector-web/pull/2577)
+ * Build all of the vector dir in the build process
+   [\#2558](https://github.com/vector-im/vector-web/pull/2558)
+ * Support for get_app_version
+   [\#2553](https://github.com/vector-im/vector-web/pull/2553)
+ * Add CSS for mlist truncation
+   [\#2565](https://github.com/vector-im/vector-web/pull/2565)
+ * Add menu option for `external_url` if present
+   [\#2560](https://github.com/vector-im/vector-web/pull/2560)
+ * Make auto-update configureable
+   [\#2555](https://github.com/vector-im/vector-web/pull/2555)
+ * Missed files electron windows fixes
+   [\#2556](https://github.com/vector-im/vector-web/pull/2556)
+ * Add some CSS for  scalar error popup
+   [\#2554](https://github.com/vector-im/vector-web/pull/2554)
+ * Catch unhandled errors in the electron process
+   [\#2552](https://github.com/vector-im/vector-web/pull/2552)
+ * Slight grab-bag of fixes for electron on Windows
+   [\#2551](https://github.com/vector-im/vector-web/pull/2551)
+ * Electron app (take 3)
+   [\#2535](https://github.com/vector-im/vector-web/pull/2535)
+ * Use webpack-dev-server instead of http-server
+   [\#2542](https://github.com/vector-im/vector-web/pull/2542)
+ * Better support no-config when loading from file
+   [\#2541](https://github.com/vector-im/vector-web/pull/2541)
+ * Fix loading with no config from HTTP
+   [\#2540](https://github.com/vector-im/vector-web/pull/2540)
+ * Move 'new version' support into Platform
+   [\#2532](https://github.com/vector-im/vector-web/pull/2532)
+ * Add Notification support to the Web Platform
+   [\#2533](https://github.com/vector-im/vector-web/pull/2533)
+ * Use the defaults if given a blank config file
+   [\#2534](https://github.com/vector-im/vector-web/pull/2534)
+ * Implement Platforms
+   [\#2531](https://github.com/vector-im/vector-web/pull/2531)
+
+Changes in [0.8.4](https://github.com/vector-im/vector-web/releases/tag/v0.8.4) (2016-11-04)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.8.4-rc.2...v0.8.4)
+
+ * No changes
+
+Changes in [0.8.4-rc.2](https://github.com/vector-im/vector-web/releases/tag/v0.8.4-rc.2) (2016-11-02)
+======================================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.8.4-rc.1...v0.8.4-rc.2)
+
+ * Fix the version in the generated distribution package
+
+Changes in [0.8.4-rc.1](https://github.com/vector-im/vector-web/releases/tag/v0.8.4-rc.1) (2016-11-02)
+======================================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.8.3...v0.8.4-rc.1)
+
+Breaking Changes
+----------------
+ * End-to-end encryption now requires one-time keys to be
+   signed, so end-to-end encryption will not interoperate
+   with previous releases of vector-web. End-to-end encryption
+   remains in beta.
+
+Other Changes
+-------------
+ * Rename the package script/output dir to 'dist'
+   [\#2528](https://github.com/vector-im/vector-web/pull/2528)
+ * Avoid errors if olm is missing
+   [\#2518](https://github.com/vector-im/vector-web/pull/2518)
+ * Put a cachebuster in the names of CSS and JS files
+   [\#2515](https://github.com/vector-im/vector-web/pull/2515)
+ * Bump to olm 2.0.0
+   [\#2517](https://github.com/vector-im/vector-web/pull/2517)
+ * Don't include the world in the published packages
+   [\#2516](https://github.com/vector-im/vector-web/pull/2516)
+ * Use webpack to copy olm.js
+   [\#2514](https://github.com/vector-im/vector-web/pull/2514)
+ * Don't include two copies of the CSS in the tarball
+   [\#2513](https://github.com/vector-im/vector-web/pull/2513)
+ * Correct text alignment on room directory search
+   [\#2512](https://github.com/vector-im/vector-web/pull/2512)
+ * Correct spelling of 'rel'
+   [\#2510](https://github.com/vector-im/vector-web/pull/2510)
+ * readme tweaks
+   [\#2507](https://github.com/vector-im/vector-web/pull/2507)
+ * s/vector/riot/ in the readme
+   [\#2491](https://github.com/vector-im/vector-web/pull/2491)
+ * Switch to babel 6, again
+   [\#2480](https://github.com/vector-im/vector-web/pull/2480)
+ * Revert "Switch to babel 6"
+   [\#2472](https://github.com/vector-im/vector-web/pull/2472)
+ * Switch to babel 6
+   [\#2461](https://github.com/vector-im/vector-web/pull/2461)
+
+Changes in [0.8.3](https://github.com/vector-im/vector-web/releases/tag/v0.8.3) (2016-10-12)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.8.2...v0.8.3)
+
+ * Centre images in dialog buttons
+   [\#2453](https://github.com/vector-im/vector-web/pull/2453)
+ * Only show quote option if RTE is enabled
+   [\#2448](https://github.com/vector-im/vector-web/pull/2448)
+ * Fix join button for 'matrix' networks
+   [\#2443](https://github.com/vector-im/vector-web/pull/2443)
+ * Don't stop paginating if no rooms match
+   [\#2422](https://github.com/vector-im/vector-web/pull/2422)
+
+Changes in [0.8.2](https://github.com/vector-im/vector-web/releases/tag/v0.8.2) (2016-10-05)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.8.1...v0.8.2)
+
+ * Add native joining of 3p networks to room dir
+   [\#2379](https://github.com/vector-im/vector-web/pull/2379)
+ * Update to linkify 2.1.3
+   [\#2406](https://github.com/vector-im/vector-web/pull/2406)
+ * Use 'Sign In' / 'Sign Out' universally
+   [\#2383](https://github.com/vector-im/vector-web/pull/2383)
+ * Prevent network dropdown resizing slightly
+   [\#2382](https://github.com/vector-im/vector-web/pull/2382)
+ * Room directory: indicate when there are no results
+   [\#2380](https://github.com/vector-im/vector-web/pull/2380)
+ * Room dir: New filtering & 3rd party networks
+   [\#2362](https://github.com/vector-im/vector-web/pull/2362)
+ * Update linkify version
+   [\#2359](https://github.com/vector-im/vector-web/pull/2359)
+ * Directory search join button
+   [\#2339](https://github.com/vector-im/vector-web/pull/2339)
+
+Changes in [0.8.1](https://github.com/vector-im/vector-web/releases/tag/v0.8.1) (2016-09-21)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.8.0...v0.8.1)
+
+
+Changes in [0.8.0](https://github.com/vector-im/vector-web/releases/tag/v0.8.0) (2016-09-21)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.5-r3...v0.8.0)
+
+ * Dbkr/rebrand
+   [\#2285](https://github.com/vector-im/vector-web/pull/2285)
+ * Listen for close_scalar and close the dialog box when received
+   [\#2282](https://github.com/vector-im/vector-web/pull/2282)
+ * Revert "improve lipstick and support scalar logout"
+   [\#2281](https://github.com/vector-im/vector-web/pull/2281)
+ * improve lipstick and support scalar logout
+   [\#2280](https://github.com/vector-im/vector-web/pull/2280)
+ * Fix changelog links
+   [\#2071](https://github.com/vector-im/vector-web/pull/2071)
+ * Paginate Room Directory
+   [\#2241](https://github.com/vector-im/vector-web/pull/2241)
+ * Make redeploy script symlink config
+   [\#2240](https://github.com/vector-im/vector-web/pull/2240)
+ * Update the version of olm to 1.3.0
+   [\#2210](https://github.com/vector-im/vector-web/pull/2210)
+ * Directory network selector
+   [\#2219](https://github.com/vector-im/vector-web/pull/2219)
+ * Wmwragg/two state sublist headers
+   [\#2235](https://github.com/vector-im/vector-web/pull/2235)
+ * Wmwragg/correct incoming call positioning
+   [\#2222](https://github.com/vector-im/vector-web/pull/2222)
+ * Wmwragg/remove old filter
+   [\#2211](https://github.com/vector-im/vector-web/pull/2211)
+ * Wmwragg/multi invite bugfix
+   [\#2198](https://github.com/vector-im/vector-web/pull/2198)
+ * Wmwragg/chat multi invite
+   [\#2181](https://github.com/vector-im/vector-web/pull/2181)
+ * shuffle bottomleftmenu around a bit
+   [\#2182](https://github.com/vector-im/vector-web/pull/2182)
+ * Improve autocomplete behaviour (styling)
+   [\#2175](https://github.com/vector-im/vector-web/pull/2175)
+ * First wave of E2E visuals
+   [\#2163](https://github.com/vector-im/vector-web/pull/2163)
+ * FilePanel and NotificationPanel support
+   [\#2113](https://github.com/vector-im/vector-web/pull/2113)
+ * Cursor: pointer on member info create room button
+   [\#2151](https://github.com/vector-im/vector-web/pull/2151)
+ * Support for adding DM rooms to the MemberInfo Panel
+   [\#2147](https://github.com/vector-im/vector-web/pull/2147)
+ * Wmwragg/one to one indicators
+   [\#2139](https://github.com/vector-im/vector-web/pull/2139)
+ * Added back the Directory listing button, with new tootlip
+   [\#2136](https://github.com/vector-im/vector-web/pull/2136)
+ * wmwragg/chat invite dialog fix
+   [\#2134](https://github.com/vector-im/vector-web/pull/2134)
+ * Wmwragg/one to one chat
+   [\#2110](https://github.com/vector-im/vector-web/pull/2110)
+ * Support toggling DM status of rooms
+   [\#2111](https://github.com/vector-im/vector-web/pull/2111)
+ * Formatting toolbar for RTE message composer.
+   [\#2082](https://github.com/vector-im/vector-web/pull/2082)
+ * jenkins.sh: install olm from jenkins artifacts
+   [\#2092](https://github.com/vector-im/vector-web/pull/2092)
+ * e2e device CSS
+   [\#2085](https://github.com/vector-im/vector-web/pull/2085)
+ * Bump to olm 1.1.0
+   [\#2069](https://github.com/vector-im/vector-web/pull/2069)
+ * Improve readability of the changelog dialog
+   [\#2056](https://github.com/vector-im/vector-web/pull/2056)
+ * Turn react consistency checks back on in develop builds
+   [\#2009](https://github.com/vector-im/vector-web/pull/2009)
+ * Wmwragg/direct chat sublist
+   [\#2028](https://github.com/vector-im/vector-web/pull/2028)
+
+Changes in [0.7.5-r3](https://github.com/vector-im/vector-web/releases/tag/v0.7.5-r3) (2016-09-02)
+==================================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.5-r2...v0.7.5-r3)
+
+ * Bump to matrix-react-sdk 0.6.5-r3 in order to fix bug #2020 (tightloop when flooded with join events)
+
+
+Changes in [0.7.5-r2](https://github.com/vector-im/vector-web/releases/tag/v0.7.5-r2) (2016-09-01)
+==================================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.5-r1...v0.7.5-r2)
+
+ * Bump to matrix-react-sdk 0.6.5-r1 in order to fix guest access
+
+Changes in [0.7.5-r1](https://github.com/vector-im/vector-web/releases/tag/v0.7.5-r1) (2016-08-28)
+==================================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.5...v0.7.5-r1)
+
+ * Correctly pin deps :(
+
+Changes in [0.7.5](https://github.com/vector-im/vector-web/releases/tag/v0.7.5) (2016-08-28)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.4-r1...v0.7.5)
+
+ * re-add leave button in RoomSettings
+ * add /user URLs
+ * recognise matrix.to links and other vector links
+ * fix linkify dependency
+ * fix avatar clicking in MemberInfo
+ * fix RoomTagContextMenu so it works on historical rooms
+ * warn people to put their Matrix HS on a separate domain to Vector
+ * fix zalgos again
+ * Add .travis.yml
+   [\#2007](https://github.com/vector-im/vector-web/pull/2007)
+ * add fancy changelog dialog
+   [\#1972](https://github.com/vector-im/vector-web/pull/1972)
+ * Update autocomplete design
+   [\#1978](https://github.com/vector-im/vector-web/pull/1978)
+ * Update encryption info in README
+   [\#2001](https://github.com/vector-im/vector-web/pull/2001)
+ * Added event/info message avatars back in
+   [\#2000](https://github.com/vector-im/vector-web/pull/2000)
+ * Wmwragg/chat message presentation
+   [\#1987](https://github.com/vector-im/vector-web/pull/1987)
+ * Make the notification slider work
+   [\#1982](https://github.com/vector-im/vector-web/pull/1982)
+ * Use cpx to copy olm.js, and add watcher
+   [\#1966](https://github.com/vector-im/vector-web/pull/1966)
+ * Make up a device display name
+   [\#1959](https://github.com/vector-im/vector-web/pull/1959)
+
+Changes in [0.7.4-r1](https://github.com/vector-im/vector-web/releases/tag/v0.7.4-r1) (2016-08-12)
+==================================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.4...v0.7.4-r1)
+ * Update to matrix-react-sdk 0.6.4-r1 to fix inviting multiple people
+
+
+Changes in [0.7.4](https://github.com/vector-im/vector-web/releases/tag/v0.7.4) (2016-08-11)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.3...v0.7.4)
+
+ * Don't show border on composer when not in RTE mode
+   [\#1954](https://github.com/vector-im/vector-web/pull/1954)
+ * Wmwragg/room tag menu
+   [\#1941](https://github.com/vector-im/vector-web/pull/1941)
+ * Don't redirect to mobile app if verifying 3pid
+   [\#1951](https://github.com/vector-im/vector-web/pull/1951)
+ * Make sure that we clear localstorage before *all* tests
+   [\#1950](https://github.com/vector-im/vector-web/pull/1950)
+ * Basic CSS for multi-invite dialog
+   [\#1942](https://github.com/vector-im/vector-web/pull/1942)
+ * More tests for the loading process:
+   [\#1947](https://github.com/vector-im/vector-web/pull/1947)
+ * Support for refactored login token handling
+   [\#1946](https://github.com/vector-im/vector-web/pull/1946)
+ * Various fixes and improvements to emojification.
+   [\#1935](https://github.com/vector-im/vector-web/pull/1935)
+ * More app-loading tests
+   [\#1938](https://github.com/vector-im/vector-web/pull/1938)
+ * Some tests of the application load process
+   [\#1936](https://github.com/vector-im/vector-web/pull/1936)
+ * Add 'enable labs' setting to sample config
+   [\#1930](https://github.com/vector-im/vector-web/pull/1930)
+ * Matthew/scalar
+   [\#1928](https://github.com/vector-im/vector-web/pull/1928)
+ * Fix unit tests
+   [\#1929](https://github.com/vector-im/vector-web/pull/1929)
+ * Wmwragg/mute mention state fix
+   [\#1926](https://github.com/vector-im/vector-web/pull/1926)
+ * CSS for deactivate account dialog
+   [\#1919](https://github.com/vector-im/vector-web/pull/1919)
+ * Wmwragg/mention state menu
+   [\#1900](https://github.com/vector-im/vector-web/pull/1900)
+ * Fix UnknownBody styling for #1901
+   [\#1913](https://github.com/vector-im/vector-web/pull/1913)
+ * Exclude olm from the webpack
+   [\#1914](https://github.com/vector-im/vector-web/pull/1914)
+ * Wmwragg/button updates
+   [\#1912](https://github.com/vector-im/vector-web/pull/1912)
+ * Wmwragg/button updates
+   [\#1828](https://github.com/vector-im/vector-web/pull/1828)
+ * CSS for device management UI
+   [\#1909](https://github.com/vector-im/vector-web/pull/1909)
+ * Fix a warning from RoomSubList
+   [\#1908](https://github.com/vector-im/vector-web/pull/1908)
+ * Fix notifications warning layout
+   [\#1907](https://github.com/vector-im/vector-web/pull/1907)
+ * Remove relayoutOnUpdate prop on gemini-scrollbar
+   [\#1883](https://github.com/vector-im/vector-web/pull/1883)
+ * Bump dependency versions
+   [\#1842](https://github.com/vector-im/vector-web/pull/1842)
+ * Wmwragg/mention state indicator round 2
+   [\#1835](https://github.com/vector-im/vector-web/pull/1835)
+ * Wmwragg/spinner fix
+   [\#1822](https://github.com/vector-im/vector-web/pull/1822)
+ * Wmwragg/mention state indicator
+   [\#1823](https://github.com/vector-im/vector-web/pull/1823)
+ * Revert "Presentation for inline link"
+   [\#1809](https://github.com/vector-im/vector-web/pull/1809)
+ * Wmwragg/modal restyle
+   [\#1806](https://github.com/vector-im/vector-web/pull/1806)
+ * Presentation for inline link
+   [\#1799](https://github.com/vector-im/vector-web/pull/1799)
+ * CSS for offline user colours
+   [\#1798](https://github.com/vector-im/vector-web/pull/1798)
+ * Wmwragg/typography updates
+   [\#1776](https://github.com/vector-im/vector-web/pull/1776)
+ * webpack: always use the olm from vector-web
+   [\#1766](https://github.com/vector-im/vector-web/pull/1766)
+ * feat: large emoji support
+   [\#1718](https://github.com/vector-im/vector-web/pull/1718)
+ * Autocomplete
+   [\#1717](https://github.com/vector-im/vector-web/pull/1717)
+ * #1664 Set a maximum height for codeblocks
+   [\#1670](https://github.com/vector-im/vector-web/pull/1670)
+ * CSS for device blocking
+   [\#1688](https://github.com/vector-im/vector-web/pull/1688)
+ * Fix joining rooms by typing the alias
+   [\#1685](https://github.com/vector-im/vector-web/pull/1685)
+ * Add ability to delete an alias from room directory
+   [\#1680](https://github.com/vector-im/vector-web/pull/1680)
+ * package.json: add olm as optionalDependency
+   [\#1678](https://github.com/vector-im/vector-web/pull/1678)
+ * Another go at enabling olm on vector.im/develop
+   [\#1675](https://github.com/vector-im/vector-web/pull/1675)
+ * CSS for unverify button
+   [\#1661](https://github.com/vector-im/vector-web/pull/1661)
+ * CSS fix for rooms with crypto enabled
+   [\#1660](https://github.com/vector-im/vector-web/pull/1660)
+ * Karma: fix warning by ignoring olm
+   [\#1652](https://github.com/vector-im/vector-web/pull/1652)
+ * Update for react-sdk dbkr/fix_peeking branch
+   [\#1639](https://github.com/vector-im/vector-web/pull/1639)
+ * Update README.md
+   [\#1641](https://github.com/vector-im/vector-web/pull/1641)
+ * Fix karma tests
+   [\#1643](https://github.com/vector-im/vector-web/pull/1643)
+ * Rich Text Editor
+   [\#1553](https://github.com/vector-im/vector-web/pull/1553)
+ * Fix RoomDirectory to join by alias whenever possible.
+   [\#1615](https://github.com/vector-im/vector-web/pull/1615)
+ * Make the config optional
+   [\#1612](https://github.com/vector-im/vector-web/pull/1612)
+ * CSS support for device verification
+   [\#1610](https://github.com/vector-im/vector-web/pull/1610)
+ * Don't use SdkConfig
+   [\#1609](https://github.com/vector-im/vector-web/pull/1609)
+ * serve config.json statically instead of bundling it
+   [\#1516](https://github.com/vector-im/vector-web/pull/1516)
+
+Changes in [0.7.3](https://github.com/vector-im/vector-web/releases/tag/v0.7.3) (2016-06-03)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.2...v0.7.3)
+
+* Update to react-sdk 0.6.3
+
+Changes in [0.7.2](https://github.com/vector-im/vector-web/releases/tag/v0.7.2) (2016-06-02)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.1...v0.7.2)
+
+ * Correctly bump the dep on new matrix-js-sdk and matrix-react-sdk
+
+Changes in [0.7.1](https://github.com/vector-im/vector-web/releases/tag/v0.7.1) (2016-06-02)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.0...v0.7.1)
+
+ * Fix accidentally committed local changes to the default config.json (doh!)
+
+Changes in [0.7.0](https://github.com/vector-im/vector-web/releases/tag/v0.7.0) (2016-06-02)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.6.1...v0.7.0)
+
+ * Update to matrix-react-sdk 0.6.0 - see
+   [changelog](https://github.com/matrix-org/matrix-react-sdk/blob/v0.6.0/CHANGELOG.md)
+ * Style selection color.
+   [\#1557](https://github.com/vector-im/vector-web/pull/1557)
+ * Fix NPE when loading the Settings page which infini-spinnered
+   [\#1518](https://github.com/vector-im/vector-web/pull/1518)
+ * Add option to enable email notifications
+   [\#1469](https://github.com/vector-im/vector-web/pull/1469)
+
+Changes in [0.6.1](https://github.com/vector-im/vector-web/releases/tag/v0.6.1) (2016-04-22)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.6.0...v0.6.1)
+
+ * Update to matrix-react-sdk 0.5.2 - see
+   [changelog](https://github.com/matrix-org/matrix-react-sdk/blob/v0.5.2/CHANGELOG.md)
+ * Don't relayout scrollpanels every time something changes
+   [\#1438](https://github.com/vector-im/vector-web/pull/1438)
+ * Include react-addons-perf for non-production builds
+   [\#1431](https://github.com/vector-im/vector-web/pull/1431)
+
+Changes in [0.6.0](https://github.com/vector-im/vector-web/releases/tag/v0.6.0) (2016-04-19)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.5.0...v0.6.0)
+
+ * Matthew/design tweaks
+   [\#1402](https://github.com/vector-im/vector-web/pull/1402)
+ * Improve handling of notification rules we can't parse
+   [\#1399](https://github.com/vector-im/vector-web/pull/1399)
+ * Do less mangling of jenkins builds
+   [\#1391](https://github.com/vector-im/vector-web/pull/1391)
+ * Start Notifications component refactor
+   [\#1386](https://github.com/vector-im/vector-web/pull/1386)
+ * make the UI fadable to help with decluttering
+   [\#1376](https://github.com/vector-im/vector-web/pull/1376)
+ * Get and display a user's pushers in settings
+   [\#1374](https://github.com/vector-im/vector-web/pull/1374)
+ * URL previewing support
+   [\#1343](https://github.com/vector-im/vector-web/pull/1343)
+ * 😄 Emoji autocomplete and unicode emoji to image conversion using emojione.
+   [\#1332](https://github.com/vector-im/vector-web/pull/1332)
+ * Show full-size avatar on MemberInfo avatar click
+   [\#1340](https://github.com/vector-im/vector-web/pull/1340)
+ * Numerous other changes via [matrix-react-sdk 0.5.1](https://github.com/matrix-org/matrix-react-sdk/blob/v0.5.1/CHANGELOG.md)
+
+Changes in [0.5.0](https://github.com/vector-im/vector-web/releases/tag/v0.5.0) (2016-03-30)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.4.1...v0.5.0)
+
+ * Prettier, animated placeholder :D
+   [\#1292](https://github.com/vector-im/vector-web/pull/1292)
+   (Disabled for now due to high CPU usage)
+ * RoomDirectory: use SimpleRoomHeader instead of RoomHeader
+   [\#1307](https://github.com/vector-im/vector-web/pull/1307)
+ * Tell webpack not to parse the highlight.js languages
+   [\#1277](https://github.com/vector-im/vector-web/pull/1277)
+ * CSS for https://github.com/matrix-org/matrix-react-sdk/pull/247
+   [\#1249](https://github.com/vector-im/vector-web/pull/1249)
+ * URI-decode the hash-fragment
+   [\#1254](https://github.com/vector-im/vector-web/pull/1254)
+
+Changes in [0.4.1](https://github.com/vector-im/vector-web/releases/tag/v0.4.1) (2016-03-23)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.4.0...v0.4.1)
+ * Update to matrix-react-sdk 0.3.1; see
+   https://github.com/matrix-org/matrix-react-sdk/blob/v0.3.1/CHANGELOG.md
+   (Disables debug logging)
+
+Changes in [0.4.0](https://github.com/vector-im/vector-web/releases/tag/v0.4.0) (2016-03-23)
+============================================================================================
+[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.3.0...v0.4.0)
+
+ * Update to matrix-react-sdk 0.3.0; see
+   https://github.com/matrix-org/matrix-react-sdk/blob/master/CHANGELOG.md
+
+Other changes
+ * permalink button
+   [\#1232](https://github.com/vector-im/vector-web/pull/1232)
+ * make senderprofiles clickable
+   [\#1191](https://github.com/vector-im/vector-web/pull/1191)
+ * fix notif spam when logging in from a guest session by correctly logging out
+   first.
+   [\#1180](https://github.com/vector-im/vector-web/pull/1180)
+ * use new start_login_from_guest dispatch for cancellable logins from guest
+   accounts
+   [\#1165](https://github.com/vector-im/vector-web/pull/1165)
+ * Use then() chaining rather than manual callbacks
+   [\#1171](https://github.com/vector-im/vector-web/pull/1171)
+ * Remove trailing whitespace
+   [\#1163](https://github.com/vector-im/vector-web/pull/1163)
+ * Update the actions of default rules instead of overriding.
+   [\#1037](https://github.com/vector-im/vector-web/pull/1037)
+ * Update README to include `npm install` in react-sdk
+   [\#1137](https://github.com/vector-im/vector-web/pull/1137)
+
+Changes in vector v0.3.0 (2016-03-11)
+======================================
+ * Lots of new bug fixes and updates
+
+Changes in vector v0.2.0 (2016-02-24)
+======================================
+ * Refactor of matrix-react-sdk and vector to remove separation between views and
+   controllers
+ * Temporarily break the layering abstraction between vector and matrix-react-sdk
+   for expedience in developing vector.
+ * Vast numbers of new features, including read receipts, read-up-to markers,
+   updated look and feel, search, new room and user settings, and email invites.
+
+Changes in vector v0.1.2 (2015-10-28)
+======================================
+ * Support Room Avatars
+ * Fullscreen video calls
+ * Mute mic in VoIP calls
+ * Fix bug with multiple desktop notifications
+ * Context menu on messages
+ * Better hover-over on member list
+ * Support CAS auth
+ * Many other bug fixes
+
+Changes in vector v0.1.1 (2015-08-10)
+======================================
+
+ * Support logging in with an email address
+ * Use the Vector identity server
+ * Fix a bug where the client was not stopped properly on logout
+ * Fix bugs where field values would be forgotten if login or registration failed
+ * Improve URL bar navigation
+ * Add explanatory help text on advanced server options
+ * Fix a bug which caused execptions on malformed VoIP invitations
+ * Remove superfluous scrollbars on Firefox
+ * Numerous CSS fixes
+ * Improved accessibility
+ * Support command-click / middle click to open image in a new tab
+ * Improved room directory
+ * Fix display of text with many combining unicode points
+
+Changes in vector v0.1.0 (2015-08-10)
+======================================
+Initial release
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
new file mode 100644
index 0000000..3af9d39
--- /dev/null
+++ b/CONTRIBUTING.rst
@@ -0,0 +1,4 @@
+Contributing code to Element
+============================
+
+Element follows the same pattern as https://github.com/matrix-org/matrix-js-sdk/blob/master/CONTRIBUTING.rst.
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..92d35e7
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,40 @@
+# Builder
+FROM node:12 as builder
+
+# Support custom branches of the react-sdk and js-sdk. This also helps us build
+# images of riot-web develop.
+ARG USE_CUSTOM_SDKS=false
+ARG REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git"
+ARG REACT_SDK_BRANCH="master"
+ARG JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git"
+ARG JS_SDK_BRANCH="master"
+
+RUN apt-get update && apt-get install -y git dos2unix \
+# These packages are required for building Canvas on architectures like Arm
+# See https://www.npmjs.com/package/canvas#compiling
+  build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
+
+WORKDIR /src
+
+COPY . /src
+RUN dos2unix /src/scripts/docker-link-repos.sh && bash /src/scripts/docker-link-repos.sh
+RUN yarn --network-timeout=100000 install
+RUN yarn build
+
+# Copy the config now so that we don't create another layer in the app image
+RUN cp /src/config.sample.json /src/webapp/config.json
+
+# Ensure we populate the version file
+RUN dos2unix /src/scripts/docker-write-version.sh && bash /src/scripts/docker-write-version.sh
+
+
+# App
+FROM nginx:alpine
+
+COPY --from=builder /src/webapp /app
+
+# Insert wasm type into Nginx mime.types file so they load correctly.
+RUN sed -i '3i\ \ \ \ application/wasm wasm\;' /etc/nginx/mime.types
+
+RUN rm -rf /usr/share/nginx/html \
+ && ln -s /app /usr/share/nginx/html
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f433b1a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,177 @@
+
+                                 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
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..93494dc
--- /dev/null
+++ b/README.md
@@ -0,0 +1,388 @@
+Element
+=======
+
+Element (formerly known as Vector and Riot) is a Matrix web client built using the [Matrix
+React SDK](https://github.com/matrix-org/matrix-react-sdk).
+
+Supported Environments
+======================
+
+Element has several tiers of support for different environments:
+
+* Supported
+  * Definition: Issues **actively triaged**, regressions **block** the release
+  * Last 2 major versions of Chrome, Firefox, and Safari on desktop OSes
+  * Latest release of official Element Desktop app on desktop OSes
+  * Desktop OSes means macOS, Windows, and Linux versions for desktop devices
+    that are actively supported by the OS vendor and receive security updates
+* Experimental
+  * Definition: Issues **accepted**, regressions **do not block** the release
+  * Element as an installed PWA via current stable version of Chrome, Firefox, and Safari
+  * Mobile web for current stable version of Chrome, Firefox, and Safari on Android, iOS, and iPadOS
+* Not supported
+  * Definition: Issues only affecting unsupported environments are **closed**
+  * Everything else
+
+For accessing Element on an Android or iOS device, we currently recommend the
+native apps [element-android](https://github.com/vector-im/element-android)
+and [element-ios](https://github.com/vector-im/element-ios).
+
+Getting Started
+===============
+
+The easiest way to test Element is to just use the hosted copy at https://app.element.io.
+The `develop` branch is continuously deployed by Jenkins at https://develop.element.io
+for those who like living dangerously.
+
+To host your own copy of Element, the quickest bet is to use a pre-built
+released version of Element:
+
+1. Download the latest version from https://github.com/vector-im/element-web/releases
+1. Untar the tarball on your web server
+1. Move (or symlink) the `riot-x.x.x` directory to an appropriate name
+1. Configure the correct caching headers in your webserver (see below)
+1. If desired, copy `config.sample.json` to `config.json` and edit it
+   as desired. See the [configuration docs](docs/config.md) for details.
+1. Enter the URL into your browser and log into Element!
+
+Releases are signed using gpg and the OpenPGP standard, and can be checked against the public key located
+at https://packages.riot.im/riot-release-key.asc.
+
+Note that for the security of your chats will need to serve Element
+over HTTPS. Major browsers also do not allow you to use VoIP/video
+chats over HTTP, as WebRTC is only usable over HTTPS.
+There are some exceptions like when using localhost, which is
+considered a [secure context](https://developer.mozilla.org/docs/Web/Security/Secure_Contexts)
+and thus allowed.
+
+To install Element as a desktop application, see [Running as a desktop
+app](#running-as-a-desktop-app) below.
+
+Important Security Note
+=======================
+
+We do not recommend running Element from the same domain name as your Matrix
+homeserver.  The reason is the risk of XSS (cross-site-scripting)
+vulnerabilities that could occur if someone caused Element to load and render
+malicious user generated content from a Matrix API which then had trusted
+access to Element (or other apps) due to sharing the same domain.
+
+We have put some coarse mitigations into place to try to protect against this
+situation, but it's still not good practice to do it in the first place.  See
+https://github.com/vector-im/element-web/issues/1977 for more details.
+
+Building From Source
+====================
+
+Element is a modular webapp built with modern ES6 and uses a Node.js build system.
+Ensure you have the latest LTS version of Node.js installed.
+
+Using `yarn` instead of `npm` is recommended. Please see the Yarn [install
+guide](https://classic.yarnpkg.com/en/docs/install) if you do not have it already.
+
+1. Install or update `node.js` so that your `node` is at least v10.x.
+1. Install `yarn` if not present already.
+1. Clone the repo: `git clone https://github.com/vector-im/element-web.git`.
+1. Switch to the element-web directory: `cd element-web`.
+1. Install the prerequisites: `yarn install`.
+   *  If you're using the `develop` branch, then it is recommended to set up a
+      proper development environment (see [Setting up a dev
+      environment](#setting-up-a-dev-environment) below). Alternatively, you
+      can use https://develop.element.io - the continuous integration release of
+      the develop branch.
+1. Configure the app by copying `config.sample.json` to `config.json` and
+   modifying it. See the [configuration docs](docs/config.md) for details.
+1. `yarn dist` to build a tarball to deploy. Untaring this file will give
+   a version-specific directory containing all the files that need to go on your
+   web server.
+
+Note that `yarn dist` is not supported on Windows, so Windows users can run `yarn build`,
+which will build all the necessary files into the `webapp` directory. The version of Element
+will not appear in Settings without using the dist script. You can then mount the
+`webapp` directory on your webserver to actually serve up the app, which is entirely static content.
+
+Running as a Desktop app
+========================
+
+Element can also be run as a desktop app, wrapped in Electron. You can download a
+pre-built version from https://element.io/get-started or, if you prefer,
+build it yourself.
+
+To build it yourself, follow the instructions at https://github.com/vector-im/element-desktop.
+
+Many thanks to @aviraldg for the initial work on the Electron integration.
+
+Other options for running as a desktop app:
+ * @asdf:matrix.org points out that you can use nativefier and it just works(tm)
+
+```bash
+yarn global add nativefier
+nativefier https://app.element.io/
+```
+
+The [configuration docs](docs/config.md#desktop-app-configuration) show how to
+override the desktop app's default settings if desired.
+
+Running from Docker
+===================
+
+The Docker image can be used to serve element-web as a web server. The easiest way to use
+it is to use the prebuilt image:
+```bash
+docker run -p 80:80 vectorim/riot-web
+```
+
+To supply your own custom `config.json`, map a volume to `/app/config.json`. For example,
+if your custom config was located at `/etc/element-web/config.json` then your Docker command
+would be:
+```bash
+docker run -p 80:80 -v /etc/element-web/config.json:/app/config.json vectorim/riot-web
+```
+
+To build the image yourself:
+```bash
+git clone https://github.com/vector-im/element-web.git element-web
+cd element-web
+git checkout master
+docker build .
+```
+
+If you're building a custom branch, or want to use the develop branch, check out the appropriate
+element-web branch and then run:
+```bash
+docker build -t \
+    --build-arg USE_CUSTOM_SDKS=true \
+    --build-arg REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" \
+    --build-arg REACT_SDK_BRANCH="develop" \
+    --build-arg JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git" \
+    --build-arg JS_SDK_BRANCH="develop" \
+    .
+```
+
+config.json
+===========
+
+Element supports a variety of settings to configure default servers, behaviour, themes, etc.
+See the [configuration docs](docs/config.md) for more details.
+
+Labs Features
+=============
+
+Some features of Element may be enabled by flags in the `Labs` section of the settings.
+Some of these features are described in [labs.md](https://github.com/vector-im/element-web/blob/develop/docs/labs.md).
+
+Caching requirements
+====================
+
+Element requires the following URLs not to be cached, when/if you are serving Element from your own webserver:
+```
+/config.*.json
+/i18n
+/home
+/sites
+/index.html
+```
+
+Development
+===========
+
+Before attempting to develop on Element you **must** read the [developer guide
+for `matrix-react-sdk`](https://github.com/matrix-org/matrix-react-sdk#developer-guide), which
+also defines the design, architecture and style for Element too.
+
+Before starting work on a feature, it's best to ensure your plan aligns well
+with our vision for Element. Please chat with the team in
+[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before you
+start so we can ensure it's something we'd be willing to merge.
+
+You should also familiarise yourself with the ["Here be Dragons" guide
+](https://docs.google.com/document/d/12jYzvkidrp1h7liEuLIe6BMdU0NUjndUYI971O06ooM)
+to the tame & not-so-tame dragons (gotchas) which exist in the codebase.
+
+The idea of Element is to be a relatively lightweight "skin" of customisations on
+top of the underlying `matrix-react-sdk`. `matrix-react-sdk` provides both the
+higher and lower level React components useful for building Matrix communication
+apps using React.
+
+After creating a new component you must run `yarn reskindex` to regenerate
+the `component-index.js` for the app (used in future for skinning).
+
+Please note that Element is intended to run correctly without access to the public
+internet.  So please don't depend on resources (JS libs, CSS, images, fonts)
+hosted by external CDNs or servers but instead please package all dependencies
+into Element itself.
+
+Setting up a dev environment
+============================
+
+Much of the functionality in Element is actually in the `matrix-react-sdk` and
+`matrix-js-sdk` modules. It is possible to set these up in a way that makes it
+easy to track the `develop` branches in git and to make local changes without
+having to manually rebuild each time.
+
+First clone and build `matrix-js-sdk`:
+
+``` bash
+git clone https://github.com/matrix-org/matrix-js-sdk.git
+pushd matrix-js-sdk
+yarn link
+yarn install
+popd
+```
+
+Then similarly with `matrix-react-sdk`:
+
+```bash
+git clone https://github.com/matrix-org/matrix-react-sdk.git
+pushd matrix-react-sdk
+yarn link
+yarn link matrix-js-sdk
+yarn install
+popd
+```
+
+Finally, build and start Element itself:
+
+```bash
+git clone https://github.com/vector-im/element-web.git
+cd element-web
+yarn link matrix-js-sdk
+yarn link matrix-react-sdk
+yarn install
+yarn start
+```
+
+
+Wait a few seconds for the initial build to finish; you should see something like:
+```
+Hash: b0af76309dd56d7275c8
+Version: webpack 1.12.14
+Time: 14533ms
+         Asset     Size  Chunks             Chunk Names
+     bundle.js   4.2 MB       0  [emitted]  main
+    bundle.css  91.5 kB       0  [emitted]  main
+ bundle.js.map  5.29 MB       0  [emitted]  main
+bundle.css.map   116 kB       0  [emitted]  main
+    + 1013 hidden modules
+```
+   Remember, the command will not terminate since it runs the web server
+   and rebuilds source files when they change. This development server also
+   disables caching, so do NOT use it in production.
+
+Configure the app by copying `config.sample.json` to `config.json` and
+modifying it. See the [configuration docs](docs/config.md) for details.
+
+Open http://127.0.0.1:8080/ in your browser to see your newly built Element.
+
+**Note**: The build script uses inotify by default on Linux to monitor directories
+for changes. If the inotify watch limit is too low your build will silently fail.
+To avoid this issue, we recommend a limit of at least 128M.
+
+To set a new inotify watch limit, execute:
+
+```
+$ sudo sysctl fs.inotify.max_user_watches=131072
+$ sudo sysctl -p
+```
+
+If you wish, you can make this new limit permanent, by executing:
+
+```
+$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
+$ sudo sysctl -p
+```
+___
+
+When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be
+automatically picked up by webpack and built.
+
+If you add or remove any components from the Element skin, you will need to rebuild
+the skin's index by running, `yarn reskindex`.
+
+If any of these steps error with, `file table overflow`, you are probably on a mac
+which has a very low limit on max open files. Run `ulimit -Sn 1024` and try again.
+You'll need to do this in each new terminal you open before building Element.
+
+Running the tests
+-----------------
+
+There are a number of application-level tests in the `tests` directory; these
+are designed to run in a browser instance under the control of
+[karma](https://karma-runner.github.io). To run them:
+
+* Make sure you have Chrome installed (a recent version, like 59)
+* Make sure you have `matrix-js-sdk` and `matrix-react-sdk` installed and
+  built, as above
+* `yarn test`
+
+The above will run the tests under Chrome in a `headless` mode.
+
+You can also tell karma to run the tests in a loop (every time the source
+changes), in an instance of Chrome on your desktop, with `yarn
+test-multi`. This also gives you the option of running the tests in 'debug'
+mode, which is useful for stepping through the tests in the developer tools.
+
+### End-to-End tests
+
+See [matrix-react-sdk](https://github.com/matrix-org/matrix-react-sdk/#end-to-end-tests) how to run the end-to-end tests.
+
+Translations
+============
+
+To add a new translation, head to the [translating doc](docs/translating.md).
+
+For a developer guide, see the [translating dev doc](docs/translating-dev.md).
+
+[translationsstatus](https://translate.element.io/engage/element-web/?utm_source=widget)
+
+Triaging issues
+===============
+
+Issues will be triaged by the core team using the below set of tags.
+
+Tags are meant to be used in combination - e.g.:
+ * P1 critical bug == really urgent stuff that should be next in the bugfixing todo list
+ * "release blocker" == stuff which is blocking us from cutting the next release.
+ * P1 feature type:voip == what VoIP features should we be working on next?
+
+priority: **compulsory**
+
+* P1: top priority - i.e. pool of stuff which we should be working on next
+* P2: still need to fix, but lower than P1
+* P3: non-urgent
+* P4: interesting idea - bluesky some day
+* P5: recorded for posterity/to avoid duplicates. No intention to resolves right now.
+
+bug or feature: **compulsory**
+
+* bug
+* feature
+
+bug severity: **compulsory, if bug**
+
+* critical - whole app doesn't work
+* major - entire feature doesn't work
+* minor - partially broken feature (but still usable)
+* cosmetic - feature works functionally but UI/UX is broken
+
+types
+* type:* - refers to a particular part of the app; used to filter bugs
+  on a given topic - e.g. VOIP, signup, timeline, etc.
+
+additional categories (self-explanatory):
+
+* release blocker
+* ui/ux (think of this as cosmetic)
+* network (specific to network conditions)
+* platform specific
+* accessibility
+* maintenance
+* performance
+* i18n
+* blocked - whether this issue currently can't be progressed due to outside factors
+
+community engagement
+* easy
+* hacktoberfest
+* bounty? - proposal to be included in a bounty programme
+* bounty - included in Status Open Bounty
diff --git a/__mocks__/cssMock.js b/__mocks__/cssMock.js
new file mode 100644
index 0000000..9b5d9b3
--- /dev/null
+++ b/__mocks__/cssMock.js
@@ -0,0 +1 @@
+module.exports = "css-file-stub";
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..8d98fff
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,23 @@
+module.exports = {
+    "sourceMaps": true,
+    "presets": [
+        ["@babel/preset-env", {
+            "targets": [
+                "last 2 Chrome versions", "last 2 Firefox versions", "last 2 Safari versions"
+            ],
+        }],
+        "@babel/preset-typescript",
+        "@babel/preset-flow",
+        "@babel/preset-react"
+    ],
+    "plugins": [
+        ["@babel/plugin-proposal-decorators", {legacy: true}],
+        "@babel/plugin-proposal-export-default-from",
+        "@babel/plugin-proposal-numeric-separator",
+        "@babel/plugin-proposal-class-properties",
+        "@babel/plugin-proposal-object-rest-spread",
+        "@babel/plugin-transform-flow-comments",
+        "@babel/plugin-syntax-dynamic-import",
+        "@babel/plugin-transform-runtime"
+    ]
+};
diff --git a/config.sample.json b/config.sample.json
new file mode 100644
index 0000000..32bdc7e
--- /dev/null
+++ b/config.sample.json
@@ -0,0 +1,54 @@
+{
+    "default_server_config": {
+        "m.homeserver": {
+            "base_url": "https://matrix-client.matrix.org",
+            "server_name": "matrix.org"
+        },
+        "m.identity_server": {
+            "base_url": "https://vector.im"
+        }
+    },
+    "disable_custom_urls": false,
+    "disable_guests": false,
+    "disable_login_language_selector": false,
+    "disable_3pid_login": false,
+    "brand": "Element",
+    "integrations_ui_url": "https://scalar.vector.im/",
+    "integrations_rest_url": "https://scalar.vector.im/api",
+    "integrations_widgets_urls": [
+        "https://scalar.vector.im/_matrix/integrations/v1",
+        "https://scalar.vector.im/api",
+        "https://scalar-staging.vector.im/_matrix/integrations/v1",
+        "https://scalar-staging.vector.im/api",
+        "https://scalar-staging.riot.im/scalar/api"
+    ],
+    "bug_report_endpoint_url": "https://element.io/bugreports/submit",
+    "defaultCountryCode": "GB",
+    "showLabsSettings": false,
+    "features": {
+        "feature_new_spinner": false
+    },
+    "default_federate": true,
+    "default_theme": "light",
+    "roomDirectory": {
+        "servers": [
+            "matrix.org"
+        ]
+    },
+    "piwik": {
+        "url": "https://piwik.riot.im/",
+        "whitelistedHSUrls": ["https://matrix.org"],
+        "whitelistedISUrls": ["https://vector.im", "https://matrix.org"],
+        "siteId": 1
+    },
+    "enable_presence_by_hs_url": {
+        "https://matrix.org": false,
+        "https://matrix-client.matrix.org": false
+    },
+    "settingDefaults": {
+        "breadcrumbs": true
+    },
+    "jitsi": {
+        "preferredDomain": "jitsi.riot.im"
+    }
+}
diff --git a/contribute.json b/contribute.json
new file mode 100644
index 0000000..0ac40ea
--- /dev/null
+++ b/contribute.json
@@ -0,0 +1,17 @@
+{
+  "name": "Element",
+    "description": "A glossy Matrix collaboration client for the web.",
+    "repository": {
+      "url": "https://github.com/vector-im/element-web",
+      "license": "Apache License 2.0"
+    },
+    "bugs": {
+      "list": "https://github.com/vector-im/element-web/issues",
+      "report": "https://github.com/vector-im/element-web/issues/new/choose"
+    },
+    "keywords": [
+      "chat",
+      "riot",
+      "matrix"
+    ]
+}
diff --git a/docs/app-load.md b/docs/app-load.md
new file mode 100644
index 0000000..bdc0243
--- /dev/null
+++ b/docs/app-load.md
@@ -0,0 +1,81 @@
+# App load order
+
+Old slow flow:
+![image](https://user-images.githubusercontent.com/2403652/73848963-00a2a080-4821-11ea-97d4-1200fc2638f3.png)
+
+Current more parallel flow:
+![image](https://user-images.githubusercontent.com/2403652/83146440-303a2900-a0ee-11ea-806b-4f53f039b957.png)
+
+
Code +

+


+digraph G {
+  node [shape=box];
+
+  subgraph cluster_0 {
+    color=orange;
+    node [style=filled];
+    label = "index.ts";
+
+    entrypoint, s0, ready [shape=point];
+    rageshake, config, i18n, theme, skin, olm [shape=parallelogram];
+    mobile [shape=diamond, label="mobile"];
+    modernizr [shape=diamond];
+    redirect, incompatible [shape=egg];
+
+    entrypoint -> rageshake;
+    rageshake -> mobile [color=blue];
+    mobile -> s0 [label="No"];
+    mobile -> redirect [label="Yes"];
+
+    s0 -> platform;
+    s0 -> olm;
+    platform -> config;
+
+    config -> i18n [color=blue];
+    config -> theme [color=blue];
+    config -> skin [color=blue];
+
+    i18n -> modernizr [color=blue];
+    theme -> modernizr [color=blue];
+    skin -> modernizr [color=blue];
+
+    modernizr -> ready [label="Yes"];
+    modernizr -> incompatible [label="No"];
+    incompatible -> ready [label="user ignore"];
+
+    olm -> ready [color=red];
+    config -> ready [color=red];
+    skin -> ready [color=red];
+    theme -> ready [color=red];
+    i18n -> ready [color=red];
+  }
+
+  subgraph cluster_1 {
+    color = green;
+    node [style=filled];
+    label = "init.tsx";
+
+    ready -> loadApp;
+    loadApp -> matrixchat;
+  }
+}
+
+

+
+ +Key: ++ Parallelogram: async/await task ++ Box: sync task ++ Diamond: conditional branch ++ Egg: user interaction ++ Blue arrow: async task is allowed to settle but allowed to fail ++ Red arrow: async task success is asserted + +Notes: ++ A task begins when all its dependencies (arrows going into it) are fulfilled. ++ The success of setting up rageshake is never asserted, riot-web has a fallback path for running without IDB (and thus rageshake). ++ Everything is awaited to be settled before the Modernizr check, to allow it to make use of things like i18n if they are successful. + +Underlying dependencies: +![image](https://user-images.githubusercontent.com/2403652/73848977-08624500-4821-11ea-9830-bb0317c41086.png) diff --git a/docs/conferencing.md b/docs/conferencing.md new file mode 100644 index 0000000..874ce4c --- /dev/null +++ b/docs/conferencing.md @@ -0,0 +1,52 @@ +# VoIP Conferencing + +This is a draft proposal for a naive voice/video conferencing implementation for +Matrix clients. There are many possible conferencing architectures possible for +Matrix (Multipoint Conferencing Unit (MCU); Stream Forwarding Unit (SFU); Peer- +to-Peer mesh (P2P), etc; events shared in the group room; events shared 1:1; +possibly even out-of-band signalling). + +This is a starting point for a naive MCU implementation which could provide one +possible Matrix-wide solution in future, which retains backwards compatibility +with standard 1:1 calling. + + * A client chooses to initiate a conference for a given room by starting a + voice or video call with a 'conference focus' user. This is a virtual user + (typically Application Service) which implements a conferencing bridge. It + isn't defined how the client discovers or selects this user. + + * The conference focus user MUST join the room in which the client has + initiated the conference - this may require the client to invite the + conference focus user to the room, depending on the room's `join_rules`. The + conference focus user needs to be in the room to let the bridge eject users + from the conference who have left the room in which it was initiated, and aid + discovery of the conference by other users in the room. The bridge + identifies the room to join based on the user ID by which it was invited. + The format of this identifier is implementation dependent for now. + + * If a client leaves the group chat room, they MUST be ejected from the + conference. If a client leaves the 1:1 room with the conference focus user, + they SHOULD be ejected from the conference. + + * For now, rooms can contain multiple conference focus users - it's left to + user or client implementation to select which to converge on. In future this + could be mediated using a state event (e.g. `im.vector.call.mcu`), but we + can't do that right now as by default normal users can't set arbitrary state + events on a room. + + * To participate in the conference, other clients initiates a standard 1:1 + voice or video call to the conference focus user. + + * For best UX, clients SHOULD show the ongoing voice/video call in the UI + context of the group room rather than 1:1 with the focus user. If a client + recognises a conference user present in the room, it MAY chose to highlight + this in the UI (e.g. with a "conference ongoing" notification, to aid + discovery). Clients MAY hide the 1:1 room with the focus user (although in + future this room could be used for floor control or other direct + communication with the conference focus) + + * When all users have left the conference, the 'conference focus' user SHOULD + leave the room. + + * If a conference focus user joins a room but does not receive a 1:1 voice or + video call, it SHOULD time out after a period of time and leave the room. diff --git a/docs/config.md b/docs/config.md new file mode 100644 index 0000000..e557a79 --- /dev/null +++ b/docs/config.md @@ -0,0 +1,194 @@ +Configuration +============= + +You can configure the app by copying `config.sample.json` to +`config.json` and customising it: + +For a good example, see https://develop.element.io/config.json. + +1. `default_server_config` sets the default homeserver and identity server URL for + Element to use. The object is the same as returned by [https:///.well-known/matrix/client](https://matrix.org/docs/spec/client_server/latest.html#get-well-known-matrix-client), + with added support for a `server_name` under the `m.homeserver` section to display + a custom homeserver name. Alternatively, the config can contain a `default_server_name` + instead which is where Element will go to get that same object, although this option is + deprecated - see the `.well-known` link above for more information on using this option. + Note that the `default_server_name` is used to get a complete server configuration + whereas the `server_name` in the `default_server_config` is for display purposes only. + * *Note*: The URLs can also be individually specified as `default_hs_url` and + `default_is_url`, however these are deprecated. They are maintained for backwards + compatibility with older configurations. `default_is_url` is respected only + if `default_hs_url` is used. + * Element will fail to load if a mix of `default_server_config`, `default_server_name`, or + `default_hs_url` is specified. When multiple sources are specified, it is unclear + which should take priority and therefore the application cannot continue. + * As of Element 1.4.0, identity servers are optional. See [Identity servers](#identity-servers) below. +1. `features`: Lookup of optional features that may be force-enabled (`true`) or force-disabled (`false`). + When features are not listed here, their defaults will be used, and users can turn them on/off if `showLabsSettings` + allows them to. The available optional experimental features vary from release to release and are + [documented](labs.md). The feature flag process is [documented](feature-flags.md) as well. +1. `showLabsSettings`: Shows the "labs" tab of user settings. Useful to allow users to turn on experimental features + they might not otherwise have access to. +1. `brand`: String to pass to your homeserver when configuring email notifications, to let the + homeserver know what email template to use when talking to you. +1. `branding`: Configures various branding and logo details, such as: + 1. `welcomeBackgroundUrl`: An image to use as a wallpaper outside the app + during authentication flows. If an array is passed, an image is chosen randomly for each visit. + 1. `authHeaderLogoUrl`: An logo image that is shown in the header during + authentication flows + 1. `authFooterLinks`: a list of links to show in the authentication page footer: + `[{"text": "Link text", "url": "https://link.target"}, {"text": "Other link", ...}]` +1. `reportEvent`: Configures the dialog for reporting content to the homeserver + admin. + 1. `adminMessageMD`: An extra message to show on the reporting dialog to + mention homeserver-specific policies. Accepts Markdown. +1. `integrations_ui_url`: URL to the web interface for the integrations server. The integrations + server is not Element and normally not your homeserver either. The integration server settings + may be left blank to disable integrations. +1. `integrations_rest_url`: URL to the REST interface for the integrations server. +1. `integrations_widgets_urls`: list of URLs to the REST interface for the widget integrations server. +1. `bug_report_endpoint_url`: endpoint to send bug reports to (must be running a + https://github.com/matrix-org/rageshake server). Bug reports are sent when a user clicks + "Send Logs" within the application. Bug reports can be disabled/hidden by leaving the + `bug_report_endpoint_url` out of your config file. +1. `roomDirectory`: config for the public room directory. This section is optional. +1. `roomDirectory.servers`: List of other homeservers' directories to include in the drop + down list. Optional. +1. `default_theme`: name of theme to use by default (e.g. 'light') +1. `update_base_url` (electron app only): HTTPS URL to a web server to download + updates from. This should be the path to the directory containing `macos` + and `win32` (for update packages, not installer packages). +1. `piwik`: Analytics can be disabled by setting `piwik: false` or by leaving the piwik config + option out of your config file. If you want to enable analytics, set `piwik` to be an object + containing the following properties: + 1. `url`: The URL of the Piwik instance to use for collecting analytics + 1. `whitelistedHSUrls`: a list of HS URLs to not redact from the analytics + 1. `whitelistedISUrls`: a list of IS URLs to not redact from the analytics + 1. `siteId`: The Piwik Site ID to use when sending analytics to the Piwik server configured above +1. `welcomeUserId`: the user ID of a bot to invite whenever users register that can give them a tour +1. `embeddedPages`: Configures the pages displayed in portions of Element that + embed static files, such as: + 1. `welcomeUrl`: Initial content shown on the outside of the app when not + logged in. Defaults to `welcome.html` supplied with Element. + 1. `homeUrl`: Content shown on the inside of the app when a specific room is + not selected. By default, no home page is configured. If one is set, a + button to access it will be shown in the top left menu. +1. `defaultCountryCode`: The ISO 3166 alpha2 country code to use when showing + country selectors, like the phone number input on the registration page. + Defaults to `GB` if the given code is unknown or not provided. +1. `settingDefaults`: Defaults for settings that support the `config` level, + as an object mapping setting name to value (note that the "theme" setting + is special cased to the `default_theme` in the config file). +1. `disable_custom_urls`: disallow the user to change the + default homeserver when signing up or logging in. +1. `permalinkPrefix`: Used to change the URL that Element generates permalinks with. + By default, this is "https://matrix.to" to generate matrix.to (spec) permalinks. + Set this to your Riot instance URL if you run an unfederated server (eg: + "https://riot.example.org"). +1. `jitsi`: Used to change the default conference options. Learn more about the + Jitsi options at [jitsi.md](./jitsi.md). + 1. `preferredDomain`: The domain name of the preferred Jitsi instance. Defaults + to `jitsi.riot.im`. This is used whenever a user clicks on the voice/video + call buttons - integration managers may use a different domain. +1. `enable_presence_by_hs_url`: The property key should be the URL of the homeserver + and its value defines whether to enable/disable the presence status display + from that homeserver. If no options are configured, presence is shown for all + homeservers. +1. `disable_guests`: Disables guest access tokens and auto-guest registrations. + Defaults to false (guests are allowed). +1. `disable_login_language_selector`: Disables the login language selector. Defaults + to false (language selector is shown). +1. `disable_3pid_login`: Disables 3rd party identity options on login and registration form + Defaults to false (3rd party identity options are shown). +1. `default_federate`: Default option for room federation when creating a room + Defaults to true (room federation enabled). +1. `desktopBuilds`: Used to alter promotional links to the desktop app. By default + the builds are considered available and accessible from https://element.io. This + config option is typically used in the context of encouraging encrypted message + search capabilities (Seshat). All the options listed below are required if this + option is specified. + 1. `available`: When false, the desktop app will not be promoted to the user. + 1. `logo`: An HTTP URL to the avatar for the desktop build. Should be 24x24, ideally + an SVG. + 1. `url`: An HTTP URL for where to send the user to download the desktop build. + +Note that `index.html` also has an og:image meta tag that is set to an image +hosted on riot.im. This is the image used if links to your copy of Element +appear in some websites like Facebook, and indeed Element itself. This has to be +static in the HTML and an absolute URL (and HTTP rather than HTTPS), so it's +not possible for this to be an option in config.json. If you'd like to change +it, you can build Element, but run +`RIOT_OG_IMAGE_URL="http://example.com/logo.png" yarn build`. +Alternatively, you can edit the `og:image` meta tag in `index.html` directly +each time you download a new version of Element. + +Identity servers +================ + +The identity server is used for inviting other users to a room via third party +identifiers like emails and phone numbers. It is not used to store your password +or account information. + +As of Element 1.4.0, all identity server functions are optional and you are +prompted to agree to terms before data is sent to the identity server. + +Element will check multiple sources when looking for an identity server to use in +the following order of preference: + +1. The identity server set in the user's account data + * For a new user, no value is present in their account data. It is only set + if the user visits Settings and manually changes their identity server. +2. The identity server provided by the `.well-known` lookup that occurred at + login +3. The identity server provided by the Riot config file + +If none of these sources have an identity server set, then Element will prompt the +user to set an identity server first when attempting to use features that +require one. + +Currently, the only two public identity servers are https://vector.im and +https://matrix.org, however in the future identity servers will be +decentralised. + +Desktop app configuration +========================= + +See https://github.com/vector-im/riot-desktop#user-specified-configjson + +UI Features +=========== + +Parts of the UI can be disabled using UI features. These are settings which appear +under `settingDefaults` and can only be `true` (default) or `false`. When `false`, +parts of the UI relating to that feature will be disabled regardless of the user's +preferences. + +Currently, the following UI feature flags are supported: + +* `UIFeature.urlPreviews` - Whether URL previews are enabled across the entire application. +* `UIFeature.feedback` - Whether prompts to supply feedback are shown. +* `UIFeature.voip` - Whether or not VoIP is shown readily to the user. When disabled, + Jitsi widgets will still work though they cannot easily be added. +* `UIFeature.widgets` - Whether or not widgets will be shown. +* `UIFeature.flair` - Whether or not community flair is shown in rooms. +* `UIFeature.communities` - Whether or not to show any UI related to communities. Implicitly + disables `UIFeature.flair` when disabled. +* `UIFeature.advancedSettings` - Whether or not sections titled "advanced" in room and + user settings are shown to the user. +* `UIFeature.shareQrCode` - Whether or not the QR code on the share room/event dialog + is shown. +* `UIFeature.shareSocial` - Whether or not the social icons on the share room/event dialog + are shown. +* `UIFeature.identityServer` - Whether or not functionality requiring an identity server + is shown. When disabled, the user will not be able to interact with the identity + server (sharing email addresses, 3PID invites, etc). +* `UIFeature.thirdPartyId` - Whether or not UI relating to third party identifiers (3PIDs) + is shown. Typically this is considered "contact information" on the homeserver, and is + not directly related to the identity server. +* `UIFeature.registration` - Whether or not the registration page is accessible. Typically + useful if accounts are managed externally. +* `UIFeature.passwordReset` - Whether or not the password reset page is accessible. Typically + useful if accounts are managed externally. +* `UIFeature.deactivate` - Whether or not the deactivate account button is accessible. Typically + useful if accounts are managed externally. +* `UIFeature.advancedEncryption` - Whether or not advanced encryption options are shown to the + user. diff --git a/docs/customisations.md b/docs/customisations.md new file mode 100644 index 0000000..2c36b54 --- /dev/null +++ b/docs/customisations.md @@ -0,0 +1,34 @@ +# Customisations + +Element Web and the React SDK support "customisation points" that can be used to +easily add custom logic specific to a particular deployment of Element Web. + +An example of this is the [security customisations +module](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/customisations/Security.ts). +This module in the React SDK only defines some empty functions and their types: +it does not do anything by default. + +To make use of these customisation points, you will first need to fork Element +Web so that you can add your own code. Even though the default module is part of +the React SDK, you can still override it from the Element Web layer: + +1. Copy the default customisation module to + `element-web/src/customisations/YourNameSecurity.ts` +2. Edit customisations points and make sure export the ones you actually want to + activate +3. Tweak the Element build process to use the customised module instead of the + default by adding this to end of the `plugins` array in `webpack.config.js`: + +```js +new webpack.NormalModuleReplacementPlugin( + /src\/customisations\/Security.ts/, + path.resolve(__dirname, 'src/customisations/YourNameSecurity.ts'), +), +``` + +If we add more customisation modules in the future, we'll likely improve these +steps to remove the need for build changes like the above. + +By isolating customisations to their own module, this approach should remove the +chance of merge conflicts when updating your fork, and thus simplify ongoing +maintenance. diff --git a/docs/e2ee.md b/docs/e2ee.md new file mode 100644 index 0000000..5e7d505 --- /dev/null +++ b/docs/e2ee.md @@ -0,0 +1,63 @@ +# End to end encryption by default + +By default, Element will create encrypted DM rooms if the user you are chatting with has keys uploaded on their account. +For private room creation, Element will default to encryption on but give you the choice to opt-out. + +## Disabling encryption by default + +Set the following on your homeserver's +`/.well-known/matrix/client` config: + +```json +{ + "io.element.e2ee": { + "default": false + } +} +``` + +# Secure backup + +By default, Element strongly encourages (but does not require) users to set up +Secure Backup so that cross-signing identity key and message keys can be +recovered in case of a disaster where you lose access to all active devices. + +## Requiring secure backup + +To require Secure Backup to be configured before Element can be used, set the +following on your homeserver's `/.well-known/matrix/client` config: + +```json +{ + "io.element.e2ee": { + "secure_backup_required": true + } +} +``` + +## Preferring setup methods + +By default, Element offers users a choice of a random key or user-chosen +passphrase when setting up Secure Backup. If a homeserver admin would like to +only offer one of these, you can signal this via the +`/.well-known/matrix/client` config, for example: + +```json +{ + "io.element.e2ee": { + "secure_backup_setup_methods": ["passphrase"] + } +} +``` + +The field `secure_backup_setup_methods` is an array listing the methods the +client should display. Supported values currently include `key` and +`passphrase`. If the `secure_backup_setup_methods` field is not present or +exists but does not contain any supported methods, Element will fallback to the +default value of: `["key", "passphrase"]`. + +# Compatibility + +The settings above were first proposed under a `im.vector.riot.e2ee` key, which +is now deprecated. Element will check for either key, preferring +`io.element.e2ee` if both exist. diff --git a/docs/feature-flags.md b/docs/feature-flags.md new file mode 100644 index 0000000..1e7e5cc --- /dev/null +++ b/docs/feature-flags.md @@ -0,0 +1,107 @@ +# Feature flags + +When developing new features for Element, we use feature flags to give us more +flexibility and control over when and where those features are enabled. + +For example, flags make the following things possible: + +* Extended testing of a feature via labs on develop +* Enabling features when ready instead of the first moment the code is released +* Testing a feature with a specific set of users (by enabling only on a specific + Element instance) + +The size of the feature controlled by a feature flag may vary widely: it could +be a large project like reactions or a smaller change to an existing algorithm. +A large project might use several feature flags if it's useful to control the +deployment of different portions independently. + +Everyone involved in a feature (engineering, design, product, reviewers) should +think about its deployment plan up front as best as possible so we can have the +right feature flags in place from the start. + +## Interaction with spec process + +Historically, we have often used feature flags to guard client features that +depend on unstable spec features. Unfortunately, there was never clear agreement +about how long such a flag should live for, when it should be removed, etc. + +Under the [new spec +process](https://github.com/matrix-org/matrix-doc/pull/2324), server-side +unstable features can be used by clients and enabled by default as long as +clients commit to doing the associated clean up work once a feature stabilises. + +## Starting work on a feature + +When starting work on a feature, we should create a matching feature flag: + +1. Add a new + [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts) + of the form: +```js + "feature_cats": { + isFeature: true, + displayName: _td("Adds cats everywhere"), + supportedLevels: LEVELS_FEATURE, + default: false, + }, +``` +2. Check whether the feature is enabled as appropriate: +```js + SettingsStore.getValue("feature_cats") +``` +3. Document the feature in the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md) + +With these steps completed, the feature is disabled by default, but can be +enabled on develop and nightly by interested users for testing. + +Different features may have different deployment plans for when to enable where. +The following lists a few common options. + +## Enabling by default on develop and nightly + +Set the feature to `true` in the +[develop](https://github.com/vector-im/element-web/blob/develop/element.io/develop/config.json) +and +[nightly](https://github.com/vector-im/element-desktop/blob/develop/element.io/nightly/config.json) +configs: + +```json + "features": { + "feature_cats": true + }, +``` + +## Enabling by default on staging, app, and release + +Set the feature to `true` in the +[staging / app](https://github.com/vector-im/element-web/blob/develop/element.io/app/config.json) +and +[release](https://github.com/vector-im/element-desktop/blob/develop/element.io/release/config.json) +configs. + +**Note:** The above will only enable the feature for https://app.element.io and official Element +Desktop builds. It will not be enabled for self-hosted installed, custom desktop builds, etc. To +cover these cases, change the setting's `default` in `Settings.ts` to `true`. + +## Feature deployed successfully + +Once we're confident that a feature is working well, we should remove or convert the flag. + +If the feature is meant to be turned off/on by the user: +1. Remove `isFeature` from the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts) +2. Change the `default` to `true` (if desired). +3. Remove the feature from the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md) +4. Celebrate! 🥳 + +If the feature is meant to be forced on (non-configurable): +1. Remove the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts) +2. Remove all `getValue` lines that test for the feature. +3. Remove the feature from the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md) +4. If applicable, remove the feature state from + [develop](https://github.com/vector-im/element-web/blob/develop/element.io/develop/config.json), + [nightly](https://github.com/vector-im/element-desktop/blob/develop/element.io/nightly/config.json), + [staging / app](https://github.com/vector-im/element-web/blob/develop/element.io/app/config.json), + and + [release](https://github.com/vector-im/element-desktop/blob/develop/element.io/release/config.json) + configs +5. Celebrate! 🥳 diff --git a/docs/jitsi-dev.md b/docs/jitsi-dev.md new file mode 100644 index 0000000..d685a22 --- /dev/null +++ b/docs/jitsi-dev.md @@ -0,0 +1,100 @@ +# Jitsi wrapper developer docs + +*If you're looking for information on how to set up Jitsi in your Element, see +[jitsi.md](./jitsi.md) instead.* + +These docs are for developers wondering how the different conference buttons work +within Element. If you're not a developer, you're probably looking for [jitsi.md](./jitsi.md). + +## Brief introduction to widgets + +Widgets are embedded web applications in a room, controlled through state events, and +have a `url` property. They are largely specified by [MSC1236](https://github.com/matrix-org/matrix-doc/issues/1236) +and have extensions proposed under [MSC1286](https://github.com/matrix-org/matrix-doc/issues/1286). + +The `url` is typically something we shove into an iframe with sandboxing (see `AppTile` +in the react-sdk), though for some widgets special integration can be done. v2 widgets +have a `data` object which helps achieve that special integration, though v1 widgets +are best iframed and left alone. + +Widgets have a `postMessage` API they can use to interact with Element, which also allows +Element to interact with them. Typically this is most used by the sticker picker (an +account-level widget), though widgets like the Jitsi widget will request permissions to +get 'stuck' into the room list during a conference. + +Widgets can be added with the `/addwidget ` command. + +## Brief introduction to integration managers + +Integration managers (like Scalar and Dimension) are accessible via the 4 squares in +the top right of the room and provide a simple UI over top of bridges, bots, and other +stuff to plug into a room. They are a separate service to Element and are thus iframed +in a dialog as well. They also have a `postMessage` API they can use to interact with +the client to create things like widgets, give permissions to bridges, and generally +set everything up for the integration the user is working with. + +Integration managers do not currently have a spec associated with them, though efforts +are underway in [MSC1286](https://github.com/matrix-org/matrix-doc/issues/1286). + +## Widgets configured by integration managers + +Integration managers will often "wrap" a widget by using a widget `url` which points +to the integration manager instead of to where the user requested the widget be. For +example, a custom widget added in an integration manager for https://matrix.org will +end up creating a widget with a URL like `https://integrations.example.org?widgetUrl=https%3A%2F%2Fmatrix.org`. + +The integration manager's wrapper will typically have another iframe to isolate the +widget from the client by yet another layer. The wrapper often provides other functionality +which might not be available on the embedded site, such as a fullscreen button or the +communication layer with the client (all widgets *should* be talking to the client +over `postMessage`, even if they aren't going to be using the widget APIs). + +Widgets added with the `/addwidget` command will *not* be wrapped as they are not going +through an integration manager. The widgets themselves *should* also work outside of +Element. Widgets currently have a "pop out" button which opens them in a new tab and +therefore have no connection back to Riot. + +## Jitsi widgets from integration managers + +Integration managers will create an entire widget event and send it over `postMessage` +for the client to add to the room. This means that the integration manager gets to +decide the conference domain, conference name, and other aspects of the widget. As +a result, users can end up with a Jitsi widget that does not use the same conference +server they specified in their config.json - this is expected. + +Some integration managers allow the user to change the conference name while others +will generate one for the user. + +## Jitsi widgets generated by Element itself + +When the user clicks on the call buttons by the composer, the integration manager is +not involved in the slightest. Instead, Element itself generates a widget event, this time +using the config.json parameters, and publishes that to the room. If there's only two +people in the room, a plain WebRTC call is made instead of using a widget at all - these +are defined in the Matrix specification. + +The Jitsi widget created by Element uses a local `jitsi.html` wrapper (or one hosted by +`https://app.element.io` for desktop users or those on non-https domains) as the widget +`url`. The wrapper has some basic functionality for talking to Element to ensure the +required `postMessage` calls are fulfilled. + +**Note**: Per [jitsi.md](./jitsi.md) the `preferredDomain` can also come from the server's +client .well-known data. + +## The Jitsi wrapper in Element + +Whenever Element sees a Jitsi widget, it ditches the `url` and instead replaces it with +its local wrapper, much like what it would do when creating a widget. However, instead +of using one from [app.element.io](https://app.element.io), it will use one local to the client instead. + +The wrapper is used to provide a consistent experience to users, as well as being faster +and less risky to load. The local wrapper URL is populated with the conference information +from the original widget (which could be a v1 or v2 widget) so the user joins the right +call. + +Critically, when the widget URL is reconstructed it does *not* take into account the +config.json's `preferredDomain` for Jitsi. If it did this, users would end up on different +conference servers and therefore different calls entirely. + +**Note**: Per [jitsi.md](./jitsi.md) the `preferredDomain` can also come from the server's +client .well-known data. diff --git a/docs/jitsi.md b/docs/jitsi.md new file mode 100644 index 0000000..d289cc3 --- /dev/null +++ b/docs/jitsi.md @@ -0,0 +1,73 @@ +# Jitsi in Element + +Element uses [Jitsi](https://jitsi.org/) for conference calls, which provides options for +self-hosting your own server and supports most major platforms. + +1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those +calls work directly between clients or via TURN servers configured on the respective +homeservers. + +There's a number of ways to start a Jitsi call: the easiest way is to click on the +voice or video buttons near the message composer in a room with more than 2 people. This +will add a Jitsi widget which allows anyone in the room to join. + +Integration managers (available through the 4 squares in the top right of the room) may +provide their own approaches for adding Jitsi widgets. + +## Configuring Element to use your self-hosted Jitsi server + +Element will use the Jitsi server that is embedded in the widget, even if it is not the +one you configured. This is because conference calls must be held on a single Jitsi +server and cannot be split over multiple servers. + +However, you can configure Element to *start* a conference with your Jitsi server by adding +to your [config](./config.md) the following: +```json +{ + "jitsi": { + "preferredDomain": "your.jitsi.example.org" + } +} +``` + +The default is `jitsi.riot.im` (a free service offered by Element), and the demo site for +Jitsi uses `meet.jit.si` (also free). + +Once you've applied the config change, refresh Element and press the call button. This +should start a new conference on your Jitsi server. + +**Note**: The widget URL will point to a `jitsi.html` page hosted by Element. The Jitsi +domain will appear later in the URL as a configuration parameter. + +**Hint**: If you want everyone on your homeserver to use the same Jitsi server by +default, and you are using riot-web 1.6 or newer, set the following on your homeserver's +`/.well-known/matrix/client` config: +```json +{ + "im.vector.riot.jitsi": { + "preferredDomain": "your.jitsi.example.org" + } +} +``` + +## Element Android + +Element Android (1.0.5+) supports custom Jitsi domains, similar to Element Web above. + +1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those +calls work directly between clients or via TURN servers configured on the respective +homeservers. + +For rooms with more than 2 joined members, when creating a Jitsi conference via call/video buttons of the toolbar (not via integration manager), Element Android will create a widget using the [wrapper](https://github.com/vector-im/element-web/blob/develop/docs/jitsi-dev.md) hosted on `app.element.io`. +The domain used is the one specified by the `/.well-known/matrix/client` endpoint, and if not present it uses the fallback defined in `config.xml` (jitsi.riot.im) + +For active Jitsi widgets in the room, a native Jitsi widget UI is created and points to the instance specified in the `domain` key of the widget content data. + +Element Android manages allowed native widgets permissions a bit differently than web widgets (as the data shared are different and never shared with the widget URL). For Jitsi widgets, permissions are requested only once per domain (consent saved in account data). + +## Element iOS + +Currently the Element mobile apps do not support custom Jitsi servers and will instead +use the default `jitsi.riot.im` server. When users on the mobile apps join the call, +they will be joining a different conference which has the same name, but not the same +participants. This is a known bug and which needs to be fixed. diff --git a/docs/labs.md b/docs/labs.md new file mode 100644 index 0000000..a3130c2 --- /dev/null +++ b/docs/labs.md @@ -0,0 +1,113 @@ +# Labs features + +If Labs is enabled in the [Element config](config.md), you can enable some of these features by going +to `Settings->Labs`. This list is non-exhaustive and subject to change, chat in +[#element-web:matrix.org](https://matrix.to/#/#element-web:matrix.org) for more information. + +**Be warned! Labs features are not finalised, they may be fragile, they may change, they may be +dropped. Ask in the room if you are unclear about any details here.** + +## New spinner design (`feature_new_spinner`) + +Replaces the old spinner image with a new, svg-based one featuring a sleeker design. + +## Message pinning (`feature_pinning`) + +Allows you to pin messages in the room. To pin a message, use the 3 dots to the right of the message +and select "Pin". + +## Custom status (`feature_custom_status`) + +An experimental approach for supporting custom status messages across DMs. To set a status, click on +your avatar next to the message composer. + +## Custom tags (`feature_custom_tags`) + +An experimental approach for dealing with custom tags. Custom tags will appear in the bottom portion +of the community filter panel. + +Setting custom tags is not supported by Element. + +## Render simple counters in room header (`feature_state_counters`) + +Allows rendering of labelled counters above the message list. + +Once enabled, send a custom state event to a room to set values: + +1. In a room, type `/devtools` to bring up the devtools interface +2. Click "Send Custom Event" +3. Toggle from "Event" to "State Event" +4. Set the event type to: `re.jki.counter` and give it a unique key +5. Specify the content in the following format: + +``` +{ + "link": "", + "severity": "normal", + "title": "my counter", + "value": 0 +} +``` + +That's it. Now should see your new counter under the header. + +## Multiple integration managers (`feature_many_integration_managers`) + +Exposes a way to access all the integration managers known to Element. This is an implementation of [MSC1957](https://github.com/matrix-org/matrix-doc/pull/1957). + +## New ways to ignore people (`feature_mjolnir`) + +When enabled, a new settings tab appears for users to be able to manage their ban lists. +This is a different kind of ignoring where the ignored user's messages still get rendered, +but are hidden by default. + +Ban lists are rooms within Matrix, proposed as [MSC2313](https://github.com/matrix-org/matrix-doc/pull/2313). +[Mjolnir](https://github.com/matrix-org/mjolnir) is a set of moderation tools which support +ban lists. + +## Verifications in DMs (`feature_dm_verification`) + +An implementation of [MSC2241](https://github.com/matrix-org/matrix-doc/pull/2241). When enabled, verification might not work with devices which don't support MSC2241. + +This also includes a new implementation of the user & member info panel, designed to share more code between showing community members & room members. Built on top of this new panel is also a new UX for verification from the member panel. + +The setting will be removed in a future release, enabling it non-optionally for +all users. + +## Bridge info tab (`feature_bridge_state`) + +Adds a "Bridge Info" tab to the Room Settings dialog, if a compatible bridge is +present in the room. The Bridge info tab pulls information from the `m.bridge` state event ([MSC2346](https://github.com/matrix-org/matrix-doc/pull/2346)). Since the feature is based upon a MSC, most +bridges are not expected to be compatible, and users should not rely on this +tab as the single source of truth just yet. + +## Presence indicator in room list (`feature_presence_in_room_list`) + +This adds a presence indicator in the room list next to DM rooms where the other +person is online. + +## Custom themes (`feature_custom_themes`) + +Custom themes are possible through Element's [theme support](./theming.md), though +normally these themes need to be defined in the config for Element. This labs flag +adds an ability for end users to add themes themselves by using a URL to the JSON +theme definition. + +For some sample themes, check out [aaronraimist/element-themes](https://github.com/aaronraimist/element-themes). + +## Message preview tweaks + +To enable message previews for reactions in all rooms, enable `feature_roomlist_preview_reactions_all`. +To enable message previews for reactions in DMs, enable `feature_roomlist_preview_reactions_dms`, ignored when it is enabled for all rooms. + +## Communities v2 prototyping (`feature_communities_v2_prototypes`) [In Development] + +**This is a highly experimental implementation for parts of the communities v2 experience.** It does not +represent what communities v2 will look/feel like and can/will change without notice. Due to the early +stages this feature is in and the requirement for a compatible homeserver, we will not be accepting issues +or feedback for this functionality at this time. + +## Dehydrated devices (`feature_dehydration`) + +Allows users to receive encrypted messages by creating a device that is stored +encrypted on the server, as described in [MSC2697](https://github.com/matrix-org/matrix-doc/pull/2697). diff --git a/docs/memory-profiles-and-leaks.md b/docs/memory-profiles-and-leaks.md new file mode 100644 index 0000000..49acd0f --- /dev/null +++ b/docs/memory-profiles-and-leaks.md @@ -0,0 +1,53 @@ +## Memory leaks + +Element usually emits slow behaviour just before it is about to crash. Getting a +memory snapshot (below) just before that happens is ideal in figuring out what +is going wrong. + +Common symptoms are clicking on a room and it feels like the tab froze and scrolling +becoming jumpy/staggered. + +If you receive a white screen (electron) or the chrome crash page, it is likely +run out of memory and it is too late for a memory profile. Please do report when +this happens though so we can try and narrow down what might have gone wrong. + +## Memory profiles/snapshots + +When investigating memory leaks/problems it's usually important to compare snapshots +from different points in the Element session lifecycle. Most importantly, a snapshot +to establish the baseline or "normal" memory usage is useful. Taking a snapshot +roughly 30-60 minutes after starting Element is a good time to establish "normal" +memory usage for the app - anything after that is at risk of hiding the memory leak +and anything newer is still in the warmup stages of the app. + +**Memory profiles can contain sensitive information.** If you are submitting a memory +profile to us for debugging purposes, please pick the appropriate Element developer and +send them over an encrypted private message. *Do not share your memory profile in +public channels or with people you do not trust.* + +### Taking a memory profile (Firefox) + +1. Press CTRL+SHIFT+I (I as in eye). +2. Click the Memory tab. +3. Press the camera icon in the top left of the pane. +4. Wait a bit (coffee is a good option). +5. When the save button appears on the left side of the panel, click it to save the + profile locally. +6. Compress the file (gzip or regular zip) to make the file smaller. +7. Send the compressed file to whoever asked for it (if you trust them). + +While the profile is in progress, the tab might be frozen or unresponsive. + +### Taking a memory profile (Chrome/Desktop) + +1. Press CTRL+SHIFT+I (I as in eye). +2. Click the Memory tab. +3. Select "Heap Snapshot" and the app.element.io VM instance (not the indexeddb one). +4. Click "Take Snapshot". +5. Wait a bit (coffee is a good option). +6. When the save button appears on the left side of the panel, click it to save the + profile locally. +7. Compress the file (gzip or regular zip) to make the file smaller. +8. Send the compressed file to whoever asked for it (if you trust them). + +While the profile is in progress, the tab might be frozen or unresponsive. diff --git a/docs/native-node-modules.md b/docs/native-node-modules.md new file mode 100644 index 0000000..850573e --- /dev/null +++ b/docs/native-node-modules.md @@ -0,0 +1,60 @@ +# Native Node Modules + +For some features, the desktop version of Element can make use of native Node +modules. These allow Riot to integrate with the desktop in ways that a browser +cannot. + +While native modules enable powerful new features, they must be complied for +each operating system. For official Element releases, we will always build these +modules from source to ensure we can trust the compiled output. In the future, +we may offer a pre-compiled path for those who want to use these features in a +custom build of Element without installing the various build tools required. + +Do note that compiling a module for a particular operating system +(Linux/macOS/Windows) will need to be done on that operating system. +Cross-compiling from a host OS for a different target OS may be possible, but +we don't support this flow with Element dependencies at this time. + +At the moment, we need to make some changes to the Element release process before +we can support native Node modules at release time, so these features are +currently disabled by default until that is resolved. The following sections +explain the manual steps you can use with a custom build of Element to enable +these features if you'd like to try them out. + +## Adding Seshat for search in E2E encrypted rooms + +Seshat is a native Node module that adds support for local event indexing and +full text search in E2E encrypted rooms. + +Since Seshat is written in Rust, the Rust compiler and related tools need to be +installed before installing Seshat itself. To install Rust please consult the +official Rust [documentation](https://www.rust-lang.org/tools/install). + +Seshat also depends on the SQLCipher library to store its data in encrypted form +on disk. You'll need to install it via your OS package manager. + +After installing the Rust compiler and SQLCipher, Seshat support can be added +using yarn inside the `electron_app/` directory: + + yarn add matrix-seshat + +You will have to rebuild the native libraries against electron's version of +of node rather than your system node, using the `electron-build-env` tool. +This is also needed to when pulling in changes to Seshat using `yarn link`. +Again from the `electron_app/` directory: + + yarn add electron-build-env + +Recompiling Seshat itself can be done like so: + + yarn run electron-build-env -- --electron 6.1.1 -- neon build matrix-seshat --release + +Please make sure to include all the `--` as well as the `--release` command line +switch at the end. Modify your electron version accordingly depending on the +version that is installed on your system. + +After this is done the Electron version of Element can be run from the main folder +as usual using: + + yarn electron + diff --git a/docs/review.md b/docs/review.md new file mode 100644 index 0000000..16d6c24 --- /dev/null +++ b/docs/review.md @@ -0,0 +1,84 @@ +# Review Guidelines + +The following summarises review guidelines that we follow for pull requests in +Element Web and other supporting repos. These are just guidelines (not strict +rules) and may be updated over time. + +## Code Review + +When reviewing code, here are some things we look for and also things we avoid: + +### We review for + +* Correctness +* Performance +* Accessibility +* Security +* Quality via automated and manual testing +* Comments and documentation where needed +* Sharing knowledge of different areas among the team +* Ensuring it's something we're comfortable maintaining for the long term +* Progress indicators and local echo where appropriate with network activity + +### We should avoid + +* Style nits that are already handled by the linter +* Dramatically increasing scope + +### Good practices + +* Use empathetic language + * See also [Mindful Communication in Code + Reviews](https://kickstarter.engineering/a-guide-to-mindful-communication-in-code-reviews-48aab5282e5e) + and [How to Do Code Reviews Like a Human](https://mtlynch.io/human-code-reviews-1/) +* Authors should prefer smaller commits for easier reviewing and bisection +* Reviewers should be explicit about required versus optional changes + * Reviews are conversations and the PR author should feel comfortable + discussing and pushing back on changes before making them +* Reviewers are encouraged to ask for tests where they believe it is reasonable +* Core team should lead by example through their tone and language +* Take the time to thank and point out good code changes +* Using softer language like "please" and "what do you think?" goes a long way + towards making others feel like colleagues working towards a common goal + +### Workflow + +* Authors should request review from the riot-web team by default (if someone on + the team is clearly the expert in an area, a direct review request to them may + be more appropriate) +* Reviewers should remove the team review request and request review from + themselves when starting a review to avoid double review +* If there are multiple related PRs authors should reference each of the PRs in + the others before requesting review. Reviewers might start reviewing from + different places and could miss other required PRs. +* Avoid force pushing to a PR after the first round of review +* Use the GitHub default of merge commits when landing (avoid alternate options + like squash or rebase) +* PR author merges after review (assuming they have write access) +* Assign issues only when in progress to indicate to others what can be picked + up + +## Design and Product Review + +We want to ensure that all changes to Element fit with our design and product +vision. We often request review from those teams so they can provide their +perspective. + +In more detail, our usual process for changes that affect the UI or alter user +functionality is: + +* For changes that will go live when merged, always flag Design and Product + teams as appropriate +* For changes guarded by a feature flag, Design and Product review is not + required (though may still be useful) since we can continue tweaking + +As it can be difficult to review design work from looking at just the changed +files in a PR, authors should be prepared for Design and / or Product teams to +request a link to an ad-hoc build of Element (hosted anywhere) that can be used for +the review. In the future, we [hope to automate +this](https://github.com/vector-im/element-web/issues/12624) for every PR. + +Before starting work on a feature, it's best to ensure your plan aligns well +with our vision for Element. Please chat with the team in +[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before you +start so we can ensure it's something we'd be willing to merge. diff --git a/docs/skinning thoughts.md b/docs/skinning thoughts.md new file mode 100644 index 0000000..46f9948 --- /dev/null +++ b/docs/skinning thoughts.md @@ -0,0 +1,68 @@ +== Skinning refactor == + +matrix-react-sdk + - base images + - base CSS + - all the components needed to build a workable app (including the top layer) + +element-web: the Element skin + - Element-specific classes (e.g. login header/footer) + - Element-specific themes + - light + - dark + +i.e. the only things which should go into element-web are bits which apply vector-specific skinning +specifically "Stuff that any other brand would not want to use. (e.g. Element logos, links, T&Cs)" + - Questions: + - Electron app? (should probably be a separate repo in its own right? but might as well go here for now) + - index.html & index.js? (should be in matrix-react-sdk, given the SDK is useless without them?) + +ideally matrix-react-sdk itself should ship with a default skin which actually works built in. + +status skin (can go in the same app for now) + - has status theme + - which inherits from Element light theme + - how do we share graphics between skins? + - shove them into react-sdk, or... + - guess we do ../../vector/img + - this means keeping the skin name in the images (unless /img is a shortcut to the right skin's images) + +out of scope: + - making the components more independent, so they can be used in isolation. + - that said, the bits which should probably be used by being embeded into a different app: + - login/reg + - RoomView + RoomSettings + - MessageComposer + - RoomList + - MemberList + - MemberInfo + - Voip UI + - UserSettings + - sharing different js-sdks between the different isolated modules + +other changes: + - how do we handle i18n? + - each skin should really be its own i18n project. As long as all the commonality stuff is in matrix-react-sdk this shouldn't be too bad. + - ability to associate components with a given skin + - skins/vector/src <-- components + - skins/vector/css + - skins/vector/img + - skins/vector/fonts + - gather together themes (per skin) into a single place too + - skins/vector/themes/foo/css + - skins/vector/themes/foo/img + - skins/vector/themes/foo/fonts + - ideally riot-web would contain almost nothing but skins/vector directory. + - ability to entirely replace CSS rather than override it for a given theme + - e.g. if we replace `Login.js` with `StatusLogin.js`, then we should similarly be able to replace `_Login.scss` with `_StatusLogin.scss`. + +random thoughts; + - should we be able to change the entire skin at runtime (more like wordpress) - to the extent of replacing entire components? + - might pose security issues if a theme can be swapped out to replace MatrixChat or other fundamental functionality at runtime + - if so, perhaps skins & themes should converge... + +----------------- + +Immediate plan for Status: + * Implement it as a theme for the Element skin + * Ideally move skins to a sensible level (possibly even including src?) diff --git a/docs/theming.md b/docs/theming.md new file mode 100644 index 0000000..9b90fb2 --- /dev/null +++ b/docs/theming.md @@ -0,0 +1,98 @@ +Theming Element +============ + +Themes are a very basic way of providing simple alternative look & feels to the +Element app via CSS & custom imagery. + +They are *NOT* co be confused with 'skins', which describe apps which sit on top +of matrix-react-sdk - e.g. in theory Element itself is a react-sdk skin. +As of Jan 2017, skins are not fully supported; Element is the only available skin. + +To define a theme for Element: + + 1. Pick a name, e.g. `teal`. at time of writing we have `light` and `dark`. + 2. Fork `src/skins/vector/css/themes/dark.scss` to be `teal.scss` + 3. Fork `src/skins/vector/css/themes/_base.scss` to be `_teal.scss` + 4. Override variables in `_teal.scss` as desired. You may wish to delete ones + which don't differ from `_base.scss`, to make it clear which are being + overridden. If every single colour is being changed (as per `_dark.scss`) + then you might as well keep them all. + 5. Add the theme to the list of entrypoints in webpack.config.js + 6. Add the theme to the list of themes in matrix-react-sdk's UserSettings.js + 7. Sit back and admire your handywork. + +In future, the assets for a theme will probably be gathered together into a +single directory tree. + +Custom Themes +============= + +Themes derived from the built in themes may also be defined in settings. + +To avoid name collisions, the internal name of a theme is +`custom-${theme.name}`. So if you want to set the custom theme below as the +default theme, you would use `default_theme: "custom-Electric Blue"`. + +eg. in config.json: + +``` +"settingDefaults": { + "custom_themes": [ + { + "name": "Electric Blue", + "is_dark": false, + "fonts": { + "faces": [ + { + "font-family": "Inter", + "src": [{"url": "/fonts/Inter.ttf", "format": "ttf"}] + } + ], + "general": "Inter, sans", + "monospace": "'Courier New'" + }, + "colors": { + "accent-color": "#3596fc", + "primary-color": "#368bd6", + "warning-color": "#ff4b55", + "sidebar-color": "#27303a", + "roomlist-background-color": "#f3f8fd", + "roomlist-text-color": "#2e2f32", + "roomlist-text-secondary-color": "#61708b", + "roomlist-highlights-color": "#ffffff", + "roomlist-separator-color": "#e3e8f0", + "timeline-background-color": "#ffffff", + "timeline-text-color": "#2e2f32", + "timeline-text-secondary-color": "#61708b", + "timeline-highlights-color": "#f3f8fd", + "username-colors": ["#ff0000", ...] + "avatar-background-colors": ["#cc0000", ...] + } + }, { + "name": "Deep Purple", + "is_dark": true, + "colors": { + "accent-color": "#6503b3", + "primary-color": "#368bd6", + "warning-color": "#b30356", + "sidebar-color": "#15171B", + "roomlist-background-color": "#22262E", + "roomlist-text-color": "#A1B2D1", + "roomlist-text-secondary-color": "#EDF3FF", + "roomlist-highlights-color": "#343A46", + "roomlist-separator-color": "#a1b2d1", + "timeline-background-color": "#181b21", + "timeline-text-color": "#EDF3FF", + "timeline-text-secondary-color": "#A1B2D1", + "timeline-highlights-color": "#22262E" + } + } + ] + } +``` + +`username-colors` is expected to contain 8 colors. `avatar-background-colors` is expected to contain 3 colors. Both values are optional and have fallbacks from the built-in theme. + +These are exposed as `--username-colors_0`, ... and `--avatar-background-colors_0`, ... respectively in CSS. + +All properties in `fonts` are optional, and will default to the standard Riot fonts. diff --git a/docs/translating-dev.md b/docs/translating-dev.md new file mode 100644 index 0000000..1653b8c --- /dev/null +++ b/docs/translating-dev.md @@ -0,0 +1,63 @@ +# How to translate Element (Dev Guide) + +## Requirements + +- A working [Development Setup](../../#setting-up-a-dev-environment) + - Including up-to-date versions of matrix-react-sdk and matrix-js-sdk +- Latest LTS version of Node.js installed +- Be able to understand English +- Be able to understand the language you want to translate Element into + +## Translating strings vs. marking strings for translation + +Translating strings are done with the `_t()` function found in matrix-react-sdk/lib/languageHandler.js. It is recommended to call this function wherever you introduce a string constant which should be translated. However, translating can not be performed until after the translation system has been initialized. Thus, sometimes translation must be performed at a different location in the source code than where the string is introduced. This breaks some tooling and makes it difficult to find translatable strings. Therefore, there is the alternative `_td()` function which is used to mark strings for translation, without actually performing the translation (which must still be performed separately, and after the translation system has been initialized). + +Basically, whenever a translatable string is introduced, you should call either `_t()` immediately OR `_td()` and later `_t()`. + +Example: +``` +// Module-level constant +const COLORS = { + '#f8481c': _td('reddish orange'), // Can't call _t() here yet + '#fc2647': _td('pinky red') // Use _td() instead so the text is picked up for translation anyway +} + +// Function that is called some time after i18n has been loaded +function getColorName(hex) { + return _t(COLORS[hex]); // Perform actual translation here +} +``` + +## Adding new strings + + 1. Check if the import ``import { _t } from 'matrix-react-sdk/lib/languageHandler';`` is present. If not add it to the other import statements. Also import `_td` if needed. + 1. Add ``_t()`` to your string. (Don't forget curly braces when you assign an expression to JSX attributes in the render method). If the string is introduced at a point before the translation system has not yet been initialized, use `_td()` instead, and call `_t()` at the appropriate time. + 1. Run `yarn i18n` to update ``src/i18n/strings/en_EN.json`` + 1. If you added a string with a plural, you can add other English plural variants to ``src/i18n/strings/en_EN.json`` (remeber to edit the one in the same project as the source file containing your new translation). + +## Editing existing strings + +1. Edit every occurrence of the string inside `_t()` and `_td()` in the JSX files. +1. Run `yarn i18n` to update `src/i18n/strings/en_EN.json`. (Be sure to run this in the same project as the JSX files you just edited.) +1. Run `yarn prunei18n` to remove the old string from `src/i18n/strings/*.json`. + +## Adding variables inside a string. + +1. Extend your ``_t()`` call. Instead of ``_t(STRING)`` use ``_t(STRING, {})`` +1. Decide how to name it. Please think about if the person who has to translate it can understand what it does. E.g. using the name 'recipient' is bad, because a translator does not know if it is the name of a person, an email address, a user ID, etc. Rather use e.g. recipientEmailAddress. +1. Add it to the array in ``_t`` for example ``_t(STRING, {variable: this.variable})`` +1. Add the variable inside the string. The syntax for variables is ``%(variable)s``. Please note the _s_ at the end. The name of the variable has to match the previous used name. + +- You can use the special ``count`` variable to choose between multiple versions of the same string, in order to get the correct pluralization. E.g. ``_t('You have %(count)s new messages', { count: 2 })`` would show 'You have 2 new messages', while ``_t('You have %(count)s new messages', { count: 1 })`` would show 'You have one new message' (assuming a singular version of the string has been added to the translation file. See above). Passing in ``count`` is much prefered over having an if-statement choose the correct string to use, because some languages have much more complicated plural rules than english (e.g. they might need a completely different form if there are three things rather than two). +- If you want to translate text that includes e.g. hyperlinks or other HTML you have to also use tag substitution, e.g. ``_t('Click here!', {}, { 'a': (sub) => {sub} })``. If you don't do the tag substitution you will end up showing literally '' rather than making a hyperlink. +- You can also use React components with normal variable substitution if you want to insert HTML markup, e.g. ``_t('Your email address is %(emailAddress)s', { emailAddress: {userEmailAddress} })``. + +## Things to know/Style Guides + +- Do not use `_t()` inside ``getDefaultProps``: the translations aren't loaded when `getDefaultProps` is called, leading to missing translations. Use `_td()` to indicate that `_t()` will be called on the string later. +- If using translated strings as constants, translated strings can't be in constants loaded at class-load time since the translations won't be loaded. Mark the strings using `_td()` instead and perform the actual translation later. +- If a string is presented in the UI with punctuation like a full stop, include this in the translation strings, since punctuation varies between languages too. +- Avoid "translation in parts", i.e. concatenating translated strings or using translated strings in variable substitutions. Context is important for translations, and translating partial strings this way is simply not always possible. +- Concatenating strings often also introduces an implicit assumption about word order (e.g. that the subject of the sentence comes first), which is incorrect for many languages. +- Translation 'smell test': If you have a string that does not begin with a capital letter (is not the start of a sentence) or it ends with e.g. ':' or a preposition (e.g. 'to') you should recheck that you are not trying to translate a partial sentence. +- If you have multiple strings, that are almost identical, except some part (e.g. a word or two) it is still better to translate the full sentence multiple times. It may seem like inefficient repetion, but unlike programming where you try to minimize repetition, translation is much faster if you have many, full, clear, sentences to work with, rather than fewer, but incomplete sentence fragments. diff --git a/docs/translating.md b/docs/translating.md new file mode 100644 index 0000000..cdfb48f --- /dev/null +++ b/docs/translating.md @@ -0,0 +1,64 @@ +# How to translate Element + +## Requirements + +- Web Browser +- Be able to understand English +- Be able to understand the language you want to translate Element into + +## Step 0: Join #element-translations:matrix.org + +1. Come and join https://matrix.to/#/#element-translations:matrix.org +2. Read scrollback and/or ask if anyone else is working on your language, and co-ordinate if needed. In general little-or-no coordination is needed though :) + +## Step 1: Preparing your Weblate Profile + +1. Head to https://translate.element.io and register either via Github or email +2. After registering check if you got an email to verify your account and click the link (if there is none head to step 1.4) +3. Log into weblate +4. Head to https://translate.element.io/accounts/profile/ and select the languages you know and maybe another language you know too. +6. Head to https://translate.element.io/accounts/profile/#subscriptions and select Element Web as Project + +## How to check if your language already is being translated + +Go to https://translate.element.io/projects/element-web/ and visit the 2 sub-projects. +If your language is listed go to Step 2a and if not go to Step 2b + +## Step 2a: Helping on existing languages. + +1. Head to one of the projects listed https://translate.element.io/projects/element-web/ +2. Click on the ``translate`` button on the right side of your language +3. Fill in the translations in the writeable field. You will see the original English string and the string of your second language above. + +Head to the explanations under Steb 2b + +## Step 2b: Adding a new language + +1. Go to one of the projects listed https://translate.element.io/projects/element-web/ +2. Click the ``Start new translation`` button at the bottom +3. Select a language +4. Start translating like in 2a.3 +5. Repeat these steps for the other projects which are listed at the link of step 2b.1 + +### What means the green button under the text field? + +The green button let you save our translations directly. Please only use it if you are 100% sure about that translation. If you do not know a translation please DO NOT click that button. Use the arrows above the translations field and click to the right. + +### What means the yellow button under the text field? + +The yellow button has to be used if you are unsure about the translation but you have a rough idea. It adds a new suggestion to the string which can than be reviewed by others. + +### What are "%(something)s"? + +These things are variables that are expanded when displayed by Element. They can be room names, usernames or similar. If you find one, you can move to the right place for your language, but not delete it as the variable will be missing if you do. + +A special case is `%(urlStart)s` and `%(urlEnd)s` which are used to mark the beginning of a hyperlink (i.e. `` and ``. You must keep these markers surrounding the equivalent string in your language that needs to be hyperlinked. + +### "I want to come back to this string. How?" + +You can use inside the translation field "Review needed" checkbox. It will be shown as Strings that need to be reviewed. + + +### Further reading + +The official Weblate doc provides some more in-deepth explanation on how to do translations and talks about do and don'ts. You can find it at: https://docs.weblate.org/en/latest/user/translating.html diff --git a/element.io/README b/element.io/README new file mode 100644 index 0000000..140a3fc --- /dev/null +++ b/element.io/README @@ -0,0 +1,12 @@ +This directory contains the config files and deployment scripts for the official +element.io distribution of Element Web. + +You probably do not want to build with this config unless you're building the +official element.io distribution, but these files may be useful if you want to +inspect the configuration used there. + +Element Desktop uses a separate config (see +https://github.com/vector-im/element-desktop/tree/develop/element.io). + +Deployment scripts (such as app/deploy.py) are meant to be run on the web server +hosting the Element installation. diff --git a/element.io/app/config.json b/element.io/app/config.json new file mode 100644 index 0000000..c8867d3 --- /dev/null +++ b/element.io/app/config.json @@ -0,0 +1,40 @@ +{ + "default_server_name": "matrix.org", + "brand": "Element", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web", + "bug_report_endpoint_url": "https://element.io/bugreports/submit", + "showLabsSettings": false, + "piwik": { + "url": "https://piwik.riot.im/", + "siteId": 1, + "policyUrl": "https://element.io/cookie-policy" + }, + "roomDirectory": { + "servers": [ + "matrix.org" + ] + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false, + "https://matrix-client.matrix.org": false + }, + "terms_and_conditions_links": [ + { + "url": "https://element.io/privacy", + "text": "Privacy Policy" + }, + { + "url": "https://element.io/cookie-policy", + "text": "Cookie Policy" + } + ] +} diff --git a/element.io/app/deploy.py b/element.io/app/deploy.py new file mode 100755 index 0000000..33aa0af --- /dev/null +++ b/element.io/app/deploy.py @@ -0,0 +1,191 @@ +#!/usr/bin/env python +# +# download and unpack a riot-web tarball. +# +# Allows `bundles` to be extracted to a common directory, and a link to +# config.json to be added. + +from __future__ import print_function + +import argparse +import os +import os.path +import subprocess +import sys +import tarfile +import shutil +import glob + +try: + # python3 + from urllib.request import urlretrieve +except ImportError: + # python2 + from urllib import urlretrieve + +class DeployException(Exception): + pass + +def create_relative_symlink(linkname, target): + relpath = os.path.relpath(target, os.path.dirname(linkname)) + print ("Symlink %s -> %s" % (linkname, relpath)) + os.symlink(relpath, linkname) + + +def move_bundles(source, dest): + """Move the contents of the 'bundles' directory to a common dir + + We check that we will not be overwriting anything before we proceed. + + Args: + source (str): path to 'bundles' within the extracted tarball + dest (str): target common directory + """ + + if not os.path.isdir(dest): + os.mkdir(dest) + + # build a map from source to destination, checking for non-existence as we go. + renames = {} + for f in os.listdir(source): + dst = os.path.join(dest, f) + if os.path.exists(dst): + print ( + "Skipping bundle. The bundle includes '%s' which we have previously deployed." + % f + ) + else: + renames[os.path.join(source, f)] = dst + + for (src, dst) in renames.iteritems(): + print ("Move %s -> %s" % (src, dst)) + os.rename(src, dst) + +class Deployer: + def __init__(self): + self.packages_path = "." + self.bundles_path = None + self.should_clean = False + # filename -> symlink path e.g 'config.localhost.json' => '../localhost/config.json' + self.symlink_paths = {} + self.verify_signature = True + + def deploy(self, tarball, extract_path): + """Download a tarball if necessary, and unpack it + + Returns: + (str) the path to the unpacked deployment + """ + print("Deploying %s to %s" % (tarball, extract_path)) + + name_str = os.path.basename(tarball).replace(".tar.gz", "") + extracted_dir = os.path.join(extract_path, name_str) + if os.path.exists(extracted_dir): + raise DeployException('Cannot unpack %s: %s already exists' % ( + tarball, extracted_dir)) + + downloaded = False + if tarball.startswith("http://") or tarball.startswith("https://"): + tarball = self.download_and_verify(tarball) + print("Downloaded file: %s" % tarball) + downloaded = True + + try: + with tarfile.open(tarball) as tar: + tar.extractall(extract_path) + finally: + if self.should_clean and downloaded: + os.remove(tarball) + + print ("Extracted into: %s" % extracted_dir) + + if self.symlink_paths: + for link_path, file_path in self.symlink_paths.iteritems(): + create_relative_symlink( + target=file_path, + linkname=os.path.join(extracted_dir, link_path) + ) + + if self.bundles_path: + extracted_bundles = os.path.join(extracted_dir, 'bundles') + move_bundles(source=extracted_bundles, dest=self.bundles_path) + + # replace the extracted_bundles dir (which may not be empty if some + # bundles were skipped) with a symlink to the common dir. + shutil.rmtree(extracted_bundles) + create_relative_symlink( + target=self.bundles_path, + linkname=extracted_bundles, + ) + return extracted_dir + + def download_and_verify(self, url): + tarball = self.download_file(url) + + if self.verify_signature: + sigfile = self.download_file(url + ".asc") + subprocess.check_call(["gpg", "--verify", sigfile, tarball]) + + return tarball + + def download_file(self, url): + if not os.path.isdir(self.packages_path): + os.mkdir(self.packages_path) + local_filename = os.path.join(self.packages_path, + url.split('/')[-1]) + sys.stdout.write("Downloading %s -> %s..." % (url, local_filename)) + sys.stdout.flush() + urlretrieve(url, local_filename) + print ("Done") + return local_filename + +if __name__ == "__main__": + parser = argparse.ArgumentParser("Deploy a Riot build on a web server.") + parser.add_argument( + "-p", "--packages-dir", default="./packages", help=( + "The directory to download the tarball into. (Default: '%(default)s')" + ) + ) + parser.add_argument( + "-e", "--extract-path", default="./deploys", help=( + "The location to extract .tar.gz files to. (Default: '%(default)s')" + ) + ) + parser.add_argument( + "-b", "--bundles-dir", nargs='?', default="./bundles", help=( + "A directory to move the contents of the 'bundles' directory to. A \ + symlink to the bundles directory will also be written inside the \ + extracted tarball. Example: './bundles'. \ + (Default: '%(default)s')" + ) + ) + parser.add_argument( + "-c", "--clean", action="store_true", default=False, help=( + "Remove .tar.gz files after they have been downloaded and extracted. \ + (Default: %(default)s)" + ) + ) + parser.add_argument( + "--include", nargs='*', default=['./config*.json'], help=( + "Symlink these files into the root of the deployed tarball. \ + Useful for config files and home pages. Supports glob syntax. \ + (Default: '%(default)s')" + ) + ) + parser.add_argument( + "tarball", help=( + "filename of tarball, or URL to download." + ), + ) + + args = parser.parse_args() + + deployer = Deployer() + deployer.packages_path = args.packages_dir + deployer.bundles_path = args.bundles_dir + deployer.should_clean = args.clean + + for include in args.include: + deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) }) + + deployer.deploy(args.tarball, args.extract_path) diff --git a/element.io/develop/config.json b/element.io/develop/config.json new file mode 100644 index 0000000..bcf6142 --- /dev/null +++ b/element.io/develop/config.json @@ -0,0 +1,40 @@ +{ + "default_server_name": "matrix.org", + "brand": "Element", + "integrations_ui_url": "https://scalar-staging.vector.im/", + "integrations_rest_url": "https://scalar-staging.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web", + "bug_report_endpoint_url": "https://element.io/bugreports/submit", + "showLabsSettings": true, + "piwik": { + "url": "https://piwik.riot.im/", + "siteId": 1, + "policyUrl": "https://element.io/cookie-policy" + }, + "roomDirectory": { + "servers": [ + "matrix.org" + ] + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false, + "https://matrix-client.matrix.org": false + }, + "terms_and_conditions_links": [ + { + "url": "https://element.io/privacy", + "text": "Privacy Policy" + }, + { + "url": "https://element.io/cookie-policy", + "text": "Cookie Policy" + } + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..fea84b0 --- /dev/null +++ b/package.json @@ -0,0 +1,173 @@ +{ + "name": "riot-web", + "productName": "Riot", + "version": "1.7.12", + "description": "A feature-rich client for Matrix.org", + "author": "New Vector Ltd.", + "repository": { + "type": "git", + "url": "https://github.com/vector-im/riot-web" + }, + "license": "Apache-2.0", + "files": [ + "lib", + "res", + "src", + "webpack.config.js", + "scripts", + "docs", + "release.sh", + "deploy", + "CHANGELOG.md", + "CONTRIBUTING.rst", + "LICENSE", + "README.md", + "AUTHORS.rst", + "package.json", + "contribute.json" + ], + "style": "bundle.css", + "scripts": { + "i18n": "matrix-gen-i18n", + "prunei18n": "matrix-prune-i18n", + "diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && yarn i18n && node scripts/compare-file.js src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json", + "reskindex": "reskindex -h src/header", + "reskindex:watch": "reskindex -h src/header -w", + "reskindex:watch-react": "node scripts/yarn-sub.js matrix-react-sdk reskindex:watch", + "clean": "rimraf lib webapp", + "build": "yarn clean && yarn build:genfiles && yarn build:compile && yarn build:types && yarn build:bundle", + "build-stats": "yarn clean && yarn build:genfiles && yarn build:compile && yarn build:types && yarn build:bundle-stats", + "build:jitsi": "node scripts/build-jitsi.js", + "build:res": "node scripts/copy-res.js", + "build:genfiles": "yarn reskindex && yarn build:res && yarn build:jitsi", + "build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js", + "build:compile": "babel -d lib --verbose --extensions \".ts,.js,.tsx\" src", + "build:bundle": "webpack --progress --bail --mode production", + "build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json", + "build:types": "tsc --emitDeclarationOnly --jsx react", + "dist": "scripts/package.sh", + "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"", + "start:res": "yarn build:jitsi && node scripts/copy-res.js -w", + "start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development", + "lint": "yarn lint:types && yarn lint:js && yarn lint:style", + "lint:js": "eslint src", + "lint:types": "tsc --noEmit --jsx react", + "lint:style": "stylelint 'res/css/**/*.scss'", + "test": "jest" + }, + "dependencies": { + "browser-request": "^0.3.3", + "gfm.css": "^1.1.2", + "highlight.js": "^9.13.1", + "jsrsasign": "^9.1.5", + "matrix-js-sdk": "9.0.1", + "matrix-react-sdk": "3.7.1", + "matrix-widget-api": "^0.1.0-beta.5", + "olm": "https://packages.matrix.org/npm/olm/olm-3.2.1.tgz", + "prop-types": "^15.7.2", + "react": "^16.9.0", + "react-dom": "^16.9.0", + "sanitize-html": "github:apostrophecms/sanitize-html#3c7f93f2058f696f5359e3e58d464161647226db", + "ua-parser-js": "^0.7.19", + "url": "^0.11.0" + }, + "devDependencies": { + "@babel/cli": "^7.7.5", + "@babel/core": "^7.7.5", + "@babel/plugin-proposal-class-properties": "^7.7.4", + "@babel/plugin-proposal-decorators": "^7.7.4", + "@babel/plugin-proposal-export-default-from": "^7.7.4", + "@babel/plugin-proposal-numeric-separator": "^7.7.4", + "@babel/plugin-proposal-object-rest-spread": "^7.7.4", + "@babel/plugin-syntax-dynamic-import": "^7.7.4", + "@babel/plugin-transform-flow-comments": "^7.7.4", + "@babel/plugin-transform-runtime": "^7.7.6", + "@babel/preset-env": "^7.7.6", + "@babel/preset-flow": "^7.7.4", + "@babel/preset-react": "^7.7.4", + "@babel/preset-typescript": "^7.7.4", + "@babel/register": "^7.7.4", + "@babel/runtime": "^7.7.6", + "@types/flux": "^3.1.9", + "@types/modernizr": "^3.5.3", + "@types/node": "^12.12.41", + "@types/react": "16.9", + "@types/react-dom": "^16.9.4", + "@types/sanitize-html": "^1.23.3", + "autoprefixer": "^9.7.3", + "babel-eslint": "^10.0.3", + "babel-jest": "^24.9.0", + "babel-loader": "^8.0.6", + "canvas": "^2.6.1", + "chokidar": "^3.3.1", + "concurrently": "^4.0.1", + "cpx": "^1.3.2", + "css-loader": "^3.3.2", + "eslint": "7.3.1", + "eslint-config-matrix-org": "^0.1.2", + "eslint-plugin-babel": "^4.1.2", + "eslint-plugin-flowtype": "^2.50.3", + "eslint-plugin-react": "^7.11.1", + "eslint-plugin-react-hooks": "^2.2.0", + "extract-text-webpack-plugin": "^4.0.0-beta.0", + "fake-indexeddb": "^3.0.0", + "file-loader": "^5.0.2", + "fs-extra": "^0.30.0", + "html-webpack-plugin": "^3.2.0", + "jest": "^26.5.2", + "jest-environment-jsdom-sixteen": "^1.0.3", + "json-loader": "^0.5.3", + "loader-utils": "^1.2.3", + "matrix-mock-request": "^1.2.3", + "matrix-react-test-utils": "^0.2.2", + "mini-css-extract-plugin": "^0.8.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "modernizr": "^3.6.0", + "node-fetch": "^2.6.0", + "optimize-css-assets-webpack-plugin": "^5.0.3", + "postcss-easings": "^2.0.0", + "postcss-extend": "^1.0.5", + "postcss-hexrgba": "^2.0.0", + "postcss-import": "^12.0.1", + "postcss-loader": "^3.0.0", + "postcss-mixins": "^6.2.3", + "postcss-nested": "^4.2.1", + "postcss-preset-env": "^6.7.0", + "postcss-scss": "^2.0.0", + "postcss-simple-vars": "^5.0.2", + "postcss-strip-inline-comments": "^0.1.5", + "rimraf": "^2.4.3", + "shell-escape": "^0.2.0", + "simple-proxy-agent": "^1.1.0", + "stylelint": "^12.0.1", + "terser-webpack-plugin": "^2.3.0", + "typescript": "^3.7.3", + "webpack": "^4.41.2", + "webpack-cli": "^3.3.10", + "webpack-dev-server": "^3.9.0" + }, + "jest": { + "testEnvironment": "jest-environment-jsdom-sixteen", + "testMatch": [ + "/test/**/*-test.js" + ], + "setupFilesAfterEnv": [ + "/node_modules/matrix-react-sdk/test/setupTests.js" + ], + "moduleNameMapper": { + "\\.(css|scss)$": "/__mocks__/cssMock.js", + "\\.(gif|png|svg|ttf|woff2)$": "/node_modules/matrix-react-sdk/__mocks__/imageMock.js", + "\\$webapp/i18n/languages.json": "/node_modules/matrix-react-sdk/__mocks__/languages.json", + "^browser-request$": "/node_modules/matrix-react-sdk/__mocks__/browser-request.js", + "^react$": "/node_modules/react", + "^react-dom$": "/node_modules/react-dom", + "^matrix-js-sdk$": "/node_modules/matrix-js-sdk/src", + "^matrix-react-sdk$": "/node_modules/matrix-react-sdk/src" + }, + "transformIgnorePatterns": [ + "/node_modules/(?!matrix-js-sdk).+$", + "/node_modules/(?!matrix-react-sdk).+$" + ] + } +} diff --git a/release.sh b/release.sh new file mode 100755 index 0000000..a5fb900 --- /dev/null +++ b/release.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# +# Script to perform a release of element-web. +# +# Requires github-changelog-generator; to install, do +# pip install git+https://github.com/matrix-org/github-changelog-generator.git + +set -e + +orig_args=$@ + +# chomp any args starting with '-' as these need to go +# through to the release script and otherwise we'll get +# confused about what the version arg is. +while [[ "$1" == -* ]]; do + shift +done + +cd `dirname $0` + +for i in matrix-js-sdk matrix-react-sdk +do + echo "Checking version of $i..." + depver=`cat package.json | jq -r .dependencies[\"$i\"]` + latestver=`yarn info -s $i dist-tags.next` + if [ "$depver" != "$latestver" ] + then + echo "The latest version of $i is $latestver but package.json depends on $depver." + echo -n "Type 'u' to auto-upgrade, 'c' to continue anyway, or 'a' to abort:" + read resp + if [ "$resp" != "u" ] && [ "$resp" != "c" ] + then + echo "Aborting." + exit 1 + fi + if [ "$resp" == "u" ] + then + echo "Upgrading $i to $latestver..." + yarn add -E $i@$latestver + git add -u + git commit -m "Upgrade $i to $latestver" + fi + fi +done + +./node_modules/matrix-js-sdk/release.sh -u vector-im -z "$orig_args" + +release="${1#v}" +tag="v${release}" +prerelease=0 +# We check if this build is a prerelease by looking to +# see if the version has a hyphen in it. Crude, +# but semver doesn't support postreleases so anything +# with a hyphen is a prerelease. +echo $release | grep -q '-' && prerelease=1 + +if [ $prerelease -eq 0 ] +then + # For a release, reset SDK deps back to the `develop` branch. + for i in matrix-js-sdk matrix-react-sdk + do + echo "Resetting $i to develop branch..." + yarn add github:matrix-org/$i#develop + git add -u + git commit -m "Reset $i back to develop branch" + done + git push origin develop +fi diff --git a/release_config.yaml b/release_config.yaml new file mode 100644 index 0000000..49d7ccd --- /dev/null +++ b/release_config.yaml @@ -0,0 +1 @@ +signing_id: releases@riot.im diff --git a/res/css/structures/ErrorView.scss b/res/css/structures/ErrorView.scss new file mode 100644 index 0000000..f75ee69 --- /dev/null +++ b/res/css/structures/ErrorView.scss @@ -0,0 +1,101 @@ +/* +Copyright 2020 New Vector Ltd + +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. +*/ + +// import font-size variables manually, ideally this scss would get loaded by the theme which has all variables in context +@import "../../../node_modules/matrix-react-sdk/res/css/_font-sizes.scss"; + +.mx_ErrorView { + background: #c5e0f7; + background: -moz-linear-gradient(top, #c5e0f7 0%, #ffffff 100%); + background: -webkit-linear-gradient(top, #c5e0f7 0%, #ffffff 100%); + background: linear-gradient(to bottom, #c5e0f7 0%, #ffffff 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c5e0f7', endColorstr='#ffffff',GradientType=0 ); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + width: 100%; + min-height: 100%; + height: auto; + color: #000; + + .mx_ErrorView_container { + max-width: 680px; + margin: auto; + } + + .mx_Button { + border: 0; + border-radius: 4px; + font-size: $font-18px; + margin-left: 4px; + margin-right: 4px; + min-width: 80px; + background-color: #03B381; + color: #fff; + cursor: pointer; + padding: 12px 22px; + word-break: break-word; + text-decoration: none; + } + + .mx_Center { + justify-content: center; + } + + .mx_HomePage_header { + color: #2E2F32; + display: flex; + align-items: center; + justify-content: center; + } + + font-size: $font-16px; + h1 { + font-size: $font-32px; + } + h2 { + font-size: $font-24px; + color: #000; + } + + .mx_HomePage_col { + display: flex; + flex-direction: row; + } + + .mx_HomePage_row { + flex: 1 1 0; + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + + .mx_HomePage_logo { + margin: auto 20px auto 0; + } + + h1, h2 { + font-weight: 600; + margin-bottom: 32px; + } + + .mx_Spacer { + margin-top: 24px; + } + + .mx_FooterLink { + color: #368BD6; + text-decoration: none; + } +} diff --git a/res/decoder-ring/datatypes.js b/res/decoder-ring/datatypes.js new file mode 100644 index 0000000..93a779e --- /dev/null +++ b/res/decoder-ring/datatypes.js @@ -0,0 +1,107 @@ +/* + * Quick-n-dirty algebraic datatypes. + * + * These let us handle the possibility of failure without having to constantly write code to check for it. + * We can apply all of the transformations we need as if the data is present using `map`. + * If there's a None, or a FetchError, or a Pending, those are left untouched. + * + * I've used perhaps an odd bit of terminology from scalaz in `fold`. This is basically a `switch` statement: + * You pass it a set of functions to handle the various different states of the datatype, and if it finds the + * function it'll call it on its value. + * + * It's handy to have this in functional style when dealing with React as we can dispatch different ways of rendering + * really simply: + * ``` + * bundleFetchStatus.fold({ + * some: (fetchStatus) => , + * }), + * ``` + */ + + +class Optional { + static from(value) { + return value && Some.of(value) || None; + } + map(f) { + return this; + } + flatMap(f) { + return this; + } + fold({ none }) { + return none && none(); + } +} +class Some extends Optional { + constructor(value) { + super(); + this.value = value; + } + map(f) { + return Some.of(f(this.value)); + } + flatMap(f) { + return f(this.value); + } + fold({ some }) { + return some && some(this.value); + } + static of(value) { + return new Some(value); + } +} +const None = new Optional(); + +class FetchStatus { + constructor(opt = {}) { + this.opt = { at: Date.now(), ...opt }; + } + map(f) { + return this; + } + flatMap(f) { + return this; + } +} +class Success extends FetchStatus { + static of(value) { + return new Success(value); + } + constructor(value, opt) { + super(opt); + this.value = value; + } + map(f) { + return new Success(f(this.value), this.opt); + } + flatMap(f) { + return f(this.value, this.opt); + } + fold({ success }) { + return success instanceof Function ? success(this.value, this.opt) : undefined; + } +} +class Pending extends FetchStatus { + static of(opt) { + return new Pending(opt); + } + constructor(opt) { + super(opt); + } + fold({ pending }) { + return pending instanceof Function ? pending(this.opt) : undefined; + } +} +class FetchError extends FetchStatus { + static of(reason, opt) { + return new FetchError(reason, opt); + } + constructor(reason, opt) { + super(opt); + this.reason = reason; + } + fold({ error }) { + return error instanceof Function ? error(this.reason, this.opt) : undefined; + } +} diff --git a/res/decoder-ring/decoder.js b/res/decoder-ring/decoder.js new file mode 100644 index 0000000..b0cbd3c --- /dev/null +++ b/res/decoder-ring/decoder.js @@ -0,0 +1,336 @@ +class StartupError extends Error {} + +/* + * We need to know the bundle path before we can fetch the sourcemap files. In a production environment, we can guess + * it using this. + */ +async function getBundleName(baseUrl) { + const res = await fetch(new URL("index.html", baseUrl).toString()); + if (!res.ok) { + throw new StartupError(`Couldn't fetch index.html to prefill bundle; ${res.status} ${res.statusText}`); + } + const index = await res.text(); + return index.split("\n").map((line) => + line.match(/ + + + + + + + + + + + +

Decoder ring

+ Waiting for javascript to run... + + + diff --git a/res/manifest.json b/res/manifest.json new file mode 100644 index 0000000..6946559 --- /dev/null +++ b/res/manifest.json @@ -0,0 +1,85 @@ +{ + "name": "Element", + "short_name": "Element", + "display": "standalone", + "theme_color": "#76CFA6", + "start_url": "index.html", + "icons": [ + { + "src": "/vector-icons/44.png", + "sizes": "44x44", + "type": "image/png" + }, + { + "src": "/vector-icons/1240x600.png", + "sizes": "1240x600", + "type": "image/png" + }, + { + "src": "/vector-icons/300.png", + "sizes": "300x300", + "type": "image/png" + }, + { + "src": "/vector-icons/150.png", + "sizes": "150x150", + "type": "image/png" + }, + { + "src": "/vector-icons/88.png", + "sizes": "88x88", + "type": "image/png" + }, + { + "src": "/vector-icons/24.png", + "sizes": "24x24", + "type": "image/png" + }, + { + "src": "/vector-icons/50.png", + "sizes": "50x50", + "type": "image/png" + }, + { + "src": "/vector-icons/620x300.png", + "sizes": "620x300", + "type": "image/png" + }, + { + "src": "/vector-icons/1024.png", + "sizes": "1024x1024", + "type": "image/png" + }, + { + "src": "/vector-icons/180.png", + "sizes": "180x180", + "type": "image/png" + }, + { + "src": "/vector-icons/152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "/vector-icons/120.png", + "sizes": "120x120", + "type": "image/png" + }, + { + "src": "/vector-icons/76.png", + "sizes": "76x76", + "type": "image/png" + } + ], + "related_applications": [ + { + "platform": "play", + "url": "https://play.google.com/store/apps/details?id=im.vector.app", + "id": "im.vector.app" + }, + { + "platform": "itunes", + "url": "https://apps.apple.com/app/vector/id1083446067" + } + ] +} diff --git a/res/sw.js b/res/sw.js new file mode 100644 index 0000000..dfe665a --- /dev/null +++ b/res/sw.js @@ -0,0 +1 @@ +self.addEventListener('fetch', () => {}); diff --git a/res/themes/element/img/backgrounds/lake.jpg b/res/themes/element/img/backgrounds/lake.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb3d19a7cc9d6134a04ad6c4fc796355242ee435 GIT binary patch literal 610431 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

-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�Gr>NMbtZCq&?;&dMAd8qptvbmB>AFy#=Gn)5)HFxbqtkt9b z%N$*d`o^Ly>+Mr?WY6+DZ^_9SimzbIu?VAUxYdgM&{!{s6k1W$mhpY za_3biqy^{@KAAZoqU4;F_|t~E+6!9;>Y(heNA+$F-ON#=_#U2160ILH%L|EHFId~q zDPXUymRz{CIuGDC_|``URul+y?+Y=Cr0fU&rM|a4GOKCPL3GKrBuL3qUgT|gh1)Ibj!JH=tvW}( z$UePGr>&^3TA3w6-utwAirZM47DQ;s+qr5yjUXV?6~hvy2oXU zp&6ci6Oz+YN9*~7b{=LbY{3jApznojMa#|&!BA_9cd`9dp}K(Q0?yLfOdPaPXM0H=DdkGcP(MpXwob{*fW_v_t0-6*{|Ri2;#c|l8=hgFdmBokDfvqB$h z=2TCPmIXns3!1V5E8

ZCh2sZ4e*My&0@H>z6FR)VrflgJMHtQAfOtKA6e!g@y?} z=TMOntl6)*SuY8}#kc;Aw>TcVRjqMcqIVR^QjNQ$q~?)+YK>e|-Ze25LKu){SWa8o zk<}4m9ZH?qTU`AUOz+NYBFa?E)h_gUn1DLPoYGAet~& z35jb%gyq-qC^-k(z_}<~Y4^MV(kzmXr@|EJLBVN-CWeEKTTL-w8ZC=RMnlZAX@J*^ zV7ETGHu>+Jd(C6Ek3{TIeDxOv+q!9wR=szH&tF;2s#hHun<@3$WA$*{aZS72T1Mwh zxBzlO^_>vmg#`0rT<)q+>FUiXhm9j2oe59xJQd>EKL00oE^ra2_BXCSgG(DiJHh14 z>sr8XD_Ow=$*YJW&fd0+A|d@zgweTTEXL6C)-^~~XikiW#?F6S?1`gW?NYOA)k2G3 z*6ZSaH^ITq{{ZwAO=HA>?_@4=567g@cMfLZkP*LOGQC6)*f@l7^rsAdn)EL@@;&$Z z=R1WuY@w&EUonS4nXits-S3+%eO)1m%LOz})9C~F-YU2OKvUoKtgy1(d9ggg03|Uo zt3x*baRsb-oo#qfE8_TEU%sM;`Hdab$PRp1$M%Dyg_MhX`i9gQV*~kb<0VAXvbs*+ zU#nyF&4kC~zw{{Cv@Q*N?cs&ZVwZCsS)5_{@uD}obtDEbA&=$awN{)nwB@EmQ?$=~ zg1>l;)Q*r6^=m~M#$8SmO{W%(um2ubTRGvp0VPy9a+U+*`9m^}+C`@(kXpD)0|n^P z!>9&0OPX!8vZdRbEQWh55`!<>zCFEg$8Ggy=VtxJ#elJ;?Xm<&kau5Gcs($1wDH-bD$>pS zgslSn_@|W-d^vhT&0k%rVVQsBvlMrRZ*gm}iR(kgL&=r(sXn_Zdju^sM_<5_dHXy> z@55O5Lq;>M;CHxTAg$eRT+o_B_BMXiZ0%&qD)~{J*!k$4CfoQ)3SIZ2o>#}C^-JDT zY)AT1gVk#M+98EKs#rfTYiByL?MLX~3VyfGoa(Wkvt zY0TxH_9LUg`ph2}U#R{#F>cBdQv6sjj_F$wd5BVtuctaqM(DYm`n>?8-sL*xoAcE26dnbFihxy3238P|8{D1jB81!Qn=%V*EdAx?LyI0>?h(H~Is`J} z$2}PJjqJ`LHM--cAtUbk{S)JqCpjws2INmS{G>8_`82uDa7~|W%)7Pcm+1%zwV>mj zbVZBg;r)aD=I?)8e=U(t%nkeICSJZgr5Q1Lo3mh(9rc#0m%Pcx!##iJ{6{$c?anr8 ztHp*pT{V_QO*TnpqKyF=kj`@pjtYS)g?7bGMEh!5%x8?QgX_)!ig~avBH@q%UQORt z{%re3rs%rl+sa^9&xd+*c#XSk@2S>?h0(E(v1+4%k;AcjaF_{-q{}f3cbMC8-1eRN ztTk?{|F{}smhM0O-O?_5y3dLIvxRFz<& zT(o?|F$h$xh*Eaiv>EKMsPQ=M#_dDsC;BhlF9ZXtX}Np;80GrplwAaNXZ8wv%j4Hl z`YSK*oL-R_>rjUBxHEx63ZIaNNTX0=%3rEhPAB-~IBgku(;WL|70NNVhshWW+=i*3 zDuqIJ1kx}rxKEJ-1>0yxOIyUfI<m^hA{?wr6B&g^3+`#;pVRG4YOzTxPI{S$F!igfsP43q4STF0tqOD$Vx` z;!gU4sINa{ytNs(;VjhQtIq}&2cP7zTtwB(y!~bwwczs;$d2yW!%F znl~swd?6&5_IJY>1)`#pxq}fI4ikkPB#Uon@5~c%6(#4G03eqF$wVWBf2*iYXf~m> zfo25WkD4R~c_?Qq&p+v{^^EzEfsG4*1oT6It*8N}tJgIbqtsh6l|qR&1a?$JIYzqo zX??Y@ao_CKG56`KU?jiu(>q3l|6!^L?LpmkaKP85LUvDwO0KdUv~&C5`M+-6IU&gn z#w`DQdYpJ&>zZgcap=!_Ph^}pijBDS%jq2q_Qgk_+AyR11UoVfLWx$Wb}Sc&gSGqT zSEW1h(<6OGs@C18qLLm^$(XoE7q?mxFC8hwRKH{#_bXF6$q_H2KC!{Vf~Qf6pGvov z3yVp%Ro{_46VhFGTEqQpu$ym*vkvx(_Al*wxVKe9!Ib7I3FIK;($^B5@hY?)Yc6o| zmDFRu6U>WC^s_8yVI3qTfbP_P?8F&a{ZCbqSo@;tz>Z5wI&jOUxh{onj$W=-uYV5y zh)Ij2J`K`+e)eH5ap6~V-5u8gYQyDee2v?oAg0bMCGWUntG{$*5 zcIKV?_}3p3hT!DgQUi(|W*ki#&1gH_Ax3&DugWOa(!IpqgbfQDYEs^p!5~E1&xgKj z*N>0)n&GYRN|SAdb9n}pKn&Hr$9L)Qb?_bGHcgYJpPJ5GkALeC# zhkm8pwmhP))Uq-2%IMAQwtEM77T00ebg@jTHE!LY+ zd*_#wxtfMZ7Om;s&Mfl9jFWU7e1Fuw){WVAW=*=jB(IQ3KER>69Ozq=G)pDjj!5@M zn+m)@UsKGM2#=K$@!cYFW*YG#ZE0FWE}mEnR2O?vgAPSyT9xpKDVe@~*%}v|=6)Wt zVAJi67#2}hIqJcwPfYC$epT$i;wTB)wH|4n4d^!6>caiI^&c12;}AX8#HGa)?S7lP z`c2F~j_-zX?tLZiADhXJbDg)nr)DFJHeO%(UD6}eu&QgpTHTJwY?yX$1!u%gq067A zdP}3|M|#>>K{p;a`fx?axt`?V5ldMU_ddukux zgHeJh%PDWD0S5&W)M8!-)!cS06V;hCYS?i3GH!w+_1USMx}sf7FTOtS^OeR}o5Vi| zrY{R(RG+U&!#mr0vZKXq6(VwxzV7;G*rPQrt1t-!n|iuGQf6hO!|}%|ojp<5wm3o! z@5|pHJdLw&*!P`IdbCZyM;zr(At+&@GB2;%K3N|>88&OQF`+@PkMpcwAGz|l?1{wy z3s}DKBJ&r?Y3(0<=Sp91Uu)2U4srtGCs);~Kqq)W#O!v(M`}Z$+C;;&vj}_9$o#c` zPL4EZ2=^bCF>;WIGk=lc=jLSK@N}E1wpt92Gg+C@?YSB03x8jZI zsdZG4zotc3oINBmER`MQu}{o?9AZGcbO|dpbt#l!1&;P~@w2ar9hY9z={Aq6tCE(+ zE!JmDbB${CUnz)5^Km`rXb}&(7vwrAg z3q&$~9P8|Gnoe?;Hy9p{)W-@_M=*v{UCz0i@|1ruh}fdep7wc!1BsKZiS))uf6`bt zTy=^$;2{>ML5;AOJaq|_4SweZlXmNvVCtoxue{Xo;)HloyeTo4X0btfAy)i&GQx}R zjJZ*Ob_OS=ztxdVL9SE_1tEC_lCf%EtNzTH|Irwt7k~H%KBPKwct6_9Iz|`D_p{Tf z&v?s5Oc%{;akL71>uw!Vd-a3Xq%YfPz(wdwhjFCa1B_Y(r>YCfNNtI#ihhJSd3@xb zi+V-^b^gYxWWiEe7;RXG+#J}Nk4p0#YdpT_3@CarEq&Tr#X`18-c@!Sz=yTC%ZOSxCuTS+44_b$@ zM561 zp3Q5WNha6Vyfwfrty<#1^%b839qV%avzxUt)wm{YIADI9!{NKG0gk0Ih-aq1=?dl5 z?3U(Nip*M5dQ%3MUxx(<*{1;38jdLjx2pT)J9gmunqE*NJ1CQW%b9#U*X`paZTx63 z(I1nWKg6C;9bifIFq7zygYH_iUel8LIAy1A!xkzNyeJ?!7)2AB{?yt5;`l7m>xU!w zYK&b~vm~SEX4{$i7B|6uU8UC+mZ^cG9oSj(-u!pC(9Y$_Jbpv$slN}Eo9`#yS>Fmwr30O!>wwW2%N^N^fgtYP zk8lan>j}$ggskaaNpNUN_j1;z2OO`XV?K{qYtbAgC{&%rdu75_0rhL_Cs>~=4dbUu zS|x0@&UG3udeHD6I%`M;JGFkz_OvobUJLsWsXZRVG~bnp*)lSRHlePO=Go*k!q2n( zVz6k-X7gjvEhiT;VjuyfPTD{!r+eRD)he%?S#7nylUjY2*4l>2)$7N;^BA!upbDIE zkz*WV)e#(EUh1@ZmDOOQ8p-O0%k*APoua?xemm$GQlO;eoQ~+@riN4LbE>mKJMD1* z9)h6I9pB4^%@f>oUJYHUIp7@;R@K1B#$?#1HQL_^g0eXBsw@3B?vS7( zhi7?}b@Ai-qCZ z8A?r-W20d-`gXInUO$HtI%=NN_w)$8gAn!(H~GfT zen@zEJ#(VSzs_9PE3kgbY@MO9Az*oawMZ$?;??o0af669{~CV@wt~0Il}5DgCE9xS zK$DB>{Q8)l2`)++h190`=oz|M>)5sa`(9#M5!}$?jcG~nV;HZ|Oy~nlWkqW=(ziqO zj$v=>CexRwmK9r?0^~=k;{Vldf)z?bJ!_=(&~Y* zG#7H8ArB9oZRsv;X-rX;SM;8OLJK}<&#yY#8TO_mkp-=-`gEO7P5=63rLwK z+qXLQBq(^p2K#45r)_4Urh|^|grpubEH|4l9H;9@FHOK*?sHWuUwu41fv-POkHK{4 zysu~b%pG|=F(i|NL#L|KFrWFiFY&4#nHjg<@S7_S>?{n4VGHk1nJFtZ%OE}Mva)JE zRJQMs3=gkNT->a}*@nR!kx%Gh_E*d;nUv}y&u3Tk8|GJYu$UD}IoYXU;#G>y(o4+| z>LWLr(cPwgYlAMbytU-B_?VP=slH{w8kRKjxwK4ej^B$T5Atme}*Y~k;o+XHvbun8*DVKyGwH4iQ&$vCZ_`Smy#t)9K z%tz-{YGHj@MS@?ic$}+tZ60u7M4os2{4ztcdijZq1%zIwx#Xn1gUfj7J1_|dd>va8$!bbJYKX_=1X(nN= zsm*v#rH<(2gv1wB>rJ0rPrIa)J12o*kUsu}G7xmfS@^I&StU{+Fuj3|Wv_x((73qy z-ZT?8FjS1Qub0Mp7c9b~XcGOEQQP)JF~C!5oLgBNQ>&*Z+coS}TJcQg8)tji30i}{#|1!1h7ESr@`@>E(Bltv#J<%W>G*yzw$b*QY8)n~4n`_RMM z1sPgsT!qpJYV+%9=MI<=aah+=<&?syas_9ju}Sq4J?(6o{hj+pEY7ie9&0s2j{k9O z*tQM~`%U^mCOD5+lo`ySrPiJ=F=R!a^sjFH$8cN;uI@?(PZ$w7besjWrPdO4LXP)e z?>ax;B32mWCF!D*1`UgL^1=a55FX7@u9*Nm@Y>(dJN_S6opFMpNvor0Tt9Ua-gP?P zYTNG(j1tRhg_LwME%xRSI^iTxB=r7|clG7KL_kFkEWfpJs%g*L1qGGXZtBC+KUsFi zj94+iaLM@Q$|v)feOMXJ;MLi~kBGSacM3nMI^*GlE95d)Q$jD?%?xOibxy&V z_T-8Z?LEKMe#{!l6uxMc<}oFi3HitgqLqOMX-n#xp*`2wqG+G%k!Ny;C->^%o9&gQ z7uCE}=M02@vIXntHrjo1e1(YQ9toDW`K zbO>k5m|QJAfl`fUZ=pDAjzejW1nViZd}4^P{Xvxqyz*;DM5rEo1bzv{i<|P%mS&&J*wO%H;WHhQyH~G zC)d%abjnP#<9^d3E~<0pUky)=gSApkqaggtjPFYY=F0mPE0cP_?HXOG1rPNcc*1;@0yPBX6Ll zy4FrQ|EnqZBm<*Xp_aSPB~7`M7|=+yI&}{#%w%~U-Mn&Ke1YEVjb36Ke(v1l&tIHn zv|%Vis#VE?vC{d^6{{mXj4?H@gY;tl{iSW3gfq@09ikDGPC$-bJ_e}`n)JA5-HPwB zuEr~X95p%aCR1urrpcxaYnXl0_6H?Iy9p{pWAmwP5!pr+{?#6jSBc4+z5C+Si`hw2 zdqXyWqD!fb^G5&?R?3X!FckPiDKnu3gWY$=nOx{ z=#SU<=R{%Ot~`XmrYFr`wwhou;0`QlNmmMr9A&QRIbUn|^K1B><3fFv9hpi*y6<^Q z)}Z}iyHe%2rKXWb84yKbUS(K}z^$)_dwk9G%Ig)Fx6Oq;sfBBk2yuJjH^}KC8UpdmDS10{FpU=WHYl`HT+wkAII=_UhCHp zUV&teI@0XP3+1@9Q=5Wh5dqq)<9kmF_W`3)HM8t^lPg^31mc^#IwG1F4LDR7dg;8x zHHJATap)v0mwcfwC)G~fM^Hk6Hv?U9SMxtRZ`#dlA+%~G`#crn>gT}9x z7Xou%eoe%^1;-vgr#Y3wnwdp0y{N>B?xWiu4TaSo(B~uZp95ldpbOiwio^nP3f#A2G~F7XIvC z5o=n!{2doHm}`{&J$!VfX)cf>fwLK^4k@0U8QWGWf_<7tVrPl4pb>~K`(1_bb`X67AFC%b_AJQQvZgwVK>uCK^uZp!C0}n3Y zUZg$ozOrm3+}y@*0JS)#THDvQ=k&Uery0#Yo@`2OR`s8~9PUpBcYwvQa|qf&j8#SW zEg6Pi$^E(v*v#VfT&Sj6?N0fmlcbJRW)=w*(Wf^_qHCuuCvV8n-7)clNI})yUEGB{!uJ18O(RaAi zQqZ?j(}_qj)_hk59ed!SMpDn6zVcFQp*Tif8hS+qJ?4Blr<#Q(E+>U5Y!vKKN=9M0u4EXB|D9;yfL4Fmc%uR?@@rMipjqeMr<)0Ho`5;aBQP zLaQBSDJkAELdI8Zs`x~}QB2N-#sE~XecqgN)qo8Btmzo%i#QRl`^wjuC*%K7bS~aZ z|9>1ul1>WFmjnfLT-^McXrO_57;@|=ly!VpRdOw;ged~&IFG<6fXVIg=OItUJzOVZl5tIziV=f|#8A}oGDE|oO# z!ESSY%4OOO5|3d*GI`ZO=OUkdEOPW6@YT=>yY7-oq+!KJm5=A8o1eU=s_c^g0DYLh zY63Xl*tv#66kS+R(IZn04y?ppo+vkdt?D^J+Z=gTV1u>YnuXEFZCx;<9^2%3DZ2;T zM?WruEx#TN7d3tnC(3*blgpO}??j7pDoOJ6%kJNu?o~7}6thR-TJv9>h+`gtEQ$3V zL%uT@X3ih=Y4+hUnm9N{$9b)LAYnA1+Ci7o9)9T{UM-ZB<5u=o{=%%f4I%u>t8dzj z57`=fX7(!YM&eG4LE)YXsmj#3bFSIDnjpf9>@NRLEqySvj*~dBjU9@kJ3`E_>~zf@ zAW!HOSw+!PaGk%Wd}}3?25#iO&}Hw-^)2us3vX(wbrUtL59$GSoz;%iy1Qyz8_xD( zaR;Qf4ysm%-SchD;xpZ}3`G)Gzo^=TVvzg%H9eRuK`LPy5&8lPrX%cP>sf_ai&;%M zSAB-@{X@0-dbd}Cy!7p+AM`z>2%~;&S}E5h7l#p<@+j|e_-w2^>HM<=>~Jt;rJnK3 zdTN>uMd9gh#UY^Kf);s|&ui)@JD&Vzku`mfc`vc%|Ma}B_q;&r8yqAA_=(-_Zj8Uj z<5k|WKzRpi#H@p&W-;-z%Men@fhyv4d@OGJE0cgZZr=yg6JuY=gg+%2xD^ z7w`~p`xE`t5;oG`^EdNV^X*)MQc0O<(mEoRgZQ0gvrm@p>!U@WtuE^p0vS`qbHB0s z19k<5g(VQYriIw4x}$@b(1geiXFnv*2Ct;@-6yir3K9C#ROi^|zGsT7f;%`v+IS3e zHr8?`_DTtS^TBK72h-rnA8YhWL9xKhPSnWD%Vb8R%6kdtmoZ22Z6xK(pXrlU5CEOk zRPW&Wla#oOra^wqq8#nrMW2?NabiP8g}vq)XHcW#con?~-1ghn;-94 zkg&5C8tSg}HaBx2?vT%EXwidpRnYh7;LJ{M*d-yMk@&rVQU*<1d?1I{`5dcxa$%%S z`#8_7+MS?Wdmmc?=h7JO=}TMk14>S3IClc*Mzd95X3rJM^_aeLX`183tS_=M>9xoF z)u=$n@a}#1p}j(pLkk{xx)5z2d!9<-(AmYU1McO9a(U_cuMD#|=W}oQ-))`y_7j|r z-Mq7qm}8LMU>?);0RPjJbP>?8U5PvWo6H}E| zEce`J8GI`rBz_-#Y-=cevnm;ZZJXw;)d4#dM&j9nn#vw5Hf5K(&(6x1G3ET%@gf8a z23&K_WO}^0*c0LaWfMUcW%t{6%zaQQJ~$s=QOIM7XYUN!c8nk}qlQ z?BS2ap(8!csux>adcP<~SdV0V$VVnkgx}{AGH>5_1DiP3vIxt#v#=S@_rfk6({G2% z0gdWjcbA0%{#Z*4Jw2)0ZpAfQ7z^);Z5_iXa10XeGEoeR)w;$N?CqYZ#s7rcllg2|$HX{|-k7rvYEbYW*V<6?%X=)?Ym6mY6oDvRw_gwaxa zk+XPtHIk!fmws?XMWLYh+BnRq$v&SDY!2y(uUMn){UgCCH;WYdp^ zJu@Lb@X)%M6KCnEmz#s@n=FkbU6T$rc)+PyYdvS7tQ{WprG%DkalWM@rYNSbHHPw| zP_n_hycv;Uc^{=)!auNxG4=Rian>$?UGXXVBIHoSv@S;yoYOJ#(a~?q)-1RQHer;T zyn;$%NxxrvrpcocJel}$GoIdlQ!V`n{f}Wdv2oIDCNUIu@wIw*Pk=sE>w%YYMo%Qg zGou?`8RtyV0cUJ5n(Mr#QQ1AEurb&Yy9A(jnyc%2^g#sUpQdu~v|;;3Ls;VbE>%iS zaPWMDef(Xer9v!{t&zBPQcQ$@3AS} z8_Y7jF0Oq1KKeAv;%RGfv(9C<736fRh0mX})CL)HBZPV)k}d$PgsL2yZR9EH2cm)L zwv*PAPMolz5aE1c(!L0;iL?j(K0N-QiTzcj1epV#nW9c@&kjDscCS*n!Pcw5{8uIm zRw&<@4eA~H<+N*|n4=R#)q%VBK#t+Lmy1ZVw5>&%9LIJRK8kj!>*U)5Qcc;W1@enN z2zh70nOy6$L3)rHN`Y$w<@!6aL?&JxnGO59VLl|uBp$C9syT~B)*SO^+q(l9{xykf z-OGPUlT~zxy}dKl~K*ENIP&@&sEmDKyCu0D~CxvuZ!UF*wS zl}*V#@u-WHtlPp1^gV*^mSFDENz{dzc=kc>vf^Kg>F&jJOPY^AIg)?o=Y115rJ{s0 znmYeF?`Ldv3&E{d5$22ZfTtFDIxM*;207g4`b~WvzrUrj=xe;SiWl zrcVR(8x(`T_zKrzc@PnoACS}tEMCwfC1P~vf}!6%|5=9z#?C%O?Xm}FaG&$&P3ZT^ z7l1a+z+THpF3rq*zJQx!L=43w1{y?2Mq8FlvDfv9^HU}YGoZ8H_Yb#{6V9%+a5iq& zHfTwSj2U9&&C!Cc6O0o z60dLQr{4oCfa)a}wSQsC!Kd*E&6mEfe=3R+R$g@84LxCTP9{7gWws`t;MFuw?;iD1 z7tu6JEJa8x#Wv+KI!Mofz!|7|LTyyXOKnvU&LXu+_OXoIT~;5x`R^lEyG$nv#!lW~ z-i|GO(-lN&OK+j0696`dpic9VOHGpRl^_W6sTru@G`@Inlv}r}9i}&CbYyU1V@I&1 z5)$J2QTjVm(WlzHshty^*AdAnxTt|(kII@YgGNv#7*yLV4_7bb0ZyfLugPz8Sv-gZ zXTH23S7Gj>cQ;UaSMwU%G;K%Nt8)>Jq!|@m_)xyC6Q9llHx5*D^+sW6JlB)?ayN#P zi*A0rsju*bzk0ZZX(k}L0jC#p2Q}L=J2$^ET(KU#Yj%wJBl!>Ey`%!BN4rt67n16B ztJ};9rZXtH8QpI2Z-wah$fL;Ys^mHa!j&xec*{d5*S(BU{Sv2&W16j@e&2f;OG?vO z(mve)bqrbh5w=4zCDA82&(*Ji=}$D#&+hr{^-djDyv8MI`m>rd*) zJC_!Yc#)+;HSPG8EhC8)`3U2Psq-fO!U4 zZ7q29JG%t<^cNW^KXRCi1W7BRK(|>3V*h&W^JKEmg}UDU7X0$ zN9Ba7{xP6N)AQCLN{jI~{S;X;uD4zrN6)|3kr&b139k!A$1iqf`D|)LQV8>jD=z;D{pt9YbyrihG_m;z^X0Y= z7SZ^+Dq(Ae@STc#E2Fre=mLAIJ8PO~gw)5cO=*C)rt~OY?H2QT&yCWF0cM#+DsQ2y z?I#t-dHRov3BYH#VBLL6D))89KOc3wEw>)cE>!TYlNY?z-N(OpkPR95K)1RH4Slwv zdIZ!pD0a(#V@7FYbQF$gaMkOFSyXv!(b>Zp^>LLwSf!EZ`(@DM9pmjPp@C;s)5hLK81!eS0CHMQDPS-a#gOThhFrd-#okRH@t?hg@SR%Z1#D9eRkUqKL=UNaKorq|qGQc!LKnQ$|i zLt4lE!Pvo_O??}Vy_^v7nC1+*ImLs4egC(w?D3qYoJyEF60(uwXrp^ZFr)p-JqtdT zanQT>Ufs@04)A?hV-TTA^a{M+~r#aA+`y$vR=r62cE^t;^lkk zngF_p$*h6GE}a?be?=77z0(A{a{=U|?@t@G$+>+NS+87UVo!09>jtX6|%=J_` zfiZD2?^h;Ay&3)v911?zSt00d|ER>$=e zN!w6VaZE-H=g0_90~N?m)#Ik&=b?C1Smr^u%2YLH$E^4kc8SWWhHEM48ISmit+{W( zC{`ziN7lUKe*XQRiuQa?9v!?VFk$Mm{uACP?-r|=cD*gFq$$nOT|dM7Y#JX8gjaU%F;O#8TH;_2;T zUR2N|c=M{#;XP!wf2YTC%Xp!!9_;T{^H$-!f4gM9IaJ2x2gi zF&HKoXBMcJBO0zx9=~u8R(65BHl1{s8-7g*cAD^g+TZ9i^nL}Lxf4Ts1Z`XixDRjn z)O1zHPqZ_?3m9BAvc?pp}x` z4ca&F&bn9DBgrGV%r?3?KO}Nt5MWi7f|Rfi_b{JO?04jY(v+kkNauZ1y_oheK1JJi z|6orjHdsdJ82jw{yZvS4W^UNcZnXhxm}BZ2=)NPa4)G@d3u=qVUf?i5QI2@%wJi41 zWi^GOA;-ySXsE1q1Xejh^9K~_JuXYGH_x77dF%SdoMK;65z2?CjXV<+M*PI#meD<4 zW%hO#O*ek7zq_2mUMZNzT0A)!U6j*A(&&D=UG+T_E9e1wksE~iORd<8t|c6R0YmEH z7R$PE_#igS{F6X3h~WF3XkgRdW=3#yVZEB(Q4agWo6C45RS&!Avzz7{6i_Bay&-tRU7!Z-zE>7z>M9I|-yAC&2C@SGs7?>8iVO&3+?1t7F(;6dp zVksk65A1cZSc^C&`s;Wi(p~+%{a_Oo}jgS z1Mi3OH3wdf-Y;7?bIadoE+JXNi^A9*0au)WW-<&bkWGCSbN0mTwG4oo45)7>Va84C zx>T({RwnVG@U&s4(W$z8B%?yxrE@eV7$8NRo0WhdSQHPcedlugL3*ZZKmdT%$y5DPB6dH!zC#$U%(>fHf3_>eGcA9C^bVWbn;k;R;(h<~Dh@8e- zY@$cN=(1b?bcQW6rI^Fi@E*S(LVT}cK)z>8XGF{0j_sP&zaR%>oT4|Ne)v?QMVi60 z{(swt9}!)uf}+rBgXPOz{X_o=DWAq4qQ_OJ_whE^qi+|Zx?pFc z=67T1IaAev_{gE|EKGRSzrB;W&U^Kc#ChYor#2z~rq`9Eyt4-$9MmOCegH_gh>tm1;DEwdxK@-KqEm(8den5Aut}itX>22zSeB;@{DCn9no6OpMkp z-tsbTg^F`^Io2b!G*h`bh?zFzkXvXb%_0UUkG&IX3ysiA(Qz-2tOHQcZ|-NxZU~$t zvnmYA0>P9RH=jUR*t=}XPIP@@mjIt=>h57L$M{HHs07o?Hn-1fky!dCo0i@dp!ZfT zk^X+WtZdhprB44=3(d;RK(Ky~5mn3bDoj9--FVdtbqK zFCA@#dsNKSiy{BEpYWY_EW~J?b57OGi}@$z9azKL&t_aXTpA}T7p(y?-!q3Lh1zi1 zW=NeAc7eTaZHmb!TJh^}1!||#Ho!7Q@*B=~2hqd~ts0pjho{-Qwf2`cml)oFh^R`Str;09Z zF$&{`Ik%htt<}DJLqHHrILw*Xi{sBn-zKmxp`jmNY+h<}&m4)**P3XXrm5j=wiM5F zlkMw%okGjT)|C^f{^S-vl@ScX{zernzEU%?^C-pKi+uM5!w^nshoB} zYHwjVzM1G9a7m5**2J~PzvbnjsEnnkEZ6nC7S>KZpgBJ^2$vc;M)04yKVXw@V=N0| zHe&Q1AdW_S3zJ}n4Y}sq=U0DaAiAylj6n;ComYoEWm#EzF67!9S#>`xmiFQTAMVqB zUG=tiNX`oCc0)5#YD;`c@|uf~#?3{sCDy&*G)o8A@+U{-Pr1&uN)U)YJlx@3m1AP& z{ui2hAYIN}3EWdisaT^ci}4u~gAV0u*SI2yRSa6#vFEPiPb6^MJ>h#GeMyd#2XVzLblsn}gnG7GX}!BHn|&q6C+jbC0H5?5qNB_S&6pUrR_T zU;xq@(Bonx>^tvd~6e`=$ zH|w$}B$w$_dNBjXoZNJ)Y_yIM;bR^L*SiPMV<+9-lqT+BgOZU2tTP3MNiSRJ@B&erw!` z0w`}DXmRmKg1tc+0c1PzgO30yw~04L4t<&_Sc_D2`qdQ>%`_j^2t*%(DI2tSP|8i* z*+f@kt08y~_ri?L#OA$7dO3>QL_=-l$>xzYk8sXldY)0R&yUkDRkrO1H^Ku)3#yVF z1;0Wqhpf*bTHCtr!LF@xk_ez|s*jJxT_Ej++=28VH;M$up9CGTv^Pb$B_47iY6slX z$I+6CeM`@{kpo?M52GirXMc69)9>Tc>Cd!Xo&|w>Z9B)Nn)si_g(yD*V=tHXjSpE! z1;<+W-zyQ(1H(#F%p&!zAGk=L$Uf43$%AiOk<=@3gxPwhsor>J1Hu2%va{jApKICK z@!2D&Cv#r(^VXd>9zJ_`-JK22-c_ghf!YnU6X(dS`Jz+phy(jas$?d9b-{p41cW4a zcMf7Bii}A|I_&G#9T$R6GCnugUL@vb${Fwi@!IeN`O~BYiy3gdvvF-6z0;&oQ&$w1 z2^sBOaMdgo7Oz8}rRSF-GBZ!g%^e>SP+!cwYR>Qt^|MeMrNS`#qOzG;8-RIi#T|WD zKzB>4@QJbgm!w!3Bcf5Q`GhPIZ4{z!H)91i6ajun$;!lx!OH7v$?8ZATh|&P(eI07 zoV2sOO^AJF)*56}WCI>9qd~N`@Bz+bTSAXK7Lh!hTXWxWF2;DksQ?~=q&|%r%EkUG zQX(eqtYfG?Azp`(;1jWWa3h;pU0BbTbg@HIJjdS;W{aEQJIRHZ#dL~-mpdln)QxTL zI0eb*JJ%z`quQHi>wRGKEyb`ID(WV)09T2efW|(@Z}N=$71;Pt#&3(2a4)GJ$om{s z#AL!$BBXbL&iCwFdu>|vdje}2aeA74EqmIOb zE&AjA!e}a_u^;B;$lXi7znzE`SwyQ^)0s<;h&50iE9cS-_HxEotsc^?4LMNO4u2o; zYoX*7wC$>79K(AbayS_mic)->S^RZ~Qu-0ZR~uQ#IN_2JFYlg!osk%fgQf*bz$e6k zK@tA-F{UQcuB%|9&GucJ1?FT>+d8Xze$#Y~R2tdljq8SI-~8_H=x2A5PDzUF;|eCY z6kyXz*@n+~tvJQG*fD{pWf{>DxJAlOu7jdB!=R0I_`T#VsKEne>NbZq3UE^#c}YNI zi2(CWSeNq2$3P&_Q-o#@P2D@F^En zdg|8{`)2oqQ%n1)@dWr1*1xGjw54vmr6O9tCA7ijcIHq{Z9I{!v_X3Q*R+1H8;$K; zlC2~eGvWI;$b>5PB%#T*w$ALF#kL!P6_`-G%;bs_Z_%jUg86_mnIg-fLd4T|X}3K0m} zvixO#?LTJ^hxSPSzwFWHRip|>My0JMcqqulC9QYjBeKchmO9pc-?762*fJ^7lNJ}< zswoB082V^^;87%6sPD;~uaDp+>7G`!7{Q*&NU4HWeUud;4|stMegX|ztKW}`FZg?1 zmlV>`zGJWaqW`W&Uz%(^wMs41OFq1!!JeuEyYbB@OpXoEh8?~wl|FhgP2Usd2;dSt zB`qfJ(%=>@J75Khac;J~+Tl!=mK9GnZ4Wf6F3!|A0e9&p_sX8VrBrGIu^&&tq0ccV z^pMZOTfrULeEn&S7&A@N;X17^TrHhGKqF`z(i9@zm0 zMK@r7_^7Ch!^_g&O7mxxW{-cPAh*{Emb?1Gy&S@eCOAXSW(amZQ? zL6>UJ?O;LIysiCQ8$%WSw7GLq`SO{$BsW0CmDh1sgZnvw60aTe!Ksy2;_kM(6^8ZV zuyuP*0;iEZHqO=kL zn2w}-&$zuy$aI~8e(d^**s3$^WE;xQm%U}?rdgDsO5ZbkS>qyjmgp^5sdseeelUwc zU4nq=rNSyPdFf4+Y0xP~Bcjzh?*V?ZWH_8#mmW7w!@NRld)5)JsJQp`)>2(6kBov| z=T?Uqst|(ecHLA@EuvAZ;;7a9I>l1LJp#m8D#{`%BPG+#y*K)dW1&a8Ao}`*m;=-ZyQc>Xk`L7#w;Y;i>@(5|9ddoEH{gOdg({Uq8A;t7 z^P*RpY(d{*lcDBs+ifN~dvc;!R6A4BF?@7LZlMJ-W>)cbi7Uv2wpcctr+@L`(7fqU z*5XKyQ&R)>B7I!vUT%<2T-n`k4f4jsv2G!(_DePCyI(JO)-8&!&gdZu*iVC`|CZ(( zzM0^PgD}}+Rz_M90_7zT^So4`7_B%imo7kb>wC(aXyX@6!{zsi`D>Y9{yx&3Pp<8Z zkP$l?SatSqzqON?wCOzHPq>rbu66-dnw3qC%WvJx-2aC8;Dc58t|kGDs;p#>|4Kf} zp~OknVfWjGAkx+j&C5rnnLj36bQ8Mk1I#Ja;E_W$`f_BSf^S=A{7DMw{|&YFC;z!Q z^fnO?7^1~|4D=D8r763G^7aU+^nF$JwTJA5Qv8p51jVFp%0BK4xypw=nQ_-js!+&G z+O(<;uI8*}k&KsZD?1!jL}yB_0euFvXVpL#g~gQ8)m{ntci+-LU)His1+ULlWRDW> zKE@kFXlJ7JVrIjF!+VX9TvQ&@i-c6sta~C!4f~yuo(giE<-G;@Rhdn={>|bd6JfWo z`i#rtJ@X!*7-BPvDUeDsn>`tvnE<-^RBH^o?AiQ(LPvgc+E4AM^8||bFm>;0{2e!6 zBaM7|Hz?9L@$Pcm8YOX>1?E^7d_dwdG5ONxYwzdE0LM?5_4llp@sMU{oio<=~qWd)Q`l_|m zfylSd>cG>9moa&n#b{xFS6UF%Ra>0XAm5G-AGg@a2{EKCWn9UmTP&jzb|a%i0+IM& zDpH+#p&2~v&Tbi|+ELJIO#q9eCshhxI+^L|p$jNXK;w$*+gSX95%(@u2RvU=KKvl; zwc|uU6w2TxLs~$H@|&Bj0|2{SG5+bqpit$Ze3q-W?h{y~Yss=_##>T+wyde0x*4cM zVh{`S_A$J<_^Nr#iuw5+BOS|B-e69q0iJd}O533&T)A!v@whox@oygS>`IZoTxER5 z-m{sktmXlhgU>}%R(^2Bg<42F2S9%%{Ob^YuS2!k#GkFdL@nI^#J`$#f#Mn!x>Ml!LoKd>f&bIqdXCPEHk= z&0G_~sluM@3n*I!m8QjRTpz>^Q86syomNv6al2(ndh)%T>B~qWV%9@;+hX`kxF4X> z(Tk3+{_vq-MsmyhNgx_?ygyRp5e;y+qaxU+b5|$fwf1((iL_g0_O(hnX?u)qSuaPzn~5=F#ALJl}JNJmZHCryjmXP;|7bRl$kBdIxS~@{L&?;S$#r zb|GNh8>KFX+_Q8K1a=&MDev+2V39+yR6)1+C|O)mVd{*92k^+!#^j?G5d3a|C;&ClR2wNctGm?ngb3nM$VQ= zCZNz!_J~+uKE21s-6#PQ@Q~JgwYjowCN>epW`7i1=`@wj)U6%fH8`>N^gkhK@&@bS zk^WzE(~0NFdl|RAIwnhpL@=fp|5hPjkAGv9oRT`%+2*g0&+eM} zN1O=t&tfCyk?XU-wLiDKZ6JX}%gmBq>J{ajLA{SPSv% zIH(uyX3q|n6C3ct%xb6G-7|f?)q<6;D82yU0i_S%UJd+cP-Pe_;k{hF`_DVDa%z?N zT<4wjN0HC4I-}0QyZ5|r`8IN5lf!tXGrI6=x3iZfKa3mv82E7F~=V`ZaLu8l;a zvvc$Ig2N)J9t+FPpSLG{0-MiVV?V;HU)?g~PwrhAn#?zTH(TqMJ$f$B-p~dntOR)D z3k?oSvDMUtm`MHl5zstMkbIAW?cR?rUTvs49WTceBB_9 z*3I4f0D2poMGiGnx6TVYTaZzZ9&P@U5zfwRO-P|7`tjPza;0nR5yE9RyYHW!8$EZl z>FS$liwi9|)qX(g`Z#08lkvBoNZ&iwoW^WJx`rbgQ$5GvMYhFX4a7e+Cm*Tlzbp2` zkszF`dibMqSl@kSAx39K>kx!Z%Z{WhNYx(_C=YxV1iVd0KIM5!lfb8HP#cIg;OTO- zUkvm{WfqZEZa1r)MQ190EZEAt+hTgu5qtOn`SQohVd+7FfU1wi=stsAbj3G*oa%R*^+C$U>~`HDwVtYRMGY6LUW2!`v)foHVOxZ<_1gtC&T$ z5)-Yyh9CNROg^#%$c#J8^tf|SAcacRHW42aIb7-j-m})%k{^evfo${&P4f&VuX7c) zeS4j2!M*m4W5hTSjg9w`&18zQeoDXFQOspIRwD|3`pE?Uy8c(c9IaXuXs;;GkX=c8 z&CXoudU(6L;yokjclbnX?+?F3((epwQR%)`g|4vr-QCNvHe%OMNw`M$E9apCDyi;( zPNryDW|q59q+|-Pf+~%uvCdnlSgSNy)Cl=<&@cbRywW zyWPBal&HwNi~CKP2y)%*7=3fLAu(3R_P440;O0Enod{_x&YJE+_`nKC79jUK=4f4K z|AbPsYx3`G z!tRfQiRB+56QYJ7bG6B0evcODb+2%uTYc#9%*n!v6GlpZdz5#oAa4pmVx#t> zvMwh@G!KOwa8D*GBWOB-{*Kz`&9`!6Yv(T*89HJMHKA$25^%g%u=fyn&yL0*W4 zL!#chDv3IF#!P|~Pl^Wq{+U@Ws{Zqq)5`udYzxu0j9hCGU4q~9=jsB#U#I4iRIi!vh6x$GbH`} zW0F_=lqM8oEdq1@jF7w|sxaKxJnpM4wBAxfApssF2g)p&Qiq!snCw6KLvft_eRBps z(+Kb3h$|cFoG|qc#RHo-!6`|fNC!dlw$BCq(0o{Lz@uUx+_KCiR1Oi7{y#qt2Nlmz&;hCn|A&EH;rXy^xmgNT)vaMl>78?U zWJK?F@#(W196PgF`Hyr|DZ6ywQJ(o4GurbUs-R2DD4+a_q|+!B-8yY3-89Y2x!2(c zN1n%GoLBq0$Co~3Bs`=q06N!{qMn&VH@4K|MUjzuZ5f?Ivs;Pwdp+hkrjYh(C&vK# z&P(;67Sxt9Lu7QDG!J_cZeyQ(sBNbKz;|t-**h81l!Ybi0g;kcCRL4DQtx#uUJY_N z>nHSElQziF{5J#GG!;#GJ4)o2#+Fsj{z}N-Sn<#IlPw?oSsMTA5jZaOJ4n4r;SZhj z8XbrgyE56k8i;jJRS^5bPE)2E{8pg+v~OVH1RytE2i>wz8bd%#!V%SRWMePX-e zOWd?~i$A*}F*v~^ygvxn$yC;E%%9^@-eMaaf z#uoz=7GhGW_68B#erb0*7Ua7&3Y77%GvN)kaRrAKWljy*qiBlIO#w7)vwis7lH=yK z?IdG`+4G;!@}kpT#lWeNci3LnnQqE$-i10-hj*Hm;0;*Fc3D$p0jcK3m~s{%CA$HYpB|S{yjkaI@%W>@gEwqQ zJ?ON5y+G)yraLbyz-kXk02F5CBDEz~6_m#Q6S}D3n3eCQCU%3L<@m}gTe~<|LCWGI za2wc`teD-%@A@>OdSv$Sg=yGyXuA=M`RK#)8Oi^Y zM8Nb~?MfQ(7vKB%=6yQy1QRbBm!Cx+eH9Y54b2N~JbUs3_Lb#7t?9?aGjTHlCIzW# zZGE_|Z7CS$NscL^H+3MAx-9rG2Ceo61K8J#B*j~Wk%hG(g9n4PK3&>>sWLvL>huK_ zYAnjn;OlBCsrY#diK22$Om|A8vS=hh;7_#gQfLZ-WVEMJF69GeN)dIB-~y`o-tE?S zN$Njzh~+HyqJH^>@t7)tC%n zPh{hCSo2e6zDFzEOA+)TOV!+-&~CaerC~NMTS3!QEvs|;5{4U&rYSxCd+dIv>1YUP zk+?CDJMoW^ETmK*@brsK*_jbL=}U~@=>cLzR=JcBo-HE%{KBG-@A3I`qsF5w*7b#qHmT3X+bx~CD?+{Y z4fpoJQ|piXpc>Ynia7mLt4zMZ{xnY5YN0>>{9jbeZxq=a+VVlt?o|5K5%6!Wl{tG%rt__#=E zrH}8*J-hkiBT&OZMg^DI;wyP*RsRqYxr&C){U`J{K|Qnfa4pP2)S&e^yUesi@r+i6 z{D9oHy#B)@#3Slga<*qq|Pu2j6A#B?HRmN2h1PG`={6p-S*Cs7QE& zjF%ksr)1qe@ZCkEdrIFk>0|Zxmt!D_lp|xMutW!mArOS2rB`vLm>4eGeh<%i`LUt~ z7Wv47&V8kyOapt;P4jb(rbuNGQjSc;V1fZhGMyW8N*#7a3$0-~@1B$MvO?#KA7oX0 zfV$XxUE>JbMrVKoZE>qe`l)`-?BQRH^UU~X1w{78*g(#=O66dyj9#4DI4{ClVr{xy z+jINWgaaqpcltQ)j_FvnCmF}w)iCH(@Y<9eX6`$BPZ7Ip{o&3^ozgd6r{bRMLwAPg zJp+cvLl~HQpz3^F#&3b>fu^50I0kPvmGQ-F5o0T~LYd<@s=FWb>)>~RSSj^x1YSx! zpXqqz^abYsW1A3Q#;=aOM478N^O2y3_JCG#rL&6f_E$U@h3f!;WEogIa=bBrd!cX9 zKe7)6-~92?^%&4GF%|8N3=YEw3ftZsUxjGiCw@R`3tE}$_IvZ|ki_s~$K7-)m*XKe zjh*s1N_;D1z@_G?KYOL{6cu0AnBGtxxs&joY(6q$*vhs$=KsEPQL+J*$tm)vy876r zU{}Lc8>fA)mHmLeWw~esAQin5DlOQd;`%o>ONv{z<>e%Guw}w$EaFMN+R;^qTRV1^ z>I^0}heD|@y_5+wRM}+MzSctQo0Wv7&Xpsb5uY1JEa9Q+>8X!%H6C`1NBrZdz47SA zaF1P)?u2()`|7qrRDNsvas0M%tJrqN_JPlUa^@Q~hro`zi+AlavrX{)g1%C#d94^h zFn*X5nkgTuz_+I&g?H-uGP`CK_`{MZBCX<0nn<4+(aVnsvf_j406#g|EOArMS>(Cz zk%424sRS(Km-F6p%sY=Jb9&t+B@;R6MNONL6zbJ%+vCX}&LdcZz32PZ?UVKGNvt!t z<=>fsNOCHsS^RaB7el6I=Q&_(bFe5mR>20B_SbP*W+~|IqaLSMzOsJ@Jbrcx}g(2e6~IJ4((!|Szgos==>XVy?IaQt;a zTOtaMSAh$MA`$i!qY_QfHlg*Nh@Eh$werZ@UzwFgD zyl3B-*q_q$1lvQyG9KcwnI6lExs9?$P4}12TRBK@ zkW-sabpN8?D`hwC=O=|TKgX_gRA_f;%kk%SUtcl~VnyUJ7C!aa@ZHNAY|vs=7m1w$ z00YfQA$)(pdzaaM{P)|29N&($F?|N>H;g-Z6jR^>_l@l9wOX;^QXTr%)}{<+V{`r~ zzr6gX%|==4+-#kY5M#Fy-8neEigYPD$n>ft!!Hx(+Rt?mAM>EDS~1pLL!fE9f_|-g z8Zr@^Wk6%pw=W={h3Xg_kMv=l_PT=$@MqT9m&igxHA06jutmHFau`ghJpEQ*bsJMUVi^Ccg9jb{1}2TRQAH>lv~`yAsD zrev63cz;HiyWmTGd)g&9;}z@Ax3NFseqm-D)Nd-sJ36cA>^tFCTKdfW$prZIx38x_x&fdVX8d64Xl}D#-{*qe ziSi0UQ{S7u`R$aOgBck^y6y(8?&}jj{dH0UF<5-s#$gdz{KPps zMVVK1wLTnccriT`T7Rs;CJ@i^s%%_z$mlx$p+rT;fLU}^LDOGr(5a2(*_grKr#oT~ z6U`iOghR8OQx~+))%z^If0QaU5IA1q#c_tc_OV`0v=3!w*7l|K7Z*i7Jv`i6BZ3x5 z)fQO;u6)Q?5Heqpw~7)u^~BjbhV>kp7bMl7Dg4ZG=RT zS*f3*A5Tyv$e~xgz&emxbtRjyo6m*wMcu=G3Sn@v^8W79f59aN4b@f%Bqjj(I4;UI$e|;bR z>p3{-_tceL<*iDUw?s^D0I559*Kae1{}b^7wOnY;Ui;W}%9Y#4b_DTq%jzyL!9>Qh z6I3#yOl}rdX@SxAE)Bn3naAHTn2|l3h`cVrIn3G1SCMY8UTAQw)mxUWHM76X9&g{| zy^y)`%?#elT06$!ST7g6Tr0^OKwA@*qCBho92c7#o!xcRtR`bRZk5M!SIga0ctv_y zBc-dIf(@rw4RP0u6Iu#~#wB|=3n(R^bLADjs5cZxTRdlT;6I^yP4`X@W@)%7OV0GT zTbdROvAZhH-`XeW!@}%yzW~R*C15RF<>RcdaWJZUgZwvVIB`(?Ih>V~GzIhe>-fo1 z&@pC2l~9lh{w<@?z1lO?_n&E94AA_sBIZ5*myI8pIs84Zi5oWjV_xsfd{pO48-~u7 zIl~HD5t~;LoWP(wg(~!qQ9^Q7K?qaj`=!KI_sFCIc>)r3v#&(>jx{ME`!Nj|=%#P( zAu&+~w^`5Lc_(yB9e58NS5IAXXewY?ri&Gdn7O-rI<|=!1$T(z0FW0WFC==XKhrV> zCbptr1NNojqv|Fv+EncGI~`Qcl&2$c`KP0#Hq~-I2~MM%IMKbgqygiH#@%u%*Y_nI za@_q_>jdFNFpkX33&btieg?8o{te|F4MoqTQxW9Xo6T>rra)$0xRki-kdHW3fMpna ztb)@x1Zz}PJjsU{{NBFOvbbz8vea}mC_m$k)Q=^%^Wq}w1>Y`NE7*AV!t~EaORmhh z@4uu441q_|zpXvIi`F8yr z(kWHvZJ*vt{BSW==;I6d)T~X}g3Vsas~{Dv-h%20wL`ih2vPmNeT$5mC+lhEJ-xbR z|D)*2(G zQSMGE;``h0vA;iiJhsRC@p--8&(pZO*RpZGa&zyQ=+l`b0jejQ0cWp+PO}h1uBdBw zw{g?seqF$0W#68=g++wP;dTa&9Z!B%%))`QS)QvmwMf&#KvMHra&z^&%PZ9LKZjAy zZ|+hcUXaHSe(ZyW{9W5<7a`@Q2UW~ncOhvxFkVsIvnT5Z!XSMG5oGL;oO%+I!i{Bo zA=6P#AznZc3&3c;7OXI7F(=SV$c}W-L0qhPe6bZ6$};$m#p_wCi=TJM+JPU-T6WL8DCo`=^0i)c8))dbb zq_wR{<7SRd$NmSDQi2Y)+{y!|o(+4#7n%7e?{X1$E#*jGS;q}^CELRxMYxRK0NoAe zjw8&BZyew4%r`A}^%!c9dPKQv7AvazeTC=yBhy#9Vh!8BE+D?|Xddar3tZ=R^)Y4K z(444n5V|;{{kqu)o0PvKS_)D*l~S}Hg{xy^K-o+eLB32s`ugs@VUhhq*lDkBdA+CX z*Z?+Qhq>$A{3=+p01>iC<+t!`ZJnCP zS@sDKp@6B&;mh2L7;}p>pUQ+EQr8Q z&%4IOn<8@><0V#W$HD9Jd8|LZQr19eLH%)9zwYe&apbYf3yb)6k*wQIh$S&KIz7ob zCE5UDaHS+dG}mB@TWH8lDV$pMz8h@&SghZod%_Q6Dzpk?2K$5%Il>;lL_(7J z9P;o!eo_s%SbLCndy4l98=dcG<#SBZYScb%r0hRca?rGO@lQ!(Ug4iH6>OZ8O(>N;dMI0c}tF)pahP+Hc$D-uMwn zztqNzl{9#*uR2*crL1xy{PXP_k>?yFe_yL=wp$RnD^^XmJaw~yo_clf-GY}>57zF1 zm&<~2U!8~rCB@WEx}Qq@MErKwquY5nqzNjfWKXJg|Lo;lno$dr6@DB;e7jhv`hX49Ig^e9#N(!V>PMjSCzdAL=tsLB1Daw-JQ_vS3d^t?1`*j|F ztxjjG_=^%tc~wlDgUVMhXI2`rsRyZJUBx)n1s_-^r&%@w85E$!(;&t1c!WbRvX6ii z2~dlhvQNMKMu1#ARt_GX9X_P+V(Pg9MN-ST^!hb5q{+;@*Ik?Yk16mB;=YV%6hF;` zY|-VnS&4s9^{{$NXV$nDN20}s7@^`Y|F8Z$(TAZ|f{-}j#wP_cgQi?>6a`Np6U6tB zz0aMnv}R?+!yw*JM36_b35aVj&3qP$T>c1M(ZEQHcq6TlwK!QrDA&tGz^DBAb4u1Q zyftz!>tt0II~G;SGv+@)Tf0iTOgm`7)gugea0N3ziH?_!AXdavX3^tK3LV5a`4H2- z3CvweZjka5_#h^q0F3z-g_mj_Nv}&Uuc~?C)V=y<;1o>6qNSBPeEyiptG9CE_3*ay zysWDhjb6VSTSs#_L!OGJcwAOs$JNKB+z#r$DJ%ESbGW;{;p64qHuu_*2bwhB%ZEwP zZ4~uvDOYGAD8*nW{h{gpJBOMql~i2<=vo6??E09ZarXd;{kl`aB{^zg)qm_nh4ak- z*~p_Y$sT07=I7*0mMcQ!fVF7fuHFt`6e2S;?DMQjy!FP_)9=pA)IG-sr?W0IY%20p znpnKUT5u#(Sc@A4I|eZrXdpRID;^ui^g0y5c3kfxE3Y;?uz2IJBdp!V6*tkl-Vf<1 zaQkPt!o;xpcvy;52d=&8KyuW@YKWL!=5%5I>|wxWj{5y(-boHYNLp%jplNB2gC_X3 z+HCyd!!2)j*7sV+vGYG>p$Dk0A)9i1Ciw^WZ2dSZh~@XB9>mk~TXIl}n5*A)xtJOIj9Is& zF~l3N$6b7Q*SY^cKuD&ZaO9J{wFz^JfA{P`J(TMkUeXszozfqpcPCA0vWalL@`_X9 ze^H=fHYP3?4Qt_h_Rw|(X*Jf~9nJfucgl-)jwFGNDX=HMhqoT(-N$p=7UxYS7i z^H9PL7-8BRqi4(!M*ORICgwAD&=2tIpw;pG@#}Kq*+>q`Y>VDuFC%6|BK{yz44m_o zp~*4MYgPS)dNSF)CFX+}yS6^EbN_EH#~Z+5U~)1LkU@v~mutTFVX^TvJnbijAx+v5 zr^6|8165%pzI?M2sGdxr>qD`UDu0?|Kh9(rObt06NkE5_bj^;h4%$T#qQ*+KvP~$V zO@Zwad&9Q3HpVr~@A;4WJgxvjs9SN2b63ngUyn!r2S7C$|Doj5DxuQIey7lF?|J(I z%?GD(!LZ4(S1YxfoutT9K%uM8EZ<%@Z{*@yxw!${SW8Xk@dEs9-YwK0cXob zWWkIqBZzSpKDp?a&koPqZU7Zv)P&GPVP%!9JYe20g4$~&KsqmeK`O5kTR8-#NJ7I&XyDE#dB8t{pAmA7IgDvc- zUmp#x_u(d|yCDvpB6cTErJC3#4=c{xy*$IFBN}VeYSgM!*1;IB*j@f-<1a?<^PyO< zZk4|Vz$0SvMvg(>*{k5o;0Tl4r;p;7?~ta@sJ{>9V1Z);V+qD%hk`GOwP--?sG;Tj_5 zv8cwnGk&5>{cv5M?vCMEIM~)A_I!F$_CXY9;K71_9`I#~%|dFWQ_6 zmv-GiF>-JCK)3)!!6pD|9LCBT$mU~X1Xc)h-iNKidl!;gh5Wn^>9MV3i#I;kvd+4C z(-i&Fsex1$wig9<0I4lHe3O9`v5CVZG_6<6RBg5!MOqnbJI^7{p^FT*+>sKr%peJ* zJug}TJ+j(y%5hKHH(dM?r)=7+LE;oiz44GlnBzq+hr{fE3Rz}?UFcPQNTHV|q&0vI zB8(jr%x`X|ikS0aX^3qLX;A}p{)Zm+7Fh%)>OW%#^G*7&?bLS>$n_DPO$kvb$xGE;7P7qgT?6`kI|CMg)?#mLg=LPQ`Qal zih%NeR2p*9kF}2IoSzBEoyV)x`PlhFG}^X+Sjj0{*OZ);xKlPzr~WLCRlq0~4yJ2h z41cn=tCam@^CzF!(WLdbd<#>id(QAH=ahcegvj zK4!t~-})&0HAIXCe+_R%a_Z#@RH4lOJ6hTL#8ho_iEk=@rZAO4GhAt0h1b_wLmSna z_ghv5vQ{cjo767`R_loVSnDpP4~ zjn02r>_*4tD`vPa!`G<^$P<7}@FtYGHdXSRBy}I%v8@a^N$0nqj)Lgxjb% z$pOM*bY=)lfN|a8uu9$GRHna4_{l%py?L&p568?3`ZugpY5-;|7mTKF&fyM^iK{Hk z31|$E9$}E`n3op z>pw}&o)q}X=fYIPEMfObgAJ;_w-|-w7gf8qPV;UwSwt$U!%K&SQ$M+aa=FB}vQFq& zDA+(-krVEs3yA!g++!k)lhE~3K+?mhBTI)ieppQx5sh|)){QGjyK@_;jA`%BS4(+`3l~>w z-J-sF(`Z)xb{n-8`MZ*PTv0#z=B1HqHQn>tBY~CcE#6(e*+r4tzt>x??&IEHiaa%L z{%+E%uJp`Cqs~Xy?+2m>$2Wo}i0`^z(i!W&qQusJT^gSOkIwNri=?Qd`n@g2QAsyd zwRf1Nj9(X$=rwZ|XOjMWvC239D0d+#f$2~voHBcA2pO1>JZ7-!&hvfS=t=zTY-w`- zY?UlviY=AmE2+)VIF2+E!G)BXS90f7!XBYOWh(8clYOc_0c60BQ!pRjN?!PG%JIfc z$VpUS#j}4UGX<=9=ba`(*_?$Q-5f(p+fY@GBO>7->u=+=M1*N4t-c1M2uRcdCjP%= zZWf86nwoO;3mo@s2ZzSziowok=4}x_6Z|laU^ucDO92l}CIrbyasqncC^pFQN^o10 zpb%dr*eut4U3>`AdMU=HL<>_E8JEW{wMH^(XNoD(8M36l13oq@(F z=42}M8CHc&`*8sXV?lT#$=w%C9|pLH$kouVKyn@y#c9 z)g7v_$C)9*Ze=xgW2ZFeorBf9C{>;(xl(S@l@NnOgQIf3FCqKo_IYvg?Fp_aR+Xra zjwBy%QC@UUH|(&qq;SSl2`29h6L=z@L;iQ+jE#B`->X}vUn1#LP%e9$2} zH?H-w$Y}9ayodLAfp%`>D_U5t7i!))X?gAa1y~7- zV1i9WnG*DeoP(Rg<1~Z{=Qb;Sf<`D7rh{=CA{QMSXJ>_Uj<*uV#%jC1LJO4=DYheH zq@tLfS`Mg)k@#LmG7+Ogi;oVdd?Idr?@R!kx_6njeExAzS&$I# z=?COpw*j@V=Ronbp3~R-rA;n&zkp9zHq?cCGOENw+|Et&PrbTi&YFAO!QAq5X&{g@ zgN7+tT{vZ}c;}5RY(P{00V<$X*DhI`TvjRGgz;R7haS{ZPm2|+w)^9l-m0- zgx+wG8ceV~9p+Twn10#k`ftZ!OsRniW(>REl%6*C=DqD zjwc=1lMn3k2$#zhX_H_azz{+n2j9l?{Xv_-q{DOI_fuX)=kjl<23ox7?spnGNa*5P z)OcF+5_l@vVpgv(!dAo=FmxuK8T{JJ2#&2vKKbYl;qZ|L7?`Yz#3u`&2&R^famD`X zpnIWa9)L6ft1NeJJL>t$p_Gqz?nS$n3$iBfzE!l(kpJmpnk{WOl>23i;lR52 z*V)nun(61sya1CxvJaEThbaQ(N5hiYZ1FHMIcc5?V-FgHE3W{!s$^Z_HO_B8?bj;t z!qPe&t4wF)!1q--x2R{&TMG+aNiKjIeXwNH8T@~Kq~s|GAB-AJvKxhAB1|@BJ_XAr z4leV{_OpY^&#%Z{1)g^Oa=!S{8g<)pe8wE36r zGIQi>udymwtIYdKFV)$$pD%2d>(Fc$(-^Q-bMbJbh3@t(%2tyt3VY<2X*MA)u$9ph zoAqU)>JO%&tpCO*wr6Qydlh9m>`ZYeiKorMj|rNv>!4?x-L;wJmhKM&Z{NiH^Lkve z=vUCNR#NXUi8__<2#Zfy7gJjj7Pl6A`ANBeks+;5@to#+4RDp95bNhD@@omkasvZ4^mJPw)PzO^fc z#+~h51wfLCrnX{gG?n!!a#|75aRi>3LG&Fqtx;8oc)zfbj?h(k3)T84B9uWAYV4KfFLNh(b?n<4SqHRVV`K#Z%&aG{pR^0 z>8)WUr1Sb)?4Uf+O%x!9!0^}PY&d{2l8QtdCk-@evN$Ejmtk;VCPAV??bik6)2TQOi$*_vw@uzk)`L^#PoMoe8B!hL$)0LfV2waRr$HW$>j(O=@Wl+ z?&u8NMHcz;x%OEK*k{xw-3w58e#yX#)Au<$Gs<9WZ1l**7lE0(e;HcZe2xBC`hxat zlcyeTnxKH+N24x8=9AQGi3CGH>LZ6=%Ga`ogJ|Vx}lnZjzO#_OfC*(&4_+7{;2%QV9xWzcXgL340(xRSOu^J*ToPPhkPefZtCa9M>Kc6icabtnnjT~6WZOP-9KFwE}7ize)oKY-BJC;MlRpN zIabY0^jY9ixM9q5z#eBz$2hk7j+}wfi@Yx){e?E}T-9=-*C$S1Y$K$KcuzIXL@sE3 ztQk%@W;`w!I2*jMef?#fS?g8RM${!|J*U*%NRHHmT*B9xk2KE?s2E^^x;_>=mVLsm=GB}L`G)DYb$ z{B`WS6k4*`WIWiEigFF-N|llZ5YD4|vC=}QI3kfk)LZL*_7(}oug9A_qkuCa^I2t& z_w(P&5*%qD+NSX)|vRRw8se|rqzC3itNmhk~`p}DhobE0D&z2|CLqe zKHr2xN&O5uztx@ViDE3#MIQUC*>tT&JZ$jp1~IRII1kuxf5{y=Ycy&Tfzjw|NcI-EvEM%F~3{keIV9R)Bn1`FGItQzN zbs?j{N~N5L)4+xlHxdhspXhh>Q~GCDj-tN{e-@r2#+}nBy;MM~S-RFZQhBXup-fDB zL2)Ca=)i<5(f*7;f2{xcycvyk!v{#qKF_90uq%fa>&5*HejaT8K3zX&- z@*cTG{;peQd1+aXvvK!)bX=0|u}IpK-N7z%!{}PwBe#v6aThPn2X7ayO3rJ%d=ZX! zsy|-;%J-)8ea-IFCkStPZSul}{lNmJ-Y7z6Y?QANemYUfp>^!Zt8Pc?qX3s^l=GP5 z-41#D$18<#RD9`qKMu~qlR}>XHow!<8Zw6MOL*y0fy*u_MdYM=4?fJ0tIB#t9*rg< zr6G5Exio!%Yxb$j!SP@aM>sz2`$z&DU7Mz>TBIe<&cfgV!I1#70W^alwS_CqCq z-!PXEkHJbK5jUl;OMCLu4{Nfz?w9hjt*)FfN&eV=J8;dS+FF|kO!P&k5n+V4)-B;(hrHj?J=a1+yMY%Rra%D zf>rSSvYmEQ#0H}sRGlR|`p|~ANFg5IN6k*lg+b%}O*`T(I8H2{C_Rx~djhEcA>)Qj zv9fC&J5C^*fo>i$SpMZ9taxcyq}FtAn;X_p!=PR%c`Qo2aD@M;Iwz*wP~t$hKslwJ zUdj0n@MExlk?vTLc%ts6n{AFqe^aGda-;B`^c@#3UJJ@v-KP^OcklcMcvWP_z^2cu z7O~X@Kv;t)#$s&XC3uc_F9|Bnm46Xv%wV^q-Xdw^kADskm#%}+icpjjbuIYwL%Ejn zwH(e53H&6YfxiM0KaZB#nv)RnX>NnGF_X3L*z&10n=;vK*CB@@wO$SC#c^c@i zW1PZ{70&oRjr|5`A>P?s($U8Rb59vht31W* zK#SN8SbPs%_mT(AT2udE^xEuL7q?7ZCEm~0wQf;mu6LXPqu9|NWct) z6>L^26djZiA(|3pt*QNf7Sa?XC5O}#f;Z&~M`k52$6H7*BnnUE>Z49g3X#Mgdbs+V znwWlm8t~yQv@h*M3sD8>ev~AW& z+T~?d{(VKq1<^XA7ej7aXq^ZCSd}}^s>a!})`xXM0}ChFyJQQ^d7)--WBLZws7z`2 zA{weNi$9CZi`}H>|Kk&|q>W`5fHSUCbhkIvHGu+bg}_1Zdu)r~^#ZUU0IL}!QL#Om z)*-Lq{!l_!)gi6+UkmE#ml27%7uwRrb>)xZH;-Qa=n^KajfHtQYnMi~xz#gQs&yaj z&ezkIV%kpL4A|Yh8#}LsflqDgto$O_n9%mbt8K$3jxl}r+6d-l({pUQ>{+yJJ~Pv# zQPe0y;;2p7VC&W1bk~h>JIA?@iMHw!a?hh~{TL=+YZ3oc$#pLZ_bamN=aOwpNqyT) z)I}Bj`dyEangN&MFR4uB)>x0JAnSvWtA28R8_EuOkX9|YuV%b`-b4IH$fT^Ca;ld! zzZ{o%$!wp6h%h+0))~tGbwA&d_~S@vo2Wf=fehyQ*5iUfQ-K?mV8vq0fr>{MVoCV7 zd2}Ct1(2!=3_`r>8oTK0OH38+YP6p+f#c7xd25heT!O-B3 z>EGqxo-4}+a*27X2Eh+Td>jm89zTfd0-OOYpSgnteJ3U;WWcM<^!(Vu20h}(!=(t7 zF19=rr}H-HVIOF{wABd3mrYIO z`nt2Y1KfdFbX?h>WZ#);!R5j@p)RegGP{+GRbE?MXo!A!VCrcr>9G4dFppsV=eVyR z0f!vTEN%zRcK&8?fyc9U#b3M?uX;fV(7&4__Df*ZIKVEE7zR4DnnAq%z?#5bF|xhf zTgf#g3a|~>WZQ8O=clfV(y~-G<2|fA&Ni0wA-;dixWdp^R`hu&U3TwChyPDUypa8I zrcLrpiqEnk;U-Wu2VonXOB~-*gr$MZt}S*Z#9nr%MhZ=VL2Ki6K8sDVqFKFnkXrF? z(L{t+{;HyL%hmrTNqM|JpN^KiRF>sJ_VFh3mdQZwq|s7R^>=x&`TdZL~EA zxP2vB_eo<+T86hp;l|xB$HcrXY+VVBQt25H0?H zfM6uUL=c`di|%7PnC-VZWDPhbQ`0e!R0!Bq8qztWjad#Zg22rM8+*^zg?&&UmWJD< z5aYOQnk?8}vMD)(o9Lmxb|n=litV-|=Lb>oy#1sV6t5A`XUIU_YR~jGjF_;6xSTZ0 z&W=`4X+kmzLc2!)Z&9QDWQR-I&_N3PIX$78==Hx__HqY8Rtg^sD@FERB-kMGHk@Iek_DZ*?v2av}iQ3uk1+mbIKf}F^+S~P>({y9zshieI+=-Y6} z`k(Y^+lX!NqHIt62gq-o|Lx&NuQ%VDW@jOE6Wkh^Us^AXm|xJj{M&hi zm3nx|$oSp2kfihSoW09H|eU;zE$M*sveA-+#RbI`nkH6WT2#+#SsGAOBTR2|m zeEk(O0;-=D*jxGiVSIK!kqpm5)_xaBkFU+X0lymTLAmbO3Ak7x>yT)XJbfRnMP|)o zUE`oiV_;yBCdYAfss8_y(3Do*AHr<`_LA1%`HL^oo~e;%WR=J1CLxV{uT#M;<#yQB843(XjlWj{>J?F{X3 zulA7|Io@l?wFpv}n7vzam?6-=h1tU8KCSpL!v{sOV|snEJIVZF(L=mB=>;UGj?lxE ziC&UKHSfpx6~L!vPU;~6hUG>7e8s2l9_}Qrz`{!U|5DYG;>GVM3v;>UZK`VE>#PoOAxI;Tz)F)|yhPQ*D3{#DjiVr`ia?B2O z$IE38D>w@W|F7!u>`VPn)*Sw+hIn?D%p7qn%o-JR(;$KcoUDcPj>9BCa-)h!#Ku-4 z%>fBp4Hd#B@DvnTIPo`o=@M7cAEiGQUL57c!pAgoxD4ZEv*-Fa^hp~g?#lIn!Jd^O zQQR+fSJ*vCxeo(c9(Szwr5r1J!yvM!LCMZk8GLB_@X?{=?(@%t1O2|paqmnv%^G=d z?A-%d-(&jC7cBNxj#w4Yy`qh2{+ceGYz>(YxKZt(N2Mq(zDFNVTa5^543D4cuxJH>>9SSJ zsXiPSIZX~Q8y2Dvo#b=;<%@yVj|v|`d`u+m&n-{WfMKf|L?_|5^6ph30}1hVxG;}i ziG*%MFtjTj43MI}zL*Q?q^p(!3CG{cr~2a4&+hWZaTScAd#-EXJM7Fto$|** zZv`iV0k4)*!#z6UlpRh@jdQc*1QOIJwRd-dd5gghmtoY@l?pfgP%#*eKcQzAzjhCr zMY2BoVf>EI`bYb0rPOf4as@k_91ybu;YgMfEs_!9L}$pk5#{^kl~(QyV&e{%;V6=9 z8UTw!&4gibz8>v7idI~UT{&j}kC7#yvucZ<&2K5>tRQiR)?wCWrTts(d188az7#Gk zd9E=2igj6{DBEA}HC5n(l@F7KMCMR&Yo-varhq-v50Jx%gAtQ4=CA6vvQ2yvPU8#b zPU}Lrc5Y`F?*V7kJEG&G7kT6EHeGv)-bH@{6gDzH_GGHdsETbe*RNJM{VKkV|KraH zKY7NdA)vg#IMXZW!9^F|z@tlvST6(m0nGkLPXEVios0QH7akw?t|vxZ8_8%Wu5Otj zl4nB$ia+%n2$x@2L%87KTq79> z-hL3$iDoEx>&LBIf57NlTw`RWrca-i0(m0-$C}#w*AKyFcJ5Z7K#u6gyfWTuP3lcB zRd!ZmH0=zqUHT8H*b0CM25Tu|%X!faoq2unXX$eB`AIsDVs}#xcT{suXR+Ube=8~D zFKWhofbP~=C71(JQoLCC*cNaLqH=p1CV@VF=Xn2LZ2NL>DUaDy*kUt2vFcOi@efh} zp_gtP1HfWcHr-{4heF+vaIUvNQ`>QL2Gs|eMoX)SDfxu~p;MBvdWT}13TP;YItYT; zwu7oP^Y+<61Wc}|bA{ng{{3iO!Z8jk)HmhMBiR7iWHCBkv>cf3OK?+A<>k*x=Av+c z6WB=g4$_>Z^1FhU=#aWGUV|TvOJ}3k1XFfPdHh;89btjgTq&PhtX>}bfFMDkLEue= z%N@|5`UI;Ke31q|nM)L*p~|+;kmte`bK*bT8e(~VHXE$4)&Pwimj`_-Cdd9_*Kt>M zGor__%%VO)`G&?tDhq)De;L0N|h@$a;|&;`;LVzbdTxoG7ha^m{Kxj&lD*foXRuk#7wLCA!6|U{m*3 z?n+0KM{YE>I(Uqp#S@l*-D_&CauNK``L;IcvejWbCGzeM(<*!r#%IusKK8UfzGFTs zrj=)gci^w(O(nDLnQ{$um}GDU7x;EM zXB^I-YgFb_9%-~I^ug^@lNxLt01wfJYGq{Y(GhbS>dj-J;c;OA($yGb)3@u zO33$j-?{fAGhVMMeTxQI(=Dg3d8w#PA0s(b*jFKz>rc)-u4V=tJ=6a(br`$!dM*}U zQT%;+tG?yjp2tNWor6*>*2eDUg4jY2)~ox^J0n(O=kxm;JrddnQY%5ibA~>c#TeRx zKw!PLC<8Eh58D~!ruqNlgdtCwxKh8HQe_dI-Mw9GZ#KrvBm*Ipdqa|^fS>9EJk6s; znG-Vz?n1w`Hl@SJdzxQSoiEFsYaDSx<^tb6@RKD5N15oJev!ghXGXZ`J?FywL#^g!zwF< z`MY`kXk}@^J~q@Bo*SXkc>wV63>rmzgYYKOJ(GQ2w{sQUN`Qkfn+Q@7J4q0ZelEY< zeocUI34inNxe5OKZ}AxS&WLZudfx|PX1EfE1}oBp+%gsEe~ASg25QS$p{2SKiL*#X zDX-8u0bq_)O=Y8_i!Sj zwp~Y_)}?AN&+TcEpZYI|uUE?L>+I(mL6$bZTgn+v%#)exTaP1`_BAHvSZ#Bk)}m4? zul(9K0_nthju)6$q9X%eZB%xq!)7Km@-SLHYeG8-9Bfxa3YHP`Bi*OiI`hjcRY6-$ zTQ%#rW`#Tz#{p<}*S%v`qLsG_OHpHL`r>gM6y5>?`>z5*FilicT(W8CctWAP;!qgi zmtbEokIzXB+vQYJ(epEvs1Cf9zpg12UVx$ta1C+Z zlVIB2)CuxJtP9WZCTxh;m;wtyuhR)GMAt%Ed|2v6Cl3@1gtPHJ10S*Al0QC#%`v4? zZu}i3mcT!~?_-p4`Z5KJYUih#;X6!oQo>x(Q_}rgxE)})p!+BqO4;wQ!@xqj=n-lk zP@FU~9~%T0!~p;s%^6w*ID!5ZfOq}AGgJ*j5lV9=0xP%epvh)9X@C>j36>D*5H=bY zr_u-pwtMjJ^#DX<1#!~Tz>>iXhiu}Up;hSNz+UQ&Jyj=Ip?)0iqm_`i9fraDO6=U8 z9EW7h4Pw<+2T2r%PWB}6rg%niZv6*%Q15c0Ir8N@)HS!8>SK-j)~yTImt2gr z_viM%M#p%#ZLaOM1tGqU*IU+%mYa}w8U_UZ{9tX>Pu*k&NnK=n8)usLGkp}?rg;ze z)dq5U0(|e&XHLD}YMc3Eq}_5>t)97E-zL?3mz_rHT63qhXZqp;^XWJANdG9%<)O`% zHR?5~S9RapOgg%ZC7!W1lqLk)4)kmcc4JuDE*mch%=-$>jY3yntG2M#s4rX=e)vzt z*6!U~7nzEvpDI2R{gqi37Q}q}{u-^|Fz*wgfmKY>%&YLkY>Z+bLcm;1bvzu@7kqyJ zU0=6BWo8_no`s*-z1j=t>D$@P|_f0arE z*n&4;wBk_HVHky|+e~=>!xiNSavk{*5rqTf8N`SPo<3BK&b3-@XjU6D@C3 z-m(dc1Yf(J&@dd^XUyo6{W+&ka{95XMmTdQYor=Z8%1VwSuQe{$2+>Q>p2{&)-g%cA+6mfD|34HSB;Ob^ssP*!& zcmp$!2-Fvg{k{X`2*G7Qis14D;XlBP?4XG0ZEiIP-{vUQAvrd7D-5@J*ex(wIpzIy z|KH73zp2fD7Ry>jCdWACZ@J#<(n~Cb+7`*wPlkIownuHwc_gYuscUpZHOt-m>ywgC z;qLlI4MxtC&G%=X`OIxQjF2xVRnD%`@3-XMmw$g1C8y6maNbwTUJI`b6hAnpRZY=e z&)l=@K8zXgbv?ElS>tf;g08cjLu>F}@zZlUbF^vS>vv{JQ)i5#Pdw&t74J#0x);y@ zTd<@F`@O#!Qq-r~xv@a}q00|ibuRuDS-<_j)yi!*^W3)o%#)0pj4U>4Go-m{5L!aR zksw^`iyLUX#*_{BYuJ?>;fq2O{_++$Qe`W7k^I@HWHdJSIui_}qTpP;cAIxVdAz*+ zTNj^Z70GOIh@U;A{vW9#KKeu#{6OoAIJT%eC%iP7Tb&9E<41o$|4R{CspfC8gICHe zMG*UUx`a0AA zC{5Fb#;Yj%z%r%&6+s7*o>^|5LvX3V@~uB%?~I{#h&7vsIJsMDizWH}%L`elK{wom znUjAv3OfYi!9$dgNnLwrvSU0)BG8G-Ye&$OkXJP(yQgSmaq*};wdZL&CH9iGL(P3^ z#RgxSWdR&fVPg;xy&ZajeLo& zv0K*lb~{_L~#`-NA3&ox_o_4epED}fBz=dW&=3#eu-)s4Py zn~6*dw_uaz2iG1gIqQ=R-?8S#MJ~Q*d&cyrllc>=(%0iIC*?udb#JqeeoBc|uoT1|e9HOHSTv!rt$Q=d zRpGN_X_a4Ts|f0$URC6^0kXzF6Z0{)EQIDHk1x7~d@%4IAaVDQ^F|EOBn}75!i0JR z7R=)gtUbIuyoh5kV!=&mR7ttEEFrW@=mUCHj4p3en*;G74b+ARts3Uiw{X5jX+I8& z*!yx;Ny0%@5?ePus@83GQbdh?t7G&mkq({^w-x7*-E&;xydDu!VFh!VW&LKwFk%+^ zjxp~yc7m%NV+^J=&T9}xPjA6Ivk+abr8fP`j<7za(rj01BJr>r7_yw8Fv8w; z##Z&c7@p(5mW98SAPeOs*>ZwEcq^YpjxT#z|Gp9W*``N7xq{7~pYr$)&FngO`~R3j zHb2A_R=9Wl;o_El{w1T#BNQdyJl1z|+&sXOs`boa|0=&P2ZKl&;)g zdO8;lB^&WRdnkO99gw>Cwc@1%WBcc2Mzw0e=13;<9~*0=*-K@D)uwKt4Ruu!&i&U; z;vk9yWH@N-q)&Pn|0lB61m010uDRvLafMNgk?BGd1 zN*;FLozz$Z2FrS(jQ-Hl@M8;i+^c!}gPrch0;=ss4MHDeIeniq5Qs;wcGx*}Zs9@? zQx(|T@y`0>O54fj`aBPKvYDYToqq0zrgDuZ^&385PRWcY1jp)4B&#_kztNLNb%j^Vp+>2Kh@z*bWj^DEM3SEQ+70Jt?>p{EVMY*4^*9@P{!Q-BX*?X*6R(%(zc^Df%@95qR?F z(AKn(?m{%?k@S*{&aMP=MP@$o!A19=aazjJT6$-7+2VfiR^?n|rv{TuYMC95shs)z zMhBOY9y4v{PkMi@rN`HQr5%mnou)DRw@Nuz$5w6x86HRXSh7JIKr+w}Ymlu%ox&p| zjh$ef!jnm?jCv~PAHWR?10&m5)7XGcPe;r^681~^ra_~fs~W+wm6DMONg8Y?gfh5K zRCqUw{ZyMdJ3_Pk!u}GNYl@M7=N%-KIzb%cz3m=A1OZ=rPr7L-4etB z)c=Mq>MzGUZ{yz$TfJ3qZbVYR^$s2*o%_vNW*6PZQtdk;aA^Lqvqx5~F2R5%vQ;Z_ zTgjBSN&PqVvWP4;N}temeHJwo3eP$TG&9W1ALIHLlgaQ~g{*LXN#W=hbW$f3<$_Ra zBbjV}dSN!OQ#(%aM_S?!GC~#>NAi@7L*6P^0+A=yfAHS#0KYyrzLz6!nxdhlx|G{I zap{R;jNM z1k@@HDf=4~55E@r^`$h2q@(w9IM?RkCqjosJ^9aRqJ$%!To)hrVrzYnJk8el) zns!P4@XF5roO3II!sJ`t)Ew^d*gRqcb+MKWbmLD@e{L~1{OJ*xa?}co*UhtZseA5( z8TGMCQSX2|)_j3}*7TjPN{{=Od$>O-v6R7?qd_tKHe z$zrXwNwe^8i@SJ4zd#BvOJ$`?jrs5Bu|e2o8z8O=J&H$G@lmUeI_x{6&F|-t= zkvn!yY-yTQ2At>H>Qc6BwbGoP-N}J(r73(4bI`BohxA}hs zovm_jQ%YT_G8WGiI1&RO&YSrnk5

g;kz|jjREbl~lFhznE@gxPf7Y(@<$BLgkJU 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 ql-rAFNBjvY9E{nKbHX5to1nJ z@S&O1Ovv#p08-@9rtmzjn;ZeGG;}=R1SmcFoJO5SRcb{{A{3Vl3CS=5+Dm?l5$GFj ze&NU5;0Nah#j#cw{H$@luKKWeylTX0HLBj3YJ}n%jM@}busj|H&l3~gHSDD(gnUpX zGuD^KA57B}_*VDQgjFjMD;tqs?(=8+M3>JqzX*JU%{n6h8y^?`28b1(8P*}gQq($s zmfq2DfZpwhLm_DH`)~AspP9AN`ON1!{Rzx9AF8e7&JRE_4@bST!6R>?f@ZyO?|!cM zHgMYXu!$}m#@I&=mT*E_^$&KcrKXcGi!NPuHi($9auVjj+_3MfhZp_Kaob}XVKdd3 z{h>#>&VSmcF@Nc7XyA(uW#Crw)5WjrDc%lyqeO@hq?yNB$&UN_kBz@EPYgSKm2DCg zXm6`}{4ITwD>)MN@SX#55qEjj;_)<~!G7$~p=`q`0gc{kC*F@P z0~?#U9L2lQTE+Xz{{w}|eD$0CH;}p!(Q(BM^|{WuVvA*ztc9p~D}QjRJwkp)?Hcvt)*HS(VTN$+41gatqO_aI4*%V)R$gJeH@+OytgpP;aMMe50}cSFYxy?9 z`VYGM>~tLQ#~%ZTt8K{Y*Os!{&A*%3Ta>@EE}rRcTm;m>C&4j-#bC@wE3pqnn5muU zGZ_OB<{5K*0tf~w$gB%#{8n3-5iiaI6Me{93rd=%eAx5I(tVEi)`@zt=l)x(bg(|n z4?dW|=m6#L1wz4S6U)Y0>qa$QAXR=k#51#XTNqAV=uBzNlo0&ErZCY*mtDtKr@lZk zRWsRK{{`!u&hu!HyCxggDgZE$sY=TfOMc)-X-Yjo$ulPR|M$Dh_6IZi4Rz{UW9O17 zq?A9{OzC7cxgj=eG{QMgNRVD?1C{`7K>#typq|{(5KUm#7z?2qzmnhT$wQ}}gIVFQ zgff>=*j$qEP9iTs>H@G8O^KcCrx{iJ*xntLGp~2i&5tnI>ZNXo;GZNGYg2|a{1%Cx zn574qP%C?l81_FGHH;+9*)1FI`>fMdyR=um^>|~4`|~Jf$Z-&wL5HI zH$)DXsQJgwAHD8@Ef1`EHO;;aTsqJKzwf8vHhbg_e&$mJj{Jpgx(W9n9FF(6Ed_Qp zeg)QqIUcu}@}0K)Ct_dP!5w|xt^bR>E%C}u_3LSS_6f>m)Fu1;%t6YxA6C=XWgdwG zO)0o8T09w=w)KFlSQ{xdP5Ug$49fA59KFHIfkyB<{f%Iq^$gjqj`a8%fDZJJ{ix&fZpn_*`rosdyw#r*PfF~J^@o)FmTG5POA~1o zf9T8z#EwdVDW~=b-A}HwDQK5@&HREQR1(($N@~AuI4bR{RGof&5Yf&?l1c9!`yyM6 zbv9a>D0Rn8RsT6)=ZSf8O^c*}>9P2}a!=M_NsDvb*n<06jpq!v!|*jyOvjsCamlXH zgO_192g5{NI=F!sA>&CECeX;x*A3}DBdWk;Z>1q@=;}(@@&0WUAtYO9s3AYoC;8A^}Ub+XqtVdjz z*-@MmeR_%f9ZO>&Nz`O3>Ex~R(0?%N^WdFQXPT4h6hH?U`WOh8m#nuz2ntX}tH&`9 zaTE$r)=*vvmC29iem9_=9*6Y>34GG+2X;cSJEi~$O_THAU2D9RNc{CNI0$fjNR|SA z;CM)_a0fZTz0Y6|3*u$_qM^>BG*>nq@EwTaVNmbIXK(7}$XJfsqoQAJp zmq(%c5xz@cSz5WqUT^h@NVjNdbZT2bIRY)e5QH?Ab^((@FHS>2hUtXG&6bp3fJ#Ne_fx z!lumCia;M|3q?C)Y2C92M700QV9L-JDDXw#8L7Wf;&znX;|p{_8H#!njBu$9zCG%a{2S}iC#w%uX>pfA>n`a&`p7!%Xa!tzFT z>8TlMp?4JN$29XDSt+nU0pm`th?e8%+v1kw(Nx{lh<6O3ca2hZF;%15`zcmzni2BO zxA{eC6hl*U3sOy*cJ)&I^lMzz(?1`x?qdn}uS5RqnXFnfxCvDKYN{3-kPEmKRHfB) zN9j@?|B+|S3%8f<_)ES=0Ql`y**)INNZn1cx0+5`8neF}VvY2z@XD(U)8k@bd{g<^ zu*ygu2UNGR%X7%$bsRdYt#EbcNLe2H*rW@Z~%M%)-9`Li+rNGTjgBg z{xw`c?fdhWVLxp;45imwO^jHNzE)^enw&NdO@Ao5DU&RRbbS37*^=jI9GpAs)WjzW z7zk#NrfJ{YZuW7piwiZ4Uyd|;8XLS%d+v!&}MUE5|i9RfA#PsIW#h}o*kIN1XHH!V|;QrUm8F6wq+6g43fYdqV^&8>-(`w5C z_khd`9}MYzc?&>Sde%&Q_wiDBFJGb9Pfg@s9HelL=%BtOPW0~a>F@kGE~7omgCq=3 z2z81`6|61Pt6x)qk{QS&Ge#d?kXxzUGsH^iN3=}kpu`C{lLlykTHlZ6(yB^WbO$V{ za9h#s_M-yH0x?}@uCLaRCd=atEXOj;S}7g8+hk2wxYc<)TOk2Tl9JF{)N?>A|1TLIzsJ8$Pre>|%W1?-_9zBjpfl=*>|m%{7CP6Eo^GNyWS=QRy?WI%a^xRp_EM?4rN* zCjYm1tr&YA`17uU)P@>8MwOZyRD7s4V3ZD;R^4Zmqs)ykgOYRY0vp3_07ks8)fMyI zt_0FOr!c{)ul$@*(7>i}YesW_;?2PB!=vUZsfogyF~up`9bcnF8n|W!JFxpDs=GzY z#_3V=ehAIqj4>s>VX)z~BVxtd$c>?u6-oE(yO(r~ z(#bMP$gDZtn|NZj!$S=3(?fA&S2|fQQ zU&``%Fve@6z8hovt2vO7gK)Qly+aXsFZ(x89cY%`bnd^t?K@;d*U*#a%gs6#1A#05 zcuL^bO>S060dXBjCa`|Kpe9u!0g3IVOBqPQ!e1k1^?BB|XR3 zc0$xufXZk=TPBnu9olbUNI<%^Yf8XO{<{g-kVcb4&5 zwy$1E@R_vmg;4*XedKIJZ^pq%AA6c{U34cRTo*)j9?BqGNCi0h^k2l^5PM(j2(OGN zeE4!oRF{KuD}I!3J|U}+KHI87vVMUd6p__<8_cki7+-l?{F?CT0DE@zU8yO(qB7UK zP(y1xRoa$>csTT>7;SY@F`dL;IibJz84EKqsVAa^=`FWRDGjX@>E4$K(^hD?XXjZR z{HQLL0A!C>C;U3@wBnRg?4TW5no9{bLryxzQdfY^4z>>A@6wcm5`+4#)1|qSq;A@rFQ&XHb-a>n z*RpBHYwR%g8+Wo?bUP+WE2U?PQ0%$c<1!rH_||HR39eL zu?1bZ=#jf==gpsA?Vocq#_LB%|2nxguLn|Qr%*d;#Ibrm@SwIM(3ql3;!Vew%@!9q zlDzu!S&3F8*Wq7OL+|)1-40Q7_u0F2oxppRG@)Z`v+-#8?Kt*%50^}mosl|zILsDL zI9ZgK_i0Ak>BL48f|_$0a0k7BkOa}BkI{EQ%K(w%PjeDI-IHmapGEcWX9IFFH0jKT z%aNY=YQ%TC_EGyq1;no4uC8MFd`QmHwa8zY?QU0?3In%m(-|`bel^LaA7_Q-xE5Of zw01PdJm37Rp@?j@4;RP?4CTd_*!%gF&lvtK_7qng!x?p@#D#j%PsH7~j~I(=X+Ik3 z32)bKo+Gty;Jb{=_wKWVDCMjxg$;i*wp$On`K)7YIq*B$U7= zBhD!PZW2y0pvQc>Y36z0Ji+iG_&^PxVQe@ zy&ne~<%&$YE)SHl6>5Z{ECb(F>@I}JRs;~0SDD0qOMVniCyMbtEX<2&!dFl5RWPS; zgAh!*RJ%%PVV4|6*$zk76o7#al?W!;Kso=AF@qVIek7csuPCxqaa(JhI1zgw%qD&f z+DI$bvBqI|O-$LTOPcthVGCv*wk8s$sP9TKLuU%4Mdvqs)}b@wh8Kz`Sc;v5q)GCo zoDT44>AGj6%MCwQqo$SFFSJsin<{3?S9l=-j1&RZJ0Omgss8zd}YOP#s;B9u{nrC8Mvft@-zmlbu|l z!uZ{E-M(EO$y#U8xqk}M>Fo|8Y9eEBi9*{3eJ#Uu1)=|BC71 z;#eg}dw@GKK-eMd1Qm)T6RIm!7BwYgtce=;(RBhb#!fNOsc|HnWKSzT`J;J%_+}-K z@SsdRbv>! z=&NqdeVa9hAD_SMQr%4ssMc;! zxBn~6(gSk-*SG_VZc4w*0LOKIyXean%yrr5?XV}j#_ntE8eVVAfoF+Z!30M#Ea6s7eHKta?@RWM& z+_0YNnq)j{aiT;m+MJRKiLYSa51|0X{*+-o`~k7~P|t8A!A>Fctr|diJ2Q`l?eG?;?i_K;@TQiX!T}Kz6Jd^A z0rCNverVQ?a6$82JBI)uP;Wqg&L0O88`l%Kc1Y$IW(=Ua?l47on& zxAIZ;+@Qu9rdbveKK+gBi;dGdB;Ow?aFuVcN1sc5!LRiaZ=|=h+!tnHU^sMhd@MKC zv~RMGtF%MF30Br<-Jk&i?x2e&KMkfEWC$*@)HRz}N<*)3T+rLVacOe}_drZ6hlVYQ z3d~=Uuh00?qJtM?F<(;uV_0^kiWeW9K(X0eL{8wU+erqwh2g$pXhRTO#B7C2+n``z zqmB0TV}+voh*jd#1+wYsyAi{_j!n}Tynjj&P;%+b$w2oUUAP~CpA9Al{X;eL8{uvE z!$Yuf|2V1t{#YS4X%3_gLa^<_9=)M@&aAzmYFRUnF(P&Uo489L@eiST0m*xxIwZYw z666$E=*27fS!Ft5Ax+LA`DWD3d#3wWa=zTE*Q|}7+vd}2vbIe4ohKp9`5J((NwEkC zJXD=89lK`Dig*v`&CWEIds{O|iQSMIc&vi&sq-)}{WWLG#gtYc$bgVDw-G{^I?Hu2 zKDm{2DbI^rjaf+IF6S#X35#GW37awN|7YRZRwQR?#Vn;n7c9!on{!@C!(6?&%VX?! zh41oE(Wq(i^0T{7ZWYQ5b;?LJfU3?059^#;J(lr0-ml6lW8JGMNnp%<#`ZaKEj;~J zo=`X|6*?HX2H-{hg+h$v}kk;K_?nUQ?iAvdm=V$B3607GPVwtK>N-!KiL5f+sB>22Du%bPB()d35@< z2vS~2z?4o-g-|7$8-qzPEf7*%KI)A~pO)Wr*N2rU&>QaQVxz%wg*s$kW`8!ajF3rO zmDp;2jXF3(?ewW95)A%0JtYRTCCnZk)_WTi+=tKHi9cKiupm@8dstlYq0L`4fBFKt z`q*LGOk}X-XN;zu>2QUlD}Iyqbathty@r122mUq&7nAd2wD75@PhJ^Avvxg_& z#x*>~Y+5JgXUkvLxHtSQo6_un)@}NCx-=IptjAY=>*LW*;FY<5Qsibq*L-@>y~aHI zZnGJ}r`d33$hZ|f?@p>vjv{*j*IOjXDSRwUvy9MeV6DR40PZo%>p!{lBqvgXa> zuvwiIkxsI$F1}u681S?%6g@}A9>m1DLw>&7x{TRvcyxWd2kTb;C=yl<;D>J$9!Cz6 zBjP&XC@Q85ci4yiv1l?@earBSc|WDQ5%#>wA%36vC2v0NgQS4lTOBcsc;1%D-%yK< z6Woh&8P>QbJWnDY0R~D26O(bjMB}d4X?3norwlXFuN6>JFYo?R84&tpdzBAl0)iV&|?G7C@mAJ7d#YN@K?_#y&TQ0@& zbjy=CKM1h5nf^Kg^W4xC*ZFm1#VN>!*C^RG3w_3_E~>&9c|KBVlxK33t160PgDW{x z%&urWa;MwPNQb>>a7|DA@gt8?=7GeFe=1Cz1_I~)0A(tscm`&@|Lb!$9_#QhGyccW z$^)JBR!SFhmvHP&E6jF`k7mkUr^sd^Rpl;g@{;wm*zSd zHy1NQd*5V9++umQ7?kqS(lM^2Jtr`{xXM|r23F}E#J7Qm%_HoRULPfd1XuAx6M(4X z4_f5Wt*9f-!>xGSMylQ#D09VO!WHX-F6>Py+$ER#&_?dkk2-y5v?FU$oaGN!T&`2G z$j@E3cZUg3T{pUU%d8urNwQ}2xe;)Xt>+i@xLAtn> zgVqD4ie@LJWE9;f*Wpv=dOv3-XD({PzYt({fIe}z5IVKrY;ObqXWIpH!UM=1*R0mD zXImv`tnxWN^vF|)_rzb+%k}!XAXGopMhmYE0o{L775z%ikDy37_+#}(aPufAnc9E| zm{AxDypVw4ZnbSf{sU>;(QtUYkD?ZDG<=GV%gO5dh*+|TZ}@cJTT~#t?^HbH-0XnG zs$|tIi}t8&>#98K9*c|aP1Y#)tiFe-Q0Pe8O?m5^^?Hc?bsE0V8Q~P9e-hbNjSt(M#jkxu|j>8y)q&vodHg|CZBxUL(ot4v#AOuI@J2rETOA}mCHV$ zGLJi6a7Qj>K;=oKt}(3Y_Pug50ahXIQI5NX&z_7)xa!2SDf8%$ghnM-x zUuF~|kjuO{&hZ|wEl4q}vW!pE^!Ybk%H8j{V{_y?a@BQmQ7~q^dsk-@yAXt)|Jl$I zamuVx(zXzOv!%#6GO*a?W~L<6=@0-NXM)hU&#}(V8Z=W(YN|H9qwmnz!aZ9Nm8v|Cs#Csy}GgFiuahE09(_ zLg^E3|Ku^zOk8wppACAhf6|EUoJqKk^=Q2CXLsr(LK*5795^%T;v*c;zD;+a2!_71IZ+~k@|cud7azE6W*F_@60V^RgOJLvJ)Ul!m!Cp zhBNQ2bW|L?a4#?ebv?|UC1wvDUO54d10LS0=g5rFWS{#qqY*ojGB4Ve_6cfh8V>w< zlpRb@5KoKe^p)R)Wa3@!<_iG(;%piDeEa4Q?DS)0S@3LGNJ%@9ZE}7bn*NkPS`nJ` zJ>rh@^X>#)?CT7*ZU{{EAusG*Prs*s^w)c zhvcQ9ptim;)}OOC`kt%axX=LB#J@|UniSUAHI|9WS&4m^v`Bk8FV6Ilt;^%Y84`8S9 za+GCd?Y?sDT(`LB*Yt|`xkyH4dKk~DWil>jF)hu6We+ZN%_~-nsW9cLlp8Y9m$|7FDhy#B%PDxKhgs8t}(%*x8eCC9fG1+qYl zGyjc@z9Rc;96siv0v%sId!uBWxqk4kK|jZERtXTRV;tS&U$`Oiy4sk|cjWdmft~F5 zqS(njJ|p10GCv;l9|K&@ha9&q__D|`{IK!|#lNrIwi(SYF!+wtOcxqydAUur(exQ* zn0Q1$@{pgpa)cFi?EXnOsQwt^KTK&IpNb5++=8reGqtG|2VKHky#Qyc`3aRjqZ5S5%jCwc0cw>`?XTiI4I9(<@Im z-M|vJF_{M^Be$oi?&r1Ep7fArvF0(^VSj|wgU4J0F3fxiS}aDQ`le94+B|h8*WQ@} zp!1L6yO(1oUWv;MMz9i{t|5yuNHgvb=cvG}NVgikwR+fI&XCt?^0MxnvMslwV*8bN zinm=zH`?KTZ{Z8}y=-3+NYD782SIZ~I*{Eq{DRGtV5JSn{!)g`{ zHoGe%BWVPbbH@gE;jg8%A?ENq=en|E;!tB7vvv4~&Q8^1e)aR~>1FsR<$oV&5D9l( zE8UJM!xGRG9LUG9TuUfi1djGl_} z`|(x0p%;*MIVsM%3M0V5RS&P~{@OzFzaO!IfCRQGD#StUUjVLrXM6FB_xkxuLU?4P6vOG04QeErzkI{H1@VA1+yuS+k+lG7`1h} z7yv_hBA2|TVV}l0X2Sz)`(~H~eG3QbCas}F^~&qRU990(%*P#^CHR0{+9mioEZ27i~;6x)fX&1?LJq3?OB3cAJf6jKJHzzlV4 zE^;4afq`&3kWMXaOf%t&Nw)NOtR`QkYm%~mhI#D?=MId?>HQTnvH0Y2jumUq{yF*2 zN>3u!030@mw-7+j8R&qzK!S28gRZ^f_-dV7HLA;9h(XyhL^!alSu4%EqWYEJo>)xQ z&Q!^;dVawT_hbQmgui zD!-{G{hc+<2h~H$|1rEDDgV_x7X#^BB;;ssPc@AD(nTGB?h^$k(W9hgmA*VtV$|}x zYQE_uxyQ_L&7|Xgz`=a43mvkBAfNcStQbTE!d>Ixeim_TujyW8#T&MtrA$e$y!*7Gln!apVUk zfK%n*I3((MbmEpwSE{O;A6xoZTxyXJ*z2bhYD)M0$8jI_;iy@(%|5O|wIycvhgbg> z>Xh8Qpwytgp0h64O4$b(?~ddZZS|rm`3?!!=0ztffNvAuO*IDL{0Hha`zi=F2_l~s z!q#y;kfTF} zna#rwTZknZO0-kFm)dQczW#Y{(v~Keb@8!zfamsmx^RT;Ja1ydrb{T&GInZ6D z%Es?9&#$oHk2$S)ykb=sChI*KIN@jJ{OJ$+;v=Pw&N#E@qqqm z4A3hIvW92s+I|mxs+xD6<++%w{CFgL&L{xWVXABdnd}3sV;4x`sTQ!ZvBCZFZg}c2Cg$79+g_1Qoc{p-GIRbBz9tRQ?`mhUw6r4lZ0 zTc?D%m^shPtM6`nH|T=b+IeasH)<{mAxvCyNF(Q{m)vpZ)z*z72SvqXLs#j#k>-@T zK#f6%aXrP?vmF{ABanok-sY6&Y8~K0DfnFZib_4C6&TmE%i&CQ@;cel^Y6kFHbE0%=Epww3B% z{f-U*Ubp^~ugD)#+SfHlt=?!IQZzDTt>5#OoENZAg;LilH(yh=xi@E_aIKJ$##S26 z@7+abx7XOY*(fDo?*|+yk(!>gLoCex`ZluPQ~f$A=%Hl2MO~zoUf-bxxO#$L)P2MK zm9yE5;|&wN!_{*3Lh3|+Q-fCE-tM$Qzy zz-KycATsT-59U!UZD2iXDuyqVl<46f6gB9UGab9ckZW>jEPljO%H#}P!=)+Rn8hrq zU`!3H&i2G~?@Rv43x>oNPAjp$+=b~UwPQ?`1@B#CO!$u~lCMb47k#lAJPYOkUjSqV z@pD(_OT=r6y>yjsJ`j{vyHT=j?M6rCvt>L&y?S!-J#5u3AGlk%y*)GHE&BFxqu2LG zk?b{`P^GVYx+b-g=T88T>E>W)Rh~4{*x$$vkp%lkE=>LQI>);4Oh#Av$N!onmW6`> zU|vdmh*Nb1f?8RhIzfci3uyL`Exd;srXbKRx?o^Q>*6!`?+LkChsijNPzv2y`uK@C z$KQIijAO3tW;^>U(`EZjLaiUFS+d!;H%@cPzI~Dxb9}Sq=maKEmSCJPZIe_Li~ZiX z(PR1t?A1(%1a&wklx<&kkt@^v?TwCWhhmq8tkAHAm{4b28r1u|cI+dfzTpd8xvV@M zM*mZ{t>xA%+C-y~ShrGPvqRDgy_J4rRK?eKg7K=k*on%Go^6cyjJJZFmMH`g)*m0J zqXET~S{aS^`?#`e#>J@WVwQWP)OIl&H_t#Q--h7!nMx)f%}2|Z;rW&ILYHNQ%pqK~ z`|e&om$TdjswCU4KAR1+munqYD*^YZ-&ZFFLDJb`&>>OsM;AscrmMe3U?h-P92f3! zUN?W#XzdBpO(`hin`YH0*{y@dUJ4m=L(lk+A!;2A zog%w#QEc(+hBqH2F;6ox@>t|COhm1vUEu06{qSPC$B~;;kX1;+D>)r-fR5JTJDHPW zc`U;j&E^?$hmimQkd?&iU|^cb{D@5o~gU!3&pYYkxH@ z4b*iLe0#k$av85%n6#_|Ovt2w9%HS=jodVnPMt)TS=AyFcjWnpH?8|aO=`WWbU;wf zW4)8+<@nWQhHm!nI0o509kFgvgX9eh6j$B@7*h>^-0#t2j#hyxuOD1_=F*^I1Z5PE zyDouGWeKf(OFqfjoOC{fY<5^*8PPBkxby8u)!pSSDbuX9*QWb**$8Emz#X`QyZ*1ZNJw0eV1-;!tjYyvU%k++1?Nz3c8 z%}9c)bw0j&TUecpDsMp<)z44}?CP^yp}Qq-&)*V)lN8aHy9;7g%Mar&SIdm^(EKdvQLOVGeEn|rUG>5rl9$ZYu|b&URjQ%S9$9(Z zuHd*nf8B#nyCKqVRTQDV`9OING0sEV+o2QZ9LRNQSrox(L|EZ(C_MTkZb6+wP?*pr znJ!a*`xSoL`4sLH*8K1JZ6X=@CcYnJkjdYKMsb-9x>xSg?*`{P3wEQwbt|Vk#V^mL8(ZjzS8W*Ng7g3<5UDjmK^4U74w>O%>gvtc!=zewlA zlU7w{)WeVaRS%Oa*>ZCipn%{@=N6KMO%|38x?7+MAcKJw;a$*Up2wjV*$-?7PXssj z6WzyYv>$bD_GV6-S$=dQqIWyFSRGzG~k z_v5ll5s>j30>z{eh>8%%3uQ!WEe16uN)#g21?}(~+ zWemJkl%{VB@4+0JM|{^tD5K9>gzf!kVd#gye0=t!7UP?ofGjUnbwV{dWHDY%$aKQ# z(rlQ3hSV0f4DZRFnwl6{fzmPnMNF~3auj5B2DFI?H=D%D=^`h9cHT7VK50ZTgwo14 z>6d&pfC*J2DQ2Y*WSG-6Ucs`TROmm;Mo<8fSIGBVS|q2Ti%!&_KhYhC)4 zxSj;gUxNMd=#Il_tn1XftkdRI@%2RKF9Hf{`H-E173m*Zndly~l9(mGKTR=sNz+Zd zB4q*&&TYxgKfOBNc;G+e`nc!=o=iD)DEp4-)lD8uddL>e+3$P(OeC4 z0)E>HVkY8ZRK}1)k3!a=Q}Pw z;Q?9^Y@f5zjob6MZ{Ac)isvnfa+4EccC2Pv<^*%IH-!-BNit8wLwBI8YFG3}-h1r; zt{#R$N|QVBz0a?GojrE(S!T-z!+->m7+rVenCE*^`gb)0iLven&`n@BpRcng#IPY? zvj4P^1@Jj_xzyov88iODO!hVhS;G6n++K_8v1B%ap2%@k>6|P6u44CMa8*T6TIbf< z-?b{;bF>qeez9tYI1ks6Q=(LG4_UaWU;A70tiju(aHc-O${zI3PEz;`18O5HnC zqFB|Kt=oo|Z+DG#IJk9^Olv&hn%@aKuV6;xS(0OMMk7)ucsj_aLP~R!<|)5qK%&L6 zD`h)}JE&1G43RBs z+OGKa$AQyw*3LBgLLp>3uD8R%>pU&~@NU(kHEPsJUq?9wElxCAi`9QfW*c9w4_;`n zZTS*RJAjzk2anVVX%qw%5_CV7{l}oNUAkFMa_?|9&NO!{-yg@zC2A)KXSR=$uFTdn z_TK9_d=-fH-$~Ch6_-!D^(LPoW9?kZiFM>hpjz*9+*Eo}WG~G+pKEEQ7Hz)Ck8EBs zi2t~Ysd3xtP1=;pDfB~5*}kIyJJQgW_rl`*4Wa5= zqw{NeDIAKe8yk1{xZp|o^rqQ6MqxqHphvbm_M{IcaO;8tAy*cSzTJkuQ0(-SGA*o9 z7djipe^{Y-`8r9DIvu>t6oz^2TbDi;f{7v?zdIcvY|)0^Wo*m-16l`rnS2uXSdxyp zX(MZy?gm$QV!l$fX}Cf78H=13i=o|ebZai@@NO68yDYltYY6G^%33f_s)ZDQ zyqTsX6e@^9lfVUY51LUeHIq{{Ge5I67XjiRckR!C91+}v@OBw(KB26SqW)R!up-%T z2}y<*$6he%=Uj5{GzE1z1v&c>8_g%*l6F}f%qMQ!l=h|&2<(_Lp@F!U=D2_&d+$CE z(hn}8S<-#?`oF(vhZv-xIkw(N_vmtO{FQGVWgjkwbYh5Go;rtZC38m{-v|PimpkVw z(9;NwnrKDMuTeYw+Vw=ly;F3b!lh*!Zc-+TYri9w?@jZZ^D{*K?GAdkFD`u8x@FAH zR=)1II9AnHWrBLzR)3$@-HLz2{72#N|jfdHkjADO17G z^AWo}hJ{BN>z)0rI;Smm1NHLA@!hKM8IG;4OffTrlgsxD`6>)C0a72eKAp_n^`mQl zyfyCz!R-to%If8vo0S=3&>igYfdD7&EUY;My_gyWU4U6SX%S%&1Lhg(-aYdHS=l_5 zHABa zYu0wAGOS7c58U2{KD#Z&{oa;ur;Cj^lKOino*1vgmS*|^1!YU$mlb0Z(Q!c;uugD| za&?)ssXb@CX?7{^DYI8)A%Iw~5mR)N{RY>Q@HKr|_BIfgK{#&>Fvsdo>N9z8 zMOzAN{Ur5RD~NpI^8_W7P@Vma>_U&}6>6%k{N48(AP;l2(XXdy+T{{fdg8mCsc-&c z_#Kj-9r2Z|1W8v{H;9xhQsQbpZ9Tqr;AZ@%~jd#^`Rq+j)xzG3i{ zS9blbk5Bt&2?q22BR&}PoO6d$8>Cpc_vd567^+IhFgm4M79t!#q=avzK7pc$_489^ z^GnqH*LAU4bFvs=ME|f=Y^l1Qbzc-UyxXq8}6wk`2NSkdQZ|&!VFVHFHF2F!tZvZIQ#EB--EK<$*+wpFJUYe?Cw9dz+gMbrqFZ zz4n{t+~WHP=E}>yR%p|{z{b-xBYSBuEUVUCZGqt%HfD#6O8kx6zUQ%K)8yTu)rT#LC@sAbG>sfo$4>+uBV>It5{0 z2@FONIXmpLJO5)4C2sccFZ4pu^zdnGN=-98oC!jJm%yqsu#+vVMfs^A5kiy^UFS=O zv79gTM@gOh*U=&92~@2g-GTBsE~*O>pAlEohUEmVo!V^^`Yn~JeGWt+clvcK2>5dN z6;1{{9MTF2p=_h#3F@fvgTb%YN%B^nMt8*fS!O{MutbihmLhn1^4<+1aQFiWkF!d+ ziN3p17iaQ+-piL}s7&T~E+#&vp25Rf+8=N`(Rq~rg&6n0@KHSpBc^B`s|S6+KxvuL zL#a~Cj_*^MzAONM0iH4xz}Tcn2fEdE{fQQ4pR>}!dAp@VRV1fpr^4|LJ$#c&9Zr0&PQmM6Y@U&_A zVwCgtC&A{9Yyscm01ExIN06|!UHqnasdg#Y*aq=f=8!@dX|D)}PxpbFmlhqNdy%D8JoF-cM}weXz>^RK$|rCykCW z>#Om~4}k0j-amIq9{6N&h3^aF)0(`yTXzd2Zip2E>DSdlJ@mp;iSr(IdDUj2eNbRg zcFpEHAHFRZW4#f@T80`Hkk9b89egC_Rc-cIjPgg7&<1i+1M&VnVli9Q<3g;x{ibGwcwhfBVMRHOa2<;GkRPIzd={`Ho0#MFFjw$N_1 z;lH@33gDn~Cp75xsu&ny#^bV0Prw5pW~U zD^G`rr0pj39ESs#YP6+A&21Gy$KC4#KBxLHn6yPf)kIuSByLZcMlN~dTfvV%2AsWY z=+oA0uAqI#A+t9-!6A;&m)Y`+j1K-4zi&hP3Ks^NftVgycwU;65Nq2=PMIQy2YlgP zrKkSw{}}GCv8C9*aaZ_Z`O{t~?IZY!?kjlLaFLzR+}S7hF9&d=|6+t?2wIa8TJN3U z;VDJr87Fyjh(D&y`w>W2{phm&PHDZ2Z6CwO>qRjt*=6le;WsP)G#TwNprM8Hy8d+u zW2r9|)R7TYTFZa9fO*k&L(}A6kfsy(TV&j~ey8cwF<)Az&!3|Rr~cb-=r`Zc2tgGJ zjo11$^0FkZAF(%0m5*;uH&p7>*WG-hTW?-^9{%-Se?>#|{<@%5<^AOF?LKZmNja88 zUXvTt6aSClHdSFd&&^sI2qheoDP%=WIL#xAPN3{_IG()Tq)G<;MNOg5@Z(CM-km$j zOFNQ<&T(_14-ofS7OgL~(ww~F0(;*E*th!V)O$s4mc#_rW%@5|%2rFMeyzT7X|#mV zB8fR^`&zE)ciD@LTIM|C(@nzCUA0zDLvDmQaiK8~~8YC-U zLK);pd~V8om7!F1q2E8@3ecpmicY@s7crG{Q>857H_R%$-0Yf5(U@5t6%1(q^o>(Z zK0NYBT7j{q#ri`Zc<}uJwvEGfPuLlp6>Qm7iI~p zEN-E5VEEAU|6u92UY{vku1W*QjdEOHyOz&^m?AenOXbe!ce}AnC2o)X+V48E_W0RK zVwWpMzcXmcCdyF_UKG|pcPsc)xzRinfYAlhh=Bx9pizd=mt8ousrhRE`w>v3qsHLz z;6ulcJNwBb|5i39TG}#Q&#w;b?lqs_iqY65>;w*82Lp)jXQ(lkrrI=naqz%a;J4_iOiR}8N4Bz?04O+fWKpO}wt7rS%?AWvS{De;aZ(5MZD+&qj;Xd4C+?i5VLim34G!KZ2p<9!;beF@&La8k ze++spJrT3YF^w?eDUvU7TT&CA*MW-}G!HAxD*gN*kl^B}%gx3l(N4asvTa1to7DEr zGJ7yNNvPb$ZB6Y<%P%&BRcbiG8LxtoNAk~O>qA?}wDM01#@;(ghbTo`M>*fNO7qQ+ z%%Wef!{FZPFUvhk=Is(tooanSdZ?$6gzMRM&^VTJ8B^-=Nbe!|rDn{)rH=#G{COtZ zDMbxf*ep06hpZ>YY|lTm8Y5f7U%)On?Yz9?gBc1<9_1R2DvH0O{uHdRF@9TR(^e&0 z!#5`c(#JZTs^V@Kr`mF>!IUo;(HPvuJDhP`Bb7>=8_V_p_g=ZUnCI%i_W z!;6z>O_z&g|HC~Pxva-53n~*3(K!~1|M86NWmm#Nt}H#->MCKLZKq1jMb-tyJNy`R zlkKG?vlyEJ^J?*PGj(ql6+!k~hSqSfcxZn}-g^|Ugx#a%J}|?h<hFc@| za36T^xtvh8zlzC%Q`L{p-Cn10RD~@+JHbpEZ;+wu9Ii7^d%eiUA{k&G7E?)1iQs*js51#!IHq|?n{og(1Qd28a; zN9sO{C;5XKK}7KaOo>L4=!J%Q7oFkIw2E1aADeXW zq`3mgBsmgH@MjH*z`GSjG@Cp6bhj=n|M_RBK#YgEvP+`f^FnV+h{Zdfx#k<`C=Xst zmqn7^jMAb0N3QIv+=bs2Fb~aHs2Ed_C>ZkP!7J5O1%@ZpImJ;Y&v|OUD$Sa`6_!aj zx~o{467`h9`W5@9EaWrd09vLV=JD_S2JQN_Z11MarNp}V=G8!%*K(7H*H#;B8M|Yw zpKfZUXP};u9+6~2JC6`~rW-mwSkZ%;(sGCjDDAfPh#XN9aJL`TYpAwTc`$55sl zcNfEx9CK;%UQ-qz3ZBSy>+KNSib9!>O>Ls0?!qtmR2{4lqQ+ls?$Cr^h{EFTcX%^> zaxM5fZPclierJ|YzF3Op8w4t*oz}q(Uk}yN7wfz;sJbCb)mg6nAPazEdH9ABuee9b zT`+wE0i&gs6Hs$eih=*2?bwK``RugIHn0Jkwx+ejn=&>e>X0_ zB~wEXtR(SgO6Y!5NmGTQm)_|O$QO`(pAk9DvXmgmk$KfZQ6p$a7~<0aE~U<#Mb3tvD+&1 z&2-ZCWXxj4e9Xn#$sWa;2X^^a#zL#vlRu>;`PEC5-{ZK9eIX<<%8E_2jMPJ&duGI( z5!x;P{zd`LqbjsoTrcwUY6%+&__l}J6$3Bwu+_@H54vneBq|E{FrpX-y}r51?RSAL?RW37KLVnB z;da2KT733zJUH?Uinl?2BnK)#aBCR|r6*kx^8$c0=a-qUssRod6I?jMKTdW%4A-O=5RI%tWbYa0bU*S(Q-Bt_jZupQSd8Mp(f|row6H-5B+R`z4 z#{o_48z1+tUvP4z^rviv0TaC+D|F=!$M8V9!m&)&QEy1c1bfFV8JIRffugN+`3*jS zFBqmxnNmu2tI0ObOj zb9ML=V=uwE`vwZi8>%n41C?Jv0;zU|k*pxQB5XiPl82Mz{W0XDH@M?YWaao*hlj;( zDBfguzd{*|Uk`xxDlzpeFMow~=xtwgd7%dfXZ@b7=1rL`KvM-xXBlO(R3(%dgX1(N z&9kthHg+W_aw0V9j#(1d^$|qrZ2Z1ngx^%L@6~Tegx3gCyCP_s%i6Pcyo}zmOspOY zEDT6F?f5zaK8}SyBQ2FXcw?g268kosg<>C<*He0Xxv<*Z178woM-fB(y8g4l!f&uL zU^h%%u2blr=h;q%#mdt~^i0FXCO%<9$jsm}+YoUVt&0Z*2`982j!Qyfcab`AO>F@* z0%n^p3Yn>yK8>4lj&mhIgbjmcoB^^(*5L0;#Ku`RXwTKI_JeRwiF0#YDte;~7OSZOshD-+ZRC1iTkZFCW){@h%(M|rnnQ;zOnr~!k za5=tG7S!d|rUPPH{p({5W=q@CwYK`MvhM;IIb?o~eCOs7(REP~5;Zn5GU)u9t5`J1 z@yy%h5zD)7H~FEn4=5#nfrMQtFg_hb48muMX4Q;z*k0N(v&$BozQ|k6!6yqnt`!P@ zB9GSs|7Zd(j*tyv?s{gVmnCgs7&m)5c)p7JdpOc?TF*jwVH?rsNJvr%c%>v~#C89ulq6xnR)vKnix7(3e%+ zXxKUU*O?tbtk9LHL5R8)ECvWVsBh*iRD0HXy;Ub%@W95Y}D9wPfC!Yh~1LY$`=h+D@4}(-XBM5WE3@0xyqh2 zYIk-oEt^R`v#Q>xPZ=tZ}L`>9e@rTEt4B zpvWzBp+V^X)o{Rk(U1Qq&rNpuF|fD2a*<=REF8*KXEz)_J1@(2TympkWMlokbyvd0 zA--Ytl@aM{=V*H{ZT4KHGN9qv1-!@btqMMOQ4d`%NaiSe_gLkNt>(D*9`I2`gYp@E z`YKEwcKmxuoR3+?FMj9YiWCZ4dkXNu3_ukqx?5n7-~m$8Jjp%*p_QJrL1x$}W@-Tf#Z8K@%;gg6rRZ;ELVm`*CiQ|Rr42Cmd{&7-Rw z_gZ6(-E!rt1nwkY&@dw`@dyT4p>-iOAR8Tk#Ocbd+pp;roc(6h2so`8Ym2FAngWFZ zqfUbOQ>T<~ok4sAC(M+s9tDNe-sX=f8Mxg@bNeW=RUYTonze4&=>%Vj{1h=xRueug z%e*qqlTQ7qWFNRK#Le`8<0Vrq2&@Vg0GVSSPG>}3mYE^z!yjZnKd&-)@7k{3j4c@U zHvK6mV_QaRw)veTD{Wf-rY@Xq#FWEcjr?G`;-x~@d#l%D`9~!(^vVT_=hW2hP`N9M*55tknGfEZ^^jEdNVLF zDYPoI;_0-8-LS6w;7K2FN^>zcFot%q4K9Z*C+@MD5!qMYL5)O5wt+$9WLd%fS~xGd za3Hkn*VHqwwQiT(52sg9yoKu{8)F6P%V%AfY%dN)FSG3TLxBgvTjs0b{kM%1sa0(J zKf0~EWecZ4rI=Nj6U39#%4+;9Nk;7gypE*NAqL!n|JcATb%Rcmyskn+ZT8* zM-AM$JUm()dT7<*O6uox67QRwrGi|RGCB9(cxnv&u2ln72pn2W{k#~xk~zNg?&!noeO6gZ2N3F66Dt z;JGr6TiF+RxR{dQg znhSR75()2ZxXw-+COR{qP5V6~oH);TJnpU~iW1VXMAmR?^sN?M00CQAGU)&KFm+3m z<#H$X+waCS*%*86;*%|3+Y=_@z%?qC13C!M%`rM^VLhK+H$5L`DA4c|1Z4RR!FJcM z?yfLkll<4OmiXIYU9+5Usll)>8wGl+%8^|(3=jP9tIxyMeZ}lc7IihHhM}L@DUN8i;{H(K7doNZ zlmSnUD9^2wwjQIN545q|WoJI+FfU*kXS~Gd4+3?Hu-m}4$Cn4GH{0yo+BY)6F#WQ! zYZUh<`?^W9TcRo}0%f{w>e9{EU;KEa;TFQPI=z!P)>PErfShn_uJwnQ4jR*_9R?4T z)UVC4U{8@}(uF=Oxy%G^iMBm0s@De6%USOj%(ta~L}6|^?W~9l zL2ELWfH7_X1T@VqkM+-hL-!0OM5I>6QmrCA3f+3C{E@FGt0$|VT{>4x!dXc=V8RE# z3g0|q%0_70NbF0`*@Pc|7UJ7kq&ipXeeG^2FRKJTyW+#R>{w;y@A*sMA@gW;$G)p2WPpp1M39B~f@>N@HQDkVh~YS0f0{ z{5_PBa%nfF&T56Qn*>&{|Gv*7m7f?~jOvd3{BKu_SGgz_n(IiQMR{BQ$-za*6P6~< z4vSHBoXe~AG(7u}XuC&YqmJj+vIg(sY1=F?vPzUm!Up zPWTdW zSPa$A@H=Ss9Qz6wiNU>sb#e_J9`Go5rd(7a5vPlDtH!lUfU@)pDs%kUc4A%5*M;{C zR#CKNQ-k1FoMX$r0{|fF59L{MOD6}V!o2WZoZ)){97IX=)~wTO9AB!ZIX{{;{c=7Y z!azPf7_NU%x2>1n-|%dCVAt&xA+@i+0dVlRjAKMsa5E_`pwSiGyS+qeKk_u!<^&dp z!k_}_w-*^Z0F;P(3H=qt6NT_uE8v-}C7pAfywQyc?A<{;l&I-^KC`!zToYb4$IPt9 zGLAIdKvz+oQS8Pe$Wg2=*zLYrl_#xTLA}4EeoWTC`MAKa!|OEesd2oEbI%aR&nlU? zoH5HBwVf}q9nHCX4Sq)IaMYuxZ+Vqy^3Q*ok+Cr4OKinBC-EwpHA zt*@E6y|f&?)Ii82ERHV^=nys!?FRc`czM-U&Yr71TYE{nSIkxjYs)`+oJW7x)VuMe z`=CA7ekTcjbXlaCstsibM1FBQ3ykrkOKI^34E}gF@vtFVUHoC{6<*6frtZK29e~-| zP*d{~m}O;aOu9U?q!nPb|LJkHKlhHcn10@abJ5DP=M)?l&;1)*vo@Tu zDv3{+?x#6edq~8Wdj{$rF`8PVA&nkW1j-^O^=gS*Xbx`=l^Hd>{_sp+?A_s=rx1W$ z%%skcm2IG(n9ovNENurkU=Wm|F8SyWtPhZwp)b`^PqnVR9ad=!`0V`7WQ4dMN9H$8 zse2CjV?c7$Ma+B(Gch7*xqA) z)3CeyLomr9-v6wsvon&4Qt*i(R@gb+Dn<2vrgvR0#O_dJlJ}0#M{=V-0220KSqCfZ zIPGZ?3iwdgZ3;j0DnqqswWn8=R(Ro$jP!F%*@d#MR^4xpUOlnl< z6{2D$VuP_HPxrgn>J?bZifZP?oID;$-~!UM z>{i})5wZDRqgO+!CERtEqPqs4RCzMND8Ebw8r;pXk zgV}xPq0cd*8IyOq4zb;`KA2@vZWv;W-Z~t)g#_F@^zs;CHUwQ`NQ1U)$SFNvKYOJ$ z@1=)R>7bkr+2;M;xB?j@mhVal>IwaH!TFV2B(9O8yUu_T;-k^O9*zmTr_LVBv1Z8` zCr@xA+sDwl9`sl;(rkndokuCG8$JD(-fNr_lCeIPtqx}F3W8ND*N9$cjH(NqBh0i|!XJAFs@QEYabQoLeKsGcRAcN^>MZ*{VuC?8C|!?-4*`6M zGa>U}49XtMt14nV3vDiXhtpQeKX}DMyXM_&`*}aJWo;?}vcK?M67LwTe-h@*zI8aC zr1Z{@yc?MH&wgGSUWa>g97GMq<#!J-5}|0*gfHRb`-tVJy{N{nvb)9i zigkYKKRzgpCkeSC{#f5tD|>&6KETapy0)%k{d=xSJACPbTK)ULjM1sf5EG9;k3Q*r z`%&=hECcr>gBXf}o?ZJR=C9;L%F98X?~QW}zXd^d!SH>DP#7=|W5m}GCh+1th;_o#EPk$?v~09I01)6@TOP1kofGc= z)XQL>g0vm5!BQ_R#|1aorGf3nTzTr}2|ac(&fBt^s`(ODark^|hE5Y{y!GBvG4ta^ z+UJqz{H+Eg@>Gh5Y!t1~SSY5>x7`ZME2%$^Y}nqGdY>2|`7XUA8C2nHX4OJ?)6{>- zqO3C9^f`W8R;hFY@eAR5tRT!{m|%48H8>6PK?Tef_;{YE=>)JIk6j4O1j6cyNJT3& z1II`#Q|dc@elOPEhfYQqQNrABc<2TMH?w@l`?`(3HJmGOJ<}u%O#RG@xD`V3Kh@WG z7$vo?Q8Bn2RmGcrMlX`Zb2JLGv<5EAN7ZEe4Mu&@G3Pl#a$-&dEES$UbYoZWUsN_h z@ZZ)ldEaRzWB=gUulN4rJ31&-wwEMa_^>;YpQ;iifxaKRRQAr&#OE0!;~nq8W3&U= zM@xs}iOm4pW9<#rE!OyAw%^#9u9{VSuX~r|YAt42m@!FAEz4vPd z_EY}ePMQxvR$~Fro!+3?BPUlUy_C6+X#DP`;5*6K@Xvi|jT5!hfuHysElG>4KRlN}>UhHO4q zK3P9W0NEXImC->tM@EY^)^}!tTgsml1l^{ur^=-=Eb?P0D0*G=TH^1Q47S~1gsRmY zQ7insJ9bX*upGp%p{cZ;;+vAe=$OJR zTU+A0p-ripztAmgD!Mm7M%a`Pmf^M6O*2*3%t z>l&xaBFqTboi_66>K5F+zCK!UNfM7UYjvaqp9+!> zR6C8?Jg7?jSf_vP(5J{RH~8vI)F1RXc02RrC_DlBS?dHI??wHD@EAFh@Mw{Ah^KLp zQaIgJv9)(Xc`I!*s^@p=b>Va+Q_XV7_^x8%YLCypu&4UJ!<&zEM13$M-r5;ITvGgG zQ6Iv&;&>nl?!X-uwf>=|ZqNh9@E@=~@$G`O?SY&6&YtSxk}Hr;mR&cWLGu;x^MJQ= zrrtqGc1C`L#I^yeEx+pZpYh)(bB&VerkH(2EUB@F%FqjXvtBh2-j46}(|l{XmAt!* zHX>E~F3^DJ4>FfLyJ)MmxC!Uy48OooOlMSmsOA;~SqQ}Ez9!ii(s1J|i9Pd-*RJyW zgn8Qf^TtfZe|(P_22>~UNx6ZwKBL*?^Gl|QJ20g#Np1E?aHBjUm6rV;PrKuonEoQ2z(7>}!(zgK7g%Yi2BBx7rZ7%>1SUvo86TECF@NuSwdW24Q1mKk58tf|w4 z6K?QON&+LFnR!p`G3Uv!T6txY2)n?6HVKw?gQ}Z@ntnIw>bBH_%o*pAkB;`6V)S>!N^+VDH)x|#{I=&JXP+i zIj@@O@-h>mcL%<`$IR_Nw;xp*;NRXu%N6Rld}pvWr9_r?mSgU3c5g15CKN*mJbl1| zW+un=Ta&t^rKnCF^|-LKc%9VXawM~b(f5tRK6X!ISl9P+KZ>e$JFMitx!H6pPg z@OA0V6s?r4`A1Hkb3%q+!tt}~xc0L>A=z5I^?Dn-*!cbEpPEb3mFfB;U>iZnDOJ#u zmPZ=(ZJGHpm6dI`O2bY$Twc~z3S2ix5>=M|D&zUgNlw^JPV?-Ae1mko#u&cgm$siP zc`q-IajebH{GvYYsm8-`Wn@|WYU70?s;c4{KU4ruYyG|+0BJXAEqx-k97F$9?VZXy z<=%pfZ?<3!o;y{9T)dZOG=FQ<@^1+Hua=3+5f(kONUHMCrPp;*sI7zgm5r0azmeVcn&2$It-*fgAaqLGE9-vj=k@pKFWm*onw-9c&$EzZ6tx3V~D%bFvO#%a^8QTu} zz0>oIom%CKSpB^4JRS!qW=`HD-XA||4kd zSw`~1p^O(_9*YM!j_XQjo_=4En#~G%I&)p&odCWr`oTGAJJq4-7||A*#^q|FsFB^% zz;*QZ+f>uT!6C%1SnwTGo1pY)x@n2y@>kJbn`V5ZXJp$#FjZZsbP3{?p8@)$hey7W zLFGBF_$&rIejnu*89fV*cBO?6Tywe&AdQz_=g0r&6*^=TN=3VCalKpgb{yu5w>cOHVF7oS;cQc&Z9W( zsnmiBwq4)F&qC3XxwZ=UFIzkM?gU=&0s@MVTc2R6Im13x;JUQW&L-^baiPul1mx{}R{KX$WGvpKw(9=A5Q7~|<-cYQqSks9Cr_kIbr zC;a3Srwz)+xu|k3ulyKXG`BBsE3S(AR(QODILMgMsfi$Xj8H_eY+ z0gI?kJsfJ31R9vdx=fSd-Qi^(lQOCj5IG5+@^mCw&LWBZ^Xjid|oxO6EClm_)}6>K?>AdcV}c+ z-LL6>ovr>RhK9)GSsO1l;zC>55aAM0VTMe+u?kl zf(3y-jjtx*s}3m5ayJDY!)yCvY>nSXenA--mOgs$rO%7!HE#~%R!TEo3Ih50p}HVq zz@55^IP}sPK;n20@G>8?pNvp~&)MWX3)C`p{<2G$Peq0sI=*j~x%@y_Ltp%pP79R@ zB|j;^Vst{rSKUm#-L5$6m8Eq%pE{`fW-Mp`63yGh`xGcjpO$tMwn`cG_htl2A)t~2 z0iW;U3?zt2R!}vQOm{T{!MXZ9UF_fB0%RPR2|rmsm+H_iU!!a$at~F258FQ-*)+|8 znW`XcUss^Jev!0%yWIU6flayr_ddZY+9rx)kRJ>`I2495n$Z9#;=V4WaGF{_pTW_J zGwxmP)#|wZdYxQMM7X>ry8I4lw|rAPW=`uM1hL6Ur@z~j$V1M zkP|gu?C?ukoaG>`y*1XQ1jok$B9ejZwgpB)@{AqT>P~>hVTh5l!Q>g$b7H#!2N%DH zeic-IAcWt&-1einj=W%+iFVgdY^^Jq5X) z5WauGQt_==+H9Ta<-dkH@ZKD|E;!3ZW)m|pXu-&b9W;$#siezHfyjpt7ylt%LYjBr}VJIZfToWWh3t93f1YUApsbhQt;-p{ycbyX4`7wmXU~ya%8|$)& z!2SV%*{?>DX0qKWJIjGJqtGL=(#4;SsUGRKHn4xIf5C0upBC%2X2RAe4S)U!;CfK-vv|6)HHsuPhL2X^Msd!F(+?o@ndI^ zEptu>WBxs8>y#nH>5~}x?_o&HgCXWiW!z1&>G7vbM}+19^zLjkHWttPi~T~Hgco`W z+7Z16sMRq>ag%ef_~f zJU1q}?7W|m)}3a*>N1a^O`WNXlCrIDq7s=CQFuv`Pm>R(xJTe&?L|6-uP&zY#A&r6 z=N?B-1)(y+H|7Hst9rKz?iH(=eIA-_Fm0&e-BYmQH?D+Enx&iMSkVeWh<6s8;5Xgm zx0M{e;3#1`aLXaW`>oHju?NnzO`1gt*LHvGnm;1~?pXl5v>N(4NKWOR>U(=(W9ENb z$8s%ZqJP$xZ19vOUfk*R8$1oY+z2tWP<+C-)pCOBmls6-H`t%b%cFIZd7mK%!R)g91tZc-mxpYf_qZ!Sa#(BYRSK&8Dli zu{R_c^+#5>_h<|8@ zxl!SHzw;iZzW>qayAdT5X*Dq)XgHO7Vp{9b+rf*WujCK?$G2l;As}9*)P4D&Mq8!% zh|BG&JVBMqqx_~0XW#it7}@O}FX~PYe7~r40&AFa&A~{+6r1k!-Y!ScPr&hEItTHo zye@wH@$t9gr|i3uriF@vl7V6Y=YQ=jYkkD^A`ghxLQ6lK7H|~a0&|}QADpov1?KEq zc*&l0j<36SVhdH8fqZ(44&9J|8;A%or_gvWdR;pwExZiK_@UXtJ>^5HyEy2IY)O9A zh+nJoYR%&LoBBNffq84fmo7iL(kMkMgAnA62XDdYOAO`u0kC74E4DQmTJf73`R1b< z>I*4kU?xrWcKAs}(0W_dUDh9ZL4*DEULDiDzY9za-ff$A!x`jB4vPmM(=`xiqHE0@ zlL!OPs79U~G9jY?Qg%czT9r9xm=X!}(D=R&KzeDybBHQCAp5PIP~vsVlKUE{_3<$D zlMcsCn0 zd$qd=Si7{ao{gzxbjcTCAGjkkD3>}pBEeE^{gR$R`4VOKboYnXAvUmUNS+2N*FCCL zVcgjMQ$S;W>JqKafUs)3n*EAJN}?B{9?+_rQ$WQhA*`>(M@<@Q6YmiId?yy##NO~g zzQWU+m^*^G!2(EbX3+&CDq#Ik1h)En#Qtzi2QLN;z>A1jIlU>SHe+YF&;`M=Dzzu; zE7!1NRA)0b&@SAp8JkFni~7m-SS!$VVMJWgVkZC^87*xxlS>e+%=X>V7b^9)Doarz z<5R!IEn2zHYL?Y$t^%j7HU*ryJ{%aEN-gv#J!><-+WT>HU4}nYoa65J-s`aAdrwoR zy#BYU&27c8!1LcXWz`z!M(Ii%G4!)n8Qa9&Uju~@_3HIuK`HSX2>vN_N$~R3hM(iF zFPFU!Dk|#~PeuPUKfhCHXJi*;(UQ-{^@pj z2PLjP9*hugrwZlDhw z+4fEds#^6Y1Bp|$TM{!+r|5ar-}~Yh>nxU^Lp~E?<=jHhiI>y<5Z3b&b`w47OZ8@1 z$SRn^T0eVY_q3-1t^;&COeLHvlu;HB6r|jO|HOhMDl=$PSljHAX=5Mq1XX7d0Hq&K#mm9KA5^#;? z9!ApZ7f0y+KF^jQ#r37(5g>BEo%i+%`v9*6lUm`v{Y#2)86)4$p58-FddIlQS-fAV zy2@8x`I9X=*(Ir!)qB3&FTUHzpH`FVu=I*t-RB8HkcR%6qR4c1l|#VA*Jasuy5Q92 zz4KaK9=cdX2*o455K=oO1}ENQZif(<=XcOON-h_ z#Ep{4HjAHcD%ojQZ&TrBO!UpNxaEFtP27Ddq*u4}O7Bdh6@fLg+&^iG4KDk1V19Z8 z9~0WYR(B6I$%GB>5Aw9npT8smFaQtN2P5kS@b;|5>el+fYCqk87rH#BuuoILtpRG< z?fHb9G;fv}l8 zT1K2h1U~auDW9Bo;&p6`whEe1_xj{#w7KFgNUm~_Li$!>e|XYtckPZ;(8X4!2NZZ z_d0EYZeQM#)W`MnD_qr|w94mytli6T6hFzm`)EdP%+EHQTGNg^r-znD(}-Wd)TgUpsp>7};ObnvOpDR~l1S{u4_!(Au^Lu11)c zh@xYRLP{mi7u>zeIj3CTra`c{6Uad#6g$VX$deII2A+a^rxL2Ui5(wsL0Gev1t_d= zYmBWwdn%yBv9GI<<3fTQ)v4+Aynbp$b=-=10g9PP8Ilb!fn=8S=OuMg<6y%^+yqab z_D?!+ZgnvFjpY>mv-+ghesl|@z(Scm37@571-#94>+va|tQK$M!8c~xU*pNauM~z( z$xa)sd5j;*;FEL>rc^73C4$1{OHn~6M zr7R4~6e9wk-2IUua4SC~0QoLL^O*o-k4OA5^-&AlQhr#w%azj10A7^Ox$=}=tEO@( ziDwK&-@mVR8SVX6v-CO`L*GyOXK6*^ivGU0X?6TW388r3n_vk#p~D*;nePUUl|&8C z=!k8;i&}UV`>pqo#GxcdX(Ba<1p8WF$E`UowregIDkO*3P3qM%c!yymL4CrV zIoEJF_;ArglIAox?!43r*61!Lze^~f{5cPRMWff9v^TUcv`y`$xcoI(h{vx$bqum< zIyARK^16~+W73ClWI9YW?FO(7q(Nk0JUg*910`{X6U7u)#&d~XB#bSGRdU}F^;paf zR{C5*_U_r&>MZ!)s+qRIE#(eIMijBF;x>zWl-OFU#OR!&c_rmtcTzH)mkeC398`q7 zyhaX>LgEUpgA4?hYGVf{Pm#;ri!^}-+(CbRWwr*Z%vDu9N%ZJ?-b#4j#A{(FijIX! zg*dcB13W)(6`gdJI@-A3cJd=;(rja(19Gi}%4@aNM@xoPW@OWZ*$#SojcW^zX9B*~ zbbSCr^tcTGtXqB=4NzJI(lQQs29&XuTzwxcFTs{dak=qOx^tfKDx)#hwZhKlYkQp1 zdONpK{~ox=Tef%F5iiwZognwB!hw!Q1a9ameXyN|RXEO_-YzOck_#Q`@BYe6#p6+5 zBawOWpm^7Xc>g|$wq)Xu5#NTn;3w@D8(X}6olLiZU~Km59fct(62>0i+}nUuI2qK7 zEV(o_*^MPb8%ElxDfb^u2hPI}-j9ZMQCG+Y0zv(?dZa5u@lA@|CIziOV~1dE^`>i7 z?c_ZW^2r~F91GH&lK=F@-WD^g@b`r#48wzD`9J*eaP(qA5}|!!LiN71cd{--y|iPoVy(hd9kF6 zi~LIsZ;L?f17wgU4=r~@Y zdnlaO(v2xyeFrB7Fc&){=o&4*u*M7Q)lWv!5CruHJ7q=qw%$P;3f9M~5;x^q-t0}} zkbTtZEgJw?&&2aG2Iok)|iFDqm^f)r{T6C-*9&!`mi#`_a}=eTvEjmnNp zT#NX|Mn_mj%IS}U+=RQ$lgQB;SRxW*tnG$Iz*ji}Kj6%d^XuAE7LhG~l2vk#_#By` zbmu1!%#~2kW_Ie3?`yd*sg%2^b%tx~WLSbZP>U@M%kDe6_j6!i#&2IMdom_4I8gIw zXS{UDSN)72$-^a?ou6C-^c3eo@s$9R5rnDpkcQ*?c(?St6K5QyX;&ET5yeJaO&c3% zj^3?))gEW1guLM@i0pFhp#I*Hqrv!I6Y#->49^8Y8QB+BWngNcfZkK_E=EzhxOgIV z$ZWOEW-8}{;j?CvKw#;wx|qF{%XvCEr)*uE+S{EL!sBKk$94n+J$>G*2=F}6rO)LK zXRl8Rj9TlL25BH?7HZwhwA$2Xt?~s!axk>1gu)d1Mj16tjpByYYgg==h`-gbl<$T4 zqdb?)SVLBC;NDdC#goZ&1L~7IpYM|I44yB>j{&6LcRU(D^7V7&D5RZA0}>hz1?6!g)Q(kT1MDzOng{GP0JTto+ zC_;m|A@DlOgRJ@7w)5_vnm*Xp{<{KG_6m|10=xH&bHY1e78d`TwHJUtHP?GYBj@MI z*;t^v!Le{8-H9bHt4YM@{`O;xmTnNSPn1nKr|((7#Bg6az3UYxCOpQuX>D0xkeSBN zrC>Q+=y15$Fx)i!f$4VjO-g*!yid65c*j%}dKOByi0az=8TK5X8zVD*#_-(X1e*~( zg9gnuv6ujv@pFSc{El$=CpUO8lyC>+cwKWRcBPb&v09atyCc zSu@cTw{N<+`j2PCC{*6!S}&g%)g}Mtn*W|C+Z!k_zo@;tUvK3JRxtg2>`uDSqs51d zsi?*Ks+V;?^D+W{_e*J1tRa$4F20YZluXl}4c%AIUhuuq*I2kT^f|e3Wpy4~8~+%D z=k(zm_xr`#XXY4Kd&#UDMn6&03w=R^N7KQCV~h0-E;R{jc0qvmLdo2&kl}=hfn40A z=uolrM&TUO!1Y+cd>hgTgi_VM=qZw{%Mq#g`PxkxVgH)qp+_ICp9pd+8WIHhdKu1% zMDMsQq>jND=b{%}P&Bze&PJYqC>#@EAdK~4O;+QMs zf-l>78A|t;{rHNN{w2)^HafM3059#nnAPhSN^PGqZBSV8XV$k)33}=jKh6C?simXmQ!$BH);uz^ z{nf~f%hByM_U-5(%nuKqCmV`kJ{SgY+#>YG2u}4pIus)}J!Q+@ssx4n< zMSbVwKVxh+1|G(x2nbM)@f&ffh!zLBQyes@9u7)?q|I-%APaZ$C2nfia@uBxHB%3# zK-O+6#Nb`atWUk)n^$cikt*!l+t=QlW{;4MbuN-c5~lF_pkE>I)c`nZo!rPgO1ZnI zO%f(a6MyT}3+-52|HtQ@dYcaHpg`OjjRExwq1hht31K8qJ7+j*vS}Z4yqk&&g78qR z7(iffLHtaT&(Z^g_>pg80D5LTIFG~e9cdx4cs!lgEc&s_y$L?NKwuEE!H9;53@c0XsP2Dh zH$APg6&H^`SyXH|-tT$5`*QT4f7M0d$|Qctu?iJE$A=I)7nJSD8j%X>a!Lp)b1lg0 zcCwsvDuHiAGPj33+L1)Y*IvWEYjviZ$-B6S0M_p zPqdADf>zN>e}1CCSR?~#yQh$LfA%6KK{oyD}S~xqq%N=`QW8sKM|90{Z{}} zUVw~rdJ?voDo|wov`8^}Zv|4U*mHXUbn3};r5?7r^(f}{_2kWpiHW{Cm`aZ8^0|N)ajN-afXro^jCUyf~7QZnrjQw}3sc0};Jjs(Kc3 z5LEVAJ_@6320lOpqJ#ng{>#N-Q+uD|&=-PEBIToi<#LEBvnpC$oS@emh zuZI4iWhT?fMyq{eFF2>8*~Y#qPCX&{I~?5`33s{ipMCT>(m&ZWZdRS7!+bljVrI?< z)_@_^T{VPGIImm1=V5)%S^R?WEn=I;KZZ#(AmNsT3+^GvyI-O**?Sw^$(Ue)$2@xu z%J}|1?yolnh@R~D6!n8ze$^s%3I&TE)~cqHtb!Q>d40hh%$KGqT2#o~>N=rO>U2!o zeD{P+G)A!y(_Qymnb;bP7w>8vMfIBXBd{i|1$ z_x+sz&5lyF!#s?*1F-U%w1%hP`{j=bLp$oTaQD{S~CrEAjdV`a<@0z`#-)pO-KEMU;E(_!*YiCkvaSYR)kFj%s2)2y1 zo<7`yx5o8qp_y>^5iyzlO2PfvmuH*!n)Jn5*cEp&*06DN3Eui&A&EDTzU2U4gA}dh zyYR`x)3fJI4S(jvaYT#&%mffDmB+9T>~mrd)_Lh`r)buj`%b9HFpQ?SCQT*_)gRb7 za>`CIWo_%#Oz^v|8M*E8)Gq+I(IOl85{${OjvPatOtJDvu(xk!do>}nU=Q-~Y$Ugi zLS?LdjGeERx2V5b=-$5&3Aq?PfzFNL2pcU?3h3IZzJzHoas!B8qy9f6r@GL4-QvDI ziX6U8hTrb!46tu&*_)K<@GRc$QY`_0Y+<=IUGHaZbxix)h5G2M33m#`%t9C{nE1}Q z_1OG`Axpk!mD>Q<1}qxeTN*MB0b?-QY`&ZWAygB!U6WH0=nS2u}o*rpSz= zPE#T~=ZojRc3Ci7kmNdG_4Hm2*vF7Z_GE|T~GP!SD^<${bgPyr8BH2l(qD3F~&{wu^<`K!2dK* z;#tG!zg=(>&oin{N2qvm{NVv*2^(fd{z1i%1h+r*NmkghK{$< zkWL!ow#r7__-&;c%N&kkcyV*`J7?NEx9jtf4k0u|5*4F{F|LV~ceu5;$cws+^Sh01 z1t+$to}%iu@z+d~JnnD88|*8Xf7&>H)iHg*?9=i8@$qp)cDoii1FwHJ!OH!=Tpo%* zs&Ny8xpm#`fkT&KxQ1yyuWEsISIiBW>BQ?8TGcp7Hr$e`{Vq+;gc8|-jHfSDKyJ6C z$X6`yzqvTaYvX?6^^ilzO}@1W6ZSo%lDUZ>r=(?+4Hg8qr(L$&C1MZoLIFl?t~D$= z95p|b_ShA$i7YB6vn*hjcMsUke+Zw@^&Dl_j^#n(PNTnawcN(x-Z^Hq{AV%_b==J`ec zQF(O(RYCxKe%ZOZB)pMEm2+IaQ?$+(;D;RBF?c3-INYmDyfzH&YIkN_-iDFXd~G&J zy6T$ntXBSPU!E~Y*6-03l2GJG*qGuH85zT>A8-mdNoy)cAi$V9_XT^rs9X&D7EWfv zvfa3v<(eQv>OV<@nko zjH7mfF=x3hdiLKY375Rh(FLQZ*BFybClZd(=v(q-M2`YwdEDv$SM$>3E_}_?2TKOi znkaOf;#=I~WEgHvrf?ZhP-n@D%{pIM7CV*@dUwbtUryvlP`L!7<3xB-^(NCaE{}yMQlk(xeqOK zC#c;r|Hx>rMXC#CCYf7i=SuZ46oS;t=KTrTp*VPL(yYtxmwTFXRf1BkoOCz?i#hO& zuOMAn{K_d?yP2+=*B4=uGx?r&YHQW)mn3}B{nIzEYmDnu>PR#SmH$A$I6HjN9NrDq zY_>FU>`u(F!3XgKq`Y7=k;RGo6^mvkzVTqA+%(>-TvO?9^fE81>|Q*No^|51?niwM zs)C7vsro6O-N=dJY7Vo_p@dr#_rW5;1)OX3$Ko4^n|zcGN469ZdEyh$)|mXyZE3r{ zW7{A;UGt9bNm~kTLA9D@KnX?GlYBrSq{H zd)SpS>8z4})nUfI22&KDUqs=r?*$hg&2kPp=gHhLbXP76zi77xN)7AFvsrwSNc8O7 z7nx2T2-d1dUYk){OAIUIT2!@psQ?lv|8m?8Ubs7L;1S%b1f_pqCpSt(5YBOZ<)oUOb66d_L$w1ci$$J-eT34afWgC3Z; zYoQjGcUHUX!upISSlU6>XNs}!e|C|b*zTU*pL52E|ixb%R))n>iYv)02+wm zECnG!T#^5({goL_0N<%-TKs3mM8T+a;_`sX>zeToB(%)zsbGqhr@un~yy;npNPS~G zcuk2%4okeLv9}}?9aNvU^Anq&0JwrZTT(a=Ew~GNp;p5=9v1)653rRL<@ur3yI`(`!+>NUAI}e127oS7Q_FmN9$^$*ASJ4k{r!8tE)2v+ z^}BX}gpmE!A>}T;R0lCLg!3-vdW!JD>5X=k&PdkR!N=4{6eU$1C=)!V8EsTrC#&!9 zuZl&{}`p@rqu6aE#=FGXiXXc}Pvhx)hGVy-6js^P~%XIVl)&*rdJQdGo zsmc6=?Se>U3sbDfPA|$*IgaMR%d~8*VjdB>@V|O7WuZ84AQo5YT~CZyl>eV%AyKRW z33& zu=4UO&ZEF|banJE*>7u(Q6n!5?7!PCd9ff+D@WBrkG=IcorM}po$5W6sSOcu;D`4p z8bYv{t$a;=L-x{Ck>=&b<@H9*q799Dpuu*cvw^H@G{j1$4UYYC-9iG3uzK|Ij%>;9nKDy^vYv1m+kyxm-@mpBqk?# z;SS~Jy1O&FXG`@fV|m>@?T3Fi-aaR!?35=|Ay31u4rbCA_DAxbUC+Fk_=sNlH}tXQ zaoLZoGM1xUMA3%O!LZ6MLr3-OUF3l7AE~0Cw!Mbq94(=T>8PKjJj?A$NVh|)io5Gj zHKYXzMq9XSFV^}zo%y2O5)UOubmHDLP1X zsu#+P`m0vic-+>AtG~8BYB9oYJlN990QQiedwxgo|I9d7t~u0V%65iv?{{W$RF?hL z&StKNL6Fa(g`P|EMF&kP&edtm^v6ZrYv;?nmHUO-sfUgK@E*kRa@LA0u$WHk^F2CB zG|iQM{I;0Qq8z)_VpS*4T;#>HEaY@)6zEH16(-xjFWgR--Mbl-3tN-{<%J#002;~{;#>-}l zIBz3k{qjqHQ(W~tKguE0?RMpS&2#xsW$EDaq>J*J;g!5gu90BXexaejVfqSvd8{Nx zRG#iOcAhb~+8FA`ybr?TgO=gxF)Wra?Rm2%+ z)P=sv#XzKzH&etMj$( zUJfylFI}(|#Da>Kdl}40f_=3yktQprEB)-BY8YmlkZtZKGoOhKYM6fbs3jAGU6UIO zZ8|I;2EAokD!EUAJ5RwXdk?pnHlbeDkD}sR!6^-nLPeTqIcF^8xq1HsiVS-5;t33& zX}0LH$8L|Pp8arxUA4H|T&(et7`QO|sF0FO?;6a%?5Sa0tsiLnf3>shj-C^~<#Aqz zS1MNPFs|*92&=A3heghGxtfTw+7X%yXb0eZY3H1d4C7asycoBiMb9ti7(N(OhzMKe z&c_Jtj==?Mehu)HzTa(d%6E)`>g_dG@FA7$B|??zg~o}aP_q8}?Ug9;SPM=PaYfY( zMNbaJ-oht_L~6wURq$1O?p(^lYBLS5{YC!ygPbwKLs*+NozJmDX%0iHvBcNzF!mvK zMRiw zxb_|knRwf+zVt=D*2X@LO84@}e9J7i^kTekiyyyu!J)t``*CH|0Pf@{ii)H2LujE) zu6LhS`83ZZV}pH~;jg?H%lgWNe5j{;=Uzo{Ws#$S$Qng^&e?(232p%;81yhyI7N~y9g1Xt843hVYvygIT3$3AkNlM-Zq04*BzJnEA|}h)R&P|j+5|Qd#z`RBvH`tglQI8 zU+(FP{yUTFSwUEoXm+N{CEW&9to*X&eWo{URQ!*Zy%KK|Rg-^_kO{+BEpCI6Ss z;OSDpwE$J9wk7suP66i`$(z@yBcVX9MDW?OaL@lC{<;9Q$->$4(?13Ee3jcExQm0N z10FTEs^#e5)!JHpp=1KVLcVhU5&DtvD;oBXE%EKgOAY(wt}|BVdTlV3(jIujZMhJX z0P{gbvdTve&cVwf2=PC-4YX?U!aNg*qCFa~h_VJ)eeXO1+n#s!2zZmR;vmA*-7|B0 zpLeIV;vf)T7DsW}CgUi6K7$iQFg;d31btKTf~8p3AsZT)8wy8S>?a*WzljxB!oq2H zs_BJS9~YFgJD5EeyaMolnARUO`Wx)bWyLhjTa)k>SQ+kh^Df&^T%P1Ytx+bcmrE^y z2JUzELOBFhrSQ${ZPf_K9eVL!6*4e>MD4$aZ=Xn)3^Y2}SpkmPR&QtCPQQ#GlKxz+ z48-)&X7e)q;2-9ecp&n8l~>FvOq1LeNL8QJ;I|aX>~om=gM>bX+AUIfcutC6rm6;= z);7gk`pg{h@-kuBpMpxRai6?Co9)w|{|wwFsby@DDV?{%uExKgmKU+fB|(K}98>-l zM%)ex*fFYwrGgX<#FfIzU=|zC%15>tUwqAG#h1q=aAefeD!1DfU0+!pGF>rLg|}aV z_q*ctSF9d(g8SDG@%~!oCSm1%^^sjE^p4%$yY(eX=cPV@Erh0m)&J?Y5+eq zlDxp)Ju#K~)uf>5Tk{cOJJF6kY)|1W6AruWNwNA(1ijdske*jC2~0O|{kk7pW{ZBal8tqQ2kEd4Q@pb?}9HfL)ZF{;3zb`zwpP`J-j(A5l+w zdqb{2rBM9{W&Xh3Nr*Xd=?-wosMbl4F4f$;IN6@LCN$VpgRSrX^mtT>IQ>T86#w{5 zMEAyclAAziu1N-wKIoA5Krt@T&k*I@H)99r|745a#6DulQ8ZZ&*&d z50zJy?RSm-&uO%lfPRBMyK_Yv9)jN#tgn|4`TzufE@s6 z-TMVD)|sl(&)j&5a)iZ&bz`Ncp>=hJ;;U+o82)NKY=`;fWoilGP)u1KirlZZ`>L_^ z3QYXZ+CQQFv6dPo+^@{#5aGj)c!_5IzFRr$4uL(ti5ddhJU*U2S*ivF!#pwKx>U;0aJV%Kmma))Xp07473o~dx9PAI$Gx;cs#~0_4 zc64_nyUjfoZiDyM%Rj#rIk|$EYHJSH^=ouRX84TG5P4>z;PPyeJayuRkLKSizAUju z_mpTo*|zNN;72YUxMnOJHtEn`6%Xo(h#==FW51fkR#7B{E~w%GpJ|GODW)?stzOz~ z{ZG0uRx3iY5810I5P&z%6z2`YJW!>o5fCu}Dh@8eQ1U07pK{j-!R3$7K4ac6OFsM= z{MY@9?exRl%bSy+V8JQuyRQL~9>0lF+P5Xh(*JmRdndR3`dCPKTrTL<2BGTV`3W?uDVLdmmv`%}Dx~%7A;Op0y!GQWed8zK6&7-@Xn2zH|W#=Cc zbb+O(py!JoC9H@6?94j*A_zPy4D2GF*NH~C}Bwzr~kCwq@9501Zy1|J1m#C{WT zG<-Q;{%~3I%m0be_p-mDgS}7xb$-;Uzw`fRwC~vi%rH0`Z+nYrxj~Fgt#sups2cK2 zTs|ZoPXGE%)NE8q5T;+|duv(G;7*MHR_Q@J_Q0j8@|}IJ%#IlwA8l^C+wTZ2e<`hY z=AgEE<}A72L|@bc|6qAA#Xkr+t+)Lq`ZTw>(864Ed#AJB5|lHS+H+nv7QT7sX00{>_M%(8S*}o9jxgw z2sEzvO?2nq-93GqH?i$G7??g6ymlWK*nM#8nJ}|L_ux8q6dZ?NTiRIal6&|vviD)? zf;r;gm-^)Z!TZD}H}J?({)hgnwe-i4GWr#|-$b*)eI19l50SlB;re&M?5@2Rw?(+m zYxjsdimTs5uNGqq?|)rwK5DH9druv7kWDx>;%UGO*YkhYyVkDe$Y=e%{^Dnu)to#o>arismo;^7k7Ko-HuT zOU65Iu+-dS_9XI5-D`CdURB+lT>cSDPfc(Q;>1sH!uvtX)&mE#stwk8mR)yfq55Xf^t5iE07d00$WqE& zE(EcSP43L2VZBS^FZ7zx4eBq9jb$f}9}H8KG?>ICy`U)ILZ06Xf_n;7b^@`5p{5?u zQ;FAr>cQ>+q1uGwWpxF`$A4taLwnpFi%rSxYD2`hcdtYht1*1q;kpH{zT}bbExFa~ zUMu~W#gfwHc<=zx&$rIGm)(9sT6xb8JuUe(TG^Me(r*hOVOeID$B<>pP8bHZyJx{= zkXU|Mn*wEvCgtu+%)<1eH0jL-HuGqVOQd-2FBQRR@G%jY?<%q?F16V%5&#Y7 zQ2$6(K#h0tPY5W+?SV?xNZeoEM?AOPd<|qdC;{@)CKKEfV43$8xV)dKehhLUHJKW` z=fze0p=)ZgVXtTZhd&0HadBpyQvqPa79^>?r6&F($~3IV6APzv9Ct5Q#HZvky__>1 z$a;n8tL-S~p}30CykM&5PIW_G1(5hQ5~+N5Wzj0t)c%ta;%sCzWtgZ;Nx6S<7b%py zyphxXgtrgGHRz-Ouo6GxX$P7HujWJ{IQusMQ;J2%Z%x3{k1ZXE({7Di*kf$pvVI=w z?#&{LVZxt|-{D~^Se`m$TttyX3MCip9HYn7pUH*hJrYFEw87v2U&_vCFtUxOqS@ok ze9@=Ti6a=>$1T}*)Ec1HknlGNB*X<#v9Pd#$8kc7_|H^CY8!6Rn`9VN2{)qZF zQ8lldPKfVhxHi1Cq6KZCcu}n+R>%2>bz|jhv$N8lj50<#RtrU*4cLGd@D@$b#94hW zZII$P4cCY_o&6rqY`As>S|age3VALwztB+XgSn(ieV3K?qg(i4Ao!0oZ38thSDOYG zh=DD#8ZOE=#04*sbBh_h(w)7c){dk;UIw^vqjh27)uj9**}8z^gY8CV|F8n7k2rAE z{mZk4wo-lFNSQhA#tfd?%2fOCfAgv;l3w_1QbC4tYr5Vndrwxh97HrFWl|q=UE6px zLn`DmK$c+n*D1|fY@U3ZCi~@ZK;@k?}vt|Exs`OjU?*B;8=5NV9MhorZ{`U5*NxYS1xJ2-%#p; z&WspTqVU|RoO=o@2lAei*(F+(9R5*lPYt+{n6g53CsAr+pM=uvc@*e!@`3c<@ALi( zN080r9LjQFIj{L+`@=~#$^$fF-6Ef-RF|s2L|Lev9XUtYsYg>x(OLpSKk|hT4~5<{ z-;?6k-RPAKD~2kY4mt@F7;&Ie*V3!=dM+XJUHZ|6b^c#oZ0e<&x>P|2sakfIHb%Le zyeZ65o)(-uFDN+X@~oSS_3x0PmIj4_l=2{xqP4a&4zN^kdmM$s+haf~AT~R zXf9K19o*jd;JCco+2yO7b)G~ExFxB0acoX2ssfW>M-uTJmC@i^X5bBOr0>a0Gn}erfNp=)o$H>|RL4ZIkiPue z<>g?g)X5;tpw+hS|8mPc`HoR9HIOPP>~8Uv?<)j*0|1jvq_mjpDRY&+Pt=%J45ll# z=ZSiqI+eJce5vASQKy;|Ja_6@+nw7oSe})dtJsknu#s$-T3u*Yg?#YN$_3>NB}e}o zM;tXUOhSoGY9cRR`pZk-4y+*j!}*;JC#B*0xH-i!X7z~z;yLCIa(C4c)Pj&n(9ZW` zG8!gH3+W%wL1u;qcJEAeArFZ?rhb+3_0V$Erzp68= z0{e0=i5v}eF2xKvJ00*=MmCca-z4VPC|_<~aSx`EkWalAvaX-3aG0WKqB**YhF4&U zTjZTrVZ)TVg&5heXbFoRK2}5$B$fRx(};OKgip8dRCZB2cU<)gSo6F7;4)R)#0AC( zI~ZnQmTgh!@5v?F>SkD0F4eDqofO-vlvy8iiW@t2X_7Q<;&k-n`C6NIAVVfULC}3U z74N9CH;iq5*TuEy2xY5?I_sonh5J1g3Q0HGVB!zCbx<% z6DCvj_X;{d&K+*+z)qTaE)mu8!ykT4lXkKL`o(8C+mcC7jUf^3ZL1K-gb&fuv8E~t z+RLnDA6tH32RmlnyqSJ8VlB#A^yW z-T<|*=pJ;OTErZb-v)H!0Wt~x>17=3ycjo+@mdkZV{`)hh4S>VZ933{C?$}-o;k#M zbXxVoqUJDGXqHRi3?R0oH$dz?8-ACmtDu2|766N`6q^F3RCwhZ15576Qm-Ysa#&3R z_>@%(g?QmS`h~npGf~Z0)|Motcb_=_l2rn|g@%AVbqpuIUekfqunl>QctdevNUAJmVN z!OBL+Dg_cMflmXsdk}3;sClAchv8v91&OEVmtkCw#gcM!^aVgdgN;iOPq3hTyi1+g zK=egn;s`B&xFt)b!gYPwXr|?8!hzy#dh)NKHqVurO*uC@U3a#Doni&vQ2kV!%~>7D z+;*s(h+Q-nTE0oK;&kuRBcE=-GS%wtC0gE;O^wj{&5Nk{EM`)|n$jY~@|%b$f$;P3 z?MT6M*NuKgFOp!+9vRI%W%r`AjU!DlLqWu0~LYyKxSNx{>nLVDe7#SdqDv%Kz~N5pv8E!Lx(+Yy*^T{ zu5LB&`5QxToBQNktAsH|v2VyvCXvbtXvXwRDb?RZX2?h2_AUN4s(b^y)1* zDX`AbAV<;i^zu-8Mx;B!47vTVKD(pPEy|@^0NsL=hIfjvyPb0F5_>9F)ZV4YDv5p6 zv8QWtAL^!6>ZZC*JuqI04sLje=||m3Pu<5nkY)POE<+0|+uR=Fg4j+J=GAnMd0W0c zYgaXjKE9B2>JazlT2^&-&%5V_>-p#+m0={hyn7ZS6CAMR;pGFUFZG~Txs?K&#bkLY z4Yw|M!zingr}j#a#;qIIvsM2~ZrDz*2W~IFB?KMQm{Q>g*C=^kp1hJSl5i%wlc942 z^+?^QbKujjb8r{No%4;*^4TClDmE*v61Ml?@vnb4_#?isH#uZlx_|qmEXEsNK`PE# z80L~&VjGJ)V=bQd8DDtn@-V!tmjMZt27oiK3a2WK1{mbfy7ml7dlU92>~37xbO9j2 zpqoH>*x#mgc*nB#19bqi_)T>G5Y5@rStu7%ns988H*X?aA~utGyf$|-udEc^Jv|T; z^b{ILAH+zDV_ccR6|Ejcrr{^DdGvRCArwv|Jx`;>f3c><@@jBQK+3_u6YT;W=(i`P z<_fz0jEYW*g#uQcK!FkwGg3(7MQ-k{23&sN}VfhRP(CA|=U6CN!TrBF?b`?Rg!dI?72oyiz zmFmC>VjT4A^0QgV!8Po629`g@NH?5FQ3IC_9fM@aTcF z#3?IPUw#ts>U4%|QwI_|(^7&R-$tp~2$?*+uWi|+QR33BGpjXJS7B&-gqmwGK5A=roD?NP>5unMdeS5}AsJ9}lfiZN#b&y}wbYiym8Qnz zJvC3R9?QQY>uN|b1kgXpj9xKG)!u~Bbqble5Z=SJ@A1LxCfyQ|u&s>t z5_QBAhbkn8Md*jR1G+GFken$-Q>$U;aC&+AYEd^Wnr>K~+2U$9EuVh#&&Zm|Vih5E zEjCPwP{s4wZu-=tB9aV2=`#uPXwz4am?sUsR*G3ei!Gl%2mv*m#JD93K%FtJ+J(F( z`G#%72Xe zO+>R1;ft1J!V1H}XH&aXI&S1A zqm9>loGgCGGs)`V{&C?}YE@+s9^rwR)*l%>J11~u}A9MScKB;XP&j3lm6q2dMNKYE> zT%QZpsl)UwvfE7Z!~>nb*Y8s$%f248@u_hi_##7%>?it-vJT?-ARo`oO31TahYBvK zO?4HTjl)qL>rKAB+!GTQDA$(=U;JC(na--?FkEfhOTFqxr8ZuU3f)~Q+Kd}h%TxN1 zek?OP=_(GrrmSF~z2s~#!uK40_c&hZuwS?fcnqpJ9LmJx6^}5Dy~w=$DP#6P}DHB>w!wOg&6cOEbsUTUf~6%V?}8lBU~Mw z*Cyoh8S<%w!nzb6LtDOwA8F|x((zQGS2+qetFRB_RU>T_?b*IrHj&G}3i#*wLa%(O z4aQNwdUwU;ibf@?bDB22mDy{{pCz^M+1*icgQ#i^g_6rd=L2} zv_~WD;DWWBb(+=S-<@@Z4#-Dbyo(RV3}^r{9=-CPe%ubGs<2Oe^jZ=b0o$SPNDY%3=cLv0y$D~Z zkYt8SwoxD{Ma!uDM=h=$TkKW~^OC?uaaqp@#CcePwag-r#FE7kZsT!mEU2uFpJ_b+ zF=A`)CYvWfyJ=k$yL!oaR>eK;R=Y|PG>>1@<>$;D4W}|T9G6cbGJ(nt5B=X2->LUX z>PBkiUkL9ghmo$w=e&o7xKpWPL!~b{9T}+X%Y~Jf)_xQ1H+W|Otk3gxKp&Sq`IM)M zE5s~K6T1ZT>P?I$NH?f-mWv@}k!mWgeA>6Z!}sl(&(T6NN~I}oGpX)-9;8J50eT;aQudFQ*-Z-@L(9zRj4bNn_8W z-%j!7&BKF{XLO+s@;s!NGjP2!Lie64q3|(exuN?f<>}kBS^}i|af!H1t>pkz^{arQ z39ILPpqo}Q*8LMq&Q%P*(sN^X@&@RDk5_!YpdD+ZS%BSCO`a0X%<`+v*qkU6t@=_L z6P^godFqK#e{b-?ZzA^^``E0X+(gqFTwzeY1w@vEM` z*#({XrKCSaBo;a8Rw=K&Gi3Wgvc(xoI~BZOUUyScQ-|1I_!h9(jiXcZ^=Ufiua&6wOGE zo3k_8bvu}2-hOCVl^bPxc8GH!qxY<4qbv)Pxdu}yxQEs7mHXFy=6;-O`441(!OOaz zmc2O1evirngZUTZfZbcE0^Kl4WQTfh7wCP`TaG9YQ_zA7krn{MjqO0+n1 zx7V6M5BOa-M`H@PzUP+nd( z8EKX0yiM1yO3}A2VlwJN!tK_eU*2DDZRSj4+&qH5X!6f>PnEE=8CB*VsT438?PTJ@ z8`-aq35@1lz%aq}cav5y)CQBMuobm3`E%Q**FyC><`KK?G7QYHiVF7!YiH5*pr7ylXsjy|0#$}*RwJ4 zA6%6^i~d+cNR!zDko%4@^R7S`?b#}eS+ zkWn5et+3uw05?X%%KGbh^GJ)9k$N~cg^B*c7NJS`0twbD$u8yP{I&EGVZWq5Jwkyd z#GzV$!L?7Pe%_=sePczhHF(8MCC_^7M5Ey2C{Im`h?f4eCc3 zSzT5v+`%D=R+7yBg!5;Rpe(~LrcF5hTUoQX?_b;kW2MC14y8ugC4A_r=De?Bi>s4W zbjH`~g&};Ei#kgx6qbJz!G~ctPHNnt&7ekJU9kEE`&}2=xHY??&dNKJowIp7s~Lp`X2 z-;dx-ywz2Eg_J`xx?x-rX0s@aG`6fVNcNQMalrl{N%C6T=%cl+$!vd zi1L9GhJ*^kP>QNw`b{KHy&!ntbM<1WU5FFSTcEhNF2q)mu@E7m7{xywnZL(vtQ&7x z7P+=AQM7iv+%PVBV-O{oBD`ki{9QX#Y4>RXUneClNj~O(TAsda$r;-%Pk4k(4%tT2 z`N9;TR4>0|Q*%Eh1(0@a-BK*~vCF@_x6tIZ617fYGh=R2q7>8^ugWe7R10rf$t;la ztc;SVQsO`63SA-0e0$wE1(Z3RJ;grx*zvjX2gg z(4LRQmz8?)I?DFr+|NqhW?wBvDN zW#<}Ok6l}mxK+@6`e#2}Py}e}rh@C-Oh5)YH?Rr*Wu9mq$$a56URP2&ZBh*q?}ffu)iZRo^* zQ;hX8)eN-+YP%jxw~WJMo;8(8ru*5Yr2GyFI7U3+Co|84!OqL2pTstlH@pAI6pTJ_&@^ z#LAwLNwBH%ssU(5p1$ft%aOLe+xMQz{q~z^XST_I(O7$?5;vTF!kXLvNk+KMJ%q}3 zC(ioPO^h2YQW3UZFgv5&|J`gKlrFNG^wL`^vcTigLN~4vO=~fhq-xZl0@~G**U3)> z+~#U)P#*rZ`lIDoZJ4?Z5|Dl@e?CYT#V^llS~!-s>~)=fLK;kx3+bb1fyR=e-P z=}{Jv%zMVJSx(x?rS+t)^SdH%J+W#M zMF9=hxV2zptZyM{p<-4hhlIO`-@h%~*>15M_Cx5|+)gzU=_vJ~@S41k-$b=7oVc~L zuKpr!$>u}yb4l}(?fn04p%(t$Jo%T~uJ3Ns+7ffT86%Z#% zc?nxhFK~-Jcg)x7C9103q`qpYR~sWC;cE@!vZ3_>k@8ABii5Q}t)XEgppt(RLh?v= z2TX_|{)KJZy`?h1w+-=1+qX%=S@5BiT>SBD!saw&69&;F&vGZUuTg0^?YGXLw9}zp z2MT%Zif}P>ultNd{;WIL|HsVRLhSUSf(XZ3>()z%t9K+pqXz@XSwb z^fS=*W|-<0C(9XUGlL=)6!^4_qdPYB)@o9$ooa_8jexLQ0rT=t0Xil&Tl~XNGEH!> zFv<2jQ)Xk=+WplP`VM3QxykpRC`Olkec z-2T$U{HR$EnXb#$7D6N=s@!}AscN#kHm@?bKAfW5=u4j8BJ#1PMKp7+skuP~hX0<< zY$<9M4-~soGeTCtK#%5j+&e&!o}w56x0>KqHtlLCx2KD5&SW`4Nk>89-AcQeYC9Y& zy!J>MkUVgN1d{=J?wE*c(&@|{e^;WsJEZ0tAEluW{^G8Z-ZvA{Nj_LDf>pGNk_Uy6 zF2+ixEls-Uy6k4LIm2k5D*rwvQjOG8Um`5Gr5A|It1Zzu)P@}RTGOAIafCkLvT0E<#~V{zTqA)&+oiQdlC6c%Jg)WSnHAz~?j21=#&X)7px^I)QEG>EDfm<^D-h zMiCj=RRQ;ED9vxpta}4(vYD9>6{y=U+I4(2Zs|i;eT6b$&TRNnQP@G;k*evgd5xm$ zl~ZAf2-|1|IN*H*mept!}n}h|9K==)0kiDOMlU4||-4(Z{J$x7i8w$sBU6?+YiLy}GV|LLgYi*RIl zN?LK$$~)qGy~(^*3dJ}|k=$r@Cdcl={fY^Deu6R&UIx_c6>3Zt1bb5B=wG>|OKYuE~PNco*`v zsHCJNDD%UX7>Sh5;a_^%%GtY4u*o$?P z@N(OAR0$OJmyx%EwYC@q4i2OqfUSo){!NN7n{b>rtw4C zrWZil_a+*~CN^<%>erp$5Rmemgfnga;ROM69XDp;pudnf2en|qvMU}=&jNmTO=cr_ zm7JMZ+?;K3)|dykR$1P%{hvnrtH7Gg88tJoUmXtWj8zlT*orarc^6N*eV14!;e6mW z7jOS`T$Mm8Em#?X8P4mNOMqTTOs8nCs9vQquJ)(}9tiRao&J?jhgNxZeas2j^;Ow5 z#o4)WO)+MdWV6|iA~p6@5|^v3JMQd_3Ul|21+I7%O0Hj79ZKhEl*gvbYKm8ZmAN5p zxxgC{ZhYs3WjWwON1FL+>DA0F11fzH-*_k~RL$WfZp5s{kIF^X^Fy#-Em6HJdbCwat_*hz&s$>Q z)ivgRx07>HGGwd8id!xEM$*pgr<@+IKoHS;>N)R8s3|L#n=w!E^VkqTx8}!V0={lF zH!jSZ^g#}cTb+}OF(f~5^tbF{S-n~g&~As9wUq#!v_w3dg6~wrl& z$EkNz&Q>}E>*kt9C)HB&@;!j%*_4H#Dl^Dr>diUpLiaWk-OrkzLAW)*ZQHqsNf^&) z9jcT{l!3q%cdBMqpcU^U=H#lBW>+l>3jKS2;87n>B%*`*Y_(jCGKIpFPH1pEu`%g` zog)5L_Bv}1z_@p}ZcO6IV(*qGpra*GEP?M*7hJh<$7^?QE_Q^OReBtY)|#Sg_YUup z#adPyRKtv`JK&_rGb2LPZxmMAKc2U^%}JxaXaV9Pcp7K z{r?qpfBk=oI_{eoNG_rDgq!QprDhC2I1m$j(8T+j=)L(_2+Jd%$|g(zv11?f%86_v zIKAQ|8F(MlOnqONa4%o;$f$GXckkB2^L7h(A6L^mbN124Jic&nJD7blTn+I>XB+!S z0b&Tixh)=^)Ghbj@T`ZxHuzcvuVrMZ(tmgk-cy{=xMdmpr@-z|#VweuQ z`xmlrdZ_5=WCue{L8PWnfdMi;=o4Mm)QwPSCsf)B{|^HdL3X zvS;i|Pita*dMOvfchd7e#Hox+Ax4;e(|W^p3Fb6C=KT@jb}EoCRK@U!;7;4X~rrx8dpK$(^-oe zoY|~~w|T(Z+;)_em8R0o-3}QG_uA#s3+|&w_>36uJx5~#bWK5j!x+4p?ipI4)Zi06 z-f+vMJZj^Tk@S1gd)jNBNA3c*Ya_;V%cbDR35N6=fnt}|>zfU902jRH$CcoKg8<@W z?1jHA2Ep9(SIrBoml$Syy0Et?*eC*}WlGYdpd=GsDm$LL3OOyRZBHgCG+NG6R^jH%o9 zNZ~`+$po2cy8Y{6xDy|r?dwl&Pd_}N!&O5&2}|iT|C@+wEq^#&us4tPn%na0o#|a7 zbh3mrvO+3)v6@_R!+{mwA^>mae!W!<@u$H{2=u`lz*@X)g_KA(mP)*{&W<3p=os8hOQu7TI;0s9c~w_CbX z<{CUA3G4B$xp|6`L1b>%i0x%TCXV;B+kIt+y=JST`eSY82&cVAZI7O3HCxi;Y3~ul zgBFtpIngSvs28wTp#2koY*o$7*-PSg$selexb&fzVu}Dcw|tFj z^yl)CwfWxKp2x8^K|0Gx&kHh-K9@R0D}rb-;fkqB>iAr#^ouvRj)NI6;h zDceN2oY~Vb**}h#Z^b0flB!k^L0TtL0d3XP-9m1dPV(q(#&q=_1~1pWZ#_=y<}-r- z<2~D^6~nx5$$!pom&1D-GL>Z>axY#cCJ z*FOW^FtzgNyylH1jRj+k6UE zHe#5vT%N7ts-}T}mTM5%1v)R(Q+aGdkr-9QEIY2|PyxZ0jF~iC<#6}hR;fFN6Rb@4 z!k&NnSUNXEVAy81T4*nhR-}d|l0QsUv70nKhm*ACbN36;AE4#4iJe8ocBb0mVM8QJ zfJ~kX7EOKtDc%huMT8Suf`b2oWauU6>Qx}JAl(f0#x8z4I^kib+XEi~x;wh10T6U} zT}T*{9uJUxPkG#ZCi+V_@H@^OP0%KTD1 zYetho>n{iA04J~)s_gZ#c4M0A=AglJ3<;E-xQ)s4M{cTx6Zo8?6EbX*gr!$E&tyj4 zG2lIl|81h;1F|!mD*uGF1@w`TC6?I$IU0YW{>~v+A=`xOZkAQvwQ{KTK{9N=N!bkf z2J{+gWdaP~Z>y=|Hpm3H`tk>K$QDB~7M}LXvpj{xo7-Y9Z~P44yx&kSoWoqhlok<; z*tvh}0_qIAC6L9|y|2BK!o)dV5c}xnSUWe}lJB44u&Jj$lNEx08St@B5bMLMxdq?! znauU@nWmx$SYr+kL8AqIAzrN$juK4U42gL`+N#J))3*@b{Y)5rO%)cyfW&Oy84A4S z1NOS0dBc3HNl*GXozq8jIo@V&$I4LBrA>R=L(CX_z_j1Mg|X?@kuT$R{gLYN+|Hxghnh*Sujtx(_D>5-IMo)JW{w z1|%{pPE|>ni=C84N%mz9!wC@czM4k#NLZRwi2hv-vRqkT=b1$-Z)oahy56TJd_4Wb z?0gaj?wGCnr{Z*IxH&Nf3>E?T3_nMPnoF3AD-4!k14<8cCdexPt-xR`-3LKu{Bg6i z@9gerl!$}r!DTg1(oxS{fPXL0|JsPBM=>-)kTy+rSZFiH?Dh)$HBE*N#xC_#eJ zLxN!RUV~^6y=4rM7%gFRf+RXYqKw|6N1MsJ`MZbAae}Q*akYlKyujx#)MIQJ0Li>$#;$ILxvzwunNvV?ZEtR)mTCN_J z754Dg9ANs++%LWsLLthJJQPdLHr_l0PNfxsp#6WQi0lp;^;9UkY4EMH3!9e-88P_V z-J`Xh2a=SL8-dOa|){1)8%ZS9_3G90$U+Hx!W*og*5}Ld%|CF**IF+}a z#wRNNg^&Fg_gE#cWt1hgZ=wtzThM@1YwfXiGFw!ck7*3A_lqZ1_2T;U{cN)6$ zn^7jjD^eOOwNz2JuWdq8hiY#zy{`{7NlNR#*HsQaw5L2Yyue0D)|8 zMc$IUM|$tB=^|s-FAU2e^tI;E3ui*!3p0)t5{iM=-DAzqg0!5FDlpT4KIa^I1<5;9 z?P@0&70x(IrpRDGEfrVcYzH^E!x(cotaJg1^Y4+U9ty18vK)FN(r+iKz~g6LO&ogX zLS$|NNzq?+yKyRw4NmP_okmeW-^kyl&FEztm#VoU8 zs6u{+c_mwaPb@Y3zbHyx-&aAw&TQX%jfyH?%9wz${xHQAW#)3872*}sH;fx*?ELY) z+-c)raDkr*^K$j_)ZUI6O^_Lr)yKOrA@#)Hpp*=)>&!y#v7VOiF{^(;|5K+B5CH0w zzo3|wNlsx1V^4xCa0(L3G(SCF8V53;DTX?fLB}iIPqzUvB%&PUZq|G5V=RqJp6)CX zskFTjQ++b+XL4#^zO{Smj=ux&1D9Gt=&wVxWyRS56DAWa%hdvw;RcK)S6xW)xR z2~?5~DOz2pk2g$)6qlV<+S;HUZf@bfVxF8Si|jQ>Ah%&M&rWT(Cpw4UBh$NNxx;%>00hDC~orH2QP+!J5*PX zdu(2VXD~)NBU{B)fLewp-0P z%5Z(m-tM&xzJGAMQWqUii`>3u!4+D>x+8$07-G7&VSpGeHe~Xg@BH4iC19|zJNTUm z)FVVs@f=zQpYDXG!K|EId5h?$lGyzPU1mCIWmvzPkpaE*U_)%NBE!I8tVqPbug@4Q zd~%pveV|u(p(Sw7`3B$;m~oHyC}sHYgB(A4OQc0-a(bDT&5~iiyUlb1P{d2ZT(lr* ze{5bq$F<>5s;3X(u=F1VlUta{>hW()C=vZJi})KV9R0uNI9)INxK4QWRG;Gz)y6`5 z^8}5uv)CCtKLZqS7@)BjV4YXexDM4POPb&JmbNf^_UNlnl|pkw_uvilF7#0PDkQuQ z2dvuY$r~}miZreW(Kma3ic1df$2@hI$KX4t_|4ySZ)^H*8VCLbrF7V!ue?s-c!8Yi zJ@>yLBHo761z?82u;PymdrLREs#=}N0LTl*+*n{%Lc+gd`a9q@|GWM~(_awR((>TA zs!{PrMA;JF$<92|jNx;?KPSMHIhp}XR=ik8@^leatc~_5hgJiI2fMn5XLXpv>@S@| zrgxUE_z~Uqs8i^8_5Ln!M0E8yFa}`0V$u)MD33Frs-Dl&K2_m`e?h%a{Ch9RE{rb3 zoC_RS`xle|q^LyDswJHtr^mIxMX6KacDwo$|0Z*C3vH)kvkAKjxDtKbRIq;i;wk`_ zryQPGFoOo(N&Fq3uZnfp+Wx+c8E?2@#yH!|p8H(O;p!3Sk#p<~$22lW4_5=Ai_k+r zEr?n)wAJuPPrrEtEbR{4t!O+6=CQ~0KdV}GI1fMxFF{r3Gi}0ub{0+}Z6=z4znU1a zHGw#_0`!tzHZy2$?Hs35hrgh&3>-!l!eVBFIqJY~P}eNLngzO4gAuVF#q*JXlOl3h zz~JMF&fD?*O-LNDC}LVJUgL^X9|P^Omu_w&9z!RAhmm*%cnk1SqYnUVJV9BaZS{|f zosd%v?Z7fFw*_#3RKD|oD`_O{T+5!rIpB&S(4EQnY0N1wVKmS^=s4oY2QPrp#w`EO zohbwO)8=*u{B$0e@g=RDB}0I5ypXhO6UI_I(SRt=+_mJsQbCWxiVqd>gZJkDJ@nbC z24J|6fTuw8Y@crbTfc-rihzE0%?R|-IkgAe-X@dII4O4PebW0y#W29C$F3|=?ZOzZ z!C_!a=piuFTZoI@@L!nKE?hDq*#`#;f9r4+i@6y%-nL|2`ELgB`j{K8;>O7v>hQua z@W0vMfR-&?G4D+K{BJ!!8369`Zg3wu378Hr8o=Q$F92;Z8^D>C+((MAoa&3&iIQEL zUv+Q?-~*b)fT`HbRBvI%eadZS>JZ)o4X1G6=``RYeae<}p!1XG(pO@CLAAg|>;Rzm zt2~PLb6GHc`knI@uzIg#uKooCz$Om?X))jo!uxmBYvhm?k+q;HdTz9&jYVfZb4bfL z**WlFIDF=l4snG?NQ=So5FpU}NhYoISZ$i97bb6+^s}+RbYaFT1A%M$oWd=Uz%B5! z)qBtC9kkIQGi^z!!qPIlB?&UX)%>`z-*4^!9@Zlh<**G{-$cb!_*dYRRqtZ_+9^ty z1hcG&NJo_Kp`>eMJTkB8d}itd+JFG~7+qXOZBs9-TYz@hMn3~azN7^lcw{pbJ`F79 zmJ2^-QWS9hSqtDuPLuKdfQ128^@l=6py3*JCH>FDfXG=eQ5Rk~1=RHG~XFG%v3+Q2q!?~!4-qk%Au1G{5Xx;*(9(G|2h?Rza?G)US+5>Lv(N$ z15cmkFtk|wEg>$K`5wh@J0zd%w4Us+N9!b_1(bu&UB9^YXD}&YM2qjLELDDrl5^n~ zVA|N!+cwN?Kd^h<_MfgXltkUF@&M>6GFNfw&oj;a2Tg-TyAytk-yB%ViT?}A|L0)A z7Wh(x{`E%J%dKS>d8Oyg;#i(UzY9CJk9yH`XN*KF3Tj!OZCES(%5I=sWIff9 zl?N|92Y!h4-r2%hQRA3_bsJ>p;RP?Qz=Lk42Bh<8}LoQ^s#Og{MJg z!Zjn&JY?d0PbA%8%Uv(GmEQjNvpOUi07i66r87)we#i@2fGXk zZsHrlG{~L0W*Nvtz?t{}joL5s8;}jH%k1Qk#2Fb*_xtAuQcgp6ZU^w;IW&wt5oa9u zulPK`=U~PW7cUW8uYq9rZ;}2~Nlw2g72HGS@!1eZ@IBON7giV5T*|-NY9|qu=TZ#} z@sdAA)jQ=5o>0ac>kvv`7~kpQCFT%X$C_nRvEM`YPo=whXMB;6x;N}Go2q4$)sxs0 zW?=ZDYl)A0R6)+fzDjg%8oJCjHK@^kc9nPNn!fI$dTr=+(5ULUlowux*gv5SwC(8M z=MQ^~(P{0^!ii(TfYVCwVlm^Is#6=SKT_uCFAEaS78r^oSC8MNnW5-@*kye!{9S31 zz0uQrDs>ry5D6WzZ}E1l3u!If9Du64NxzYH9nSlfF-m|*rGox+rU_o4d^6nG%Dvp^~VBxOq0yviHJeK762C8U(s&_G#a`x+=L@VOt2!kiC*pFA8 zF0FF@f+{O4t8rf)Qov#$f>6!c+ej`**6?7eVGrq(9(ssq9xP54MsEL3xs$Z9wTJQ$>#T9&3GD6G& zaI@47lz?Sn@!oYUkl2q)`hoWni$;I;hfv}qoc$87-0_F^*CMz#OV{C7e?iW2_@z$F z+}GdG&W2=(^SggRJIM7=#IDAwMDmacaX`J%O>BK-pf_l)&34w&NIJly615T3;2TaY8!ld2hD;b5WJX z>W;`0@vkm7rEju0pSqR!VNQn%>J|V@er}w0;GhSc-g-oZOj#w#XbyIgKLxVsnRl3>(HyW zKwPk2QFOOD3#bi=t$g}jekWSIJiR>;rWBV`T^Qr;amOp;X9{81*%M*1VOqsA^*dey z;qM^dw9^Y5-)i*1j@HwQ*{7lG4o${T5v)XaWEQ8I$IlH-YtufK)ZS{!pDEsrg5DWG zIJ!NEJ+)m|Y#>t49s(kI!-qC5Ci7(f%HCgDi_hCdI5q|px%(8kUAZ4}*>(9vME?Z= z983o^5De+O9j;zI?ttz}WN&cn&3sO~OeaXCdO0tYHrs5zc4>tD3)1hZ8CmQE=GZGV z`M|17t!*|@n)_~KcTh1nA;P0a4Qp0y#PqbMq$OUMB`RE+y!?F1Dlie1uil%nHRNhr zKhrSzt@`z{PM>A2^V>9)`A)`Fa#gS3_wt3w&}n0n>aHnI_jS_JNZ4ABh&ov&N*Lr2 z7(4@&c>K9!&?cfRVc=7qm4e_-*$j*&jj4uBd_PoZAJQGQ&>TS~9M)C1-y9`fFtqT% zu!UEgOaVyl{ z#eSpGta~V0<4wAw#Rx9S)SRevtXkTe4i&%N0yaSqb{0`F>4zZHWp)=|p&_m9lY#ae zdO?(3#A?rCt;?OSk}NdkN^<^ri5OFF7ymGSXnXHaVp9^z+l?lM#7F!x&YLa_+?3ck)+ zXBf1q;f0P14pU#|ZQCXdnl&7jk(RIHy>lQr6E1XNQ%`hPWL{dFuA8xNl2Il^ni>w$ zoBF67VOdb^{mZy)N!R=MA6!f=pX36fK&rq){qG9!qGy z(_Nbx%<}gCO(8D;3Pm&u{_kf%0$1npZ>?(HR`ot>7_S3dwH=UU?g1XF(dS|$3~Wx> zVPy`eKEF@Sw9i5pwv9zl4(CtLfsE*e%fe@YfQ2>F8uV;i>r+Z%My8urN~fe@GL6ef z6CtYzz0bO$3A^#~Pz6zHJ-H&YGSZJh8oir$tzgVTmP;wx4Do9{EE@`KcmiYiIFS?^ zFSk%R$jm#CFp`qvkePju)obPGCh>RzLc~heKq;t0M|pBo^(BG9Z;3bj&JG#)I(b^36~|3oi8DY6HLQPN`%lJ1 zRd-5S2MhjyqfPs0T#8fmloFKPV(6?ilMBdr9+MZnF24NiHutSeWtf!0xvzkLT(S?G z11WB9IH-XWl`@0VwCf$s!#G_+o3z$;M{aiX;^|uht4u>`woSc7HfHrfMKSP!!QBR# z$%Hb=FN@@DZDm!59@8(mEWqYE9E1A8fj)WN6G@K=d<1#ZWq+CJxHJ_)!4JBP56VdI zkPhlq5`kYi7PS<5=#>k?v-o`FNYgX*Yo{v`Cl~BrT>gF^tkaXd_sRZ+ha%iI@5-s6 zMGYD&5@nu@_3KI{e;^Wa`7*_k2Ft!Ycyv!jwHE+((l3fcG;F{VO){14Hi$?R950Jm zaoBEcfmTg30|{y{T)(vznbeB3-Rf`v@?+fFK;ESln>NIjBufndY@zT#&`u0VKm2`a z({So=b6fSXYEOD;+{1mwR>niDj==J=ebD%Gj;b-;;y}*4>tYEN&tUWJw@p|TZr$Y9 zP${kq=s-4>@9VoldizHRR)-HsYd!{Bw6tCt>}h-(oE3p3c7)XlZM@Cc$8#}S8$h_@ z&91t%UP?j5E5Q$HHHkAtdH;gA7mY__;%#dS#||V(2H)fb5|cc`7k4dDx(3FPvfWnS zwZp&5kwc1)7BGRiKB5@nzw)yvgHTzb2HT{SDfi@8jOq3{_w7v`iPjZgBK=6AG|Zch zZ!QZyH?9ER4?l;BH$6>fJez3&8$-@W6I=4=ykwjv2Py+M)rK-FEH`%58t6qyv&<@W zxXk%%(xj!jl-UC^;HRTG%bvZZwWL8@&ZW#v9OaN=lu~Ws?Ks;IH41U<3-|O4;(C*gFB(9j{_P?E{|m6C3q--yfam{jGv|zF z$pOs4-3Hi=-jMXo(w~lY*Q4R!$*tnD)jF}$zYn9LbkyX=IU6)wW^N+c*2fNCuge%6`&Owp8n}I4PNo#T)lR4)GtIvc%*M z$a7?PWbga(j>#Kks{3opF7KY)g9InVpYVKeameY!PL%wL)F8GC8jEtV`&Jc67-WN8 z_|Nkrgex%k?R`|RlTPeI3HniU(JXKzZ{p9YD5~*aa?c?4Xyl?Fo_W+=^9F7V)sL=Z zVT+fw#T@wNGX*Fc1{S&!61B4u}f#;cgi zUiG%hEFNTv-aR|Fe=) zDD98Q?U^>5BYMQoj(N z#ZDA@M06QMBRX4~5-4qGF{uo_g1LJ6e?eIFqlnoP;6tZ|;_}3jyaIZEW^Rc0hNsTT11fN?SAvHj$pW>E8h(09s*~vA1AIQ5;dDHV>;yN|X!a06NcLJ%tWgg7yk6bsEXcQH zRN?TtCYvOPLA&Yqq7-j3`P6sH++`U#l@$$-*N+2PcvBB#?n7SI#3U$Y4%G8=1rl_` zP5V_Em?uSe;D;qdhPfCx_x?uA(Wnu7OY~Tt^BG|MZb}z+-3;;TPq^IMBqwtS4rh&W+N80=r%EZLS1R|9*Pz2o9W^g*H*ROq zOI;Kmx6B0r9vVQ#EMlhU!vjS2uBfc0=xq?mmF_TRpK|>Z^1q<;RwUwoJ6?|BD(JY+ z1^kx9>6Iexwn+83&phUW>K4RJDQ`sgW@I2vD#_aW8_j?lCT2#nYnHGVLbY_3kVIYh z4drTlkLVKEI*0l69CgRVzu<*v5w=+ea@Ph3>cU7Xk83D-HwfNZT(y3AMS3_E_J+I! zM4k*1)(i_o-?WkD^Yf@cW)_p4EK7A$$+I)PAcPL)sPXb0*}c>XZ(3MifRB6Xw@Fri ztLhN|_D&Cly}({_O3pt%?KW5i!vuZFezc1}D61c&-djQK`Psh5=lYTr`W-9mx-))D zlQXTa+JWZ~3%Y|j7LAP!o1`8`apbH9kCWMl?z$<#?)8C%GlFb&kx6l&gViAOEa3n* zRGl0R6S-iGY`T|*z;d97^M2{}N+Tm$c;N<~v?=#6_X@Y&6O+*oZ!6Yt(j>ipp@kO2-G0z$dQy4=% zbz66YR$r1x5xIvKxqo7bp%*!|~t0t{rO;L5?uQeZNg~s3-s_=}}VX?NL^x@wB6v1q_!?@1*u{Z2|W+}kp zEyf7|Snxb%-=@KC7g{zA*u#(Fxyh|{GZavB3BrL9iIwixV2fSo95dnqK7+wK@0tLB zyT?p9o(0HBRe{n7X8$T};lDZIMT#*E?sqNqJXv?M2R}+KmtT}}#avCtUS<5-8+y;fedv0eiS z8KK?lx$_k|%?VZ(c}i-=OWTJfgsjHO6*WJ-dHLLX>#kz8gcD12lV1C?IzPJ zO=y#^`Y)VL3(naJ-h{O&pj*+5!yTME4@6T5vNhkL8}-=yB#n{Bmr#&``9ZE3g*tiSp_ePjVck@9ReyiA6)LhG$Jsi*sQf%r1q-xe?(Ody8;tDW)HYA=ooTL(R(7jJ zH*mUjM+skr!hKqgYgFa9JKJw-sTBrx(9L*rrg|lk#s1dv4~CM;kgmP_42Q#e0%Z7p z_F1yr=G6*s_$WM=Rss99479AJ^=(N%qg?EC*$@g?4k$&$s;6aYPNzinUQBT^2ySj1hQ9CVAMbh{B!sxBm*TlN-F9b^&*vIl?cQ4OYY?ikjQME(QFy_UI!>vH;F(Fj@68=QnH_NS zkhHwDJ@x~k?1A!?u^@~Kmhobcs5#2p?S15Mi^~Zeq}I$QkV>!Zzq|#dn4`9d1WS<% zP5my;^TP%x-+iQ&!X#1zcMA2%v{8Q*^Tp(wkn|U|I|*4TBeQR8BUkoNt&b`d5{dT9 zG3;>N0MnYeDhKDem?`yuk=++12mp@Wpl zn)V*nQh*|{jCuI|rA@?Fl3a~ZF?h}4$-IP-zf(CIO?`s9UWo+T}%A`Z=+V2tu=Xij<$N+y&y zB#ekGkMQiR^acr$X&`Crr5RhaUm5MIfu5z;XOt6?ztS6TP4cQ9_UuaJ8rPDl@V-n% zuRIWW&M;a&O5SF6p7bj=O7euDMme;)2;}d8|F!FbWmY%h$IEmX z1i3}0yMlFq+(DtOL}>%YEI3?PATr&XVjF*q?~2M$QMLMv!29XgA86B6PA7tP`1`=~ zd0iGPf`Zw9LBpD+Z{|pOd*oc4nl6G^;=I(II;7As;E|A1wn9t_E zeAh@;X!ke=3)Bld)2|cZGwXb^jJ~_)Q>Crb;XADlf?+E#u3;*fb-SvH{9UycYRkNJ z0|Kc*jfR9usxZR_CEXlv8}l5t>4-<~p3Xf<({54|_Eb|2NfP>IE|xiE1&(*u=o!Rn zaL8mFa4By+TU~^v(rJFD)0Jt6RBoS=cn#(*M|fp<-t1_v`F)v9rD6x|Uw^EUa+N~d z$f}xP@NFSUs%W1wz`JpT_v3*Q+Lk0<4tg;Hd~x*`)CVAk|NdR;aPSao<5r0Rz`sg$ zb#LBTx9b*B)5+Ev>rQctSEPE#c|8ltBYVT>ag3C(&LmX3t@G7v{*QR2CX=svXQ?&% zP=;zfp5eQ2h*W>g{R%n?ej;x*3f^RAn$*fwZ{9B010~a9vCo)lBEjvFGKiQ;Uo+;W`4fPG(w(D&@K>_Lan0&$bST9A6Bw?M}1qH5V6~4=?%g%O# z3-0HlWhVU<{;FOq0jKwGKYI*f#8+Gz-d_><`Iu;9kPmX(4>zSwr(H7iCkg#dyF6jj zG!Uz~Ez>(t7OJHqOqQz7X!~@eE9tnYb~f{f8A3}r_MHws6fl;mMXD_{XmuGj-A3L2 zg>yU0cuA^AnERVN(aF7NbE0+SfDT$oc4-)QQVSnDsq7Z{nihi~NAmt!_^?QU+VYGl zJ*;)p9^CJ4c4nR&Iby>i(2{&z!+b+#8oGcfD6xhe)sp3eShKbJLs+<&p0jgW#OH^G z0JTy==@R0hKjYNC!BeFzAgwKS44rn7TX)`Anu9J(LOvj^sU!D~AVDA1gGmn6JHx@p z-pU>{7`)T>8OBCtCCLLA6?-*89v zY&>3f9s-?&f^M5Mc_e=s1GYz`h& z6n^`B@};dkWfP4VTXzJQ|69v6{5eG7og_nVJbimUB~hlq+J8E)5xMCf(xkm!3p%wz z;LP>wCW5+Yn#Syr1aT$vi>=A=M4m8sbjYPUZOO74Pz`>stTSeSgIV(_M{Ky;(%!K%KgFQE?$wZRIyg zxObpVomrT?HZ{mH9UKvcW*$2N&w_LAn~G{zCHF5xq8V$}<(Q?2dA}Q}cmjrTXlW&4&0LI5}ybM5Tn%&;CL2R7>WVw96rnXK1 zJ`WhNtCpYT3JLC5F1TaqG@hu$BA7I8mzB*oJvGG~uq ziwS$0RxAtq^SmBC1RoAAb<{!v%R1k(Zn-c{O(|ksSS2b0W=HRqWG8d_KJpowij^#- zRA-qv`$R+ne}&?=$$69|NJlW)9~%;Mvyie+s9t)>n3wpMZQ3uH);f7T`8VB* z@&J>fV~Agf%0FD5`z=Y=re?M^p`NL?y!KBwDl@-3y684TCSt0%BVO7RoOYh9gs%!R z!$@}1@7Pds-#SkAgvwJrO1_*O*0B8nt6&^K&No`6LI&(M_&2)5ZFq8V56_eA=Ae1L zQWlZZwxyNEVO0B7vQl->wQv&DRQ1$?Dk zgDojz7JE}I=}nn?7H@Xo$GeSOGAh4a!w?3$69AWPpgDsL3ho$GG3VDU31_B~UjznS zBXTgKV4O^&T|uY=W$D!`zTg*_^vC9`_a$_5L(PZb#BA zut}Z9!t1s@e$~r{){!snC_mp`(G-79kW#kyle>V8y+N}rm8RoqQ(#e)$fX9&{f%0%W{W1K zqd0e)7H!@4%TYVAcO3hgSS}0K9O#4$erO4e<7x2{)x+9m&I%hY?+@MU;dPfNV-BPj zQ^M?AZ@KiT8urO5#FFi5Z&!*$;e86O(mLE&+@0wuS)Q)Ct+G=xh{hPUMe4Xyy$O>f zh2AbO#;NCkhrXVquRl?YoLP;8c(Zs7KK*2SbN9pZRjc4a@`#X}B>B<2DT(>sy}GcL zKZG1CV-kNTm50fwl7w9Qx{u!H1WHxU3vKA${>F2neo}KIAnaUuYsqA?CzmYz1$OKO z*@nr@&5eiofrjs}i^PVI^HYL3eI%Qxe7}2mnPy;JJmpn*?Q7%Ek3+QYa%lo^PspAG zaJiqjk^%{xEhOdtOt2B`97gT5T)nL7U1rmhG7glKEIoui3c~%2Sr~w`ow%SSaDZNYS?u=SofORd;e!+t5V4$4*Vl< zE{ngC{cp88gyDB!<_Dof*7wEflRFsnOWy=fMpGn&2&9WJ=Pfe3;DCqX4=O)tb64hW0x3zfMR{U<+{IG#J)%?l zDzVeBK#yx=&#BiVVauP|nn~I1MLKkboC$JXQ)<`3OaB2J_uppId&kl|%{Np_$sD)u z)l`RSJ&WPrSEsT(A-U>83C}2td~KjDU(ZQS%zvN&Tay~;{ZHo}y-9BoxtDldGbGJ? zxOa3uLp0=6W|VT)keXq@HbI(*mT0*0KwkdxGp!<(x4it=#c_=nu;pFgdpwL0*OUlV zOb1ioM(9OVe>;JJqv^SSYN&c;`mcK3Hn_fgi8xIw#(u}gt6ph-AFrNN)dti7%a=ix zW~N4OR969Fx!~3$o^%?JB$&Zw8X9gqocEir3>??|jeg9!xfPuGjW$Ajw1_in=Y6D^ zAE;`I?%&$(NprfitWJ%3^NK<{);K7NKapv-P_Q0($1ncZi)TFXms3syu@d=DMssRaT`+@h?}N_*7-EFU7|w2RGi(`auz(Zs3!_G|Gsg!{cxM- zo-gwg2%J??OFtGeWXul$#H0ohA0JAoi-1KF8f-th3~ad&K$bFrxRhZK&9Q%fwK&i# zN{%f;(0$W8)UDQ}QM=^7fliw@YPEu+PXcCSr#M#i2*z~hy*5l5J|uP#zT)S}h3&+( zteD;xEF6b(lN9!QeT$zYr8%LgzO>ujFQF~GopyAgw;TlfGr)$f3`)zESQGrT*TnV( zXMg~XhxtC`{^|SvrTSLa0%7!jVuSXXx2JQ4709-(~n(M+-6lTEJO6o;7aE3AJEso0<1 z^VB>2I<<=ElWiGZoYhdf&tgIMvCAJbKGFHRj5-XV)tTyL!U{G&{xcQ1SK_Cjy;?PR zF>?lS&1%&onrY+WE!kFEbN{-KnVK%c&1d%F=ZEkQON#ff+;3={Q-h|!*EL*B6#U>t zzMv^;jv63Uq3`1|r|49eO;B!|o?}i1OYu&UWnx#%2EtD3_#Vc!D&I3B28p*{{K6Pb zUT|pN7Wn)Yc2n$EhJvJO8H^n$*~N3I*FCcG54`y=PRZ$@>%>Xm>nK)P#}IMzx(tL>zho;NtemN&CW3p2RABS z5}#2T)83JUV9Vgm4*(b4EZ;ge;7X05!dC*20=+H!pE&^?e;dLbC7A8LPMG|7s$*AElSm%Ptqilm+(k(sB;%7(A_JEs`vj z!I!QK>)AXMwV`1Ou}aTzcKOaQxS{-2#UP=x zP2v-J9wFYuo_yI&@I0!K@kDd%OS*Dvn;zey$hW=wc~2If&-ub^DBoEr+4{BI)QQ>G zQYIPA@DBE!l$d0Bt&CPJ(FA}5`DD7ld05`h*B{hlpNV9#ZHl0n4{UvTN&S9v>>rhs z2+{iwZjz;>n{@A+KnO>r5b zsJMSgXo%&0>Z!D*JrO|ewdh+?wO!j`_WsC^VjblJyyIfiE~6D;5vMZSpEx_}p?B|8 zPlPkdF&>~?0rKjv1JX1*ajq^^_-jfRlb%4cne;L%+Tj@&W#hM!-?uKNzmJCy2Gk>T z)XjRDN~l})CQ^R`(kaEx@}>Q9#iLr(V=v`e-xak8kb}=^(5IJh|FMHZ^8Mpt#q_St zJ&$NanZiq9^;+BL2Ajq9+rdeE#`6tCreq20#!ubGc3Uotg&=)7r0P2zLZlPXdeO%% z@+HqllOwAW)-CCRkCs8C0jFW%!CHj&oX-)wkSz|APE9irHG~bB9%@R9R>L zpHF9pa%pqVk?-aBo<6I!B)#s+RNBeXqbUk7q3FZeLcT{rcuMHokE zpWxq;)k=4RJPnDjV$Hj5gm$U;deUfjo)h@!W_8ZHJ8RMtg;TC1QpLHD2}D7h0?cnP<@o17N;;jJBAM86Ugreaef^?uj}p__gjv|m^05XI z??u}$BO7ObPUNJSWPt~BT3^-+m1FyMFNyWmH^#<*Qq@>Z+KO)ah+FAG%nPuqQdFbr z_Sp4ylBR$huuhj>uR!2XHqUGBCPVB1!{3Gn*Ba;401fOy^K|X?w7Pf7IB~GoCZPpW|TPn>e1QwGN%oeup(n#yvDg5pg)PV5{^Rb^3MVP}&0tS3Lckma!h z2W`^Zvd*Qlp3d)8s}(QbQLD4ol18jb*Iq*D|5$!y{MMW){Zykbtcil5{R0tkT3qI* z7fT7jrr|EBChbYPhRM8fgBcn;W6`LPyATWXQE!Q^0^u203}Dx zU>!+iSe>hFMY>yqXl5VW4qmNqcfnTfHgdrkZpkd4Ho7AyKzbQ(aRZ>JvC}V%u$c&~i5$|L`$+5*+%nGG zFb?cHZEtR?WXaYD)cIWB2V|SvYG;1$?np>uzdN#cG5uMBZuFo5=TPunLZo zdi8;VMkP2r@_upI@jS7iu;Zv^O{7 z6);6mxEqJ%yn1POPoh61lXpqV{Q=zDKqZ58BFxTYROWpALA&VT7dQ)v}ihBZ+ zuRV0~LaAAd2v3ZaM@9}B3MewzaN1F89ClViWwgaii~fh}8o{Df-2i=lYnlb}izFm( zVT1uG_vff=a3o_V7}(51i7NFHD;#x&U8U~M?*t<$?H(Ml9T$o_uLGXk>PB#71^9mw zNLayVBj;XtF?=G>^(#DU0%dt_(U}LRE%$2wm={h_LZ)%WNAHE97cg8spt|)anE8wr zh^Uz@A_ugGy_uFc;Ju`RTP=XhGY0{1jR35MR0Am>N!>y2Jc>lU^G(h03^eh2NQp0+ zX1vR55lN6ZmfjokGmC3*kf&<**-dlBm$jh=H)88ny51FomC$*q44Ng!`&u1ZqVgXG zvrla&7hRi3McyawI;$7yiiM3c&P2I5&W-wzS#h>;HA$|D#fwOgAH=XJD@KKw##z{v z{m#@Lj2yn3HKRZfqZLSaHJa*PEbyG&#+i){v2$PFrKpTLQFa|WlV3r$(HKwN z$tkT5yrBnK2jN zg4R6bOY>R!oKv z0@5`Q5TvDl&-eel<;B?Nv%2r|I*;RmkL=vG2P~XM8=t*oQy@bzv^;alA!4W%oG{$? z?u2Q0$%M#T5FOty&2XuLQv!6Dv-htP!pCl=ivHl04y-X5H@Wh7;BYX;4eLHs{8BGy z^G>JuJ#Z)q*M9T_>YM*NOf4StJTUm)5dw51lP2(&B$V<&93UG2h-3d+;2d>DRi^3l zt*6Pxh~|Iu8BJ}b^8MctZ?ylI9ki&{gvGn!NBGXECA8NRIGEp8D`oncA8shL^wzlQ zYtXRRO7a!4?O=@r(_crg54{n z(|b!4eS29*$eqpwO=o@48e6Jeabr<7I63rJNU%Y{nH@FqeQt8_sm=`2)e;tQ%+Ti1)+0+^dWZK$NLy>4 zpZ4aun8&hvSGervrvRWOVjjpu2cov5u4hm!lj>yPO`o!J!+tQ+D%Iab8Wa++oi*$Q ze5jJrvG&bQW+vTzw_@ z$hEs1r3gt1Gy=VB+p}b}^^`3nCEos+&3Tl-M#|%l`VYi+#sp?_MCPrggp_}-{u7V_ z?oCeDrf+ayP|H$c{=MQT>D*{<@S6147;F{iVSs?}?;(524+nhkHnmq=o(fpr*?B2{ z?wt+oa!N{2%PSU&mQt8iizVV4Q$1IXKK@Jj{jE4W9XNg!J{ip{mN)ldib)&In0Pl7 z=NOc0@wmMlFRBe!^ELtvi$g?`K~6kKWtlB2cdg=*Nbgxi1>(pKaB6>>@aWD$-GIEJ z*;qv^ZXH{Ud{HE8nXL+9*3}7%)AH5dVmu%PM&~tQI24v7QCs$Sohv~6w_i8`ArO#E z1&%7?XS{6nSTglFN@s%aS;6?-_}c}gelBdzJnh6$8%3bT(EOC+;)8iZIywEA2Mt=_m^d8cQ zPlNyCX#jr*CII548UcEO17LNK&84Pa4GF+<1MDe_M!K$EXnrWnjc2c=z5pRwbn&R>Q$?8KIDQpK_|f!SG+A9&+MbGGHEW zNo6hZ?l_Gv$q=Kh;Jje_0{Dm| z#zyNlTtM3l(y8~)7i46+^{49T7;aBD(rqZoB2@uWsYygZztXP*y>R|bLZOvkJF@i@ zsd-~3)b=iRmBk;vYCx2>iPA{Magt`1hFN#?dFw|wb6zQ~>+?R8Ve&k=uX2YcWzR=~ zW$iJxrK=Nf&g=9zh=$RXY0IxK#vMH z=x0p#k&j7kY~hRkT=WgBu$tyR!G$@?C}uZL47U21V3;9(*lxCLH$17P}~D@W^k;WRxMe(N^3zvYoYm4OadX9n4>!+UER{R1*PEe6HmZWeNlS$ABaD*f8h{XJudzCaFn)vu z%k(b(2J9EFlIcw3G3|ga3Q7pp^9)>8$(?KlXFE3S$@(hYKjr3Y1L$vL!`F3!8<5U( z(l4#3;H3&=OmPB{+(4ho!%LT6&;fus!)C*%L{z2Pg6z?X8yMyf^fRbJh$TQ~7om64 z8ia9$kyOa(z#E+_Tz=*gn&fxXb-GmV<00UL+#qEM&TB$PP|!*~zZ{j;FQb-y zUFTeOK4RB_{x;XezvVbSX_Cq1xCalsb7LU_m}uYr+8b=k=Am!Q=s%a8Uyt?vZ8w-O zb3k77<6|P+9ea$Rd#!#^WOMB8hE76FEFYB7LF%QK>pblk_PM*QN%~Xy^rcXU;tH(X z%RCA^EKc`9)KT$*A?%a?`4fv7B&AG&JMSjfJoU8!sn!h9NUBgf+XPnQ&i9vMGVwuR zJ{H>F%J-&Hu_(?pMMxF1OUy(?>5Lm^0JS8pFp<-y%YN?+_FRa66)2iXR2!TrpeRdI zJMI{FEIG^rPKtth5b6e|c{cx?pm2Y! zLqJBe=6zOaLv(U8|KRK^`I%&Qsw9DFXuD&6A{i&!#p9w$^;q+Kn?|fX^GUn9Hk3I5 zv-WN|IgL5R)1#%i60Ixu#y}yW^vL|jqHY>So@MX7qPr&~5qq1pRKrWMdfTZnu;I*V zu*s|;2g5R-2rCiZ9}rgFUWc~$r_%FNNO1%WGVDNdP*?0ZUYedL^uVk`IU2jc#!F`G zBezEES=}<%dyASlyO!w!4%u6Vkd6c?B$e12@#+%oxSeM+BX-@BRCmsu5O4)@lTLhO z7zQG*#cwUF|Fa#D$!z-Hu`g<$zPMa(0azRGPxw=9t#6eKV6pihySb@Jie=e}ymG4I zC^b-2XTqPYSmgq$5@HspnG#x+D48UfG7s$q(KkNg@YH$l+FRNt;`hRblu0?C=%Rv<%kl)c(WAFJyRVf$`2|tpTTOW92yyAM4 zjGPdb6DAVEHgcvmwk7_#NlD7lS!Cu`o8?5%AG|0uSm`d=5f~EVM74Bc_WqN6a;~{w zG2@>FK@_$aILm}ka)#!&6N9o>&az^x+G})oBnKj^Eg#FN+R# zEdDU34JqiL_1ckBt3deC7D}j5zP3mamBSgAw**OhCiK3b;*B3ydPzAHKiloiWWQL; zo>4BzH;iM&?6EhyG-$#(4{aLfaEvpnFb1C^Nm@DQmG^Y6(c2)K4nd zg=jJ7_EUswR1r;XYUN_~GZ&JKL=tcww%N^$q~h-sl69`7xCfyZY_Z^rXT2+Bq*CFJ z23=X96H9nWQhl!uh(vnMueK~l_i%;Q_O0{Y-8Q{D`rz6_yTzc~5xvP2cc8=Rx8(Ju zi|bebxl2KFpfjdUES^B9^n24yIhrU^wm}l@pbq1bFR!!U0dneNfQ_~MX?IUkl?zyzJfDPGw>r~&N@?h%-IsUXEr_Nqr)qx0gNh(V zz7)T_v#v_lPTC0$q=J_-tk_JGdhnQN+*jR8Y90`Ngy38d?dZJLw3mTN)?%L$rz{ly zG5zFdbV}SjLAV1_WfJ_7DyWbG+QfxB2?E*us!BbkiexpFTr_MjQpKZGciDhZ#XI&JPz5KUcR)eKQAn^DSFVd`AG zde$wsy-XiKHMa$H>n?rCO?Pj7!e%v(f=R1c=Q>`mnCzQDLaWhG-tVn&Z)2kwx|#wJ zRLwVaYnEShTTGUfKLsWm@~Aj$@p&ViROZm8Q{b0Ql`Rlv? zZN`}&gR+27-HTxg=y@^ym}~=1rs94bqcFum6S0WVGuJt53g*bK9wgCZIdUpZFS;&8 z18PXROE~lW?2zJ*R|q`$BF|P{w`1|MNHGH!|A-I1RocAXng)+QTfP!qpI(DGL}7un z4BG2F!_MM#4QF-Q%=p{LMIl*ioNbyfO5xUYL|2Ghl8=oYIT_*s6>I8Q7(o_OZ0)Aj z7!w}?oq+!@_}=+qdvm6S{Xv=J^!RcJ5VvsvAH~PK#f*(Cz>CA!!nEa6NfpGTSvgWw zD-Hh^D^t7y6<$1GIt4~SXba(1&XwpLVX&ZFc(Fl zCdu`l=9}SF=!DnZ+uymfSHQ^V+Nh_=CHKg<>dqgS7bW5Y2A)$AH-I(GQQCYDa_8DxqN+jC$r()<By9c2bW6JPtCYu3x_9b<)2K3JUiymMr!Eq6^_cArwVbjb7;f0bzCPU z5WqykhfT*U{J^pqj-3d6>&ed2X@%1XdF_50bi*oTOxMhLR}!_$4HVg&7Gk{P3-Fh6 z9N33OLj8RBKEGy3kXnlJ%to_>8e+xmls6&USg_8?1P0xs3ZFUcj7onV;Fs;BomS}z zP2y$?D<7C64d6f0x0_ty6%QW#wfI!)y707-j|+Xb&E^by!3+-(;eQlKV;8W>4M4{5 z21$r$l7S_MtylyWOX6p|Qf=!vIK#=5IoR!@3$w{fuQ1etWA{{EAP)L*z}DGF$!%g` zC5ImJa&1@`ihoYjx^$!3*|In^)t5eP^YYVNe+)w*!iZj-oFsa?qRpH0jDYJ)FkIK_ z7F4tHABe>*_R;*QgRsvhCY+YkFrs!T-db3DkZXI?ONPLO#~>(9%tbk(b|i?@A1G=` z;(`;Ryu=nzBEmdS&xo^1PhMgM$HIrz8!~hFKtCdSCm>Jc(hI2=`ZT1kco zRy3DInfWomJg_m%8QC&Dkk&_SSsPYQq98)-({g05)oGjfm4vnkb+^aQ6WF|ul#`5e z8ib?(!;B|ve9)ir!O3}=s^6T7#J&id#cSmypP@4TfX`4$k5vF zcB1tEWiJ~TfbMFG^BQoBk(9gezwSc}&y60Dy^W{2F1-&`DR0aCs%Po(Ih93dlqUK3xe8SxI zF`%CT%&b_|ua7K3^9(0lgQB|>Eh`SPYk6>HIBIP!f7~ns&XSqB8}SgZ-u4MjSu*~v z!*fT!7=7oG#MZUn)vCnuu8T0WY~}~Wpqt)-G$f5&K(6b{nwuy*IKKTba}3t>DGX2O z7{Pg$o#1_*We6LQw<7(nH>*|QZ5=K%w_Gv%V z;HG}}x$=FUUuy4EGYz75y%?UaAVhJ2b`y?*)&ylw4#<)z)El6)JBOj}tI5#D{FsTP zGEBEj-AMKlc(x5=n+Ej+e5j0Y&4^Z)XL%(Yea1mGxUiiaJ^$Jb0qi6H0;ejhboO3l z@%w-|4~I^2d6xlovDz6nS{@StiIUS#;CrXtzN}fJ7?v^(@Z3DPWQAPF}&K0e}Dcvv=bk0Zl)YD3_Yk^MR ze=~ibtC#}=D8_FV{^*RowDI*^-|qZlMjAd@u8@z$V3ZiB9sw% z3DEP}9@tCI855yZ{z`9eH8QYqO=K!v6u)5+ZL~;TlXOC0O z2&Xcb35;oSx*LpJ%;vn!Lo2&Aa_^)H5t3A-8j;y&kaXEIIHSVefv!F{)e*ORO$Ht4 z7l93=d%$_fYX8E9`^(xSeqIx{e=X*C3k!%H*;g$?S-^vrLDM)->*u!Ae&gGleN&Jy z)!x(N*1wM=J|d1qAlU?%CL$+gX}^Uoa%K3l8syVyZ`o+vYk4dLclF0d05;Bu^MYt7 z;y_0oQ~Y@UN=Fpf*(81VD8rYhlKG`LVl2w}LEXQAV2+tS^2i&(m}`XUc(Q(RTwA`F z2I`R`avOgwn27CwxId&7fdr3jo2qPKhWIxm>E{lJ(VBZA+x!>f~} zk4VMcMq>51o1u?>G7;V0n=W|k;SZY@Z?hkVUb=6zk49;jo|uY@?pei^`CE_l8)l5v z?~y$C!AstB`QEYrOiB=atfIns6Li%72Rh5k5f1v+2JMPpzy}11UbQI9FK2iWu z8UD{TSu-*kBw=%`wZ@AFEmqfT59&a!x=?p{QSshu2=lWu;c!{ymwog)7ZcW2h&s#B z_dNh-0F1KB*#apfXm*7{@70-!XfSO~cKq`b4>uN9!d^gsyoRKZlHQiz8;S9^Uh?amP$>i!ie# z;jPGHEArnb^- zq0IXyPtic24idigD~f{zxj(N(VDCCLMnm}^F+3oQ^F(-voz3p$--DQF&ZNoRBg=0F z8}TYU`W_nZ=f8$fuHOks1(PV^mz zwq26(ZQk^!Bf)R01url(^O~7U1OJ&ph*^bPmS;_54aEzm|FGKo0lE?q5q#T!_@Nc)Zb}fo>{jDc@i|jy(?(L0ZhD-u<7S`}q?QatB<@lwlwpM8gw*{g8Ofj+r=Oq7V!dPMl} zddfS!Ixz;oyjyY;{*8DyhqcG6mn3UsG2ag{9^G3S45vnTYO09&Xrs05%HWGhB)P{5 zG$@nWRfw+&ZHq5#;jem9(h7nOHPst)>R%0~GH|qM{Sr9v!gE)Aa&bf0+hMEGzn zq092Y0GQIz<~uz}>c^Eog?Sh?=zSST)IN=%S@@%%ovm%_d+G9@tvf^@V7;i#-*Puo zsyI((=BnQ>AwkB6l@jf+Fu2-h?cWZ}w^pbElxO|4Mh$|gUolsRYhKU$v)p?d-zHYF zTX#xK&!YR;4+`5CsC9>YIYr1Reu^luRR zA6?fnn{kLV?RbtI4Ghcw2P*n;Lk6fJpB?gA-Kal`-n|6oCii5Q>!r@R|D(eCb6=)L zGXKo(y_un1-W3Xkf;WyvIqGei|POCB{ zD=c_TzZDp|8xb?pF>uDhtkiO%#aDYJkJU_sOBMc({%KW6uNQBxV_`v6PacUDC*)yjmbZ8TQ(b$I&2-(wWaxxyR(>38~WMXnX0DK7~XB5kFPC3P<3Rc#)Bd?_6sKwa_9OME(8RT3+L*DWt+|MKy@+Z8a(1Zr3X{!w zg9HWGD({a1wknzYH3H3agee1RyzYlQb#2CDTT34XVC1Y?og7^6L-OtdZNZp{N9|gL z3tB(!8@FED2XUdvDOk<oHIzFSIkZR17*Fj z=X?JG8M8ha1n}Qed^Mhi)*}yJg&cmn&N^Iv7$RTlA%Opg%U9M^zA*xZNXxZP!acS! zJ9ST#fDbyrMJozfK;xMM*&V`REm~`J_pLZ?`i`kUK82)G)^iTCntyqoq-MU7FaNoE zM#79tpW&}YS1XPYoOgE_?^ON%K+DURu6-@tEjc`7-uQJ$>{y|#qfXHG7B+sJ@2b(Z zia$_h31X04E*%QHuq(V4=$Oy8K4W7f`aLa^Kl9+&cwk5a=A(hCv<>+Dw2&UWOJO}o z#_UsPnre=R11`v5Jn4iT`k3< zx?|uFYc!p&e}|dWSVtLyvNjXXeMl|*xp4%3;6<$#iQZuJ)r;{mW=C@ySw|aQW+$on zeGD3iNYgPrn`Ufg&@UZFi&?9n7>bGv{oP;?L}_ioNwQ84E#`uX0~x3&!a5FTLF8dS z2@%xW&&#fIs!y{X(@^nA%Fgn7=|mvlDK|cKGmxGn?iDHAx>=nfs6MCrF#Ti80VW+J zJVdDpn+dljk>0oV)Ko^K0Gy^OP6ue1xs`a9v9W2j36>w-E#<6;Wxoe3mtQ-DdvHr6 z(WmylA|Lt{{6c837!lTMQgbq&XPM#V;P#%*U}}2V=VrQZ-45scbFF$j1+2Z4Hgw+FU%8d_xaJc`t4Ze(V4&Z+D)vZ8sX=?O9DmOcMMWYc&%Cb zqQZFX0=aCLf22J6b*JM+wNb0sF^wpd^tYO|o``LY2Wy3;{s+Pq_xlt1h7%@dwQ6=O-nc9jBZMxBZeZD4T1<)VBnFXjpA^78ybmoQLA>lI2^0i z0$jNBrOvLWS@(-7r%zFO93&Ii4YTbqgJj`$4e5q|#(8HSUQQ*X+6_)KduT^gsuBy~ zXyZpY{_o9MU{f{@E6Rw$booXY^`{Q#Q?z3Zzh)t> zpnFJCjN5g}SwOl@^uHL2Kw62$V3lK5w98jszZa`|JeucnlmiIrcQsB)c)6kPe1 zP3^pUtV#JACwNmW_*ZQ5r$`NtKhXvLsMt(nA%~HYiPhlC)<}Ez5hzPWlnVijE_;cK ziJGC32o~2e0D4z7`v8w-GAKupnwC-@FWqP0a9c}3dqcmf2pDGagglI`l0WscH4ACNzIq%->?UNH#c_w~v zay*7GxE13ilHIE1D+XBrv88s_|EfWsHLq*khE})Vw`H1ZUM5_w`@R*uY>-_6hQR^G z2k&lX!m^ua58Z=kvzqKyh5ElKF56X6n9{fZ@v*~rY%HbnNJ5INXG);(V&DC-=zeW_ z2u)k(Xx%SL4K7l~wp!uDzF9x}q)NDwRUhCG;q!3%Dat{1xb&&fB!=WKg?nPY( zptK5Du3$$<(#zqzaAI6z;9jIlQ`vhxkEeeVlX)mX?S(!fD8Q`YN*VjwXlxv_Y-+tj zVL?8dEF2e~mU}foUZ1CaG^vW~9?e^XcdvQ2o9)11cyD!2{e%5n$Nq~HCP-#V;T7dl zlG=#p5V>>*S|*)X7LCnucA3^9?Q-Nq+BC_QU@b;=-60cCGs^~c~x`L3;GZ~RfHpKiKsRpv&&KRUM-S!evbW4*S^lcy;Qdi`q9 z;X|50EW0!{S7p_|;g62J`WZSskI|N|(f2TOl|XwDw^sDP*&p@d`mocsOM&{qdH$@* zEaHdmj-3Cd6LyLnU}>KXF5k|Gl%*#6H%(Y*zcsRmY4fMHVky9w?W^w7&&N^V2u1`|c*dXlNzn`KT-WeShqS<&L%B@%G3{c*YT? z_m-?qwL|`d4{0!R8@EY!(C03|JU_xD;ufA&Mkuzl3vz#n*%0-0Ir1}Cql#Op)+a=> zKFUA+6P`nOH@#o75cIi$MK)hxzz0{`hWfSUD&{(YWqn6{3pY|eCUQG9x||X+iG&o4 z=HGM*%dQKf=?wPSNDBS3@XiD_ZoA~S^z`Ca3`Fkz6?}oFCAJNseAREqDc4&4-}WWl zdM7plL1N5s7D{>ms2KjjHh;k^kc#P2N*^iX2rNq=0*r|!l{JrKmv1%{pYmlqQ>rS_ zU9TX;mXZ@#x2^z&p!=$qm%`J5Z=Z`v?)R9~8FYIhnK;kHps$w5?18_h3D|Yi7FJRO z>_`!=4I6CHo^yBN!az*Dy_|{tB($z@wpGjU>-^Ig67Z0f#0-JaW@Fv{Hm4G;qS09d zYLk!!;lWhhDP2#CZxgoVhc??9T<_d`Qw@kFSocefi*fshQExlaM}}}V;PVVn5h+4r zoM%|0`$~eZgaY$n5hW?1@gpzUBaQ!*(RqKKsPM9W0)D`CT$Z}p-`afN>z=9Fr%FeY zeUzx1Og46wa=hBJNmU+a;3{XG0KXtt@G1Q8(NR$(lgmEYFMgGjN@+ePJm{=^B*!6z znox2&$RobOAxxd0*#Q?M$Y9uUUKGW{Ciowy!@#3}tf=H>^j4X``0{b;#Z5pRnO3`? z$gGUUjwnWWSIrcM5N9;#VL4n9uQ`&cE?Nz}=s|15wxtf!3 z#PF+hr{&&I-Knpyuopc`7p@PWloP5wqv)?kg+$8b{@8e@Vt&ytqkJmhIOX&xAZLyI zCx0im!7`%23d}0j~#Zc0XvydfK4CF73$KGXRq+)+#y?~N1@nRj+As2~a zRm~I%QCj`D7IE=4#K0TxrB9@+;7*y_s^UY#ROBn#oYch>;f6RathTz`u%ESDy3O4& zZtDZyX3u1!hOGih{XkgF0;{y%U;K=j&pX}y$x9Dq6L1fjE0-(uC?Zy_h9G-#JE-*} z<5fkw6YpsbQGxFG5e2Gv)L2z1+3sT~?vMNDWIx&kHJ^=jYGN9tF>e zRlZ~*XsblvpWLAiZ|Ts^Gew*arn(gL%CV2gj=M}iP?6caLP4V5my@B;WpRBwhwkK$ zmO)0yFjdbs)iwE3~`Mr6Qp7AX0*0txp1&F}a7a8!?Bh|C}Z09_x_fg*kxBdlm%#s8?*ZR-1c@K?gd zNL$@nw!>|13w8V98y}XHRJ-gtJta3=d1+n;if@-CnIe0*k~ybidn(-vPpsL3<~e}Y z*Ixm6niH}EmB2V_mCPqg^*Y2)zKBrB;gzSmJRsgXx^dZ)or(FfTrkudrJDxb%8CQt zbn*k7=!B6$y1ZCoQDuQKsQsJ8-m}`@_Dq9f!0g)~ss(W_EzEmCWN;`G?Tfzs&k8@% zK9m}KuSn_3(p+2eBnRZs_L2Q7H#gu&d9&Vx3zJih!h9j2wE~}e3Ag=`-CJ*ahFjjV z@~5PzL$2UHTzfkD^P!K)lnr%1^^Th1Da2_6d<%I zlI4pF0kjp*&BH~?MRckk9OyL6lBSW5J(bn$RMdn40*foigdM;;xQOg$b|%M~q$S51 zkv92)rIn%Vju$Z@{`!KODdUKeOatrHkW`C56X?%8ru;&565M>I`Wcu7+1~P zi6wP(^M=Tmjv_5J^X#9aw>_!uundfMjffvzOG_z*^_c7~Mz#ZgIO;Z42%{#^<%rMuD7&c29Io4-Gn%cn$;H z>m%7bYR$G!dbl9(3-{cs56bH}6Q%MbR6rG_fnf=$@V)$MwP`}Ll8U(s!Mb@vb}x|~ z{yGhGGi~E9PF6$ zjpKN5wGcDttrRz!b_kd^L8i-lGUd9yY4J^%?UaV~bE-uWtjM~4aN5yO{Cud6O|hdS z80%XimcvMC#UT))e(Zeh93*XM_PfNh^($sxPWwMyb5ne6ta>R;YV(Rf$mH<4Q>zmH zD*N>K=RlC4`{I@h7sIn*&vFM%A~BR7IpCMS(z(IW(l&p9Z#`=36nAmr?&YS`0%nctB#hz)c^E#OPHF7*urbbMMOR6f?4p@LWs?bvBmP|kL=ch5`PHBsS9MnI zglVk#mYU2kA#()!YSszw{OCTH)8%*;FFYju%0TENbvE^>c<-(gOqnz+#5D-6PYZds z`Zd&As3?!(1Y@rtC-lzW!G;F9ttSTSi2s^>9=^mVvgw%8^i?Y+PxSiF%8cq-^p*bD zWo?^>Al9JP0yvy2{N6i0T72X5MkiimR_wCSgLJSSGh&A_``3Hkhp)sa$)ws>Tn3A1P=$%7hTdfgLYaV=6wRj%YnyD70$q~7z6sgb=!E~)@GZNePs6q&@_^ef}4=%g4@ zwkr^LDdf$xRPS4)a^`#*-eKpF4|AjnLl>;CW*!;Bm*}aFa*)jBVnl`T?LvPf1&>cI z!my{%cQF}47HIJ|4rfXJ3i;q%{$Qwl&&$1)8M+oU{cMV~tg{3{*65$!AzU>`h~eda zHk+g+`59m{?rT(JGJXdWK^d9ncUV+^hT)wtaDhTZnINJ}m${gvBs{5TKQM|)TIECe z-o{2_bL_y$c8qV^Po-q5#OVzZLm#*sax8_6InmI%$Ci)=XDFR@2XVg=8tTPZn8#d1 zVnW@Mg~0h9_UM*CKLM?03r ze9S}*wj?a2I>;v{=a4k}XK4HKv(P`ZG!`p~+}D#_IwQpf+s@G#(O3K4%4~uJ?i0~U zzo!K%A`P$WR}i1rV#hjNboxfye0FV*J;(fV%?GzFmkJ#S`5*9J1?H0OM&c(aoDj)y zd&p;cEFqTi%Qz&*f-C$P0tvBaI7hlXnH4>UpWoOMf|xSGGMN+vd2!ef?Vf|diwOqr zmL>zhvS-C)5395x?@NvzokrgRJ-523T=i>*D$*CCpCy zSBlIQ+mp9_vM%I)P;ikN*tTm6pYLJ${facFn_!IBhBS) zP9|r;l*36JH&NVtEQ&ZKA*9;Qs4Z2f-s*m4&|`;0VGge3_n7bTBCPf4nF0<7qwVAV zGp%ofyIsQ*ID2oDU2XGfUc~9%w5Jbbk|$58dzg?G`&&6?&z-6HbpLAG3b75@qO3_8*+cuc`- z=TSXn;GKiB#w}x_O&g$LRH(rQi3MG7DY0zX8w8Z;gwS~6IWVEg)F^p}ui9)({@CJe z_$kwVZb71Pl9l5}C41$EhW9UAQTg7F_H(Da|KW&-6>9CmO(?#fE*AV&!8Ds1z!REF0c zM%xK?cmdFdEd3(IbJaeg_%I;{4=f*eZ0~a0Td${piGO_<-je5hpPwDd;5qQIKY?jh z+9qADZ|o~cY-8fTKr;jzdNP>=zdq;If%OvE1QX#*!4fYZWT`k2q#O8rIa-R~#uDYuAwt)b8v4i`r+)xj z_+?|cp0mGmkPlBH$;7*h&}x2g$(~0^=5CS-IgA(`<@>TIw|un`DcfO5fFaG=V3RL9}5o%|04uh%xhQT-0|NXG^gar?$hI}s zAxq!Xxuk|>2HgXDf?v;TFdBFlVu#uS*-aq5cRnpFY_=np1;R!p;Gsa)+q)3w7FzEh z;0+tnh6K)TYp$35<|X9V5gS z9jT#k%8PrS zk%Tii?K+v~dg6FT^kS5;waOXz(qNb&GjmeaJjg#*PWv3X&TkwD%nYq5HKArdnSQte z)(d(wO=L+QYUIdYqpns+Xoc2}qXV=0LxhYC0|zyF>>l0#m;}E9?z?GnfeiTjR;O4Mb426N>U< z$8&{f4~7HTmX!m)k`lhs3@%eWhUb!5Oz)Z`-+v8#;TI6a& z!Q2SW?phH;wMl3S`ycFQZ0AoN#o@^F^7{l!VF~R$DQ9C+C1nX&C%Shx&lKJ1^EEq5 zu_I~=-r&U>BiOMoPORSn6~27iuF(0r*UEX*b`m6HA;z_GP21Lzy=32)xVBDM&M2P# zjH)~sb@40kdhbpUPBsS=`gW|du@;%&oC(leCm2pe zQf$wVOIg|MUaoTt;dT?CkE}nykHaC)ro!oGj-L%FLN}83Qq2^Kjm*|b#T0FB$wC4qRbZ3=FWzWpN2cq}x z;#AhQl2Y^Dj;Ta1ZgHRH4IHuQ z<<}qwLOhg_$Y-z{{Uk3VdGY}_!`!=ty;9LD@wTk02+RcD)n#pIp8?gr--ZM z;!n!IdFfuG09cW?BM{5eYVs8?kd3w~JYnCMU*cg z%8V?{qldIqo3Z+g~^x>n+lZtA{PL?*v>JjkL-QrCB)CNKm757913H_){)KF4hck zG@aZ>3S3wR$OvZ=LZ9@VVx2pz8?r2spA*Zkh#zfjdx#O32n2G|4iKG8%EGenX&P%>1Lw29-b6fnndA!5P5H@1T0DwwgcVy4875C>Wq z`%(g^^X|J7LvZyo8<`V+l_WxQ)7T=tLdM7B1I`CBIabVAnh5!go1whcK={g-^Af_! zc^)1#iH8=(Q>>QV)6K@cEFHtBIw*$QJc|PqGk3Y$Az}+ILVVoBnKR)>7A!KS=1gF* zfz6t0WV$p6-wLpF6UL4lTk@2q8ftADi_U!2oq8hBJ^b6B!st3(6^&1aaGd z-kYfhb7|%tSc*6^Z}bw(r_3>)XmyU2>y{pd-TtrP*{VLY5_SlmG z&6>{9&R*XN^>g=`L0ubvEx9K76vA zlyT%(+uco%B;_hXkR^`oWRP>;+C z{dLx(kJHYN8q-aA^`vG1qc4$Dr6aooa!4X$?4WlR^(=Oh9zBM)GK?6|0b%Dc;r7sE zzcphY9VrxGK?XOy$?#emyvKNBr~zBOWfl+HL90fF-#mAfL8+G0qz zzPZhb;%XxNFM0|9mODn{7wbm{a1;z+L|#6J-DnboiLAMq2>3W*mTkJ|?#MdjK9@1wrFWm|Q>L z1a1a30`xLshRArxSRBbU>R@AOClVCL_zzvTZ72dI|jx8+^Q}kltHi3^J8HtCK}c@<3%?4#1i1e#}69Y zm4^VV$L02m3L-ZF%Kq+jAOZ#HwuKYyxTz2hqsD=Vadrmk)J{J>9G~uCV=6@-PZrQL zWh5MPz^FPNdRFvZgOr_oO-m}e>E;}0<3q8}0(o+pD($ikj12n)S%L77ebf+`Iw{m& zfvwpQnPLf^JZ8V4!G&_rI0;Ioe?8W7;cmX66J>vh_GO<8uUsn-ToO z?V_FeEr{Jts;92qXy(Hidv+keHwA(lt0Q_g$KqJ3aqX{0UUoUXw{75 z$B!|@zEyK*Cx;_N@dJ-^0up1ugG8;Th%yBXl2!$Zm|@jMl_xghYzYE=w2PTPP*^hG zaPU867elzEr|gYslpUL|k$*QIB}Oc}kQq$O7)|(ttaPdF8`M9EwOjHdN;uKiDgori z;M{bYlr4=E!(++jLq0QajSNqYaYyNum1S*g)Yx*a_5yM?NEsGx3c-Rp)1$lOAP-GS z?a8mqtlF(JrbDtpY*{s*Z7xPuAXuOyY#nVpxQZEGaKI#Ig4q-c1%0+*O1T2EEyh&y zD|qrgHRN%R9zh_8A%U@w!&)ea+e|PGEiDkmO59T}5FH}@yTFV5$oBgyYMt1YWSeEe z)1!gIsHt`#P1VE#=YZw+*QMS7*ZIggdkuO+Za}8t$ssv9wxIY^9FkRh$1EGhC~|I46COeX?HqBx%aWM?0BvHyZgI7Wb5b>-hc)*6*qS#Et2)y+ zZ0fGCc8QDeHuBL-%eDFc03ITw317wjR6|`o@mth_x(biSqYi$`C3NE^#-Ln&Q>gGJ zqgB>Mqr!nKKb7>q*-$_Zc%PNN>f51TX$HK+9#cV2m4=3(jWr!8vin5|0G^+15G^`V zq6Gm&5-v}TGrNPkfDu8OBp)fCuA`Zg_tXLi2jfEa;%4Od(&fk*_cR7Erj%YrG)Vx3 zie|aV z%LYtBj$-t1h76$0k2Jxa7xq)+%e1%u0BnmikAV~sq@dFG6seE~zvt!rBT#8t=aXPJ8*zi*7LFiMP>L~dchRC4P?LHS^VDGTxg+)x`nUw$IB8oP%=TFic|b1p9TN zBx6E%I8nIA%7}twnqO5x%vw=NmQr*R&OOv{mJW&r?a=}Fs28vl{+jM__*IBV=W+E` zJY}JckSNq~G)tk%<~=+-Cs~dsoey27CT0t_fwb$;SD5UZDtg_MNy*yag=65^=Fv|#t+g?uFjZ_|-XyfhBZ>nCGu|h z5kWpv#NOtJ#PGyKadB<%DKO&!7a{qbww8~}(wn%>OEx5wD=^OEZrl8^%u>IoOJuvf z?9l)(vY;VcXrv+MHzrNVrFK#uN!-A+>mYEYY)o+Gvu|6p1Ef4re^p$ul2{czNs9`T zkfZ2~7zsY=cYKSHSN+bOC+?_BxW+f~>~{h|;=8n97#2}sc9oi zdjTRZN~8=J{$|9j=4;H7(n+I{F-^CBQpbtZE|c!4M_dfhY$n|gIvesFnH<9ICP~(I zte<@@PUkw|LlKV(dC&TpsF%jru?<|3aueVteU!_LvPm0TA}~$EhU$!<`kY82Oz2aj zQG8_g2xrRYYettJXs2wMvEoct?iun+Dc}kZu7+gH&yX3$8BRQMwzZ2zIS4@+6nb_6 z#~iY5Oz@yX0o&pd&Ap2;Zh0oclhOlf%PTB_CfBW_Xe+3TDXpyQy*$tiK%%&laTir2 zLH1I)PfK>NfBhY3tnV9RW|;~8R^>+;q4gSk*+j8OvJu7&E-v*DWY2Msf)Rfx$vpZ| z9m00O{{S1}$Rgj&*RNX(4^DReq+~S03+7i{fdIKCy$5g{ zutzbe7uTgu^+1{dGFzKg;6dASyMX@yO)&(8Xd`fjJ_0D@+BT?=u3~&^^&#B(KvlG! z2q+A>vLXlyh+uqp)(v-Q=sQeSjIvmjbVIETKQN;@+E-heJCQaVzNs$!0LIL1ys8? z%1=Ii6w-I)Ye714wFG^{!7*Yj_Eyv(P@SsmAO_{aX`eF&VXCOpkQ_|{aXvK`C@w(% z0G5n~1Z(@6(6Hvj0q->orEM_+W1Xwc!aoQiNbsp#iX&L^`^`#`92k- z*yXX3Jy3pO%G5GQu(H>f9m84Di>qzQK2xsY#%8yih2lV%+5y+gUmyf&3j^-0-pL~V z%8-}lENGKsU=SIaE!-mo{3Aeq+5-|DtFFPr8d7go1q7*qa`3YivoW z*P%7If>>QzYzXE!(`55x$krhIvCs`D1W=^;S7;3P*UV}0u=7AH3EU62NuXCA*bxpR zPPBG~Vl=p54NJmD^Gtn|Tg|wcEUpfp%fh$iY>cB&7GQtNU-;3KXjN3J3v!Aokq75q zQ{zjMx7e6e2y=Ft^D$hDaO!r=J`AKXpbQlJz;P?X*+mX4rN`l5G5-MauhQ*D{LD}P z01;kp*BpPThu2@L+mL^e!TP|WJA6xwa4+X?b%joRt&nh1Y(M1|pbQw$*c*6M2%Siv zNr@9{M?*?yLw7tXRSIQ3WX-sGaCKHz=hB8vvPlFgBmsUeUm#Xtpaki}cvjBjGb3op z0N-Q#{#qDw626(8 z+L6+iE*Chm0V?a}Uc8Me=TZqCS5_>JyuhO---Mdpvm)vNvFK~o#-kQSg3BNV=eP?4 z*Gd?&D>fo-ud4N3+E!NWT!L)M82JYYR@bdAR4#Gw3C2GO1buWeC@+Zo#U&pbaq_mH z)Z)rAVbriwxOj=7+q$;)ZOZ@#DtPTW(N$nunARxoTdnUDcd0BsKtAngqeeWWNXZsp zd~ZaZ4Z#LP&{9Cqf@CR=3O=eX#<2qW={(}MD}tx}yo$%m7lW-G(z$db0B6~up`EcK zxIgVUDwzix9z8{6kTDRlis0@XN)8mhq>L@*5x{hqiSefL#&aZZu`A3unH1#)pEDg# zh@cncI)F|6f}bWdJ-%1AOia6zFgKD`!1b(toA1WbKsw`b_#20TuT#@zABG#tJVP2| zfr(~<){>`PNuiZbq~9pYj2uDXk~!8)4yYJ{Sr7Ycyz%lqDU_1WVfk-*zIC(WoRni6nl2YC2UtG;fqHZ73gg&!sEBM zs1N4G-w{uf7ES7Hlx>Ug^>P0I^(_op2GwFn$2+mH=Z&>rXS$PcV#LNUOl1TA0K>|^ zKl)mL?o?()C(Z<9Qgz&#$mv74>@u9_MYJqGmAQ`^DclXFV1Okgoi^&EQFH;*`A*^N zHMn_Pe8Yth+8uaW$ z;K=E_@2QQ^^Fgh~M2kVFBK#waR^`7cHrvFQ*WE-B2aRpUHh>9dH<{sEm~LVrS~+r~ zHymmv)543jhaR)aw;v(YF919#W#k0_ppC0MqgvIyHD8#{y#+SK+zy+V*b(?egwRA_ zgn_yBo_3mbD*OU%F;^_VrQDSPPHR1qve9} zCuq}h&l>)xcdLx^yGJ>j^{5)s<2%mjP!{A*@}HP=t;l^|)y0bZtS9i!mFnSPD|W)i zW3T#ndnhFC#7wpqkc~eSZnQI&A=pp!@i{@{V&2*wuW1+$6?w=!LGsWYzEv3y{ii!J zdz)Wn6OJ2cDoUA#TM^wBe$q;8-a`sm2S=|V~%t$^Vq*ENBGj1MGM$MarZdOawl*904T3Nb%JJ{Yxv;;fiSDj6KTltyr_q0>PomYQ?CDy47OU33v3l0E z{kZxfD7z4-qFIfA1Bo=)yK>2e6MOetPN(psj#s42!QAAQOl-u0p{)51kg=fSS@U-; zO5;Wg1chdah~*}`Y)YF|6z(f^0pRY}Qf8m}c0QJH0|L@*%c7!nMF&qHl zUC59oLz5aQ)7upJ9X1wFF_yH6l6)eLKwu4YlhX940CDpKULa`2sj}oGf+T=#lz|{I z$@{lqx?_xyHl$Q`MhmwV z%M?TY=2QI5N|@PEqA>`STg1l(n)FjS?r|#lo<^t0X4-J^qL3LtFavD@{{WbBp@Air z9^)WwBopPIe>%gBa15EU&Mw&*wt>v7Xa^E#;x~sV7Iz3!U_G>~>lw*_5B;!BkNS;m zTNM{=c7gec`m5Ikn|QHlW^Vz?hHUJ(rog!XiQ-9<@S@$WL79m=$(a#t-e|F-nBvIj zOfglNuT5~ULwF#B5zltCSODtNB*7#7JgBZR6Ct`{NG&5lY1Hd94s1BzDZi9X(tK@d z-nUBv@%b^J`wBv$I4hZ49d?g6YzVcOr+_9m4F%v=(9pfq4NHn7K@y&Uf6x1B6@1pUv&3#sp-LXI6n8KsXL`9Y_RS zYIhWTzIOF46!3-9O7%x@9A;o_PyKM7Y8XGNGmy@#qDk_|GbWc7FxgT|#EAZ51CLtE z-Ln-j7a#-7OJ3d-d%oi!!ja@+oUZXz@2DgQ?t~#Kmll9 z#AvIM1@_#1T=~#uG6A~9&ni%)qMi$K-0kq9yH^g=Ax?n!9z9KE0m`6-Qnn;Ez7>=D zXn}3d5Dt}jeBelPby9fkKW%zAN2!=y*xa72Tl1mbE*Xf50}&6AfheQQOln0B>LVU2 znPLJc{&K!zdJ0a{wql_H50nj)Z3O5AXKwQwW;u53MF4NwY)RMerOB5b*UfBLS%}Hv z+jtI@>t)}W@>vNXPzLehcnVCNxj)q7ox6W1*M93jta-bXTy6qQAXXSJl$_G zOvL(XU>8#aQn_$Np|?bs<}XrPX;Cex6h`~V01*+!cDLC_8Yx-SvXDvfIs;$q&eLgN zAoITp2P~E{01#KkhCEMlWSEi{{%vSBLAWTnFeAcUtI2#N5ayUxGMJ6GOCGGh$v zrV6Ms4_XY_0&BT6+BrobNMADsL>eghW_Zz+^vgg59mJ^P6uYpOBu4d!9Soi{-_xXR z)d!a6^DPEA{WTZL7=l$}=CF$OvCb@{leK^fM+0tkw>~nH^0E0({MG$JkmV1ZK$hAC zPV0r3I|t2o96xe16KGy==>c9}h7@U6vyuQGOlM-qTwU5NxY`bwHPJ!69>^8(0E z)&*>0tYn3JW>ouYaDOPY0T&%;5dsCqln4TA)LRIM;CdLQIRoTh%7PV7J;t_-PH~+{ zp%$GkvF@o*LdC8P0>TRPkBxu0!|mxbRE^_RIez3{zrpwfN&{Qazf{ zDt896BS{{~t*i+eD0`^(aG*{#d}2v#WG@~S3IdSVI;iS-p9;RMXATT77PxK(hHNY` zz*cNDK3b z{78Pf-;C{9xHco$XxMp7?wFv`SACZtHyu1ECUhI4^qHhb@aajE!ZUxg>*ibj8MnC8 zjG>b>d9lg#*e--bdAd;UF*61RGO6GQv)_k0e0d719WoEZMTaZW6;qkk6v>+oVXmjZ z(vqa*O-lJ$IEkK>0ET#$46tT~)ggwkO}r=u$Vk*)Yjz(p014ZBo<23_9#itUwDdGF zNd$!*2k@^) zApIPM%0CZ(EBMyK*J)PxXrgf)N61$(`4;7jIrm%Aa5M@lWFBZeCSV~8w&%W*7Hf9v&w|1 z^J0D=eiO!d8r$6BD4=e~lzhq1HnlmAtJ_B0d4P?07B?MfSV+oa((aUi*8JQUe0*zf zcpx#qbBs%YBBMXzl4EyM|78|A&crn+=dDbV*g|M@q(=X*#={;$mw89*? z{{YGCvczN>&NHZQ3mQG&W02u>J975;CE~{Bk~F;ZTek(g8a`}x;cOXv^7!RtqVRgu-LWCcxpqQ?8)~)*&txa*Q4O{8dRsNd_ur;BpgIBBl zbzxdom8EI)Ubp9cgMihKfTzcVy7r(1#feYPk&n#rtb8jL28`Q5Y{7{Ef$}1I@9d_@ zknd$#Bji$7MJzN?$Ws;o5`m8CRY|?i7CO>gjBEom0%i!j^qQ4I6<{dfK(MX*RPFMh zFcb;eIz-Xm=0Q8)-HdsFI(pNNf0DzM?RDR zB1nJ_n$xWF_*be}vuJ}@omsxYQdpLY3AkUfmw7%*+T@e<(RU={m;-Itt^Kv>A_YyL zDvJTf{OA<{+<>s7BCN-~4Kv2^n+l*8= zl2%CmS}0hn6%Cb;6$y-gw~bql^QfT5QY3?*0*e-49LXS+4nHY@CX@id1Obn6Ah72Y z01}{R7ijReDn*dYu*7PLb%jv^iG9pSlEXkpGwr7C@DxVLSxDnbc12`JN_v3eDW+v*m5@ zM3~V(g?b}wI1*TpBsQ#iUrlJvSj4tQ3PB{?nD|nzOasz#1(R1b*9K48(@N0A@adG4Z7`K zCsV?<<}B!*W_2V$0_9L~lM6IAzv{A>#z`arc-$yw%Zw9}*oH~k7f&kjKLJN6R$-F* zLhTk%yL_My0-Mu)*+|)mM>7EJj#`@jtG;MdmN-Yu$4#<$nWz0fLkY-z9B2##u!UyU zhCDl!K$J~mZ- zzySv+6Cjy_zX_&(*A~&3$#M#+MxJ9A@TF{n)X$NE<0~iwekPUTC@>L>2pL#QF&~JX zO)sN{a<%1_SjU_9Cb8jm^*vuMTqH;;+CVieiyA5tRTF_6&*rRnjzwHqfn*CChTp=$ zsCsTnu#>n%8Y!98!b+~q4_-7kleeiMPmeKPny;+j5xuND5D0-@t~|#nasb*6+4kN5 zpbqv#xsR1k4b)LY?UG(}Ctn&F14Djsud=sfXa@U9z4*@>W0&;9o4}G3X{{gW@qmNP zy}%`iw&G0;3P@R;n=U7-4mB85Z*C{26GI9V+iWeVZk6k)+{ep|FUqOF4ir;- zG7Z3pJDY%|$mEbo1kamZ1ICYgxa7~a5COC((nnef!*Sc@aXL+xr1GJgDI^0S7UD&e zcnW;EGAd&N2qsMPcz{6QDc378#_m-ZA0Rxo3kl~;MnJ)!5x2^|{b`dP77m{-Qe+-* zHGxtIJ;q2oH?x4E_c&Go zW2xKuSA_;tRKt!x+`i`Fv>%OnnGjuo3`N#B-%2aEBA!A_4mIhlvBw@_O!)5OSB>WC zP)YG4O1J>(&OFS0x>06ehzFDrE$`BU#eTp(oJcUiSQ6ft(J*z>7_iDF3W zMe?+P<&Yqg%$h7St}?^-)ow;Qs)qzT;Agn8_sh0RWTG*Q|*xJDEj;k;IB1rsO{|=tqTmis2gY z7;aVv=J!@KRuAR7FB&8$Jf!pEMWhyC0FnOy#2>D=WpZZw1&QiQSERdfkB5QdG)JT@H`J%VUbBw z^CgNo8g1kEQ5fw+;2)O*w6(xl7 zyxxNMSn=j%u-qYswwE_=ov}IyRLH)f0(F9Pul%x%sv!z-=m8V&rOX&0V+y3hTZB>G z(Kj=2$HJ9!p>N7b`j}~6rXM~4HyzO{AL-V#zbLORwUKg$$K0y!#?7hS^DjvnSF4PY z82Oa>t~lhM5$9qs-Xz{{a5JVJb<`CQrOqq1@wa zOfD7p$104EwYY^FtT+%p$|oiQa)B$g$a`@s@|xX;9`+|{JC+U9Y-zuRGQd!Nd0P?6 z_M?AS97;MJ+fNm6Z{TZs5ctm>VEuK*SKer;1gX?oMQv5{a4W=h29Dq-nB`jT14hw> zZD@%3h>%I8EizA;g}@xedU+x9Ut_=<<4^Lf(gLx%ff3YE1DMYMW?bgDA(Iwb^)dZq*wI00L>;&HZmPW{{T$1 zd50rMFJ(TO9nFjqGA`T68kqOjp`4Xxvg8J2e?2XV2R31RVD$X8vneG6nGxmXuL>Fa zOv528JgWm~*2+feEbyeUA(yWY3Mzclq3go8WKtMwJm_scWe_+RJUCHh#tncZ$q~r# zp>3d_J~OBtInc((b_O;R8)t~u-9&F^#P;=ef~S_@r;OIzMKI={lz+6{RQ?*snODw( z%%;GOk*yQCqW=J-%PaAu$&Hm*Xwza30yP(}N4Ubin@^{d4fi&U%5>*J)kaKhW&#^@ zaRB{dfyAvC?XdjO{GiO$rCWe$Q(lXCrsxTYVWP~6oI`lk@r9P_?4y@v$iC2I9!Hq= zQ*8xU31!xQm@O}GfnRVSsgbvVGPAUuC@#hA^A9TRUpL0Y^rU>AUhhQAgUIB5abBKX zxI45_3c6(Kr%TtNoGWCKNQ;Bd&GN-;E?p0mq)yvvZ4}SiA5$9$$%VdF>lzPbImAZe z{%&dPWKY^w_wm^g!Y!72RV8*mp5%e>gwkN(Pjbr#%qn&o461cJ**v$S{ z)oXqNP{f729(rr+sP0gPleLAx`>S>`a$-CM?d+|s5g)zk92dq#w`x2Hshz{~4M&Z6 z1dc1f_;RV$mrHq&n29s2cmK4X>yg8rp1lay8|#=b`pdA&l`N-&H`!T{xrp zhsLM4z{+gdt*Vz|PPJB5M{bB}P18E?xkU6YZce26Dy%sg2XZJZUhJ z8)<^TTbYi4=}Zw|8Qey`ett1ZxWPF9g^gqE6&Z-dj0>%#jbXS7lln+*6;GLg{7h&C zRVg#IhT=ymmGaNajYN-a4_JUd4l%EZireZ4h&)z2C=^miH_ZP4F^&kjD6I%kbrL=` z3pcb4YjaAk1)npXLW#)1h(1(bFi6(?X-f$@4-;B|&8H~lO&!d9x^bThYXiHa>3wPq zj%g$T14~?SuP?Ch9H_GpS+5JHms`*e=4W*#bcN7S0G-XLr6iSA8$yF&HDR`9{uS1U z;!M=QgUr&LfIA@@028;Vn*|i-68WCRpzbTg^xgGSZ-!Lzj6y(X1_Hq0?W{Ynrfj(b z7R{6b%eRO@ZKATghA!Mqkyi0MxYCm?Do7(%W5o2VVBN{kT&U+?rZ?vX0?3YAe}8QT zZN9m0O-4h%YXP7mk6i@;iyG#2AiJOT(s&Lenkksck{e*!2Po9Y_6h?Y?1V3u8mVJE z%v@TIT-~-r1LYPL()ymJn-dqtCv!%yEH&1HW> zGWm|~CO)fBTrwYMMNlrQK5d|JHU9vWm(WXjRBnF>=R*%_$TFEO(piLYXVBW07ixs$ zh*AXW$Dpt39E_dAe58^UPaAQHB&oD#uo(yttu5`^wd%aOAd+}U@z#pt zNNs&WKnOpSQ#X{cFp6e1)S330#^FXokwC=gp-3U4a*vGD<944+1zo!2c)2lo=}697 zHd71%zoj}!9V_~5S@EvH=TN}EP)>l+Of8QJ&eHi9m_L>}(Yh*OFkA>MN8|=|rx;v? zQ3QT=JUCaTjlHB6WwPH;ye&l#kv1TiP)|6yG@-$3ZYSjcaGEJbpssO4J7sBTbYRh@F2~4INETJ z_YrNs`AHvD0(SQKGX5DGkp~mNbQCeJ7SG(jmlz{(bH%|tI+{;W*dLSyATRnx-2kJt z)Rqt$e83G9MLW!$ZX;i;#Q}pA%t6$D(hS$@xm-*0Z5N&<;?+I8;|mPC{OX_|GeG+2 z7CW17kPnrZ{wms=i|w45N!r;XP^~uBH$7l!OnnmjWCv&i-t}}U*&rN>L>?x@*32#e1{sQy zXQir0JBEatlh>68%Euu$Ejv~zROAV`O5;B<0P-{xw&euszzgymYFrXQpDaO+al(kh zh+<|Dy*Q5wUsX!)Fr*Q=o16+N7?AcTc)+2N;INM=0RI5e2O5QMPC9Ex)w-X=U_}Cc zZf9R*O5Q5qk~k5swydq;0M?QARB!iCC77O5Z*jF}{#Qx-tY{{X&ePHe4{GdA`ahz_mD!My>U7^ps0+D_BYa1=2G4(7q& ztn!39QZOY##_~nIu}s9S@TycWmjn4n3f!c|o_%J0^(+b9U_M!)kI@BGe6wNF1s_u# zn0cjaMbp-IXhMfrjHQFu*i*TR=rc7f-CP?u96f)t+awyjm6K@?TWh=Y`@~w);5?awh z9Bwu$EfeEJ0s-U4-%GvB|x-1E{70BO~M@UVO7Wv=ngq-_#tMk4QodHB-3IPWdusz~VyY zR73_~vO(S;@uA%R0By?IFwDLkz~xvs*k&828uYWF8G#~l0=WPhb*1%l3~Yu_WAc{j zdeeGeI1vpk1f4}Q<;Vs^ARqwC&n4CeItLl_T%AE18~s4kWmt3ave{dxG(j_cVk%nW zgN_v;NXO+M>ar;JIAJs61)mubS#{UyG%=(MqWIqXTaMQ8qO6OHBI=|@ zoJ7zYj?n;~U&67zMwV0l`k7LrhEM+hN{?~dZS^(U2vFz1SzF+1((j{a8(VdXk4|?MWMn;5yfk!k#Ag;RNeTc6HH|nD-M< z&alD^5)5^s*vzaR*6jvTA_ zVVSjF7AA&8lZmt}EKgolv9ZdMeNZ6o2awW5ZNhfAzSAr1{%-?91nvMfMQDz4npdfW zg23(@K^h;by-b^Zb|0v@CuTt%bYo0$D=7!cqT=U>HxwjBMZ87#0md&B8028U&O%5l zd+r}~1Au~d-zG5wc;v64>0X9F21q-%4Z3PA8q$AFjAO*4*n&dyFxQ&CH^w9uW>XBl z--jBnKB!%S|GNz=A=>5dPNZ652}Ut za+?v-g#4$CZUCM>H4$QOMVVn%;C<8z0HogaxR4`VX15(UbQKG!uoO#s0n^!EERJJJ z@zA?5G`+5L5Wg(^*S6qima#>5jgM{VFO8&prrLC)pS5F& z7TFPh3E)6CiUTGxjz`ar<(_93-9i{To2f%9?%;Y=)2d zhB5}T#L)=?McDM92m=_pj%JRZRZCZwUS^H`v}W}OaU3Au<55E5PP7Ox!$ZV-s0Sg3 z9m40@B8{ScWS=nq08ctQm^u6jh*f7I@Ty7pP#Kl+$dDNbkzQFNz|d?# zk;TJ#HFz@i3Za!AP3xndUWEvg7?vUd)5hbUV&1hup zvZiD@6f^MFhT#*THXiyuVCR<72e8mEMDRaF$Q2;iSelT++SQEsR7v+$n0~-L#zBmo z7UhqEikCStw-jW*ycnV|VmTj%@)3QpCZu7>^6oNJdj;s^-RLryY(UN^@mwicAC~DxRBG)~`{_0(RTxCx9HMjR2|SQWPE< z{vIUJ7*Sa5f+j%ScxD`HVPOXCk{}j5ddCWE#1ii%j~Ua2dMHl!zE_bfBS3!YTsYNL zP*_3N_zI3UJDTSFg&BfH=55fP6VkV{oOqApaV3vM;%jeegcI{*YrXiM0->EI2;Tso(3;XM9yeRxLe{i5p`bCFc6(T~mfWUGoF)&! z2jbub9lwWP8UWmlE0|FpCWX8z{?D?bSrSR0b?II_Xo-c1b{d5mfM_xgPq$mi{9nLO z$BqeaB7p#g`+R6*fs+OhS%Sxy@Z5OT{jB-Bf_G#hBO2Rk)=X%S6rGsG>`lCB7c&*e zL4^hY5n&u6oiiw47t&=B<`b^zooUc2;uvf|fT~9cUzw{I&V6j~Of8i|T;GIoicCnO z7AwR+Ra2>s1oJd7cIVSrEX8$I;?b;=VKi9o3M{A?$-fdQkEqVEFO092KQDz0x!mFd z&cRwSDvdRxnRA~-&yfL;CydNVrXh$}3dGFEDf_6BONa_QtWCKJ4$7&GY)0+df#|h} z<0_7sZ1ZuuRUH7-)-aAluF<#5{aE!i<{NSt+l(JM2EhAids4X9E>KRv=GX}GnLKIV zF=fJ^?`0%R{#62(wZMZGM>be2z#qks@jQhfP(UP{nV1pe2EZt}W}xcqxIiNs77ecO7@0w79aODad1KQhhbhF$-RoZmy{k z+tdLA^2ZL8nR{$rncL|s^RVIdR_s9SP*gBFoeMA76jL^DTOb~MYYGO@V%v4_)bXH> z3Sz`o%nz6i0k;!+a+YTRDP`J`v|RM0ZsiU~`HHcOY7gStHTKu4`35veRCY0p5x^+a^c20q zmQwfKkV6pMKtC-K`8H#bxt4s)PTfBdG^9!0^5ak?qnR`UfLR1Ii%;ArcD=AImnE6B zk9L&j8CS{x-IsK2CtaO->qE80`nj9}OmROo{4HLVG6rQqy{7DzC1jd~O9BKmM0s`vp+)nOGM;9GzLUmZbspK#CXzW$ji0v z7!7H+x{bd#FJ*aL6UAo!>X3Bgc+pS};qI#iFBa6)7YiCF5q`AZs|G)VX(HW0uQ^h9 z15n3lJc$>e%ZW0$79;>q{M4aw!bg}QkO#Dz*A?mj27{|!JiC4~NaatgEetOn%3MPk zIZ5)c0FMaPwr*40K|X|;_}1w3$@$cIm;S1kB&oS!P?OGWV@wz3T^Mkox%RPNF`6uV ziN)K?Jg5wg5SS|`%_mKDqw8aAxftypnBn7~psJ%AkCl+xddJN{j&1LIkOle*^JF-3 z{votAx>nJ-tqL-M8GH!g6msDw9z+x9pP3IeJVh|cl)l?#M>0&8ij| z4=sI_yJ00N1h#LW9>vX#g-&Nl+n;jIqeG28%< z4uhhRp`h4|h=xsFd}LfxItWp~AFNQ2W^8y=uD^9bAdO^eMUS(HpxDe!h>6|M(DX;6 zpH{{ATm2LDQN+?59U8=RAkb~aGIAn86mbJ6_sEL^4>bqur7Mwy{ERF|gwi-sjN}9| zu97&2;A_#!V>J)KjU9JWB5PuM&s;XBMNfsqJaw5G>)%J(g2-$vC`sjM& z)9#0nav0d_`B=ujG}wxV+HZyBKtGs7ihSO%$$?Je1c8mu;S=@L%#IJw#;s}4*Q4Cx z3?NQ7^4oz^&Zip{-E;*=9vo<~aNK}^WOJI{&9i)N3;-A4Hrlu1`KIbDd}u39T!zY4 z#^0KYL=^dhNM$}XA&S2#)PF4fRB>f0RkS2XVMqFA^fLV3lM51mFDf3Yl_KGX4--Yb zLb;L^fdGbHqAGBN%D<9M;r^AAMHvVmhbW6jfxRzp-Ijg7i$YiO&l*=O8xSYdSw2v0 zEgvlw#tY()D*-+F$CXXhdHZY9%y(lpoyI-9W{FL$GD90M zjW)0)O>JfyobJhr2t4k850Ac|4{$6*KwZT*aR-eqZrl-%L6B%j>%xTjbBpU@2TnB^ z3B(`+JUU-MYW`)&K2r>t6bnyEAr%4n+;*Vd7$07KB2c# zoPKLK=xF@79B9`#9P*!=8S%AxS4yr$TA~ITUO7S~(tOi(<*= z;tinqaIKxf?VTKHQodvtjcwyaPq@dvp@gGo$L*^rDm8;~)`IG%L&w=#&yKYXrnb_x zl{$g-(+S*%8yzgQQSQ zm)Lfj1Gsai@~%CiL;(>O7uIQ+TN^$=G6K*R2;j1QHIEp_j3GbnqwVv2v9=;DN4L+7 zbB(autmht^RO$%SR_ttjB1j6u&IsVZR*kohGw`(y!bYa|5zCbWiS~_sCp)pfIB%I4 zbBbQuAoOyP`Yu!z&WHK_Ry0!}D#(25Y*)k@LEGQA$pRadhj|?Bs02v_}k00_;IbO0t3NDwQ(nznt>{#hLk|O_{4iEMmA&2h!jc2#&zRT z>cD~Jksn<~G-r)tg%w~`xP$a~{SsnF8oq~01e<*pspG`ZL?a$KhRoIiI4|aIlskL_ zW<-H0BxT5WyKChhX5mNHE!;sR^A<6cp8J;kJ=A+~y>e=YEP0l7v{-3G5pk%g(ydnt zI?y)hQU{#z7C!Mnq90mtfxj7@$jPgJ8YN|N-H+j-jnlf z)K`r!<#U#_ku%^qc+qU0Q_JRW0m7vKN8(I2Px_6PrL3p$f^Yt& z)YZ8~dpK}4Bz5*sBKJhxjHQq!F4Cy@u}zx8rq-< ziTa|8Giz&fwQ`TDfzX%>JV`aXApI00ZZacraz_e~ zn{p6gkIZ9P-K7O2m&!!r0FnZk5#vg!2+j(*{HhF}H$Mtq*+UzG`IH!L0RiAS)<$O@ zbLwUU?NR}?hLj8WapIE%$z}p?H-SW`*@>)O%oySq_|yLYN~NIe+y_|l&c4c!PFE%} zM8coR<(e4s0_|YEz7e^+U5CrzL)6=dOylkG0Om>gw%%K*t@-?cOr|zFrN1+gsrsoq zj_z~i#6M4X{Vad!$EUQ=Gqoecv{1})mdTIIm`oH6&4)f!{YG4#ks?l9k+=>wI#I>i zVQiQZeNN%Y2v~IEU;a()Lw{43{pTJ~s&!&%{ZJCXA-n;=%YNpV_To2Kv;uwnD4-kM ztR_gGU9|TK3RwyVFetyM!@4{(Iv?IBAGjU3ydfsvb@5@ zfG6=9X3LSXmoiL3k;n>AierL{)a2p#LDSnoF%6=4Xa#bQ#BN}6738tv=H{d0sV0s{ zhcKdlDDk7X%Jru7@$V$rrqTD%Y=CYa@AIvuWbmD6CMWU(w8fZ#z;f}WS7<+k7K3`( zjkb~VGQolEpfLzhX(oNV%|RVWGFbaGuTK}BF*XAGd}y{p?2Kik>UjzH)3!8a%OpXQ z?VFGyl~9a$&zP%8*QLmyOO+z(TJU*Zoz(-4(t4dFD5mZX6NedsSdFtEl}-JonQ*Ks zpE0vs{${A1s-_XS5yVkkxiYZhaJuvtrU~*9=4U&J@tXetX?L)&+auehHq1-Cwc1Q+ ztY|z1Mno#y(YNv+IhcBEF}Wg1NvVe*bP7VA>% z0RmTDIajDb6J_@Cw+bzh7!C~}ZjK>G3LcKY0}$zw`8sXdZ$RZx2|A!8NBq~IGBFZi zOchox}?c0yRFhFFK69jFN)aJjARG$gF1N7E!%(Oq5lAJ0Sz38 z8q+ctT&h8AM9W-Vkq;VF#vm_NW!P&mJz(oq)}e?0_ODxpB_tt)mU5}w7D<=={4O!ki3BKt+TZl zZX?R&LAfe*p^dUSD%YG%T6Fa{vlh~s}O zO%?#+$PbxVc~4PVPsXkw^Arvvejw;*;mKw(cHQ^(-;uHn`Fo@21=f zsMK*CX>wscWx87P?5&wqON)k>7v?$B3zeNMdE;K9F$C$tI#T0&LGrKT8sA?n97Gjx zY#LyWAn8!64!<$!#?|F`$b#v?x^yGsK^=>#Xx7}Pmxo&2jYiXDI?QkkWP9kGL}PXT z0Jh&Ff2ID)BR^`;epfdU#1TUaGbp*l>vxHwe9LDq0ux_WbkV zBkQ6{HcW43kt3I#4=On@t0OJ_Fn1{&(Y5gg;+qa+3dH%hN4!X_*qCSS_YlhF>IVzy zTj7H=d6~Alk*0^;O52VsXotig+AgXXaps1PqQSu*?HCyt z4MLp^bTl$47#>H>Dx12I@-++{#xWT$wZLU zR!{>k`he7UQ6p=o7`O+NYwoYnC3uu;gW=Ah$EB2NO}+KAAPt9}tNbXw8D!-*_8v7W z3fxS8^5s((@qkB<8n}hjS}2t!$4a${4HWs7nAoI&A79FwZW(v%&d7J~LY~09%^*TmF-3yOQ8cHlTe~w$CT5oMF%iCQ!b)(KMPbw_|Q}gNUnoz3R z_YX6HwVR^-=9CK)q5@d^TkffCe+c{{t*1UTWY~1pq9U(h5-4#zE6eOAuXEOfjz29# z+>&kZqRsN~6U(g@CNC4yl}8=};U>5OB1W|u^5J^gJZ7N$+=s%3Y|<5csJ%}bl+`~^ z7+b?Oy4%}Mg?Ah869`EB$5HH{RQXmVF|O6}j=I3GqXaN@hf*{e?OF@ls~H1xWQksi zBZmr;1f_{0cKG$JsGyPaH{!o8LYV=E<_mp7jwhT;0Ld~;9zHZwD$7Tw#E>|}327%J zgTyx%>OkXJ0}&v@K(OgS7Sqm`7Uo8eoRJpS-(H_?eMe&wB>w=?1kx5DD7$OCk-S;1%^+qtv!Cb>U{w$5d{UU%NQCFl7`4rG>INK=@ zSXdb+hAD{*0iuEYqwS!iZwLUN!waUG0m_^ymP;2Ps*pG*N z(Z_)iF`?KTkf^`%58s_gVA)6ovOxJwjVQFV)2EvfiZ zX38fVhzqM70TWo?zA=vOy}2?9&z5+a7_pB{2as)%j^C74Oy$T7eBhs(lNiGT8 zsjd0RpxbVL4xkQ{T)<=Vzs%9WM4JlQwrwCq=bY#w_PwDdR+B zalU01N!!AwEALbw#AD&iHK;m`c%Owa*gyoRn{FNki6iFWHjWz6lFqa8C?EWV237zI z`fqR#Q8zWXqcngCL1FAPn~j8%xQKzKlot{c&@Z{-eCEZuR_w^7*h+~L{{UAS z3?wv>wA_L?Q)DN|EUIiLtuLg*a*`c3?%Y3=n*OL_aHs(aK~W#eI?x$c&bHh&p}3Nh zA;;TFtf9DW7V`CqcE$6N2uQi`ul$UlO~WxEm!um}7>LQ+sgLRybUMy7&FOP5ow2ZCp#<@*`2--6Ng!<;B54n3G2zI3&;&D)tTBu9 zru7%oecPEzfJo~!Gb)Bw^FfQp0pUQX^FNq@r^clLwU04gM^#_OPZ_PMNq@qq+QA1_Vvmjsv zgos!Nm43NzR7cG+2MU8~WX1u;@ht~%9AJ(V!54Uw=@*^LJQcMR4|EwZAS?rtH=D-m zbE7#RJ+7h$fZ;{)yF8ycnUl`i)-X|kkCgd{5q+fUKbE)RFeiu0@8EhGDnK$U4UI!A z4k~`}O6X4PcG_Tz_0)Y-_;U$UX&}fwW9y*7Nls%!Lmp$h7J%_z3HqycBB6vpbk+I>I72N^-Hh_5MO zjjYhymUzVts;GYk(tN|J*N_rL-9(Y%M+!yCpcE16i3_mbZb8uKYtioD;}CJ>jlcu> zz}LpTOksUU1gN+wbos1(mA*{RnQoww#IB;Ym`D>0Bww!@II>*`yj&7AG!!vXOyX_7 zF&#%5Be*+qgSD~?6@CT1ylI$*R@NXG>N*-xokI(hCQ0@((K14*8(7ZW$MZ&>G@~z- zfdv>D0Q)Fqby38U1>=MZ`)R;19@|&~1mEW5X!?wH3uPdACN1XDXyn9Y64oR#&jKli z0308eXolu?_;H|Bjx4$mz^W0+xpX>HK)*S zQmeOU(hG6DZEw_8Ah2WR+BMs)x=<*aJwiapvQl|}oeh970>kay&&G%KC_@cfQ9L&T zL=1_KGO=>F#H&rit8pL8L9(&ip)3pr*3qRw0q`*MA>@A`(w9GM=O#0t1lS%2chqR( zc-#)cB0ND;H3&f2e@*5Uqg6I!G}!y4$&jD~WB?B1A5t{Ry+s#YozHKsH*J}&{I;;O2;)Z< zPTUetn-q^wN9Eihsj}h)ZSyLSQ~6v;BkHL6w*EA@_N@<47f-_4`;AUA9Y(4|Gfizm6`14U zMsGS9`zV7XL>bbLmM9G<9XJX8HNPMsVtl#|dREp@z!_7-Qc8T*1pKkiyvK6I`O(}r zF1v+@`zRd%(uTnWCL{qfN>K{LT0Q1R)l2BfVWD3uOIwAanF%(1%1xm0A8iB>V^Ka* zInaDgapVmd6d(Zdf?~(S(N;ikm4p1zsoVtGhi|)bGX})$NNhxlux0S0>MD%Nf89VA ze137v(yM-%Uom4Pm;>^I!fEnjX4p2MXc;`sU}e5uW||d=4Q!4{C!e#8K3(S-NWTXD zTYK+E1~3yYV-6UPOtI0F{u4gR^b0mT>`pKM5GRjcs-HF#VyS$@d5TWE#;g0@w<{7; z%!v~OTo5^PuTZ$$51mip`)kW(;T)<-_En&LA8*lZdezU3AI97*U+!!?hbp`7J#K5} zlgh1bwJg$p9u+FYP4&{YE^-j+02ARfQL(9*+v)jO9y2lx10~eK-2qz}{%!}xw`9t$ z>YA>La|7m5W7`yQ$%6%vc=DT8{7Tr~YylS>?NU}_UE0xRP{e99t?%2o z5D9cUzz0v3V4g;m*-kWR0n9U4jle16dM6wdHUzIOv^P%eN}t}<1{3{6gFx>rI1oPi z3V_Md{{UqJoP}-)ZPa%bP&k;6V5<|$O7k_OkVw3Ebfc0cFS)fho0Co#%t_`*_RUGX z`~^V+cN5CCVX;3pU&RN4@}70!!-aL${Ahk&1Dy@VBT58-pzu1H+MrFm%_J!3yl4V! zIq@fn6ngRLuBL!d^J-1cvZi(8#(@_EYsM-BvvBaO`5Y?o0{;N}w5bDopO!=q7}cw5 z8}L!{9$o^KRdz23l21<$4}EQz$a!77CWx?a#7LiiGh2WMCk%%0IRQnt6(5`N&)Gq( zi3j3qpZREE!lxq>B*gnjt<4N|6Ts06cB`5CtH+6=)8!hm`zW^#M_HpJ!QgoK)%+)o zb>t{Hw;@t)0G|`aj}AT_H6QlJ$~o7R>!9QX8PoUULyceGM~7No;e?ZQ=6crmBXmGL zItmDbYAN}q%^Lcx+#qzdib8T0#ziI%c-B`9B8f-fFLy8ulbvqp@qOK0Ak_*Q#`eb z34&dIXLa)VK!AdD1LIiRB9+QadSHfYoh?~%7hllA`q3Re!Qtpyqwf;Fkgz>Y9A zUb955HBASU08hGuJceOp;H%C!eRb$!#&dTB5SYNU^I$1^zV*S%{%9oaKz}M|&GlB$ z3yvF_S&v$9zGfyd767V&#!uNya%OCW$#Wnmh1HKBC;&H`9*U=pwKTn=$iuk$o|%Ba zTWfUiuS_90&B+8P2mMD{-pBM*`9?^)Fy+>urXZO#S21<)I#BKuGd4@9O$Yw~%xcQ( z`Y1)+fGz41au!UUMwQB)%ksECgjklM&Or%tB1gK5f^lOu1bpw*PLwfV$T6(Mz&_jR zYiFmq^=Ce2CxnhPS)edk*hiR+Y^z5mTnvj4rO4dJmeFB;0&916{{YkBw1xiwae(3c zwdr6_LjcquiR#Tvh|Dp`XJqmXzkx4yo+gCjNyMTM5@V@r02h$fx8xyE9na=4eTSU_ zskNhO9Rh)ifowM(pMy$j1L}5tw}8GZ@G=nUV?&%XwgBpzP(5NM*Jg(vV==9 z;}#t#&bqhpp(F%t0UlyHEhv-_RXnOpD*Hz`zlBi$aASO57kA4%@QniC-~KY z9RC1~LZ2ovEtGtqpTpx`mMq&c8L$$@KC1mg`nz`%uOEdkZ-XkRBsT10P;{$v3Bjo%r1kC?Na12 zpT_=TPfB1uNAiqd0X6Dnw3{yNd0p=Y{^QFicRgfPTotlGHM@D&!_m;ya*oW)}BQ9rk?LK^{_sxMRp|r<`Tnoy#r;)$!*|lL#bn zkrUy-kwuh9;suYgl;VHWB1vvkak`9wzc8`(8dN~46Ga>chYC8w7hO0ku?_Bm*B9t@-kv_+bdfZd@L+KnOj;djqvw4vaZ+0WF4mWQar3VsiT{*%A|u0+T?IEDgIf2 z!{bF56>r9j3b6JXDBfYniLOgh8YY9OhrP!cr7YWl(WID;26U)5uPu&)lya@mEgG2H z?KBJb1f3JqybtASXzkI_i7e0wA0LfmRKt;uAu0oHGJiDd6^TOSEQ5?=QseNNIA0s$ zbLCdtHZdnc8n@&5?-{Tbfbu^mj0Q$qjLw9UU@0C0P089pd9bQ)9Gbh z7;w{#47g6r%jVn+1J;Ph1}x932ng}{s2pXn5CoI*&nPrVdyN@vR(x+r7)C*HkZ4Eq zDd9i^`Y&^gi36%n4wV?1F*WgkZlvoSC-9vs)9%4WD=XaNf=N91Fq#;1FwBO3P(fJa zy+v(ZO~4&Ll)?5gakGqvGb%_cB2Kd*Pm~oniQ|X&A1j&P(EOh^C=!-$oNv?VZw3dCQ1Xt{XHr1HmgZ|kzJ{*k$hjuKnb!!d3XrYbNk*LJ?20s$;T9j>|TOegH z)2A{iwtkLf`Egj1v2v|GVdGKUsVFUvDu4CO{{VexW6WX?kfGXDhZQ{Q)X31lZ9Ud8 z4II0SdJ)zua|}SXtYl(;^s>oMiqVb0tSA9+CAEQ24>q zsH5t6c^iQ}PYUx&HG<@`FSl*|^agS2Ahz{0r&=iE)yKeoA>l>wv2-6WF}*xM)K$qV z96rNS1P(hj_R*Fk3&{{g0t}8~ln5*?PL;YrGvyrUo0B{!yS4d!l_J|jZ8xtWnbc?| zw}k+YnNJ>|aiCCw1))aLJ(VI%=vPk)fS~b^Vk$tf)Si8MP{v4+Wt|U&ZDYo6O-Gk` zBWWUM+rqPY=>kTF%m~${ie*x9lPjYTJVl7c!hB|=nVkgfirWG`_OCUk zhZ9gdpz9j@=>{Y?QyB9ANnDI|C!Z<-lqo~FFt?2o-ehxjI^63;i~`ynXO$I;{eBcT zf&+5|RH+0W8qD*pq>xR@sUb{gNaINAs67;9N7y$@b2^x%Dh4wu+^l$H5YXUmL*KQP7cSABW)rytbGGti*GZ zL7oe7fgbO^qjtsOSIq1^v|AVHsjc8dzyum>fu_wlbNfyAGz*3~gkh~Yt6@NePPf{@HWvY1_?siWy5I8){zc|_<7b>&Kmto_9P zsU!?I$K(Pe_4=si%{lvnu1APa1%j^tE6#7gf%Z`Ji4aL?x%Cu=3_wMaNCXS%tt#OP+(9G-QSAF~P^_-`OadC(+fXPBsvXJPz$~=%E3IYB zWDv`=2(wK2ylH!m@rlEd7-RW2c#aA_G)it}U=#`SJRLd;3Zu+^R8gtt;Y4J}qbl9N zGq8Uelw*q?uJ$MV>5c>ep2{BiGRMsOjOjZ>zz!#k21v$@D5L;(b!g*BjhE5w z@tNDMM;%U?#d}w3BfFOYR50wBPg?b7(ak0rJ z4sJOJ*JAJkoe*(_O-Q*U4s-(uXSO_JQ_uL;q?7F=(I(_*W^@`*JD|(~PFeiiX5Sqv z(!uinC+FcovbEHCP+a()6I&5M2ICp9Jzco?PzAw$2rLH(G#|OhsCgZH0_$6Qe0!6F zIom$U{YDEPE;X3{0Gpi*S+QhtY>kiRlhTerBmp2DM18c4kclVC4u(Z-fB@9;t?WU^ z!fovoOxbL+VL)=!^Bo05m=;(UGztAYSmd*g2cWrTre(qCi*3!60PH!kjX!yy-Nr+Z zn=l?lJZ~D-N5}dq2bKV9jxc_z+N+E?1Qy$M>t4INW_2UX(Fy*Y0HTP}R2X;%Z19t6 z*yD6vXX~J%?#2kAYmor`iaAhahCEmc&m|l>*6ggf!rhBp`?aOaNqPBN4IfPjoe4Ln zOesH@lQnEeTg1=2ii};llolJ#)?@6oCu~s=8)au{0P+z9eSF8 zra2aYYTQ)BNeQjIDg!7EV`-IO-5eeo&;a&OF~a^Qk6QIM?N>UkjC>nP48>6g%7BaYF;9yEwoc$# zm`Fj=Mzn#z#LTd9tPf3+e>z=V5wm zxMiGZ%A|(zjVsb|3c9XI;01tZ}^c3s{q?gW%*M<8;O4dF@Kt}(v}hZzjBme8qjC6DVNGs2x_VLBYSn-BE>? z9$;tFYX|=TLv!gtb1B+}84o{gdf3Bbg9t&9*RAtua5vZWZ zAdjCLYwYGJvtqmHkvKB&n%$Bi#2jYg+L6|!cRDeYU~VJugU*j--vQ__HY1-dw5%oY zvGO|4$E;D=alnxTc+gk0Xl&FU2^TkEV55=cPwJ>-SPa5UA08A#8OC6ji>&EtI~pWw z60A59C}UX282S5V(tk2GtL&qdBO)>RGGA#N_#b6XCkvPfRs3EG+^BB1aHDSD%sQ5> zqOU1TVi4ev$TU3Sy+m(UxBN;b1a!WfMGTl+V#<8VSDE5PA5`r+?gq!DtIH|0 z+w)IBO2=v5WH8frE#HN_ZCjRcy8O!1=IB7UqmdO@3mi`d!{bBxXBc~>^96g67xQ#I zDU&)4xji+1MMGP5;LpFGZ#(9Cr@dle7QGE{C+DG!8Yj91SJZX(;JkXp-&c5KXn1zpuw4}o!&3@+;e66>waPCV$m{> zGO+0Dq!RN+#cu-TJ5N-C*iQA!%-qcz*0%FzqkcirNRHyqZZn0xU>l;I2EVE(qX-*wuHD+0-UzQF9E+Ct zik-p8(`jo0DNl8buW^j}UaL=?NRhjTwuf`L94JX4wfv={`A<4MuWVrp0w%?qoaiR8 z_MP4%kyW-h`F5?%;^zG5;~t{0Q0i3g2qx3uI0|o7eMu+HF}R*4dQ&zyI9Y=>GIuSs zzdp2cDlS|SOly+}Yk8JL%_^Z?fD{;<$bv4g-&eZ7sRS~yY;zmT5o2lGJ(3LEJQ~+uq`?*v$ zoGXpE*PC}LoMI1+1LcqjJC5B%12n3vSUT>Olmw5OI#4JJ1HcKWEJF=cjYSMcgp2)E zw2(N0c~XJ;t7#HtW>1!Nw;yFT@-e`X(r!2YSrkS>79j58Iq6BT2gbpU?HGZ^I#w)_ z3CJMhJR|SnUTcvMHPW(@Z0)!~_supl#w3dv6p1?#Q)B_i{N6MK^pmYeDi8%r0TWV& z2+-(ia!vJMYs+$Y{T8dAf8AQoFWh|wh?9L{B0l;g4jvIkZa9HqRuHqyD*Nahjp~u2 z0kwU+O>I&YN8v@a5KX9&@0cFS0q#A+zyVrqgJ2E3Nu!SfN$GeUTR~r~lh?{_apSf% z@oN^MtVDnS7EmvEuPEKcNe~API-31Pl5Rr%^$H`PtK7|isB4}Apv|-b_o#v6^b&Lz zCa>%jF(lX3$Wak7Y5xG_?KLLA3jsiW9c{{sG3()5kInT82VR^g@D*+q#=LJ7auNjb z;WN*rGpXF|bCK*MavbR}?{7_7R~-H}v1rnI(8h`a#D*td-jml%Le;e=09(y^`uXU3~JaHd&4jvo4EA+UDIeMrfb zjezC>pA$n0AXxz9Z~JOEqNvyHp$obW?>3u`tVh%-n;bJQ%zB*_dY`J9@<9Ltd52{( zyFmOS<3l@wGQ3NW0XCaSqmwX!JGRIsdJPl`I|0Xli1ic=#Qy*z8}eiQzQL31-s&04Y2~4g$6|L;#38L~H_pD5DApe&NKs^GriQJX_sL zgCD2cV_8tKv>pTV5@;z=xt3>$UbHg5m)DY*W?b^!A1JBr7|6NWBx|AJBY^kO$&)9j z&t=DsSSTNu{wAeDtWosB4CKk;$K_6DfnpE~2oSJ1BJvc=h?gSU+Q>cHo`Q=KS&z+; zxb*4aQ<=asw!%o7ID23{0B**2KObPN*^G@qXb7r*D5C_7daB8|735PrbYBi;h=^TD z`{*|7@HAOIXtA4#<3XhEHYKE=eGXAV(^>fqm1jvbGPD>fBH8sA&RjdC(vNMS(J6dQj9i z2{S&*^ykb6n#O_?`em;=w=Faj0*D$nT7a^^UO9NsL>k=1z2xadi!sP&bBjsjI#J5- zb2X4L;ntcOazWh0c}X9IPu)SABXTMT0Dq(k8DO^FEm4dH9GXNA3JgN8Fa(;0o!`Ec z49AYOydZNNboW7~Y?xnrYUPEeq(w6AWoWaphCMn8jC+XSxnFP}>49IT>4pAfENFW8 z225t$pKv$nN_nDaY#V7j!Vu{KHxeh?B1MHzU|+FeP7(v*S-> zV28_XPhM0f5jp}C+W!CuqTykV9VW!ipxv$dH4FDeFql`e|~?l34Qd8Ydtb zu>KtQ?xb}ZipRZ<#4{q~3A|Bx8F0BREUFzNL#4fxnK!F}xHBnXnos83F1-ymc8jsG zCpw`0`mvOXOuQHn4+(Aa=? zJW9fc_I_$9kw_xNNP<1}E5k}&+r3b(pbS}5?PloY*wHu~XCF4f<$b^DXrEC|}kgxKx z_3-3t(#!f}4<_l_0pxWa6eG-r>P5lu;ZmS5kvLmJUQj_Arr$CilyK%k!ekM0V~ibW z<--~9o3_(%c!CYZ7sE0>bo@#8idA@^>DEcesFFZuHJRCAu0^c zD3T8nzjc1J=Eg^n!Scs1;jI;QKA8Zc4>2FkzC1;45s)yQz(`^KlW%1Vc|m+pTDokC-Y>3J|EWnjy1B#Prp}oCaCN^XO&BhNS(zoI}!+gr!e=Jc(KDIfNB3VKF zL&Kd6qFL5eay904S^OlAeQxb?1#|xZ_>4ff)GONbQMWF9cgHK~u(p8npuO1*iEMJJ z`LWLz8dl(*zh>=uFv!F4DVX+C9^8znB#e+87}PTU4z!QivF-bhnfr2lxfl6K>sc{p zjB) zd&CfLjgRvsqs3^PP3be)aJk=w$mIH8tXJuO;`dW6gwED8_#^DEPrCg#BUqene#6p+ zW*^h{4XX**-|CGhmqJkfB=aGn7l`5ZR?~iJ+-qxs$)Hv~anv3)AbR+;1Y07HsKpk> z!!9wvTWs{X%o3w51`0;>MgqXTC5nC7(&4`idv55Zw zo0p9g%LwtQh#+x4c&*q?iLlfk14K25u?J9Voe(srinqFhUzfhFBgb0vM4bdtgC|-O z$N}xGsshHW)&uXXm{o>MSlJbopia@a^#1^=lOik_1%&PZekGRVIZ?`!w4I|OpDF%d z8kxAz*CW=7x6BRar6w%xEs23ss41aC_EREmJ6YExXhholZC;Fo?w(dLa$UQ|;i z?cXpn<=k~X>H{a3sRl{nG?8DvpFrVVI8i*WL2o9v8z|L|fC}4+T|mA)Qb)evRPvJEp1YS7Q%$_q``ii}$onBhdAkdG6>H^8;Z&F8Emiy`i4-21t z5(l=mfCWjnDbj>X5IAXGMA(P%AF{Xi84I@|!o3_jivCrV0;h0M(4VfRB%UXY3Ay1= z&^g6GwDbF_Nh9~+P;5B=02w;|+5P!YDP_^ zyJR_?thnM80N|=P^CpSR0wI!lf$Y+@pd%i$_>3R6k#hsQoyxnev%vc(?N?xo6+-;2 zC$BChnY(o%vLD6e1%&Bdu57H?ns=SWpdZWDgu=uHRh`f{bfSyp1_zeW?bf{LWv-N&gD03VlFu=mmR1Y=fEn59%@EPh?2?zb~c za}k3E;D!ytlNN~is7MWBqZ;|<1(ZP(?4`?{w&s5~rG1!WSyVU7K(#I&-H8Nw^AHyv zHKT_EZ5rh69>kyJni#up*Kfy_gd%lmkNw7me2?m6Qy2%#s~Vl62i;9=#PYG-tWuNu zU<)MfVo&CZ-ZC&nB)*$NdwA8EfJyVe4tL_m^Khpp zNet)X;YtiEL6@6H+D#%O9p{4b>oipe7MP6(T9GCN*ofm-6Ff~$*q*UGsDRPRw#hG{ zP&Y*0^j+E&t`KnMJZL)KkFfEj3O!BSEIo#RBju0)&=Xsjt1{ng$Wk?*3J>!KxFl*k zIZ-M>OOUH&A5|Oe2Z11pE!@J9^2qnaOF)wf!AV|X@m@y8V}RCv6bMz@sVfup&?k7G z3Wo)`ZCO7G*r}f$Co$@>ZBgS<+vZoBZZJal@uPr{8BdsqJH7P8@j&qrh$^^7<*1~{d{-+p?wKCG2$ce9A7U$=WtkQ2K zg^Gb`JjvxvkpNt3LY9BRPZbec3>C=7&jgNQnp7}u94C$FWYzWBqzNNX4au5J*+Xw> zP>907+iV!M0fotCow$HIhzE>VRAiLR#|e`@Bz;twazd(-SQ(E1t3(7j6nvY6f$aM! zG4}|VuwznkmmZrL;E{Qx*fPdL7|E60Bl3U6S z-{Nc2z^ZZnC*gfMnw2|N2m}BU1!vG0E_P(@v*@=VJBjHC6Z3x0ba~voZ0z^P*9tB9!fbK$>vgO?lr2hah z`l;I-z7=ToKs$Z4EI=nhInrXx24q94lRxz@m{+I<&}^Pya*qc80Jyymnu{|ALSbAB zPhM1`9$?IW35)mfTRt?1fqjR1>0qvklOOKTm)E(R;o)p6tJWsR~b}MFo#LBbJ zjTH;I0GycPa_!BJ=C59Jot%`BZ$m_?176el_}-#w?t6{H@e|)D{fzt)*|k>LaBN-#dK6 z%FKAsB~{eu;A_&irLA?Vd6BGfwCrQ!O8vdrjAiY~0AKQ+RKXZCApw!Cl6)xam0@@y zC>*hnHnJf2+v}!yZ&gK^b^idJbv`5ELmp`! zKvFnfwpgjMgF6`TRy+@d3~i1a%Dy&lDIN@Hlg4`1 z$0cOkasb%}A1VVDDtX*xGU(t~3qvw%)K zhQ)+LKRWdA;Q-9!?HH1;{Mher3T(Z$(C7W!O(2FG!0E($ML5J1V#MfM~EB3jY8ajAj^K z8YU?Fj|!G{#gyB83;zJCn616QgP_Q>vAwnGpx=*}sn?mVBd-x#l-sG3J~er_!iSnc z;l_!NhMwBFfy;&Hi6%|B4{Zf#JO=7HF-S>=UMP8Za-dI`9cI_-MC+0wXXhM`S^=ig z1nc2I@!&?Hy&TXoFUU_WlpR0Zh`)#?aT_9%4wj6ULc$fB?_~?*_7BC)ZM?JuOQIry=LK$mrGqh+i6RAIx-l2pv$Czzkc~RSay07B*RqSiRjKP|; zN!GlgdeOGJn$!++QV0avc+gZu%0xkF9y9zY-v@YcvpYNX*+Qt77b;igUYgAv=)pcz zatg>E!9|gZo|Hkc7ctMJZ933tf;4ZwxPh-ak)f^(yp8MS1Dsl+1OrnS<5tjV<5$vz z*E-xpo>hB+a1D8^IepY}5$1rXuub~K0i7o*8C}+0r<8G`RX|dFs4NtCSKVr{+<6^q z@e`$ht1NQkUSsjEHT98RQK!{Xw&|^Twd!J_kFaS&VA9oL1FcS1_Gw;BTi9sLr^c?z zi=+)}%*Dv(r@Es-R=CzpqNLTlpxm06_L`kd88Ud#iacji!@zSjrR@TwpBjNt!-+p# z4G9&nNjmkQg2RdAD3NB=lfY35bhQ5Z)r3x`N+E9_GaeNu+CI}zg2tnXopm%CXNiNa z-%yt}+6NAThC3m-hOxH*O%Q`{(Nv8GS~7gL($=EbkET>fal`!R`kV7*Dj@viN0=!m zK~0k&-;t(Wys9SJUxh9sbzdr~+5qBuSCnsPfH(-_&{pSjn>Zp@@GrNGZN^UNxKSl| zczx8e+k%@Bb?SPWhVrPe9M6RSqItl#O4x&WHULCO=1nLuz0TQ~Q2^fb{{Yjp;@k!| zgD!0IUny^P+Hq5d7I#$4zzjR}xOHOnU@qI#CQl9YS7DjdNM@Y4!2? zsml`!VtSrkMJUDz$OtmVzz@uRHFhc@DmWcB=@c{fnHzRC1wevOsoZx)rVV!)J9P+y zD8{$5AoFe@+ucFCB?^y$P&mL<8aI!HdTM3c$`lev_KrVQ z6n8I?Y;mdQ_(v}qgZh2A5;2`z@DMmrb29$`JF$;o90hGAMw?c`p=>ycyx;fIpc&{s z+8dq+#MZxU2n3&va_Ox}xfDP!qgwKaUS~>#1h*DHbs4)IO-H~~Wcj}eleAA-g%*G# zuNszknucObT%Bktk=LKyQUE7IlaGSbo6d?ka-vY|W6wY<&69NKX4G37MnY{Ht(#eg?0aeiSqqLO(gKOW}K(O;`0Nj1lb}y!acK~3q*Kz4v^R$6t0Ws~M;bZ_K zk^T8lVqpFdY!|>#7(Q%=bLGe+g&Yx2K6UAUN{#~Mr722g-Lg*jR{Fi`GuyGp5rxSr|O1>N!%s zs&Xl_W@9CKFracQ<8PNBy8CJY+IY>Wc7(~%*6=uPuhhV$x$d{sTQl~f(-06YtMH;- z+aNGxPVve_QEuNeAvy*S2mHd+4pkTVTzswIbgin&9Q?b?0UY_#y0W4~vWuDV&4GuCGOj|FCsKs@~aVrXUeOf zADEf}nX?uD0Bj9Vb3E#DxLo7_$S(wGBdtkLuw}tIo?*3$@11Z|{3Z`gwJt#3@EUsknwactBs4{b*xs-oI{# zcm~IC76gt1<3lD_IX37Z2&$rk)g%&*Q z-df+OUVtrFu$NYRU7Ev(t4hH)6_3Ax{I) znk|8w5&U?~(4X|_Mh4u2P;EcyIv)y#AdP&cW5$L&t}r*@%LJ+a0AAmP3|-2)GYB2R zkl5XLZUkTJp#EHWL6MgT--!PJsZYyHz4x0LzUUDLkRN4wy`V3R#l!+apL`m|q=sjK zlOw5bOilP|D{c}`ZH&e_P`=X~=?a~!WDCXlSFPKfoxDK)Z2xBQQAVh9l>M+Yth`Gfo1?qbRvrX z0J(&G*o~b>HR(andXl?jUO@aTIf~v%AQ%NtoqhiR{7nL+2M2Pp`ETLEn;APhq9mX& z8r-;=^ycbdsqxY{*6f(Z^*dQsS0LMc$lQD>>3tZwdXTpe2 z{G?J8Alv;$H5?A_m=E03=fdYPPbncbvhv)-z921!DTCA_oje-0zCY4iL6G># zpx7K{!;->ak~qXz{dB0$w<1JiB&OHqjb>TvTlY7rHEpD1{{WZ|EvNQ>|eIg#_*u zPXNhr&vfw>C_{sI8j9Ni@z0q^m8rrZPPoaGKj}J(EsylFN6Qf>sQX22$TpFu6(gab zLEJe^QSz1GN#jK7MxvowH*w`xGas8%QxXBvflCp3CLy%QI1xdYy*!*W4Pi^cmqIlZ0}n8}#Tb%*>1i7~+IO@WWC+Y;M@F4j^{;hhMhoHFRXP&8m?d?aQN4!-)&?dGG(3X z(C!fv`Mvb6ip@%R)EjP(AC-q$qR4$rV^)nn)HM`A)~ssAw5y2eP)u^D z_Zr=W$~XsWaZ}7uIWioi>$>+k>p+ZPP?2s`p{V*Trz+?4N6}$!XG*sYF=?P#fCqrB zpnuIWY6v#va}*d6eixeZku?%PH8Wm7N${Xw%RDtSq~&4C1?ukY%3ys}u3uC$8s z?LIS5U=BM(pJdmYAqSLI+>_vI%7uqIox6NurP?|R{nat;KV(q!*KhMj+Gtv#l>nz)+N-CEC1b!roHTp01?MDXToXcpi&n%u`tDop!+%9z-rkK!kwsV87J zkHl&Yyc8MNnV`;eupBDKYF6B9AbY%Moug{podq4fVGz-21YAkKwvFVpUqX5qua}*O zu%JQOPZ1&wM&jK$(PQPEVv3t|90f+*xb+0slcd+7+oLc)JIM-2{Lve|^rhG{8_dX# zMuhnjP@u%ljL~yfl57VLaILBf9breln|9$Oc~Sr~YtxK4*@{dk@~Gu5-xFT0bL(cv zU=w9k))ZHytbIfIbobFjTj)>Tcu_z^4tE|DN*(zC+Hx2HRB#7H6}f=Q`kC_L@#{dl z0?&B)R1OZO)3} zVn9A;f#s-TS+#;>l6lmU0i8P5=HYQVu{>gd*}dnW+ZQx(n1;M1i=B2xqzy@?$B*YC z6~~lgGrCu=T5W}!5+>BhQuq<2fpSFs#Yi+7%>?ASOxehgdF(-8g_U_|W{Wah% zKEY5LB>U^_KV3;Bo25Xo;TNfbXPrPA)yKZI_D~b-qDh$1ML@CmRQ@BSM8#N$8cjiO z8&$^$zX4LrK^7IX9}!zIiRNa3EiJDxQH%*DEqKzWkMC;d8Ub64fc!CP z-sVaBD3Z)~M;;V%x0K!{CEr;ZDOEO8)pSp4oSM=FNg z#IEhzRC8$KGy>*byGHzTw4MS4T88+Yv%M^TjXDP0tUR(}XUFZLtRb~AaZw~5Q8ja? zvV3Ye8%DJR5`1QYv%iCq!9!#nT8@elS>lKANv;(xs=57)(GwXWDwuMt@0|z%z6HnG|DVDjT0qX>%G_n+`M= zA&h^Ke5-z7R56&)^s7uRgP)BVyc_;lsJS}cB0L2X$3YS9iZFE4XnnP{e8xc1{@N&p zSxJ-i$)oF`hSiYVb%SqZ99a>2uF%NZ)@14h;(+a29!!6QU1YD{73*YTatnvlj}DzF zS(Ky99GF&dJpL9@^0$R!SMBn4s`}+}Sq=XH2^JpO+k+xzn*yptM!UCuFACapJUD*? zR@@97rbs^Zqw6bRawC2f^0aZtocfCY0P=xsX@_^Fvcq$*)NIz=Yio}tsz!o&a-c!; za3Y|dtBrst$Bm6_f6~gIEC~%f2-H`o%NW6p>U^?zQAdXgBWo_@Wjy>j(LJx93*RSi zkb!-Cjp3y?^yW~m@9DCGfAsb6ru3Yn51$iAZwN8F>!w_ru6)Dsd}#U~sFS&X`P2;q z3J`Dh(&Nl$6hP>BQE&=nPzcN{%l@D>pfaw^@$;$LnMX?uMJR?~+xu zCg=YE+7w+fO0k`!PyEn+$~gkA&0MK4C;tGCwun}crX*=ag^i@fwJRQOLJaf096iee ziH5@iN-E&(*BejF0kbcNrZ0{OxMEGg_)*#=PNVLcEtY5HQZ)mG&ZDI|_QQ0DW%-of zRa2!C+X9a=*k;F{r^ei<+^HJK_t8wgWN45~NF3;9?VRn@$IhJ(Ivb~Re2uD}hPILN zpD;gV5qTPlu?lD9>p`TE5a4PD+ZF05+Mk7#ou|ZHin|EhKp=t@hO5+2%i9QlnBxb^ zM-sh0BE3?7r|#4J#+V2FTn5oBoJr}?iV(j;uZX3@l-iJqLH!2y2bhQpv=WGEz>f2ul(bUf8+p}a^KWg zYPLkn<$Yx1PuDW4Y7GUFa)W6O@xX;U!?+#4rw1g1mbr1UfoZoZ#! zGqFr2OZ>_CPf8fO-MD*&K1`uXIB~A_7Mdq2zGM+OLE1<Zg%`1 zS1MuKmuyky?U??e#*dA!xOAi3cG(Z9AE-Y+Ey9^{6Wiw2MvQof0*9(STOFB2n1jHP zV?l2NLBtQ`ZXOy_HWmuebRq+LIrvac`2aB(vx5)^^F_r3VshY^2u=J^zN##w%uYkC zznwMqiVUiu6p}H!c@IR%s`yM%U^gRO(23fAnMWQ(QwA+D`bCK)7#$NNd=8cW0FXv* zF{VTsPT$4st^K>11kT$L(U(y~-&mRB^W`+nG6tT@g6?fFN|#NK`hu*K*_Xx_#;OA%Sy$8BI0Zt^AF+ft;#(oKQKaM z9d{_=zrK{mCMEST5BGopUVjpS$HIwHLlR>kZ!zLGDYI9o+g%^btd`^XN6LS3M;1(D zd7b%4E#=Y*iuHST-l=TKs9-s-4uI2T!{^4{X2d`l6Z0Lsx@k*~x5|AmPSsLu4yPC( z!SMG|yEA6bieYjA>PI0KV13>d>An)(l<)qRGQoy0TN7%H`&YT$!kZEJI0Yt^Udyn*i(`i$T5$J%Sk-UWnxwPsVt%4UL*Lm`c) zLK#lICTKfjH~C2#(B6O!6G~6W4wLrQ)LHN}7Ql^b${=wh>qk<3;-c)wp&wmsR0pXu zP|7`&Ndyjt-x`$!a|N~cSD6YPVS{~Qyt!DO0IgZI;#7V0D&yL}#cwbXO0Vk~;#yJgS@uTUBb0cX!&1=r{(Rfs<`HqE;#8l?XBZym)JWT`(U}a}p zh&o!X-qH8a*<;Xg_Rz@k$5SV0)?#RY(5!#k8kypD-1}*Fxo~w=h_^HMQ1u;^L7z>k2;93(}185ZGpgl^w!qNu5~d$^G(myU#0qw7Cbj`o^|IY+Ngm) z>V6&qfdx|ZMTNCZF$iT^L|>9Z>qd13=bNTdex4Vb7SwQ7wN5E&f3r4 zL^Kr~DW5OuyB{LhDvl62^)-EXP(>OE+)bi_$Rmt$smbJ1az7MsiuHyva9(4|zF+1# znkIgMhMCN~OTl`*K$gIE&~gai_^J5LZ#I?w$!<-@yfGZVOtL6fBMqn{o% zbUs(a9B(njLE}r6anGbkd~OQl>mrvj<0+3Iov=Qx9?C0@2-NXmJhxB_jD%oSvI`pz zEYBKjxiVScV-Ez5w&7mBM^8-_KvGSIxXl(A23_O;Af~`i5yrQ$S=%CYfvwGYsLHIX z0fF1PZ}8zkgT6e+@ivM$Lf(cdCskjjWiN+%w!nXrJfFC&dYzZFIr4Lz!i7>V&#)yke=#U^A zbg5|PI+N0iPnhUA_|R#RNF-55Du0nS+CP?F&E}K8ZOZhr4fh>9qus>vHE!r z<|BuVZOx41eoO-^4`qm}Dc*DgpM`BeLmO-yXcZ?JQ@9I(BGX4QIaF{)MKbu*aoh~~ zeyRxly7rFVV93R>I64*70pM$Ej|jLUm^^5QdEv50*;0V90_p)K-6=*w%!(l-{HxM} zJ}ZG9pfX4t)YkspgmGKM{gttU2+$w0g6=AKgU7_se0xKS1vZ}pp|2>6!gu06Qh(A7 zjTO<9d69ur?xkFWm20SbiPA?SOufN57Q|=U44fgyF16|R1JqU)bRtw9JbpAXVPTLo z?4QIv^aCc$gXbSBAAJ=(Iog7;B?k$(9SsM@f2i%q608Ae@m^FF986hRyu+goKFaj+ zsVp=A!vc7rBK{Oln?GwX7<|C;U}!oBk$kE_Q_;l?{jnXpwzK}(C+eV?@fFMYlkqPx z7BpZ71aYVj%vYzFZtcmj{8)+nOZQecAUYCT8-r|%rMOr19kH1Z__)s{ z70_A@236f00rN+V1C>JLA0}bt$~q9XJ~RTuy!n8+EfJxm$cqDAu_bs~czD#3K_L0X zh(66lHaAc>u@+Ov#=h!+N2qydW33)BV#Ad{1bF?GwBN-2wYwABRzsn!*pOoHSb4ED z1;{w1{t)K@6pttExX@FI!CHz5LXvD_p1 zNUM$5&EW8@`2DN=D5g~`CRLi=$=1C^ZP>>HsPX4pUyXzQFOHN@iB`8c`{m34qO56trnl~Q}XcyeL@_ermap9#Z_YfCBm{{9MD_gLY zWl`l~8Aj1*EI9O`i!%O}LGuXQgqxLvaZQf{u6#4+T&4l(d#g}oEtOLH8*iwCkw1xi zDVruwM=U~SAo)SzmzwpVi@m}!cG(1OR{sFsh5pJt*Y^C!Dkl&7=(@&Sd{@G^cKEjC zE4}d+79(7^$oP+Vre!{kVPlX)AN8Q&)O%_&pv95|GBMcksY9hr*#VMGEq1&*iy!l?s>RoE zC?{@2aie2@-0+~oVD3TK>g%y`9vg?@$=5^UUUG5eQvuDq!|=B&@udu zfC{mUih4AAjl~Y@xAT_NsUt2k!~vrYl?NxIm8AO1btgqF96FC}Z0^vu;0oqXF}D?O z#y&Jz)q9@TL74z%P|Y7mue9Sbp(C zCKAtqUGxlyZOIvz@MKdAdIM|pG*xApe+lyC1HkGk z6a&sg5%**%W`F zfBh=+7Jn0Og;@vJS3zGOuaH;EUoCvK^4H31LsprqF$bN0xZe7m=i7Su$NeIPGX6kh z2;)#PTa;DuBY|ZRwmsDa5w-bAU4E**CU49`13wy%>GFbpXo$Ck57T8oiI{y=y-|V= zG3EA?L)6#-xK(Y|=W5>06mS4Z`t4Q+oRLBjSR{t zB!fL`ZGikLCP}D+JZsDw*lY2R`hMyxautY$Bh1swZ!R?nl}Y4eAB|`|?h#&9N#<^Ty7HAB1!^zWKDv_o zj<5`xf#e5RyBe}w>Q1$&@QU*h9C)9Fc}2OKeN_a{K~OEqujcXlD#FzSOnW`_B-rxO z+^a*^jM9=Vf0$a{JgP}k)W)=B%ag=d2%&3hv*jNO4UviBQ7xqqfMQ!|^B%Hj#fjA4 z=zu+@jQN4NEMOB?XdH!wc~-QbK-(Htv(~(@qnWF*bI?erZAPMg>XZY;svU??_;^;Q z!%Fho<5wnYPklx;p0(x&+g@^f7QC3iJk8Bq*BaN|Uv)vPD#E!`!QD|B@T(2SkfFTW z@{KA0j|#nqN;6<;Yn6S!NgS)6N{@we6&jk<)rqf~yraa{vC1m?^QZ#+DgZrd`kH}$ zHLQ4Xu3ue18vE#j?Wh`5gYBp~4SLaL0da$`@2xW8P)X3o)kD^Ev+*|{;XyDEaH4^+ zbYEehs5ZsflneOL8;&x@ORdR`CTO_IK->Xn-1%NPboW=Ljky$g**wgC$*qhEV~_;N zU=F%of?-kpI+(^lC(bmTFV=>|oPlF}1|hw*Btos`N5601LD1>)mKSddbbPEc6eIv< zcYG$X_V}_G#wElBB=h28r_)4CS6rLRF~7|gqq#%nW+jM~to`haVz&whw`a{4za@88K`mTy6FSs zMn|oWUsDyCV}VmMKx8Eyepgdt;yKnc>ews@W6bpNC2(h|qo2#L+sRhq{jI zlg5R}Itnmk{k8KLnKh-l@$svPJkMJFUD&~}$|SIkgIX9fgluQbJw-BD@m4LleyR_T zA;*m9U(5;D$jiWW6f!VxUmR^@+j0zoP}i)Ok+M1SvZ!`L8tsuET`pB`G5oUwuZ=c5 zxUuKLZ;@CR#!37{S(C+STl;ayh~jeg`3I_i^F}v{C$=NE?ic3m@)%P*QO^$=RKzmj zbpVHA0o~0T9i!Vv{{YH3TP9TpZhU@6W571wExD0S-IBI+#5ZJZyLJKjnA(GcV2xr8 zw|E*XtOV+=V2I#jN*e$%ez_8Na; zX@Ddbg31oDL(~H)Fai*F4+kGnrhU=}l)-|H$+?+90R2I(w!Z^kq}w)JxzJ9jCnYbJAJkOt|I8%Y-@HoAYW|xf%a1|vvPs;4n7pBM%@XWN#|adbNb!8 zSgGUh)+^TSq3~_oz+9s7l^iR7ZIC_@K30*p!cW423o^kzZ3CkTjxsA@INKo;>LEU%@l&WYQOBu>*rCwzwCH?2)V=Ta!r1by z{H?W`I5US4276zFNN_X;tF zDqjOEgUyua8?6!tt=q}k%c$gI{OJ7YdEKIdc>e$|)mw9av`71j11SgdsMFa>*oX{y z9m;$U*lPBTM+)@v4=*BQdk&-Or3em8QU2LGawz`*@Y_S-@TSe%xh#iv>|z}c{{V@H zQR1|5_h=t=&Q%h9pxDuV-NR!55*$cgf%Q*qsG)^uB=-5|Y2~#2qJm^ry@Fn2`EoDJ zJ@vIqBv>@_PDo)EaeXW&siILxZ_YIn{Jd#`6M2xfCNHB^r+*l?!nPPc%EOIA z`IP9VS@EDi^7Yhvssjd#)`e&6t-|VcnlK?X9BL_V47!iDw*Uq~^N-E^-+e=Cq3Sx( ziw4vkCxQ0RAd(LbRk=N?Y6&{nooF)&Bk^;PXd9Rm&6CNT*-3~el#>J)rR{sg^v;;`G=q(}3F4>WURIIC=0kGd!`nck?bZSL zgK>@|P$=gkfgwXgs5fkL%at#2otqlwl|AAwlXjasg&cV|*FoC*{{SR5ERp$Rjc!5{ zarsS#{w$^}+`;zqr^d^<56y|kAIu2Qo??z}$0I5cFNLHP_i8%P%a8Q)3z#-yc}MT# zQ@3H%ZTVz=BqQZM7VxHA;aGgE&Nl}H-*S#4n7s^rtg98D>6^?lClkZG=#^D9!2!%NSY9+S?txZ2Eoq5lB-SbdfHIY~M}Gae0FTm#Xe zN&f(tTDIf`4+*%6wnUyrL7#12J~3J^u-D2x_41#ET}Z7y6{TEOpHGo@cvbP3I#uM)e2PYKOq#L|H(N zzbTp{E-b1D(g@Rp-jr=Bc-lTDf};r5=ijXYG7Iql$sGq;62f)Vk8iq(Bo!KMCrSlD zT|_fP^b{=TmeIHXYURk}K_0_U0~0qI#Sw_GJOhvi#)`OIx=!`CjB8SbU*3J3D)`{^ z^Lshe0&MeyqK_HD28G#L5MdN)`=Mb<8(E+6^c7T zp9+94$W@i6+fYfKQ-6(EpAVwzSGTa%zg=rq_|OyO1eF%l)uQzk1&ISnnPPczsgDs+ zpsrxl1@WyT#G3OGdTCx&fl~ziGSgmEE#hQU5)g6~BE;xfQHyT!zAFvP zG(Bl^Y%Ea73}jDGc++n78z@SvE1ncP&F_i^~pI~cD4ascCck_V>O1bIMV z{L4jDZeYL{99NrHrI#cW^8s~eKZtN5iaFZN4!Ib4GI;)0qQL@MOK1&BoxmR`Cd>yT zMKU(szcFBBbTN8>w<5>z->novz)9T1%XPTcw;G9IShAln1M06W$<(&BGZiGq)@p0(qaQ?_ zd1+SGw?3RFjbF{i+&q4bx#Mg|+)mO*;W5sRM{*dnc7F;o5v~AF6SFJ8w zgn)En2v!vJ?6b7Pu?P=KZbq6+88Kt;w@r(FnvQ#589eJRcikbu+v0+ITrNE1=&8Q( z&ssg#afy2_-NT$cs*AW9GX5r>ENOd=^D8HBizH$QXK6lTs!n#5qK8xo*vo<8+vvVKPz~twKI0{ zhdBQLv~7+0t2T$Fe^1`xB&d%xDIOt(2EgdVe9WY)o`hHGFPwfD+TPLkREvF7F|!56 z)?n90{{USaI7U1?RYdG!c=@!ZBn8W0z;p1W#oP}m(Xp5y4s>6#Z&wMq#7sZ@rL1X{ zfef%27;S_3W1U0eY?zqKEa}LH;ArK*#qk3LSZ!pR=q*8>AdL*lk;knrM!q6IVg$kd zW&P%kOcN`r83D)oYt_cg#s2^le4~mmA6;x`2PTnPC4}4PRAPiIMlC^#||F)3{K3PSZHYafQIM5n%cna*TTO^j?iQd zAHsv8j^DW^cI%5F@cbs3T?%BFWEum_OzGiA4q(}_Fd!DvcuyL}-Mbu_00H)rgh%3? zU{|HyV+{~fCNMXr^AasIteHo1jDZ-pZ6}#1{{S)YG`Rg##gSyo?ij%a>hdHWqvJqr z*_fCLU`Jd|JgwnR+vc3zkun5FNnPJ7R^Hk>uGwx-fOBI9SYNosHh#}&P)I8$XNa4l zjw?ZxHe`#T{9FkQp$C-}C@u42amebXnY%&+LmW)oTdu->s@mY>Hvk_lKs}TdB>w;@ z7akyeYwoCJ-;D6F2f~32!PDhnNOkaSeTI(s$Tjtl1m`>q)wv3KhkH~D|0|3 zf~;hK!;=rTfM8i0@x-AVir1114M8M(MxvnpnKSczw*GJ7LIEf*0PYv?(zg7hYAA0} z(S?mj`n93~j~fF*I0z!Gq32Q!4dkfc!<{J*xdx{|Y6y-(E!MW5nCRU3QM@p*qxf5h zJSY_~58*NHt;%4HEo0+R1akf!6s{O!&c7}|AU8(gG*yPoqIY78?)=#1$9EAxWE-&& z<~J*DYx~6jf_rnIE4yGOZaA-n4&ws@i{=aYdMV*Y9%HrMAT)WW>TbMf6uYuH1W9CjNK4hLMd4A+lwhW}5 zRxH4OFyMX^Y!&%{HlH3k7xi%i3=9WY{L`qlV> z2fiy$qe`%?D@xPZSN{M5TE2s%*6fRJO^v7B6nB8Je>O5c%8~&l&=Af2wL6t|@FA_? zA7v`y&5XMkQMr_p%JElL{{X4J`nYcm?f2G={{T_1#s2_NpcilhOVzSCoqWcVCiX9l zw_{^+ji%+EG-o3`{Kd&)X7?o2s1h`u9u+wdWHAMZ4$;UL(ul>4af?Ik-cLU&+P_#o zamI3n1OAnPLD()LAS_6*;1(ilc1OpI>GCinpT*_lN}zhL8-~~u?WqCr&bx9i-$&QU zl|YTdV&wRSniHG24cE6Z_0bsf$%)$dvLi=7m4y|9BU>N3t?>FU^;Uq_`(W4me_c!w z?KK;S=@c&@Uyllzk7cOCPgswxwLNR*Xz{BSC&slP)!*4Qb{^^a>gA8PSCmCqRKWJu zzUsJ>UR547f8+3>wSD|*_UT$paveUKXIogwXTAq^=iHTnXBu{pj_A2QcQgY^#ZT%70N2w zarz)>LzP;>r0G_@MXm3kq)8T@6}boqEs@s4!f9c=>@39mpnodRT>k*509~bzEn!3o zJJhZ<`6Nn@9<{V&IUQlaivc!S(y}&8tCJZqj$ssWwKLr0d5}O_Ee86(Eoc>Y!-#_npu^|Uz)5TNlq zr2VvUziQcWgMEPQJwdrz*hsgTP(a&1gwe{;xpj}iIkfPjiwSIx^5S({?&BI-wl+z| zZH?4{JqIW>JyLfujeZS{zvYkh=i!%~`GZ<0fR&w9z`{*vfF^hy6Pd4XJAV&eE zZgb!(NuG3ITBOtuX|6z3wc%FR<3n+e8in^)nEkXiua6-|H)xKKCGocr`IOJY=wp=G z8=Pu94IwT!nEwEE2_*hpZ}@FaLb8+P37Rek`W7RtHdP97td?EDpiZlKVM8CQzXZ!; zbn+A6WczC-EFH4q&cKa^3S{RZ(mGP$?lG=0i8c&jK~1LeH3!Cnu2oDBBQ9A%f65Qd zP5m(6*kc1`L}1>wVe?GO7W5#tJf4_akR;~cCK-gZ^~K?X;K zD&%Z#>1IPn)tMxb4_^iCASH z&YFY#!khY_t~Eoub1D8-;o(i62It1ac@LR~JB}20;UPw(O}s%Bb&<>x53-j&7T%-h z1bK&tIH4#VfF5ZI;OQL=0?cuSF*!uc^56|_$adyKx7Sk;de@`hC#~7Bh0M2^`})_Z z+2q-}zz>(ejYSaXNxjzV9B9C?5ZstosxpNij2Ya#FU(V?sV?S9nSwu%(x7nJNR-_& zx4az%M46j|7xvcmBpy>qi$9kzk54FxBl5R8+Hswr{{XUJyCENd+IZ@0+}Oo z<2*NhFLe~$`4cRvoy6lH^9EztN4L(|2mo#XfWYwEHfkA2BQ7#kb7Jy1TG_`Go{?>tJgKi6h2q^lk`{+WRUGmzd#D z{#8766ri2RbmAh2R@==_5-0}pl6ByJjSOAE62BvZpgd=dG7&tc^VW$*WO4Y^-^0Sa zJh;#~`Co&7sssXk)LR4s#KJX$9ejk_*+&jmMb9w4s`*s$R{XR(PVF`*H&<^X9tR#o z5IPe~2p!*MV_{|ul_&7-emORlvI2`;aSGc3!)xrN_0!fuV;+2F zSxEbO8ue9O3@RSrei96O2-Dd_eC=shv5r1r$n&X2 z81pyCxe0fu2D8F+qEv)oqX}KdmyK-6k86wdjs$S=uQaLP!0I}y|HG9-glrx1D`9}{4tHw9tKI)af5gck8+-eQhb>&+!e1}HXKY#MA&cuxaDf4L(+{aplGmMQM z>p#jx6NCY{Nx>jl#KGPl%i%7#G5L;ShK z`b7RxHAeVR-n(0goodGQ83B$3VrSc0Tb7kPdC`$PBZ2Xnx0J=y=^ix z!xItwz;Zkoc+nexpPEV7N$7r4@TDP$BE%Rb5AvU`q<{o`%fxtA@>yEs6gIyW7O7+z zRBBYij(T3F22vzMJ&*lDw&%t}9Zv(+XdG`17mJDLDT!2gvk4&mmF3*C!Y%DQg%%!R zz<>pXS_tGup8ADtk-|UDua-v}X+m-X{-m1n!G)OAJZyO*;=1(qlxfHY*5;YxT zof6W8M-gcD(cDlh7*z$_k)Yd-b)pxwWaQbIagS=}&C>!SNGbd`R9XzjZ@)*oglCK%m35#0a=MMU74CjdA|~4^M??FVI)Y zBfwRZd%lk=ypBxYeNN_{1hakhyAmg;Pt5bD{IwfM{{Tt<0Q7}=i!Q_PWL0#YaY{4x z2!{KZV|-_%3~WVtak3M{IV0QvWx zILW#9Kpx8Ts6`qo$)1FoE9r*DY*35)#UgJm?f(F1f$3xLI?Wt=RT6%1A&=Qb@RCCr zA)-B;s2s1npUou4-B%tFQ4thOYgU@+UtJ2deL|$%@E=E)UM8iA%B|2wHw$F0^tfhG8lSop}i7&Xs|MXcJ?!d}>Zu-D%n&@({u( zjG3W{vq1-@wu;*L!x%A`4ZzLpMwHuGS(IEw*TmCgAO=x8jKdGIvF0aZ;<{}B4X2s> zQ%-Yi3A!Cj5j?=A?=fV@F8)@(UYB&69z2A}Q~sLt#uv$ujmzc=z85;tAJg54 z^6nC&*eLJI5+EwESocv(ow&`2nQX0)F5ac>ZyN49Q^AU`(6R(stFKRMmd@=t3a}huc&&=BU>6yu7RodGC+86Am&jbu) zD>vbjq|)LTa$*Xr{{WD{%Va!)$x+I%bqr-7$it zC-CA%)Wx?qjbOuxo;*+>gLmOo;4DJ5CvF{XeB$zPj zPwFoyJZs2KLUe(xQ;e1eK_=0}8VbOShT`x?fzpeIZr?ZJ z$OVfJ%)fOqcL^jwS3>}boLO5ASAZ1r2Gch8Q)7H19zkK12|LLA%fs12E-k@HfA#mjWpIPN0oOm-{F#OAsWm z62ruCsf{nY@Dc5+oqkomv;qPj^27^Qqul`LK?|5!(Ek9cmnI(I=fEMo7F8Pm06OvO zS#kQM@SmF#@FR}ldFm*a#sMPk&`^#AqvUVq7Uw|$8;!!Wf>(hCcDJ&KWs^4`Tzf0i zZ`8(MfJu?n4+<|O*xcAi@u(m+K7`owgK1=8fB8ek0{q~`np!a z1RujTBTdS}^$s^GTYOCN-5QEviB*$OfQ^KnIGXsa#8jc`EfD22K)xML#x zLsr!$*BIZ2g+Lygjc1RvRB(a{& zj9q#A4<7?cQrL!yOu*)xSHnsytPl_kpn@-}CnL_K{Fw{_=mA&Z<{W75Q-Rc2t&P7B z;#QcU7;;`SfjF2&_bB?sY{&;|n;<($hQpNeQ^IIt$&40TgeLwt&Hn&?6kiYOk#=9l zA8)dR+CLtS4~=iivKvgefLs3n_=%zTc++OaeOz2wC6s@uPnkWUrBFCwqM90@P7#hzB8x?>*Q)1%I8L1f97AdqvjkLd3CL$ z%h23UF-4G-VSTpa%7jJ#015eL!kK4b*VAjyff|YkOgRSElN!PO%^cX&?@)bJ5iB@5 za6M@3y1DZq5~es6ZXG?;$`FNHwlaLl16*X>j$qc^Mxpp0Z4hSkB*+2)I!DoCKpRa! zAb~`i8+oD+f#+M)?IZCCy-UjonH)Wo8xD=H0W?v8R+%ZFG0adfRfdsZD4c*1pr0!r zZ9QUcOZUTtFunCMSxX02qZ@y zpwT|4QNR-(`Y5|dHkBacQ_^*%Kht`w#y0{_w1c3nnQ&}_w1}7^pfw6qPX#ev{V;qnL`m2HQ6?|$> zg@3fZ%U8%pfvp;}HLO*QSo~{WjcYZ>=+xG=ueP-{sjHLjtxvkOt!rP6arf4yzGGi8 zt!rA=wXJJf*0rlK74y`F7Um{|dMAgQ75(Z#ri^$_G5}Q%kzfyDy%5+C&k>LlKl3D4 z{{X2o9x&L*_`#vO3u7mS(tr4x*J-2=o|`-waOku-eBV~*<8K;lV1V4?czXOJR1 zcTpvYQ4+&!Ur4D`Vk~dBM$(8V#k92_oJU%a*+;n7``Kl*fDLUKvUJ>^bpwwozb_*L zR#k5XA8b@M6Yn2=f3$t$@2NOj>#sOv>OreDSk?ZCBD{!Nb*Lei{=)l#%5k#E^pT?{` z^*lM6w;nudc=f2MEvErc40sQ&tT!6D@D+L-tEW2fsV7RdwR-USEv;W(bz=vmbMd`S zp30In52S5JyrpAhdH*Dbo`+L9UQNI*W0nOxNw! zB{qW4Ii7SFF;b&ykUYSiYStp9JAzpN+%~GHUVDksn<9Rgyt2eG<_Ok;Wsr0x{{T>^ z#z;an5A}(+g$&yda7fyU0gc`!o3|McYOK;iuEv9XTJb{%eUsD;9+uylMWhWx(wGb} zk`T0SP)q{aPzDPqjrx(&qb_`D%ohXUL2+i@xX+L%A#N``7*iijGUPuau$`XGDln?! zn@AEzfi*70{7qlz*Qe1jCZza9LH7!<_SMhdT2u`<&CT+gW>#aIR2Ws-V^wG7z;sbge5N$O(JM1OE+^!tX~n3YHcN8*#E zD&xnOwe<$?P@u@!F?^tn>^6>5S-XZ%`4@3jAeG3=@}XjQYDScBb_f%=?$`|7#yKMv zHa{XN*?*YUEEusInR2NJ2=v*NKO2)}#wkRG?oXZa#40H0IC5WY4&VDm9GNq+lbq&`4L%;q$Y8phqbK<)Q_qqfI#*3ma;bmL8x*>WS2-kUId zu`pOGd5t_^Oxu6lnJhVN*ueX0T|G2lRdNF-89exr<6Cz_Oa>n*2c2(I=`q!pPjwUu zPE2YElOW&lwxionC34ND$i(tT(D)iMU!@TNwOEAft35in1%9{3)sm4UnTaw9eKZ z+AZ4U^%V(}1~Mq?`M-NnPT`I`x+@JQnXSw~8ZJfrUfLM*35yJ-OAir2K?O*+BA9WRTA){-|3NU1g5AvYcj1S1xQhWsmaByb_X=M_P*M$R8u$VReSefEULXJClrmE$ec!vxl&3qayIh& zXcREQ>dJ3luO&%|7CzpTAGR|VWIc8A(JD%;n-K@yK&hKefs0gwu=FuXrUQeld2i2^ z1TqH(Iy4<>P=KWQvBu z@u!L5O1Uxbn^=gRYRjz%Ae+L(6aJH4TLYx&BkG{Jm7Q%Mks$c-p_8@9uaULI8$ka6 zP&cErexMRi>;C{Lq9EE2TH7U-Z80O;L=aKIyEU#g)`Ow2HX`tRIC#_&xO<2fAc>A= zt$KOadYu^rqjcAeE>6Il8KfL(K1OazPs-eZ*1x6x@r>fmhS_6jS?9~yYEvtn2)5fd z`j>~gnenk~GkZ?bZRQ6`3P+`xcp09%K>H7}l#mLs)Egdt+Bi}(V~xtLCvQEoe~m^! zLYN+7xDm*n6yqBP#z`%W#N%#FYpMQWNsZKnANI3H56h72(?dmE!Le6iaNP1lN$anT zMqGZOKPv;~{{WTrJ_eimT%`VFVYQ>G@}T4NGcEV8*B^JfiOjK)g|pxxcOGn?DLxQr z7Ympvg~*n9J~yemgpfpE{%*AWo$c#eYNrx=cVZ6}bX_3?+aGaoB~$k1## zh9YKHCWHQK*6q8IuWnTiHj%a zA)+}~njLs>Zxthr2tKNblws%oB8E&6iy?_oa7p;BT{kD@Qy_HQDhau<27ns^1X#Qy-(6dxaG?s}*n`;O5| z++{d06tXOOn?T`hYtP&S=jmgQiyC6cb2~xY(g=e#+D4|nT9BfxjZd~d%DxHkVNh^4 zu!{cxX~(**j6Ie3z17FvUu9qD=UP^krAQ{Viq`e>RhoXkqe-i&_g0@qrnUH0&2g=3 zTIcj@^#1?~pYU`Q{A$Ge{)>vxRjuJ_C0K*TDn?T@BPYU-%4dO52BXr(c^$ODaU$;j z08sw`>NIymZ~^WA0Ju<+LF&MdfTk^!ZP8T}{ARYRPZ&18Iwe#|>pu#EjffnG6nEpu zJXwDF1eXVh)~?JtkptgG7|82Z$o+3$Ga0M94|QFe;a14g?5kxX#8>|Stib9I-$b*c z9(!0Hg?#hC0IX|osz*B+@e*n`yGJu0P@oY;`PA$2q8QEes2(<`i}R_U3Q!CVHGhQ* z^cAFi1P|O)&9og&UfjPdrAO>6F}%}o32a3|TN2|n10`DIVy z;Zjetoqd(0MMQlZ`d8Uk@{W~jRfp_#;aAt_>0e!1wXJVj)RS7(jarCfBZvl|S~zg4 z80Ic+wBDP`Qlt2GYdiU3+rtwBV;6E4}7h8Jclx9cKy2kn#YhIPZ9y7@$tRsonzG+lKT`hSQ3sw zAIm=KEX}{TLw0pOL(n(Z6uB52{l-!@mOHjj<6-p*PR{+(vlq#qxjQiL;3S_gQTS<> zAzjJ07V=@46xkJ46ez4Jg&pz@-k4%QP=D@hi1yZ8fNt(j``LPp5qSmWPPssC!xGE7 z?h4PT^xMi?#*r}Kau|<88W+Z?ItEoD-03s-BPMl5{{YNYkXLugtG|)fn?6Qdeapgs zO^0bgjy_%E@pC#>G27!&+p0!g)@+P*2|jxcRqJBLprH-5bzZ&(m}l+%MtRuag*Vl1 z2tF0+rYx(0ps;c0LBc@z5mKg8gzHO?u|+m8Ncf5-4n~Wp1AKGa^0%|yNRa2_>eW^I8pV)`hozq)9w4{oFpbfe8S@2%fh#M zdw?;yPni3)qBa#`CvsSi5k#RmSuREQ0mqclRe1(y8JQ8|MVrh1pTOQangIFK=tS1+ zZ3jXwDFGuEMKVcUebi8u$j9YUHW}dzMI4yau1(PS02V*al0Ed+E`aSMTzC;uEx@SZ zPzKO-wTbKZ)cJ|)8;9N~F&8!kY(6x0?Ocuc$h_1z^B4k7o)x$q&GMMPm#phagyR_z zhN))qjy@C|5=Ge?Y%&f$TWQjpBC#8X`>Q)uhJ>hsC!IR89DBs%$z#4WE}%gNp0vAF zakC#P>y5d?>JLgPRk4`5ooFtf%)c=A(Jwo|ybp;2y;lDKY<#<9ZXFm@UY8^X$@qu>WD%hw@mHyZy*$U<=ZHVN ziYz}vxF#|qTn5r*wVGkvfU)wro!H;~IvOkpWjcaG7#EvrD$Bi2gH!J1LoaSd?p#OS zE7R{4gMsCBJVu({w=rDUO_w^~Z1o1!xSjU-gkCsMJbmNcTV{E2wHHPc5D6Qv%yq9# zfMKgK0CWTcMB-hu^C=ddm!uuUu|c$CH^_s6og`DgXOzA_`#5{3o|Tp0)lXFNGHVbX}i3giIq z#z&YAXCE%BNWH)q+@B^<@)-QAG(9Tiaw*V(20pK49l8sVsJBBy{@z^!6Jk7ReP5Y= zT%%{enKqEkG^Q^Br{X|{o=5`y0 zD1m>vyt`dM+{MiMn#b8fY#@aVasL2Nt?GFG10&nYw*LUR&B%gD*2h?@FcYkF=|j@b z>XD+KDe%6v8T) zMfUE-HQVO5P9S*EYjd_KS9ewqFHw0WCZC}cH z8nIsnG4Z0T!*H=i;q9nESVh4cXoV0)px2%D0mk3J*QM$luxtP<4~=}l)y-->^lztH);gN`gjLuc zcdbnOYv+%Be8=NlO=xRFTt#Yq)vv;}`s?PenzgNKQCurp*0r^K*R6gvuhGls*0rr` zTKS{hUo~r7>MU!7RqH`qD?wL*;$pnnF^~Dz@2$SFPatRNs7YhS6u|K&CqwuZ&0EwwNn;0J|lD8ENkP>-CSg*8-{Wef} z+K$Y`gVRq6-dw*hPPA7hJAW%0gbq3}-BPO!%z;-6;%ow(UiQqx{#eSc1LE*he{{T%& z<@HY`xBmblEA=qv9Y`N!*W(9>Bnr0p>H)1!v{am-C-Vy1kGViNl8jATxmWNEzgVd` z0p;d3=5SZzUo_Xx?27r=^Z-?f_*ddS>aw@KD)!^84Z%-|n%bd7M(G3c(A}A`9d@YG z#G6!NEsG%0i%C8LBAD-Hz1gpG&ZM*rEygPRc-4f#;iW(_c#1o8QS)`@NY9vhR}YPW zC5Z5^Q((pkHd0Jc&4>b^34^$w<{c;_k`VmDFGte$1IOD$L>)efpd?X)Jt}s|;m6@$ zEJwbkJ+w#FLM(Y#KWzgQaee}%$3b3cGIaasi=Hqjb2^F_kT_6_9ttRz5gax8s?$7x z_|TCDfvG-f{TzhtvBuW}z}3`-G3qfgTa_bs&6#_QjktEo1Pp(fn3+<1D0co|?cJCj zY>K{oplUr=K1u23HR<+`i?+jxeJrI(Go*!W+H*JMM>c0uj~uzpm=TPq{7f}qDCEMq zUmLgkyH#@cMn3>p+Jow(?XYCs++_0P!jeYphjCO4by4#)3Pr_@vgXRWaI>fh{LGiX ziKWGl&EDiu>t_SYyN;GU1w5h1?O?dfJN?AgKHMvuU`cN(s6lO`sXRE=WW$HmOf9nz z8NJDTn0)wlZn|#Vm%F!$%F_YziKV?DG5JXns zN@O~bq4D5oE@=(JAUjX-_R+>rW&_L}JglNPuMcGw!hJ+hXABPBlfsVix-3*3t`F2} zefALy>jW9*hf17TN`oYAB>WDQ85GCi%%l=LMwA{WcjE>KC-X7;X;02(0mt*lj)sq$ z)KLN(%HobJZL|LX!f%@Vi&vbGr{?t_$cU*$8-a#o1P}SQd1ki--;QI|Qy_T8p4tJ) zdqDF+1EHXHj^GOz@?>B6ms#mRV93FRwq(?fQ(HUSVI*5BkN%PO}HLZ zLDh8}YDtA68q*`}pb?dq+cVaPCutgyL50BihM=BtUb?ZyRLYUV*l1$!zuaR9n1G7M zfVUro5{|2v9g4MqKa(IoWeu!wW->+>Ac^C#g@~p{9Rx?C1Y2a(VkcSGYjL7q8HGB5a7`KT zzMk6iZdT9{^-XVKZ6uE^{wrRlGr4uvNF41z=dmz1@H{-+>T^g)Au|I$Q>@OT#(>SW z5Q44v@sSphs*~=oTM~YoYmAu_ua%bTMf-f7Yx&?#z<|ag6xmK&|sypLrRk#yq(oer#>? zeRaFFVsU}yLoS1+)8-RH)L%t`jh8Dw$aNkRN*M;=h}wJ)AAzq;gDD?`&ApZ88z$R< z^85b!7_uG6Gz>=#A%>I?kX0@dFPUeS?S3^f*js@hkWWUXCm`BJgK>^RMdF8{ zGfTAO^)~=QS-QY5D3r~cdXee+_@#FL0IeGKqMgn>YQypQ)WFy9$UZf{wsLlXAmaxA z0Go2$&2CYIDuQ%}wdI7@;@rS6gg%@Rz?q=V`xseUiT?nnS*Xa!0g^K>mJjpry?S{J zO@L@OJU}t6Gj>^-nRQHz7>&2njSP?dwQ_Fxodazv()Q~^6M@@}HaawkHrnHrdf4(N zM{RbpkjIyo>x!I$=T%=b1EdgQh{ucw(U`>hEB(AMZWsw8z|BFCJ?yr%3qM#~)Un<8a zuPUq!NB~qRP)93Q3Yb$w!u%`nd@4$z9EC>31ID1L$BlfW-$WQ5+f;4?teW}31IB2> ziur|Do>s17fvAeOGe*a)af<#G7q?o})~0+uh?>;+Rhh}}1T}rb#cDS&{{WW0ckznV&s){o-c4PT+SEyGWR40%{Z;xTuRF)O4GDeGpkhzk zP@xoY*8cz+(N8{qT}f@k31q~jw*LUBw4*G`92x~(iSVc-j(4p{_S8xD)s>I1SDz3w z#DQK_WIWW5w!E3x59Uxu{?lGe$o(LSK0;&i-|DO4fBH>-wEqC~pSr)<$^QUDebsy~ z{{TaM)qHLL07?6+)sru-v_Sk{qNZa)qBw`|XtF;(coowe%ZAxUw zzUKPkze_Sd@~|j=(NmWZRX>P%m)^Ck)SReTUu2t(v850$29Ry>ubTX|ubTZU%HH~& z;ztUSQ@~L>m)$^E_*4-??X?217-(q25KqkpywX?kFZs|oi3)X7s5Q8Quvl=fFSP#v zm1r$`WGnOY&{RdwGZb+VDkPt_4_YoPx`j7^O|(Q3NaO_&8+RZy_|Ov*#MCQE8r7}i zQ4?IIpc@@4%^u3VX>K(jebgYx$ zNqmn1c*zDN_|lxXj#tWmO4E&quv`4cqK|DJ(>`Fm?$G2gmBqW}RR>nAowf|@{{Y*t z?R<>nnQj<&8$#<9lfB4E7=iS?N!ueyh}|dfitl@;%%ix>MCT*TEvN%sqmZoq*x!{f zA;g=28C{ruAbwFAQOt`fq9*$W(HqoTPt8r63cENSMrHjqLv7@P$A=o(os|YbCv*o@ zk2Xfs^co6Gm@(vhVMy)p!Huh{n*#^qUa-ZDJA>vqGnt+<69n=GryrG)LO{4DS+KnX z?x(uX>HdZx@`B$jmqWzOPjTC_oJvk?tC8OGsmG0N9Hz2m{@k_;k-a@cC|7bn?_kuiecPN>w#@}&^^p#?bL0^f&qb} z1H{dGy`!9pE(X3ZfVz5b?w31RC^@>SA#%jgONjA_~!d-L{X!gpKR$<5F+o)1__@ z2paSE)!>1CRI8UEDWD8|7+0x8Z_4 zK%j1aF@HV0pS|ebhD)n;yH+6>-kj9?@Q+JT`;Wjr_iG6V^p}v8W&)me=QN8VKNI#yeCn&UmCf%6SS<%(tt`LPn89TV>jb^B$7|& zh;MkUv*OOA$5KV;wim|YV$KA3tHTNm*k){Ykji{^nr-3xXBLn>L?@`TeRaB3fYI=_ z;o@<$Fryh1WE>h)`%%^_&D$XI11dTLBvS$e8zRG}nNfoT}F;V-9 zg0gu`P!Sxpq2(1e>s&9TL5b%=2#ys32U)FP@U47Et$mSE1F0fw-YikAsa|C^r{@}j~wm?UXNpU_kwFqFwrVN)DPE%nr#X}I5T0%&YOJRn7Cs5!B#2uDibho2Lt~Am0fa2FhL&*KBo0NWPb{eQ2S^F$pCT!W5y~M5`p4R*IsN> z;A_o@4+Hnr(ShTq*<6oRt1u&}it;jp(EauEncyextK|6A-23b2Z~BdYxMXuCq+~w% zuRIvk?W^NP{{WUK#xkd&Abqv+5ILH$tJIw%R*Um9 z_0&hiRn<=qFbC|bg&qR6w;NX))QbH)ZvO!32EIav`Iry3zf(G|K`d*}pDQ;cQA6~z zyc?EfQU3tOzx`Z)&ztN5w&KL7y%>GePDXKWm0#|o2Wbil;aX2oUoM)=)uY0$E`7CqDkj5E@~Z-VsyEk-8|i!0mze$HgBXA& zI#-lya|YF5K=@HVU+}M}O#pTGd+2~HIFU3=+wjFf<8!5B$J|N6hsoLC1#w|sVH4}u ztuSWWw5l!)VBK`wIY%BeGhirkW^YAQuA$!6#v zQ15c(Ifs;@EFzWS!9l+vOWgO}!(r_1awde$M^yEAueyZ1>_z!DLZ8D@dQPBq*1*;mZW1|*TSh!>SuBu~DM z*T?IUN!>7j@!F){$4Y+Zy3C+o^p|vt-zGx03OG$L$C-mXsmhDGRB5bJWzJJ3EMPFl zCul8j#0^@LwCr*WIUiD>IS26^jRlFXPqxSvnsFSeRi7)5oUs}XwUf5RnSD%Tk*$SeX_?|`%uW!~n69dS3{4b0zI@vW zII?7PMSd*rw{hF`(8l|l(MZ|2AlK!_QuiDH9cZq=(tN1XkV*Wk*QUVu&WJ~PINJ6%q@45=L2iS5h-_!x#?VWkjLi6coI zkIPDO;|?3;Z{jJkVI@HGDqiD|Z7El{O{&li;RD8)mnxUq!ATa-0oSbt#zyWQ27>0s zGjJj1AaWvr!RAx0EWa>3b}{%?;EW$#tah*-*cEV8=s^)g1^IOV{A+ILzNep4M;Y?L z*MadAC5GuG7<|KTD)h3sAf4Fr!8tL`w)|e&-mU#h#mWM*y!_f4J+5QB05@O&d@aDm zE-c6#fKEQ+7nO?ho-yyBL>V76#EuuxdukXJjX;U7Df4hs$HI)M3^?n4XUFO(v2Zr->mrqumcqi##ebCWpjPU1+ou--vTl_fs5XW-%U{n95Z1Ka0Yf(_cx9??~IV zxibBLhI^`O<^244;M6%KJHcYi?kwk>(&sEyHphJ%)>; z0))UIlYU)2wfcnP-J>VUe#1Z?)W#2#rmA{z_Ed%-w-q}aALd;ejy#H3-}RQw9JtU> z21MW#g>MSmpUAB{3$K_F!*JnJNh(E%hA=r36swOg02vFBNRE0<4__0$G6cRe>RNx6 zrG()oz{zfq1XJe0i+S5AjeN5U_ z1`ro%iR;YJQ?oLj4WxC_gXF`re-*kUYJD^2KfLyH!IV`nYmS4x$YF zC=8wcRK{n>*v?}Uz?i6P`En6?IDIgG>Agt8_}GF2001 z?rq!?DPq3&3_bRu6>;R+Zkh38V1Ln*6j90C_Sk!WEUrv>GA{oBRe>u{u2)a}(3O`TYy4+u2Jx5==? zkJTiT*L48-)g(w@io@G5Yia)C%0HAK_gK*x{{XmV$|nB+s6hV!+Y~qE&cGcvx7uhU zHdg>Z4Um!HU+k+GxoKnn0Jxe678QO`p!ijWmEp!9)Rs5Abgg_fsU|oBH6K~45#Vo7 z(0Wvr9C*cDelTn07Sxl@r_%s)try3gN`QF^n_k*YdANO*aykkZiRs3PA^_!9CfsUg zt@W-SzZ!#M!mKUEFBLO?3b_-{N{9q_)NPsLz)`V3RMw}gL{OeJ14F2-VzoSs(D{Vd z85+%MeYF9FwYaNalo_s7f3VbAI*N?A)Xt_aM<;9>df#Yn9vnq7upxnlod7f+b4a)t z^`OiGfG!Ft5_p!ic|mWio{_?(RAOEdFY&A7Aac~zn)=ByY7fiAwMlY%0UsKW(1TKJ z1y1?v_f)OMk|@cLI$z;X0f?JL6gGpY=U*`#=;~vgSa|qUG=MZFr0Kv=xMTtJ$k{P#S&J{{ZU2Pa>pOlePn+1NIu9>5z_K zSNlMJ%D;7al}CyXuuvfoo?yq-UQr&}jeebd#;nBqYRp0LsNP8Hdb7_$Bvz_?N8D@8 z2g1};i*l|&@YbVWqW=I*tF38TR)h95tt(Ml{W{*a>`c8HpkqKeNg}0!k;z1SZfX}A zEb3&MoXoh?enc$C-fctmKa3@Tg%!1s z7XC&Cyz0yTuxbM??PAkXtT}wuDs5aMw5y7}YwW0tRELidT*%@h>NWa`Na~`bEFNoW z-6VMb0Qy3N6XI`E>IOWRN7Y;lYhoksqFFYRdudh^&U)A40BaMcg-faucrxkksW`Tt zj73;CDBM2kv$#B=O+t4Nf1M-ht1`I$Q}!C#);x`mxY4z|YT(xz)~v)D`R!L@@A_bx zo$*E;Ox4IWa12yH6n0z@27_@HBaKSPJcX!8H7TLxtwFqNRxw)NjMwq23!QjZ7~*vm z rr{`yy%_O%;n!i8yWepxl|p|F*GpuIsFC% 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 z zx$anp&5@7&xnGq>7_UL`kLn-wGxs?F$k@dG7CMnxG50&WoH+c%9^=e|@i5!E^!>g( zYuf(+YwcJJ7>NwooAW#I6L_Ez*ZPda3<i(B7Q-Mll&5X0EkhcoNeC*%KDEAos99_E;j}i=UPQmhGN!&=J^%p4xuK58C zXt$=a(awi@kDCIS4~Tx7GO^v}-8&TiUR8@83`0I(OLqOEevfRb2cIKtUpWKwSEbts zcoUIslGlVtxZ$NL<7VyHxns5!dIo{Qv39ufDl24cjocQnFXaryj0ovN5$>5gaHoEK zo{`K$d6y1N%nHrqiKC4>!IhUAE%76tc7m#AElHOqKUW^m2cmZ&Cd#fv zYo~={8A<-5E3*)z^g}n5SN&1IX~w;5S&HSxHxKjPXB8Ub6GC5Gj?7#zUw%3gb+l{{o1dDKxEkTG5!tgYXTTf0J$4ro^drZKH8tN=;=^? z`nlmzI#sL>PvcNT(6_MF?H|87lVdg0Qgx$kXmk(-=vbeCq0X!?#LyA1T9Xl^n$VHY zg#breaH2FkEAFmb>skJ4zLvdd2b~MVdw#0>B0l;fLB`Wo)4-p)u3%2H6h^%$0AsD< zucb%FjXhit-CW~{H~3U&bpxl-bNl;h(t6DcSbYic4^@woU@3v?gD@2H7Czbb+3x7}KMCO?f{18|OCT>-@O{{S;u zbd&sRfaVAAuZ-1>oKNteVg`We@T>fO>bJ*Fb#>=f*M!xpjeXixh>wMMbNi~^>efGg zm1}hW04gHiTvhMNy7aAmyejwW{A%9c-;GBPbl2UiQ5;5}xUOHnAy@ZT1JGDh>(JJc zeg6OxL!AgZ@Z();r!55wd$g@jEhzG?Tuju?x*CD^RrNoAa13gyh|YB=!cL+h(@<6m`jpeoj=BHG1sJvdgf57G5kUxiy=ja%9(2AnJEt~cN+ z)ol)@t;2;t_kAB#TTiy2h^Z0nt##vC`vq$wmkK|)`Zc%FHSnkgt*uY*6eCK%x9N>} zS018;bn8)HZAaHbpBno9h(7wBBDz)id#X5ap$A&M3u~=MD%OWSRDQ|^H4sHWv~j5% zb*Mfd@TnG#mHXa^9wVI-6U2>uv@J97sGkbu&Zl0rKK``>#2!8rL`mW(d?$$dIrXE; zghxu#PBqi*uD`yurMlPKQh0FV?5`i*;<;6|8q~$Pay6xEf8R>9QQ^)ttLT0-IB>0g z+BTk@DCG|M`@Mx*IhSTv{0WhaZSWP`F#{eI8<+re;c>>8s0rJk+-H#Z)8upMpwJJ1 ziY>I`!lFaHgY;f>{k{gpx3m2(>M@ln=4WD`nTI;{)qNtv^iDvYuouU_a;+zMIK^W+oRiFyJE@QqWMN#aI?Gd1!x<5Ox8~9h8eQ?+_3=Ic@udt z0>AL^;meIc3{L!t*$DF;@}f9NrtZJFzBE(;_5)?Tf@48*%4s`J)jbu(xT`dhv*s<7 zn+81SWbM}{_b%%yv!j*Vq6~RL`IrOvjbq2$c8)T;h9_6n?M{ zLp$ra@((ucEGXs6oU^e$rbqeQ{#j`Xy*^{cl?r6Zg}>~kGIA*eu2^s}VeO;bW>LQY z0}6LA7ZVdQHk+6+YW0^Rkj_dzeW786_Ugp=Sa{MeZ;vl|mHg^}5T~8w+Ihux@7}WG z%>Mu;B|(!OC_jmWtn|GqHb?LB-)E+WXdjzkh`y6vo@_ZWD?gkT0f^{`WuuIdNX?Ox zG8-b0#^0S)Pq=&QJ9i8*k_Oy`Rh&VwRBh25&FJRra%1eVF=e-lpJOcrmOnJM?Xv{ z_}(d5yM`EAOJqd!-y|5@Ex_=BTYEm;eMPe8$V=`&>pI7Usl5nnTXrBsEWWWk;?owa zUB`Wy{{TT-E<8$O%nUJD(#Eqc74`C`o_$ig1DH{`tZnM1^te#2$9==l$Gd9yuFwf1 zRvl{!{{VRH@pk~uM>&}@1Xlk5?fyN--9y#v@h`6bE+Kv7Z?huHPzVJ%Zv!Pe3BZvbN$%FHp7b&W-XzKDG2d_Ykmw{{V_vqUU+rD)JWN=h={vUdF}Ndc&<{H9Gj}-74^e>a z@iL!H?JVl|@{S8M-kSo9ELi8k?a^p*l3`L6$A-U4$QpANDm;vd42G#R&pwSiqxkn1~fbnF?FCWU_aOFYN$ca)l z@aaUj+^j)1BiVf_TXL};M&Sd8UX=I=gnu+OfqsALiuIkcV#Pj8h(LYASQY8|DVx{E z23*X1*#v6w9>YMVaTrj7p}=NAso46J9JQpw`g!n|IX9?mZ<0sK-$fH|(`fLWq zVnoBBw8shuaAa^99Z4#{@~%D=*Z1XD(~WEItH*_D?4i?2;ys$w>+cn%&YWuh03AKm z08CYYC)-CrMzL>wUIgfP)WD8lRGS{3!mp_K)Xn|9^qWi z!oPpEqxUsB^A&jd=i6O8YB>E=CT=~oemw0pHT#O@d~5vv+MkVU?!7@Hq}H+FT`KqK zdY&9=J{7IGRPp2c+OAKwxO0lOy$9P|KYq1yrjw<6I{lTza3hDpt*1}8R*-$aRSuuO z3j3;k{{Y6keV<1@RmlAj&xi08YyE!;(t2>AKFijC3gZWd+@imKs;*>v>!)2l706H# z_SYZZ!oP9#QTXtw)O;)Nx4=oDbs9xmL&0>dW;KttDgd9~*wVgDsLS1_g62X{3`nJ8k*}| z$1au3`y=68>fX|Sg&NfO0TpZW5deE?(Hx_VYad^_y7>LI^~WD=eb@KZuS4q6zUt*1 zs^3NHj91kat&Y5Fr!8wucxhdJ6$Y*J>qctTA4fXz;m7FGq*d#$O6l}|^IjFD4kEAo zD_NTR>MO>hm0QGh@verZZYmC%&3)AeUKJ<8Yfl>Itqye@I@gYbbEEMcI@QLN8ddZ< z)N|Iauh(8R5N3hlN1sXuLC>uoV^O6@(CHSaHvrq6MPH4o{syOr)9y8=@T>3@2aV|7 ze%jo4@~A$_>-+0mYh5%a=+YW$#%e|QR87AL<Fs$!jv+UL@7ju!0Q0`l{#QR6f zV#Rt6Ce*#(_YUPde#DdLcBuOX#WA_Lf66Jb_DYB`f_I#IQ_IQN7GuVWU{%CeGXDTm zk^cZxV?Q)4_Q=zXV#C-pcFJX5WuJGb@ zGA|ZxwgRvwe%uX-l)dNo41d%1+jil=`*AC{xHz#5Lav3cG&^Vs-1j9; zJWS2%F;lp1IPN3eSo>UKItI!}mMx7hCAlrFRTcYw-DUD*bukT) zbmgh6*zw`XgSRu6(hM2FXxzC7GDRZyI5M8>{-%7)yA(P3F@>9;9u?~MoygskMg{6{v$`T z{@I1Fmp`oQXrKF;7{PPXhlMUI3~~BO6gw!&+uM*>-rXrXY`&s0VmWepivF(PN0%yN zRU3@V14X-%G4_(I6)%+ZZU_n1y)50{Od`bK#L}|bE`{0w;%g%I_tE6V>ETE_F=yV{a+{D!gCm{573qvQQSvnU zZpuJi6>$t&gU3o4GCJS~ZahfI=T>7Au|y6)9~xgTskF$(j8z?myR@2A$hh$q8?vgq z%MB5IJ52J^oiOe3p358tIWV#WSu%G6GHs_G75zpG88UX*)S-4PrHMO4s@_=g78IS1 z%w4zlEdFo{dVqm#skCqxzLndC?|kTd*qQw`JqAU*&%TCU@f72AAif!OOUz_$W`;iR zK6P!uRS^cyG;Ma?bfSBlxk9IuovNx2M$`k=le_KN-x&vJ?obUx0;n!XH|Qw$SzW=% z-k)d~Z7vecnS|I)fT<^2h_D@GQOeFeG5+GPkNH&I=9T+li!dYgaWm~y0K)BUZNk4p zv~k^pJGZFZi_p@96~3M6O4kmNy`-yZFfZuV(Al-H++yedf^Rf4X6n{tw8t*PI- z0hmB5jYdBz+iWZ>Q}=k^CInFq$_B_L+jnY;1?_rM>y5_ceK_6J@dAtXZGrL_+v<-g zAjpP^h2S~XOdZx7dGHhgv8Zf_Ns?h%fL5IiK0GHPB7BLG4n>ccG+M@h%tl23jm85n zQ%cBpZa=5^cLS*9LoO_5X}K|VJx3}EN1uWGSNkeU?Iig}27#gFKmrCv5=Y?!#=SNI z4vaWgkooij>ybn<`Av!92<1tUGHzv^jx1zwGzP#P`JLC!{GJzY1+9-k>8lN;NvY!K6HAAXJx{CDI$jb#7m>=n=$i+zc zhZ+D~1%c)5thoDdTe`@H9xz+Vv#9`>CN!_6eo$sZe4gwBiwTle?T1CI!! z!`Y<^{6@6{hv7H->!8-84=)@40F_3b7W?RP9v^*JN7eOL2=ItBV(@e#{{R@MwEj_O z_f&mSee+W%-Sulkt&agy1YV?jH9p%>ll6UOxX0D*ttY1n+Yx~g6IeDr4QjB8a%b3%Ym+aYs24G6XW}e;Cfr^uig*USNQ(` z3WKjLKB~9AxlX5@aTOeRn^eL3J=JfI-CjIT(I3CUwf29Nf1M70zqYJo^84%S<@8(a z0>5$at|y3^)=vxCuctm0`^9)yIOq3Q*}|>tng?FIDtL3QQ~UL+>(7t8)vA8F`)jAs zHs^h7pHsuYQ0KyKeZsj7FIKSY#-K-E+S)Ki zg>xSY;n4lne`Ni_g!?D%t6%7~@1*_TMZNk8wu4hvG4<4N>s;%`zRLQ(i2eQFM0|SG z{Z)Fm(SL1Pr%}eE+$)uE@vj|tUb^%jMxtxmT)9U&9Jtl>`s!?N*1vsgri5~-Hv2_K z4t1uMGzajjnVn5@CdR(12jfI*7uG7r<`=2dkBF$}aB6fBXy;sc$67pXGecP)RcUQH zisj%fHT&4m@Pk10qAqyP3X*=>*53N$cn`X!IvT&>(Ddb6(XD-z!gRkHjSn-x_|%Rz zAlC^NsE!w*Z4WBrR?ur!xT&=f$Lsnh*?NJmvcJ{w=~wo}eRrYmk}vP5`uNw@IEskB z1JBz={@Ujp1z$t$sN?n5FCVs`fCo>rm0wx~dxgXiyov{u9zP+pXryTmS)!nDf9=70f9=29 zfK*0ckvx3gGqqyaPF#J%C^?F^rVAg=L=)jm;FSmlEDMZoc5`4c{{S)4YcKa6@3$DT zW5!2ohj*wkPQIo>NiSG(cWR?151DY}VpXycGi%#XSvzjew>b05V(xp+;uUeOjj)3x z$I7B8X{$AJBW|RK_;uR4;P~%yjGh=??h+Oa6%(D(8+`ai)hF@gHf z1SvCfI_`2d&k}BH(sQ&a0aoNY8;>ypeUwLPtZ{BWrc(fy2j$)Pk3sLP*zhN=4(yGu z@_`nTyv>IS84rE26LEh_8!}4|EWSDC&gS)pA;pUrWnWt&tBgt{AH)Xs;zUIb^Fb$_JMGO*e3jiOC}#HqMSRGmk2! zT4pd?&}|DGG)!1DcOvlmmUNf zz5Rz;%iQEpnAE}|0SeA;pa21d6q&}*(7_8Gp$QtB(aqdq#<&_A9s`hLavl?Zo6LzF=+9KjqZH3gc?>tzRrA)~QkZwiDN- zv}$6#O{|-z%m{`YbTpX}L$~B0?YA&uXf8Zs9#GPNA1LRoD&$`)Fx|B2JVbD;n1||P z7gtg)dU2kV216%-U$%*5m0N&qG)sA1xI_;h8Y!GhCXBpzdumjLi>O{+298a{I(*Bd zaMqBSOsWCc!VDXW9&~Zw%a0@O3}0y2;v~s<(Cb4kA``g6fMo5#m1G(mN2%a_l-Rq} zZrdX$5Lt_YqT0v?I2!cwZh}TkY|;Y>m2xZ9{^^I*C1B-1SScDWrruIMsw?Q6IIx5L zK2>A2Ur@UskWE||PnaHuQPfhtOlshW4JDa)Tz(pPaw<4%s@JEa5DEYck46#a&dEa=$s2@t|2IdiFz6(Xe6%yQxJt9wA! ziHqe&E5-tv;$@;6=r|~so91iV$kyrl!sEGRN0MnWKtNgU9 z3wYGreN;G}hELm24UfC*t^#jU@vUdV{{UTS;aua7?-eEoO+JVuo|dcI_vsb(>G#)O zk$Sw}oj~|$^;E~h@2x>6te=Hkdo-`#Pi21p0LHIVpzCk0D%Kyrg-AE&Rx(d1uD<&H z!1_7<{>u9;QLkU%D%bt`R92VMom@}v$W^rKMC<$Yu4995%amG(v~;feeYMY>YkHq~H~3ZWht6cHpU&g-s2&tJo^*-w9TFBvC`QEmZ@(xQAT>aKqg?5q3F{{W&Z z?fw-ycxyz|@HJ?!v+0mN7O$#^9{T+GnBs2=J2g>Vz~)RAv>U)?sKXNMY(zPWVcUOL4_q+A-ewxd(Zp!KllUK;TFH1Upn z>i+)#wuQV05mCoU<|^C`{`&aGN{$AH)-~{>!;JNv9x z{@UX|8n%=3N7qJ1oCR||C{HM!T@7jQuc%i@(uW?W?V@-evxO59G(5+RM!dNZ)Q&U= z@HNgfnA5_fd;aRy!`uxS_JL}Xr{Rqc-9Vp(bDlgZ0qRdGAQ?Z1YAaYiHLQ*e&&Ilb zTH|d_k>OhD$XnY{@VTqo#)Rp}@bHS5zXa{Os_4FgOhm!%GgyvNt+7pGiJ$`7;I-MA5lF{P*|8B%r^UJ zP7IEj@q!;VR&9u+OqNT@t|j=myWQ!3aK8Ei(l2*0E&n24?LGZymW1+44kh+AfGWoolu2dm@>;lm(drhV&3y z$`6rwO=8d9XKbDN0^P0*U~Iq*%j7&Q{AqLMd}_Gca(2wySn#@rQP)oz%-!BhSbH{L z3lc`~Om0zx67%B}zuP-*-!^8*Rq&#z#fW4V+zv=HOjssf@f0lLEg>)E-#iYy>tS4Q zyE3z5@}q^g48-jMj&A%fa)B2jW5x@hCct^4XyY}5y8fLPE+-=vC50I#{{X4CUVjSB zj|Lz7p5%d(%viFIz{JOwpsZcn=EyfFGN_1vMg1`YXdjr#%{5ey+h4p}ZXbEKKJhoK> zQZHC=_FFP!#M?IF#zK-r1`}|X;%`{{Y&mh{2|LPeOp0Vhj?hmc1t{)YBIeo-MRz5g zw|*p3q*)_c9iYLJw{IgKPz8K=;CUAq79?>uq1|^-aS#oQGY&s7xsG+S`)&t!?q?^e z(ejhH4Xr8w<*j1Jhh|RmDcBJoXa~S`mdy^4TREHu)W(RK9p%dT^= z)D!a(UM-xif!k^ZW!&VQupFLuCY>`O$Jyia zW(C7beidRa-0F7$ItomPL40fqp%>e)o7-K>cS><*&H))ad}=olqOi8r=Ni+DGo6Vn zT#d3P=G($ff|mo2MR7AgAj`QoC&D6xfHHAm1KZtf zk$YqeGj1*97LvS%=%TJj$R}{uPBYfLrLqfdKz>T~`+R`ph-Du!URNI)T-X=VZQChuWk5WxTWp35Z5}jOJ7avS2PiN= zB3!ZPIMR1rhhdAjVx!S~`Hog>hw=JLwF2?;n{loG0NoodKkfJdKh-LOlRtTo?0v0y z#<5^M^y#>=DS%?^pNDYz#Q}_}Zny?p-8xXj(**e~w87;-p#dB5a9hEXQM`r*Lr0Xa z1J0Q?`etns!4hW2jZ6jUGY4Ue0-m?NzB0v&2uo{C(a-ek#3oiyg%sA0FR#n6h zwve}hI#%RT49Gl4JPUNFY1&TNn~9^B7$p#FIRrN0!g%{@*1!od`l==;^A2|Roj8SreG33TWBOX)xn#4Qq-dtGc#Kkf@1FHk69I20RJwyX?w&1x! z=_dxh(N4PKQb2V+R=&P8GWOYFh>hYvq|Eq%##Dz~VhMZs_Rad5Tz$7>A0o%7gD&9Q zcOxIfJ%)yS_y=>@<`S}ndx4RE0DN{W(Y2+|{j0d{4iHOaz&;|1`YP8(ySy+<_Eg2ZN_x? zRD-9HNWz}Ba9bkpsl7M`j{{{U57i5%nXqb3ODYP%1A@vS4>_UT&N ztZVL|0X`a3So8*<#Q0zAugo~=W8FjmBc7G4#}Eww2pq)xYUGyTCtr0$K;vR>S08Pv z*61LgaHxy*q6LpD-`Q7?M<3i!DrWXFexp$*z<%*uxq&8q)u|DwHv7$9d4vA|_f^Sb z$BcW(u3&MAy#cSjW7%rrBcy$`td2rIjdbK~R`(5l6m8-F-BAQ`;qa-`k*)@3m`dY7kTr2Yb0PXnH3x54-`j7dINxwo#`m0|L@~^O3yg6L_YTsYmYPZ6< z%@OU5e}J#94M)IhQ69m1<>7PnR*^jJPqLyf*45!%J(jP&)gM(yE)yr=rC8so`!uiL z?5msC-TZ5r{{X7B1N}x%{VPJz)PW!LitxA7`~Lt6{o`FrD)A$oM&1^r}$C$nw|sOS|4eFQ>P1C-CV1s zeW&iOoCoeI`kp85snl?tJ=F)}_X?BYCbX-2Em~HdI#vCqxpewEavyztd~5eV0aJf< zM-Bj0y}aslYT{`^^JKfIJOEX?W6(m)3>6O{m7E>Nr$uHwTSQkZw;83LJQk;ZeZcbTm$+ zeN_WW=NiQk&i>kxC!GHP3L4K3<3!r}+J(AKp2{L;;X{WhujSVEj-&3Y>(E)K9tOkr zG(eH?qXyu3k>k>=ZKksmTma-G)r57Zj|l!W3u&PhV{xVR9@@2p&$p#pkGa2%MZ|tB zO>!fLI_t{5ApP`B#OtMA;PINc@EXlQHsB}WSNDSzeq8GDJg0>bB*o7$SNDm7TI;3g z&kaW!i5Jjo?5;p-z>1zc<6mWNu>{{pnz=L1-@H}9jyy#ltCf1)*;no}C+POV%&yi2 z;8*~7QfBQ{TN@zsau!t{urOGmB!CCXDOk1u@eedh*DVm(AT%Ju;IYKEM6SDr)4|jBIxftYY@#526$M+BJnQ`GJ$}(M4J;`INo&uZumwBHc{@rFl zpZ)Ib{{Sv5dW?NddL5T^J%0VxGN}M2H4z1c)Nlf^;yE$4T-%$u?srKge=N?1*YT$R z0P=Z0mN@l0fqjqoLBWa!OxYN~2k#?iS;uC|Gvy7rnFwVB`B4I$TbZnBjU7?K78!&~4gga1XHe_5I1b@0wRY04CS)Kwkq;=1a7iLD~VU#mw$-^A6EH#p1viA5C zE>j`>0#g?7Zr-5SN##TPeoSXB9EDNHXMCGSJ+U-%j?K5D$b9N|u^)&d{E5g#dT2;t zjGd|^Ew=7sVc;lYO}R?>a_`-oqYUH zI_Y;wRhgwKpWHZjecH0 zRvb97cQ~LBF=c=wP3**8cmbt)#A7*fmfEQeDvVdK3`#V$5!3a}kWDo(a#rNCHX8MiAUJNmF~=SBr!o^*e=-~ht} zFZh_7gq}-8_W4+Lh`X7JZw4&HBU)J5X1}XO$&)TdD~q;f^%+nJEx1CeiXe$`BVQ@! zAW+Px2_j_N^%tUYmSiSDI*)A}GHwhjK>|(4J$X~?+{5rTfVcAx3L7VJQ|bbBBZ%cd zDJWHcS8*4Q%i~I_0U8EBb#7=ga>X zS>eZ~1gVh*$6eLvcR7wO_Ynsf#(hT!ZrIiMk~lSE?#=~#nEwF%XATwJnBzekTO0X$ zvA;@nfN?t(#D6F^0&T*U8N8wt=>w%MM8Y#Zj;vro{9k=eY@p-F04%MrNziQ;-Z&e0 z(q$NOcMOED^(+47&@Z@7y!iOntJ))C?h-cS#pU%u6Y{NteRb((SIP*U=LU7#xbX6r z;l*!G-`l&)n7f4lp4%e`7oEt&K?AS0y-b){Buj$2G~AN1FRY7I_2H=>39H!se#+)X zkw0}@l6+(8sRU0ueYNuu%I1vuk2;TZ0)D8WYw{o;zM=^Ooc%&7bUwg+&0S9r4eD=h zaUEmx1t8F8M8IKsNNE~bj{{S2OYk=o}zH5l(z!Y6&SXA8_9lE5u z5fG5>W&kCX?vn0q=?1BxQ9>9>y1PMQKw9aJ0hI0>;JfGkonPndXU{%szpLmm7dpI& zlq-+}l<0Bh(m;36#9$raqZ#5Sj{PKzvQAZ$!F;G;tw#aT>^XAH2`O3R#Lx4D973x< z^MC3XXkBhKBI}4@u{5IpfygSlufoBI-{Prb%8y~BUhNR>ka6rSNqgDyJW)+5ywJUO zyGar3@?QozpjDefE@G=kRi z+>TMY9mg4#+irxTs3&?z<=&r`9y9F&f%eUgUI94<;uud&PIx7_9+jyX>2?-n|p`t{Fl0b~^# z3NZ$vG&`bT2zi(FNs zr^zTkRU>#F9w5)5+ITr+O{PFNhCHT*i#b+{p&xq%$1RGN~ie*Z-Er8j?2`^6(#l3Gw5+=cFRd%|>} z&UtL%{gc${d{jOpEUrQ=rY;L*|Cjy*^L)aXHx>6e(8BvJ7@rozMc|04B#vuOz&U8D z0Bm>7{y;WlZ()W5pyZsgDKek~<+1@FI|E-x7y?0$m3P|~?_LoWq8Op?_|eh*)ExiD z9u602K^IS;6tuL;qUVA5+#%#0T={;e93d{sx16!65EH|SSkTLg7h<#V0iRm3Kl2mx zcCcER{BO52tUIE0F( z8UO?a!c8-gf1g*dl=xwrl;PNktu^i_zw$%sJFk;i(3^UN_~=L5Q%POpn zi)z|FuQl88gP75tA~YCq?#sHl0hVdb_l&sZfibo+MPr4=Q@;mg6`QBvWWH!6$?9|r z=<}ZC)o%Cpyg!raOz4l@RF~g;nW!9c&Dv4X)4E4G#e3&z)4qlt`KK}2hVG2T=2(K) z^-saxi-t=p29@nlB~a^R>)a8aK^YDrSv8G*gE~ak4 zUJ94(diQQRD}4IHbZ*+`omI>`a@%Tw_mEMBi@7*KovRwMo$As~FhU7ss<<&uApBgvKUzWRTK=3&tY; z`!rm%VY_v`aUy^W!lI%{F_3NPMLWEAkKe6rL%p7y>rV9biQyc*m1WMCutA2wb++(! zL3ny!?YBAM>o~@pHT%6&au!b2eU-p5rTX?2<9h(|J;`T?o53UPn>zHLHw>G1`|@ER#9C5k8YSI*yqQQkjJ5HYB7>}r|9qH7R5@6{j~WwIg|9~$g~MdE(3=72 zoa;_@uk|i9FH}zI`q}l&{h^{HfFL&`qjCM*t zZQ0<|OFYeQHd^Z-N!i>PX;&tL(skf`D-k)sBz7QJQyc>J#IP5m6aCA0{QWe z?PV{&wJfSSlN{quPE3I^Q4%#hY*K>=XAyVwgjPX{nTPniI*d$mIv-ThQBjnEuM33Cl2>gMj&qf!gwL&gh=10;Y zuz%f%vHF!fGu=vw$mjeA?135`ycMC@02yI;QVKE0C;TC7x|VcCz>iG(gZwf@<>*d> zl^V{7!XoqD>{uvyfs?PWB{HncK(FOhPwPAWw|er!i54bRybAIdlalJ#H|Y9`T88vv zWdyl!q%zN0-U%;$l!L#cmDWkahLN4Ly10E7Ce2m z!ZD_T0CI0r?85A4U)(yQpO6G@<5O_&697n&m35mVV&6yMhxL*m;T+apjj3)U|<+-tL>p^jl6zw~nida|N^tU~Q z9w&`}a`nF0aunl3@Q*@)gjf}w43w$Oo?l;xYf z=h@U~I3}-yYoLEGDxj2L_FOpMiI58hlGj;1Y2XN3xMsy) zzyd9*gXjz9fGVY4ROF2m6b}fo?AM9R$jwpa%gD>J_M08nnnZt@7ecoy0XZGFR4ROl zPk6G8ZfVG!Bcx&3wDF0j%4$BKTVV*4uM`B2RsaJ>#sX?urf8piCnLns7xt`sg>LrX z8%LG_e<%H!^8&TvWkHu86A(#x^gn*Xm{1q`*doz{1XElj0mQesb;^a;-^aZ&k{{|eqYOKiMz*M(>mig1w9LHZj;aUH0v2frLIwh)qM&iSRh1FaURTPEq*ngI4)tD$q>^R?}9JR6(qV{(${=(xv$TFi|oVb4_ zvi*jO!HM)s+o+o9Vv}a{`wCqa&Q<^P!A-MSR%>!Xm-cC|436Dp2NMQE7YoM;fnGT! zG#XbqUuk|6m(9xruj+Qbvg_w0+`@r}?C;5$rYZ*Rb#m;9Y+wh=@z7M;4VLUh%u{~l zmt<^fO%QU;x7Qx6!Popismp_g3$^aMZ+tlWk*DR(A0fO2&N4)XQBS9wl3a$!pA98~ z%-uHQbm-s4*#(X?4YYoyoZ^ERzgCcFG6IEPmb(R`y-X)i7ae18>t9c#w&x|{ASxE= zeKj*qJx^K;(uov^lp)A7KXaws4Oc|0*Bi2Poy1I;6^RWIrmL;4a8d2JuEY}fNSt!s zpHi~5$$PCfmxH_K!=IbqrlTnO4w4x+qb99h{%+n?^X^)rOZ}x8&R~4%QpYXIlWyDd z9Y+22smKq0Wap)JTT#$>4DI#DH;b;94|_w@7XYxlkHzMa1UkxxYxu}%CuaI?OR zr3jbLu51V;BlMl1EHt8dx$Tolh$Z}VspvKRkj8qS@0YCCrKQ( zOV?mD)6ch%!nvPUJ`jg`YwhG9k<#(zxON61x1X5}d+-!Kj87bGXk&2L-~zVwZqF#L zO^fBpMOT2~W!2x2HMAAJK}U-Wf6srQRg31pod(~kOw6HI zJ2FNzxlPo{(z;fb8{Y*b-!gFL{>&X=R}mFZGhEBQC^umx6U+P2tkhAEnEbuVj9aG5 zdgZ6k?Sk4~mvdg9I|YB^_|{k_AOn$l>sw6-c%Z8<{$k{z6P1S8&e7Wl-S&pP5CvQo zAnDUseQATZX=#QNNjlBB&B9h>es|PUVc!roGmK65KI%>W&Q{NG==4*kqAhbRjDuxM zK*~Hg$)}s$4aN1|C%(#pMJ3Q<W5@3%YgCnhBkypWd-0^~KxSWsUx|QKo(3@za{>d>cp&FT6%q^8Cr0lQybALv-D5BV zqmkxyK1r$A!k>*a2PTsx=yTaAn~n7BR^BX69P`PzoFNP!1fz(V>~2tCF`LaH37pb6YL_rgLq0tTrPLI6^X~ z7B)gr{t4ylECWL|y=0a*8KEy#N(~t7ZcQUuoy9|DrXLk_G51)U`&+ke;Je%3jHb@CRR;qX-V+^J1r}g+DilQ_8Wcju@ zTvkNY@`nL2kS%`yB%aBCporM2Jb!3CR)IOv(D2KwUK_GM;!sYVpXV%o%g^5EWmco) zGB!*qL6dJ{BKSI_mFtQ9x0Ljl(}Xj(oyX&nZu2?H-Q9f5@BY=JNTcUa8#AB2Js|5h z@+Gw$F^XL5?ai#-!BU`ngdQT)?^BOBii4NnL+DKQ6Z6*YpM5+r-pSmv)o}Iyq$k#k zJYJ_auMmJ2RG^GcVA3J5oB6gtsb}?7c|xeq3-@#Q-%{HCkNe8rKpUI;2+*ESjOgQ} zslx5+=yYlP**Jsu3tP6Z(oe~1y4#UnbjOQE7UhndhKPZ&K#S4F66=PeAHuNjPGcQA z^!q7zm{c5V9-t!2KBS|bv#5`Jh_o6|QS2-;goE(os-T$CE}qcP)@tz2iynh%QL@{d z*wr1UarE}|=?{^im~FkaR%H{x^IkMDW%qjdliXR6fG*x$UZ42M5@m8RYWUY2& zRm1x!Vt0N!fHp)(B*_`$<+paxIrGKsMxE6-M0LbeXw*9`WZOvbwFAQGy9W!nv*)>< zeYfGfZCyi!yNx;LD*=WSe*GN8kG@?uxwXb!ko7~~8k$L(Sh%U1c`o8>J31WMNUBrE zVca9lDU7BnHJ#TFE7#;9E8euC!Y<)BTr4?^hGtXHi$~@ILhq`(u2v{h#RWP>9^7 zF3ZMP5(C2VE-7H4VRZCS6|uMEoLE`0-E?*G)kxW=j=# z*YX8Hh$Q>DT8_q!B2u76WG&Q(*j4d|^6Z8qCPKL;i1m;}<^H-{IC%qBcS<@QU3Hv( zW;8mPVmA$0D!M(Fs{!IdXWn+HEx|{^pO(KhTT1EgrN4o+!TO5W!TFM^aeRc&3ZF*}DRW=osrIC6dncY%yUL1F8W@b6 zJ-rW_-K$sL)&7CiF1hWhV?CwJmY)fU9=1#z?2#J*tAo#jl;Yr;mE!e~iREan;lKr> zDq%v)r-#>#HbVlIGC^Ln#il;VBJLeP=_01eAOq9vM|xGh3&Gmjif?Z%66l0CQ~BOL zB-I<&0J^l!&(&4Sh2R+8Mo*;DVX!SLgy-|~&+$7$EQ(F`v@IzZGfXf^xcUcQSeAK| zb|U$h-0+q^M|%>SWuUUdGs<#o>nFvW!r$H+*NlW{WM|yOmz-YkI+-jN#>6CfM?CHF zufscMPwT<%dRE4A4PU_n@xYq*9TY)%u%A$FyU;^^S8^NTOPv1d{;}IPvJ6}=^U6FCsg!f9BqS}x5e`W_oJ4E4Y})?%`Zl@WsYTSCwJcq zb>kcuL9D>$CPN!r4*M#4w#&L7v1YDqGm!iR5$ajIAn!6%{_q)M_f*BAa;%LU+XuSM?OXuQf3P_vj?A@C#errxSdh4L(DX-4XC^Xo*oW0lE^JBFyr;uk>r%}AwJ|BV z5mYILO^GLCO{5o8#)`)O(^3jx3wA?K6lVt(e9>921Vn!a=-*JRE}VYqk=EXG&JD4M zeLL@#HeC(OxUQRGSX&4V_`ecL__DQ)KKz4UDCAUgaK}#{J4_-(fN5Tn+VVaTqZ1VL>NY}5s=^q8vrbl_`_3zJu60uy{e1;Me3>GI1^dGT6 zC95BmaKJ0$-?)8Uk7>I=(V_d2%C|;IG}ZV{YvGg;-{Ud+#u!FRq*|SWr)at{ZDPpy zYtc6{h#Q9<*0Ch`AQKIN!)P6m-Y#~rrC4tvCIpeX|8U%^6A~kmR%6W>t-gJ@;kRa2 zab-T0rgBrtH&3PVuK8KQz&YeJYXl2)veUvw^5vGEhxND_^HTf=Qs-t(&c4RrPGLCk zdQZlAlr9nR2xYGsg*SV*pln!ceaPlj?NI3SY!N-?N2wp<$bQeD^a>LaHbE(1u#^^< zH}f#?@SA8X+J!~*e8)bKi8&#qf#H(%l%#4c)a{htdUbcSrpr?${2;TPD#zNI!q6^+ zbmSkY>#Ne&@XOqb>ULs*6J$KGH}Bs>Rr=$<6D-W7_mS$C<5*=Rv-7kl`H`xK)lqy{ zxx>*SU=_<0vy(IFvRWTOfcM5v)1SALH8Paby&U!J-0KIWyQR69C6htr44R)i!Ofl) zn&KZ6*5dsr_6)w<9{WqiRzSI}m{^R-Uc0r}w%r!clvl4#{ccaA?6prtCRJtJ-B_kf z+`*x<EG$cbY+U_)7v<;CkI+?so^rhWW}fs1&P`~;@A&+=~H z+xEZS$CKrKS8AtW&E(axCKxsczTK(V#My=QDdt>Hs|&BDv8lfo|d+4E27G}Pg_Z( z5JaM^856o_f7pj5OV9=QzV7fsY%rHS`dK*A#revRzf>91j_zg|65fEPf1$oZw*t%l zDGxK`{U(uuauwP5nVBA|hXhYTvR)Z~e`rc@

r1kgb9MZv5+R_#?6SJz^5n?Kg@V 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 B8N&bo literal 0 HcmV?d00001 diff --git a/res/themes/element/img/download/apple.svg b/res/themes/element/img/download/apple.svg new file mode 100644 index 0000000..9de39ed --- /dev/null +++ b/res/themes/element/img/download/apple.svg @@ -0,0 +1,97 @@ + + Download on the App Store. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/themes/element/img/download/fdroid.svg b/res/themes/element/img/download/fdroid.svg new file mode 100644 index 0000000..847196f --- /dev/null +++ b/res/themes/element/img/download/fdroid.svg @@ -0,0 +1,135 @@ + + Get it on F-Droid. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/themes/element/img/download/google.svg b/res/themes/element/img/download/google.svg new file mode 100644 index 0000000..d54aca1 --- /dev/null +++ b/res/themes/element/img/download/google.svg @@ -0,0 +1,70 @@ + + Download on the Google Play Store. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/themes/element/img/logos/element-logo.svg b/res/themes/element/img/logos/element-logo.svg new file mode 100644 index 0000000..b30aafe --- /dev/null +++ b/res/themes/element/img/logos/element-logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/themes/element/img/logos/opengraph.png b/res/themes/element/img/logos/opengraph.png new file mode 100644 index 0000000000000000000000000000000000000000..d1b9d70e081e1a36a5619df37ce09e73c704a32d GIT binary patch literal 11311 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 literal 0 HcmV?d00001 diff --git a/res/vector-icons/1024.png b/res/vector-icons/1024.png new file mode 100644 index 0000000000000000000000000000000000000000..83d6a16b11334fb6b5b0ac0b842bba99ddc53b9f GIT binary patch literal 17323 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 literal 0 HcmV?d00001 diff --git a/res/vector-icons/120.png b/res/vector-icons/120.png new file mode 100644 index 0000000000000000000000000000000000000000..48b8ecf91cb6d87ed3a06dde34a3274eaadbcf14 GIT binary patch literal 1464 zcmZ{k{WsGK9LK+yhcKymYP7qSMJlR=$g|0ikt|_z$=Wm$C1Y-_rtUmTLL04Ql32xv zMdaM(vB)}X6pAry=vk;-{Q-T>`~7~M_c@<)KEHj^{jr{4O{gXS0AMc+I$(`SzpbIR zmUcuN(HcNxS6^2EsL9p(5uv))mCgoux&aS*O=i~0x;RYmSpd+2{I(LnE-?ZCRbMZ( zYhcpw9AVCP!bNw|EWkvnGw*#Hv?lxg_Hepx#@vxc;r-jpl7g?&Xq>;%7=r zH-5%7^H(@^t1gW5oFSGipKoZmcH~d9j9GR1d8lwHrg`V!#EF*VzpI*0204b2CZkwm zW|Nt4V0NI8@6;8%&Y(oqCs!Q!DY|STIY`aH1ZjJhOpJcH zEFxP!RXxx?&#&)3e{K|3Mo_u-{(k-26LwzdCWhOyD|-f!tPEIqj&JpWONh!^a^ylO zb=$)TVMpM-Zzgh&*y>tm8@hPFf}W}$8geSS=EP}eEwas9b>fyV{EH7TK+k*D;_lvo zbN?X`v^@DfK>gZL;L$(iO^z8OUvQEBx-eb*mfJ1w877p5ZM`3sitjkeP9P`ksqipB zi^|UCl~3Ig_J2DofEVpNV*RMe>?4uer!d*H3sJpq=%zr(#+!Q7rFxeu)LLU;K^ELt zn30zL$+-?3BwMXDNrWtr%~rSt;eH*Iai|P!W!}RFEKOBezG0usZh7QWyn!?JBw$f^ z1N(fcmu+!XLtqt5DhIcX#Me6?%NNsmayBwbFhN;9UKVvz0 zQ6%o6K^R3^^m_bEpZ$h9F(EiGTWb^WiwxW~UuIp}(UDg{%PWCSIyp?kh zIfG9Yd?pXFu61XydER>yl)`vlR*Jg)wi4^gW*6yN>r6L6WY8vuemVopUO7=oV`7{V zgQ8Xr)Se4Low0Sd{Ty0p8)!U@W?EL9Gl;e`pYrcJ`YOB#s_tKxC_aSOhUF&uXZBhbIo&_J3dR># z6%BqJmoSE_rCF_G*XtN3GYUUvHbylqmuk8D!n`ELfW(T z3sxeep@nX%uro@5-h|^+MFk`c+ri9AOzJ`?j~XKbJKdx9e*ZaQ_=)Qjd6j&(MB+$RhSwMIU@xLxks$jYZ-#>L z2_UrDx9o(ZyV!$p5;_qw@=|4q=ocWWZ|aHL7aEW^s;K(R!2jvN0f6?$^`iGTcG&mq Q;r?Fo^1z}WxP>$R2Pb8pZU6uP literal 0 HcmV?d00001 diff --git a/res/vector-icons/1240x600.png b/res/vector-icons/1240x600.png new file mode 100644 index 0000000000000000000000000000000000000000..aeaa12de4258f721aff29f70caa21ff14d83ebf7 GIT binary patch literal 10967 zcmeHti96I^)cCYn%2Jj}LcU3*EGbL&s3ehXkg-R$v6OwE5Ya+}vM(Xq7#d^W6Or98 z#yTXsK|?%D6TpHK~TWyYgtjv^2UMwNTFwGfEIBn0B1 zJ{=8!;QCNW;J?FGx72PS5QX8#w#|-!@d0NoWkm$G{p<`F&^z6Gck3@$5q_-q#BYO?Nb&v?&3u&>T^p=oYL-Z9U^n`syycMu?)oC3F2 z(7i#HH37xR$Z}*!x|dsO3nRc_s?L-U9d~jKwtU7i>-Qmv93?gWDmV4F>RfunnKVRX z;KrDTt>T7Teu9r(QI$1q*#LqVGYYb+7l*&(W;|1#i!3CX#ft-fLm+mwhSVNv$DQ;d z@zPIbgnojskEn;;Y#;2)@DY$9iie7KY+oJoI)Jf}Ez!5Ru{Eb6YSEAKQ59?n`)AuAo(Cx$lD4^ghu zT@Mg%I1ZP1DSjYMB8QUzQ;Cp2%-b_Vu~v##_qReM-!KevrbKTIz^NO2thcu~@QjN! zNjIw?fa~~`w8OgOyKsjMz60?DO$a57F^Ln=@E1DOIxDOG^1p$PR+sUqfd3hw&9wjW zeb8!yimAVUWBNVhe*T?G+Kk>88x9zPNa<7FB;A0|Uvme@ON}

-8FdKw!8|3)SBqdq1-jNZ3p^fuLF@x&a1x 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 YJ0xUP_$Qg0upj$W?x^3!Dw+oTKZ~-w3IG5A literal 0 HcmV?d00001 diff --git a/res/vector-icons/150.png b/res/vector-icons/150.png new file mode 100644 index 0000000000000000000000000000000000000000..14d589a02639dde3e192be6089714af96e7ab84d GIT binary patch literal 1826 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 literal 0 HcmV?d00001 diff --git a/res/vector-icons/300.png b/res/vector-icons/300.png new file mode 100644 index 0000000000000000000000000000000000000000..1f1b42f35276816a1c474bf3d92b9b4b1be659cb GIT binary patch literal 3948 zcmbVP_ct4g7fGs=f)WT@vPidyrrNfR*b%00CJ!*8l(x z;C(|q+i>#cEX8*k%m>)fV!%D|jzit>pi53+d&`!^_5m%1``kIzK6M8v&1pK$#2<6R z`#Gw$c=j|{z*tOfNIXh6+QK(RznEi4UF%@ZYv^*){}VmSN0jaJFoFvqZ`M`jI(|e~ zlj7W#GfTj0ogDTi9U&ABFu*#iR_bU$N z9LlZHq>MzqX^iTY{HyYtPvVu0`EloL&b2bvOxwvIO0pKTp+71V)3l|+y|od#@5ur* zZKS^;Pq}Tgbz%0CO!d|4Fq#R!2uy5tal!9eJ`#ZobrqQyrodk7dgmgY2|ILmBHFNs z4|-G)qzq^MD;+>=MgjdP^~v;r7b%w4^3{q~r*A`^;`Y(A;lfrp$djFH3(R`NA+3yR-WrFQ`M{SChAPcXi6$0gqOySf1>a?Qh2jT_))WM#)~_4Mv!o>O;taM#bCJ~ zsW1hJUE-)?^U5cpRqm?l^ygE9Hn+%TG^|6;glo}Vt*N>=I^82b9u2cX9EH_DkOI4j zUsGwpqeFepsC?w>K+btuxrdwuN)0@;&$vk#fk^Paol&4*6m@=} zWMQt5hx@Ia9WlAV-VVV$_M}c}!HVNB$F7oZ_iI`-Wh33rTvy@8i11)oTC}Ja?%%$f zK`QgBNY_5Ro9z-}{mIi7~er_s=uHx58%5@bdH)g_Mey(Vlerw*Vr7`%E z-AbrkX$~Z#mb2sWyy*A0adumv{t10L%)>^*x%}BGqtSOQ6jsz*)~>&>M*IbygXp1k ziF8YMJo*5yzVseFebTRo)2KaAo(5CvpB7JL?xw(st8;v^e;oNKw78m{XnIT3)of3Mm3Ic`~8z^p8!rn?V6f zFj47B>f=wNHk4cAyb3;iOfeO!zb{mJS5N}mPp@OeZcp{zhUo0;fDykAOV*nGdECo} zYp@g2D|1aY+XU_p{^FRR3lUkOqHubwXuJU&LW+hhgtjyqCg_`V6efRlM9N#-4ruR_ zzeDczHgIGlgNWqPch#SDbjkJ=-pF?;>Y4kxIIm$HxRyUao zv;A+oUNyo#pW-^sz?%`{hJ4wmY>aRq3#<}Iw*Jk@Q#D3s0OND;V& z?+fUvMCJDd+v?WPIfw0k7f*-hO*4ND#6@pB))Q90$ew$h>ZF*EoA0ro5)Fw&8KZ}p;vo`nsTv?sO4_+C6 zI%j^#z@i=k;VL8YB~9;wQaYvSh)>f5x4y{!i$a}Tbox%JzZ5clBiLND%I7y5)vkf! zV`eceYs>v<+E~YE%Vgyj9#3C1XU^@+uJO0Hb$egU{M2;f^_eK)ne2f4OD?~#wP~n3 zWmmPC@@#?q>8Q-Ll1ZF_*TkWuT@82e%3AD!uPvWNmzt?%;n`H{3Pd+mN;jiKlc~`fhdOX)2f~vR&__3eH z7E7njqQuUZdzPm**I%a}D0fsqNGZQC1tlIGA}?Kr{Ht$d-1bo8G!VhO=X+e$g?z1; zX2biZwQZom%sXR*6Ll!it91c;*5f zM~t0x!?x=68&wzhHkp_Z2QUnx0c;G39m_4=G$Q2mFsh{r}O81U#)LloJ#^y zw3PYJEWn^pU~?~ZR^0*m`Jl-~(1Al3+o}Nv93YmjN zFY8zy+JlkLY(C(Wj4iPIgCjJEDsoJ|Z{fu;J zxTJD_76PZy6bVXQ67ZM2-LF9bQxh35WID}vvaF{4wYB?)u`ZYI22N|m%bNjvP{VB& z9K1XGXseng(-09!snp@Ix~0mPY%b+s7fGd&DhCayI6bX-O>A-dHkWsm6J>RaUhzD2 z<3z0!J4(4BQ04K zCH&qRH3%>{)92@YiiS8d914VT`HJbB$v$ZJ32nVsGQBD-Jd;ut3J5vUIK$UUTnph? zJsJ2cqHSsD<1oSyedqc4V1OGNaoXZihM$%}meBEb#S|6@tLnAS2(!uTh3;d7KBg!5Ygp6PAz#sQk3JY z?`yRt!tt%4~jIauwr~2_OM)X3yg7=DMZETF`fSx+ZZplfB3`&WH*ZyZ?jFE^Z0+=bqW!>e!5t52~9cEnn+1>?)EMUCmyHb@1D7vUl1l zRdphqjRfu_Qw!DI5-2qfy?PnulY$id#$i;C`R`b`fIO&od#^= z;l`5eFj(;WbL>xcv6Q5@P*WvzMbHgfqXzc$07;=G2 literal 0 HcmV?d00001 diff --git a/res/vector-icons/44.png b/res/vector-icons/44.png new file mode 100644 index 0000000000000000000000000000000000000000..a60d3a02f2974d1fd1701cb3a3ec60594490eaf5 GIT binary patch literal 629 zcmV-*0*d{KP)Px#32;bRa{vGf6951U69E94oEQKA0t!h)K~z}7?O0om zf-n^I)5MmrgK-Hi!KJVh{h1is8r%Wyfccw5sa=9ga0x77rWa&{QjpNrFiCIH_#<#Q z_i@f;HuK@bhYugRz=9>1(;qm&mEJHXsXS4bZo|oeU7X3P0;@UqK+w&k0EZ$DC9u2) zbOC(+y<1KQ^lphVa>Se^=t{-E0Ns88cAOMwXeekb#A#eGD}SLpRNw%z0a|9@tw7Ob zx5iy*&&ZdKZ51@!!#$%imAJb;OCXt^J#?Y#x3XM-Ra4tKEMEw+>YUZe%c|w$94xR2 zH9WM5;J@|j<@}D^s8}299a21Iax`C<9P16dIDf8;!3N^6X^kZ@ek?WbMUrO**+Y0( zVya*bc1^%O0Ou;hrQkfDVQ}+i%>{DK+VCBqgov{=6s0l3+5Th&Fe)6EJ$8pok07JB z@qjb1iT(4{(gf-i9PnCjI^=qp^ zbYg@q`>mC2qUvVd2%2;DG0Hq?#K@8Ajg!}T!Kl1eZ=UY1CQv0NgIrg+>#^6XlW=V4 zRhGKE?GP*K9IV#ccC0Px#32;bRa{vGf6951U69E94oEQKA0&z)1K~!ko?OEMz zgD?=zVAc1w@L|w5i$ZJFao_J(1I~PNesl5PeRIr z1^#^ZefOO+o9WP@Lx+z46!Y)Rv(f+-0Kg1cVum!mJn;KOBQtbgl>&F!bOA#2u)Pw1 zNa*_QK(Z&s3_W&fMOa$6(M~X_716aCe2JU|Ia1pU=w}l+Wx$j(MFO@Hfg#6@J^coK zJoSxDLh4y3dIqw`*#lfzMBaj5Z-jIu;*4nRXaKM*s#43J^wtq78xXzk+F_LmGSG+6 zBye|)@2HnqGHO<==wsbSkr3!SYVH@fY25rITxkZu5)xdxw{dWn*zi!Xu5F%e8I;$t z1$A9~yw9flyweKkc?AC?;Kbp+?u^;v%dz@Ra0!q#X_f~45f8#R(v>6^AOyl4Tp}wQ z=@7M?6Fx4z*DnF7d~+VMC)wO+RioQFzPke};}l%W0akzvV9VKl_&!B#zQ;)5$M{;$ za}uRp29QdMi|$)k6!cg!2PLsW-Z{GnR3$B)nm>f;gTwJ^M3=!yuC$uu@qSgwK(IH_ zXe>`vfbaw|P(B$Rh;evd-gRIRd%4!H$x#-t6ICF$)p5=>Pwe4FnCnsdD<3^|D+_KK zg#ojd^`}hQ#q-Q)^NC37+X&z2*QNx~G*4I{#l17wFvH*hO)x1^r?wd&ZSS?^d8TAh zCb$`?n!dlxY*(VS`Q=@lojiy|?y>C20CaHWx6G8g$Zjc{7#kY;GgK_q!PJ}Fqh~6g zUAiSUaKDte8qM!|Tkg9g*z!>UL54`Jd$VM4|1@+c|96}Y9XfRA;Nu7AalFLS>UT&0 O0000_LK({t5sJ5!?8*`|jAcf) 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 H(JB82{u3kq literal 0 HcmV?d00001 diff --git a/res/vector-icons/76.png b/res/vector-icons/76.png new file mode 100644 index 0000000000000000000000000000000000000000..e44a47fc08aa03b68a9f16c1620ed00c98157f02 GIT binary patch literal 1030 zcmV+h1o``kP)Px#32;bRa{vGf6951U69E94oEQKA1Di=iK~#9!?OW}Q z+CUKH=SkQWC8PvOpae>wgU~_vb3&|Ff)2P2$iGO3jY~)gTf&x*?5v#xg1uk1*ETy( zLU%f$yW=tQX6DT>n;{Sg1OkCTAP@)y0x=;he(b-*x3q|J%Hur!CBA3LE&UniW6p^J--QZgC;AwrYi%o{(A&W-29U)?FlO*F3Atu@bs%VF2sxH zj-<(GgWnNilreYGQWj*2f}TlD%ji0~9(IweoJg8w%I-wUl8s3OLMswndMZ;_^kh1{ zOY-#iqPq3Igvf!^1L1~8Bwnm8trmr7ay8KwUH7XO(Ww2ZB1aV^9Ew0o(%58Eb8*=% zk|O=4A?fiU#9ps$YSJKbCmK;s?E>pyO5jtAs-tUP6=nJe`%79zPm|U%a2}EjoCfF4 zoxc_4{girAAm{PhG*&4{c_hiLs$@n^He~&aGIE++T0$C{kp(1?6X*{#rF}adqxI6t zDA8#XIdw&nXZCnrpOW>J5`Jz_9QfeTHNU1?zc!G3^SJ6w zQ&m$>gf(gxn+*UUtuh@MObhekafk6lqh+oq2YoMJ`iin$+si?_2%{YS=A@#k##&)*NUJI?SCJ&Q=TnR*TP-ss zO0ZwA#q?z6*MZ~y=R07*qoM6N<$g38z0 AmH+?% literal 0 HcmV?d00001 diff --git a/res/vector-icons/88.png b/res/vector-icons/88.png new file mode 100644 index 0000000000000000000000000000000000000000..98e44a9176ea41b4e39a6b322c8306a0a16f5cd5 GIT binary patch literal 1146 zcmV-=1cm#FP)Px#32;bRa{vGf6951U69E94oEQKA1P@6>K~#9!?OfZ9 zqd*Y!rzK;{8SIAO5FEmW;0(?gEI%vD9!}m2)){brCoNz?xDW_|5bmbId$PU2^zfPi zS4sRs(NtGIhRFl~000000000000000`oQ$}?inn!jHT}`=aJ{nBk}k8TAan7d35ld zVDCD?ZVjetVi6LNx8#;wiF^?sv(L8`SYyHo#F|O&?R6G0qM89I0h?L`|G&Hs=yn$o z{7pIz8?afX!DqGxS6+))yn@Xl7ZLBC9qAU@AekfsjFuAZE=f;kpNADm$1D6MFBeLS$T0AazeO zVhgSV+iFp?t6t=2`WB1W`=Re!3klxn$&jMt9)lLkQuWwQHCFGFR(&;GUAI$jW9bZ< zm$|7E9^R><>!NWa-O1)b$jyl)86clpm(b!uM5Jx#x<#_^^OZ}i6H=30bee4P7dH|& zq0uZ)x+a!;Ps6fe43FDHQ|q=qtL|qSc~7OqkbF7T*tx9SRgoL)-TqsinJ2DDbhiUj z3Y7byD-8gQIu6d5#{{`oiH==x6s-$f5~6P|dX-h0*@kzOlei{W741fDo;qEsgf@-M zwg@YnMAC*{8`fU)X1=&L;ia?qwhgKZ7E_;JG8CWr)qAGdUXhbgw ztxVQBC1`GezD+g~8=BtgCY6CgN!OH@MFa`#@^I-z;d_0*sl5#imY@_ z+dMf>k(r$am4xH8Jw;x`)=!+Auk9+-r-49p^Q0$Ey1tbb@v?*A(l^tzA=`@gA4p@n zC%Lo(=0ktWla$-aPdLs7HgE>k5Nh08z|WCX7OtUW4EA_d-+c?G=J8uZu#R7*N-d9Q z-cL6|XmGQrrr#k M07*qoM6N<$f*CIYKmY&$ literal 0 HcmV?d00001 diff --git a/res/vector-icons/apple-touch-icon-114.png b/res/vector-icons/apple-touch-icon-114.png new file mode 100644 index 0000000000000000000000000000000000000000..16b0b289d513ee1edba957ccfd139c6996dbd6fe GIT binary patch literal 1444 zcmaKs`9ISS0LDLr=4@=sRnF#G5($ZXiLi{6V=*#E?jy&D5K>bD#Ccd@ein#1Z)*imXa^SfK{U$lVhjL?L;gqrD0(Od0KzBitu0*=MwduV zNQ@iJX#b=%wXlz6D);MVLZ%NXzcgFBOoL5{i|M!k9p0MH&*e z?CxRjUv>LkOEIppjTG#i=Xu8sxevJ>Y{c;#-PZ%4X}+#xyldfKI2p>_p8xhE;wRUA z>}B)7=jsam-A(3lKkZ{Ly*thK&c*iOH%jM3w%yrD_@QCPu{`!?LZt7KJJ{_$R&lre zEa(OTgfI(Mi z-F3g??~xxGifZ>pQV4ZZ`%C@Hz-s8Op$Lf$ShZicgoV|JxB0|I=Vh)t1i18GJGFsR z@f{YLq9+kvip~x)NHO=6=gdVZf0e(ou!0rhG>U(s(l40J6zj%+VrDaXi*&Z3T7g3r z(`ov1(V&c;x5Vx@aaX2J$Lt34`m|IyypfyrYJMhZXFy4*hz#RAzq*^M{yhRD?WZ}e zQAQcM*>UVSlc4_ie=lUDOtS`(L`6dTy5S(|uWw3y7KT5{;Q~%LAAIndeJ;M&&`M6y z?ornhEGlc(K>R|&tVzAS;$edFQO1&C=Y#1-2XbveCgA5UaYQ*!P)7H_qC9=DbzhQD zkIdFS(ia1$1Pb;H@NnTw6;^S)8?kFST(E=LbpDFXiqTHHSn^_50h9Zob*>m+Zq)^O zwj!%AsUfO1v-n|LrHPpzF8Z-8#SL8D=%%b`(Qi`|KqjTB21J(oPDH~@HbY6YTuK00 zPk1b-7}dRK))=aD+-}PcepuZ!{-_OVs8Pym-sNFle2Jb4zhJfKU_vG!q{8T$%o>#O z^=Q9xxN*ti!IPw0`u&PpTCZR|$hO(Rbng=lnU>+hhMuh%NAoi$_-UPANvdrQ@=o92y#4VHrmW&nv6rCAFf zZ!z4L_tVBNVCE}WZ55-T`Hw5m9!E#3L<%s^FY=Nob}ylF!g73hGAV?9ui3gL=v z-`3J6WxYdwsgbRd@qSfhyu%L5LGdQk>ZMw+TWtW1+TC&x$*B9U=|$lXjG0;O!wP2P zIC&SAhq9T-b5VX(!Kk0OWL9nSC<6AaUO}$r(XvRe2rUEsc7rj>%-(3Go1@nwlRu6< z!0MzZm*BMIs@QoL>M-U2!mB{L2r3juXPd_v$E_~QICIvvluj8{Hl9k-+|y$xBCRD8 zqdTJBIk(8KW4qj_OJyMi6o#Sy}g#R&n^9FZ}{)qpfG;!X`8lwb5mP3$5}Y zb-R$!*zxbs(PV}ACp+x{K2l1t)&CItqwm+5+Vav3CAs?AHN%AI;KgsES$95id?T)tJI*sSULNhQbJvMYCi3`bXnD!csm4Q zmeH!CNE@b8{Jl*utDVn?uPdGR(_8$jF^QVcYIregTiUtEp)Vj|uraHUW$jc>HlQgP`B{hxe2Dx0M0Jg+n;w+P6W~v>cRF=P67iMdDv5-+j+7tt+W7~UXek2X{Ml3P-&kESvI9gMzeA531ygj*> literal 0 HcmV?d00001 diff --git a/res/vector-icons/apple-touch-icon-120.png b/res/vector-icons/apple-touch-icon-120.png new file mode 100644 index 0000000000000000000000000000000000000000..1c91a55ef102b13055662026123b963a603acc12 GIT binary patch literal 1528 zcmVPx#32;bRa{vGf6951U69E94oEQKA1&v8WK~#9!?VUYN zTR{-V_X6C28zd)y6WAw!8{`JuAWb@=6m%dtk~<14r6Lko6qW)KHcEk|NKjb96yQ)0 zDTVWopJEX|v)?;A3-dG;3F7(p=FRu4)ym-q5du+yKtKy<5dkfr1+-8Q&;nXSKnrLA zEffT_fEE$Z0$MT%M&yYAc$w=TanPur_U+X6ZQ z<*Ud0sp$guci+F@KMQD2v7uZiE}-3{dDfnKU3fg4akB&c{>RBQ-~#To-kyLq%hu)L zH28ueT|N3JpmoylH63-;X5}Y2I>Y0;>uID5v7ms~hj)`$tYP#8v`!F0AZ`P3$kWWF zP}U`-;A_2I&~J?f9{Qf0b*Z%u_)HKl$X=ISRDv~k!reG+3+N#2wlpS)`EteA>_ERg z*?}}q+m%@U*6PtVk`x=(2jk%@1-;(egZ2D8b8+?P0y=1KTP@S~jsE^C0u60ls5nQ7 z8EjZ*F(A~S@s5LqYa!IhkJ+%MkMTmzIjP@G0L9En7pf~&b9$FmY#Lj=- zuu^J8pvYhpUb1injWp6|sb3Cgc)UPGo?jl_6Qcp4%wH0Mj#9#(x4`{gCcR5=vinRy z2X>?udavFkeEn_UF_aBDgff)3Gae#;fk5K|-)^I&CTlP%4wRv@NdFR9OntwGtfZ$h z+GV`Ccq*xNN`FhO(V#rgu%wQSYKpNgeYck^$WsyHWy?se|1gH>q>N!X_`_(REvuB2 z5!I6!GhMa%xsV1)04z9+TQi39hy!}vzN@((8dgfEbsE0=UeJI^aZ~>ppABe+ky#hxHBF?H07#9 zX{1VLH~6S?tZE-VZwAnCaYb0?i0^2~@Qpv{rlD9fDUR|i;vOWbsrrLvQhub|ybF0p z{Xy#s2>ciSJT~t_MnO~}PsnozEyQkwc)}pi9)W!|Z`ZjULb$2CF((MTVSmuB)%1EV zk=2HpaiBe0nbaw;f6j9rhrN#x2Yrm~<7|b0C(s&io;}>QX~KmYI)Bibn!v*I*L!p3 zMbub1fl6_I3(sEtbDy)^KsKYzBM?bZY0q`0AF(goH_=j8N}Q?BhD z%ZaL32|(fY@2+w{O zF-6xxQRQ718Am$Td%LcCO3`nL2(-SYnkYZ4X1coW$E>87LQ!OvF{yK}%2n0)dgpc+ za;{3ESs%JRL;aiU{qgE^ay*YvQA{E#?+wdXTVJVN1s!PP@n0T6tIgP-Wh9q6@*&*? zH=0gYORaCG*{_Nc46P|vS?~G7m=ZJ|{3g|r5~QGw8-Bp|l+%~g$4JCId?Tkr8)|N#$sBrjtXi1Px#32;bRa{vGf6951U69E94oEQKA2Lwq(K~#9!?VUkt zTS*Xx`vSg!ZxElrIe~Qo=>#)3@C{}&I}cfSXF~$sX~2f8Vz7f2g0VsJkc9*T$-)q2 zG4^-4C)c45-sr|mYKD!T92649rclBHE}^OGaDP*yuEU8dj@hXThH3RABOuL zmJC2Q8ceIVWdjq~0=x}tB!LwsFT3MDfrZ%K;Q00M6n7kk5La1m-1psRhO1rs6eJ-) zOa(?~S-67-f>OO+hdKx-Ea7A2%+6<10;}V6IJxw#$_Fs>QX+N=#D;)%ZqAzQo&?-e zxt}455||pQCifKKt}G{WEkLzY2VoIds2hzqnaj9V$)9fF74}W`hbIL&Ssq}Jf9l&> zVIJlsKrA?!OYc}-lG>}UrpdPw2FC0;SyEs~TE|acBW*u6tknt|=#X-33ox&a-7HNR zk|>=$DkcJkg*{R)21KTo77(svd848$g%;MBi`f+GAA-_PpWef|Bjs@iVTVs|{Ck^$ zHHn0{eQ+QUO176MsSD@bb8$9l0o9@{H}%NZ;pBtyWh^eR08NO{2f>zcpEGL0XBt?* z#(Wm9S{Y}0jGaPQ1lGAZ^K~p}lTzCEGxotn0k$X{cr0D#v#Fg4Wl15XCTQaqL7cew zHicZmpX%Y=We!X=X_tmYR0AL$2Yjt0_EbawOXtsG>^31JPrzBEEMO(To?v*h$ zZeF0m)3)j>Z}0z1vtjKL3*v@5jmf4cd=*ELz$CesiGKki7KzE_6=%WL;}o~=n%%kRvy?T+^x1H>m`MG`>R(xwKaa483HEMhX*Y>Rn0eb z)5<$tvTqDE+}5!(N%m>0(ji&E+8Pgq@>r`AL;a07pJa%cGvX_AQR)DOzmn2`- zmB%j4s=HPq)<2&1lQ!XAlI}ijHeegKXs@mAaC%L$9nAbfG*mIFT5SCHd0_Js3W52kg;&eE< zv~!@6Ibb_JFKGz#Gcch+3n6z6O*Y5aPB0o5eTut?ihTdt0Za zqwjWs$tQVg);5sqjr;BMIlJ$`)OwjjrPpEa?(bk&BcW3)3-?li{ofGyIFE3ZD=)3T z7P!fJR$ME18-P{J0(7G=S{i(LeeuAeHf0oax?Ewvssgckcr^7=?Y036Zgx*_W*32N zSk<)pYUp8wVJlAD7YuBP4Y_dG+E(I;fW-rQE=fR6{>C!PXXkGPu;)J49rXbZf?_Q{ zq+eNjKncu4TY@575Vk)&DYuZgEx=f+U^D_FFdBi;2#mmJ1V$q;0;3Ta pjlc+uMqo4oqY)T^(FlyTv>$>#)Wuns8}0xA002ovPDHLkV1m}~g!cdd literal 0 HcmV?d00001 diff --git a/res/vector-icons/apple-touch-icon-152.png b/res/vector-icons/apple-touch-icon-152.png new file mode 100644 index 0000000000000000000000000000000000000000..dace2c8bc29f133e98c2407a566b910640e9fddc GIT binary patch literal 2045 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 literal 0 HcmV?d00001 diff --git a/res/vector-icons/apple-touch-icon-57.png b/res/vector-icons/apple-touch-icon-57.png new file mode 100644 index 0000000000000000000000000000000000000000..d2e5a516b80f7a68826fc136068c02f0bda0c618 GIT binary patch literal 803 zcmV+;1Kj+HP)Px#32;bRa{vGf6951U69E94oEQKA0=P*;K~!ko?U_GL z0znkU_X6I)8|X#wB6tIDU}Gn-u*byS4OE!0gib9$EZoFIicN$9jD;o^>lY?&Ci9P( zH?z1Vv)Kyv&yV-M_vU*;vNt&UFJ}^2BWq-htdX_BtOw)E(Q00n<@)<;^07#l`SDX9 zA2yM7^6^%x4*Y;CZk(L9 zMH^z>R6dj(?O8vF5)xX^H`KfGMnMd;&?ZjdH1|=~N_Bz}?%f}D>S8^9>go74>*`y& z$Wi-X(mes+@^?YUwXhpP)0&Hazo>k{htOKWt$YIuugxvy$=Ug(xatL1Y!G0qc{e zwL`kQn{^I+)uVXUN*K*R!N?18h_=BFq^!QnT{gNBgR+76xR@@313!l$mIet)ZuRe?7PTHU{jRSz_`2pEO|qPuW`0* zxXF9x?^#)N&GqhS8v^eWBID*(8p`_y+tWmVbz5Czi&O9ZD`E_9pDuD{&}cnB{=XGj hBWq-htdUiB{s2mE;fk^3Piz1H002ovPDHLkV1gO%cQF6} literal 0 HcmV?d00001 diff --git a/res/vector-icons/apple-touch-icon-60.png b/res/vector-icons/apple-touch-icon-60.png new file mode 100644 index 0000000000000000000000000000000000000000..7c37f2ec313861a5a96ed063af01005b3cb6697b GIT binary patch literal 837 zcmV-L1G@Z)P)Px#32;bRa{vGf6951U69E94oEQKA0@_JLK~!ko?U_Mp z!cY)~bAjH#8`u+g13iJBpuK@N=%%}tF5I=yg*yuht}Ik>A=E-saG_ApMWN|J#f60~ z><@tu=Or&M?@ctNFN9JA!|vZ`UF>UMv^TC~&94hFIo+e*f_%a+gMT$ALzf z^OX=*b7b`KA%X5M7l(#M+$E|lkDDsoc*udEQ6=Oh8CT7Hi2QDU|BKp(oesJ_?Ijj9 zNF}b1;B%Fja6*gm-R~W1ck|itW(bAkA>^=;5*b3r5ko5FG~THE(ll3y5_HXNMdE7M z3A`TBQYO$KgKc2!YNXv1p00xw?|jYt(3wI*cD#KU(hon)4;TK1i@luNNjzpkjP}Os z2mO;q%~n4bC$Wi;5@BwO!+tP;BgNDRnuJojhlv5KzP7>|AR?4IDn~uj1N~)jlP;^T z>B@dh9T-@gw3!o>l+@5fXW{Mze~04Db?_u}Fb?aNJkkXNodusGpG<6VTpvixoD|Uh zvxv~!-pmkM91#)&=qUPxz`GIsC5AGsrBSg^PNKg-{)N38IcY?ekyx=0=u9qTRUpsw zI2}h$5;e8Ohz@i=O-&_*A7v+Q@KLukI?$wh$vv^}-5~wQU4oto(}5;NUXt&`yTx5; z*C3kHxZ;Q!IX#drD<998R|qQc6=M>{J=_W*?yyzXG>{5dkrH}CI0H1oDxM$Oo2YLT zjbhZs>^N&NBv9lYI*aW;=K@l)4DpqK7h``1hOMc5iNojznOD7-o#efP#SilDry&4w z*^trTHtbNNj&*w$K*ZLR)AHoyGkN8qEim%w_L# P00000NkvXXu0mjfNbP!+ literal 0 HcmV?d00001 diff --git a/res/vector-icons/apple-touch-icon-72.png b/res/vector-icons/apple-touch-icon-72.png new file mode 100644 index 0000000000000000000000000000000000000000..b580cc52c01ae929eec8ae14fb0fcde7b17a52b0 GIT binary patch literal 974 zcmV;<12O!GP)Px#32;bRa{vGf6951U69E94oEQKA17k@vQt^S`<$T?Dp|tL3j=) z10g&qu*1o(1?{j{q~O*R&&^Wf75qH9WPs@b!_u&e|Olm zSaR#)%X$}R7_cnfHqSo3L@<;u)M8XBWOMi)7EI(7gvZnC7X$_#z|8*sG1>vBUToW! zt@^=$C?$;5Ni;Zg~&vDPc4fEN~I%L@LCa{cSzX=5Xv9z;=fn zdgX7S!0c4`AoMAy$oN+9(6y2tX_4Nje1($5GBKZ`Ys<1+$`AIGoo7ZX zMSjGSBXoJgO!;i;z@!x(kVqIRp%!MVl^S~r566Ge{X)e!A^wT0v}AitL=>f`EURF0 zU}b`v{(e#&LvsZNARYZbYS(oZ%N(YxJ*Nl`o?(tXuY|2-Hi{J7D)J*@Hq~q3&5k;cCU{+;h&c7-5yTy11~l(qtPq}u*R8oz8!FEmP*KW+F~5yTiB2Z^Ft=Y zTYd|Ki-#Eu!BBQiS!ItSa`0D>lm*klL@}A5<`d24Ro9snU_d~kF7I&rp6pSrldXaq z9#V(vUN<~qv}Fyq2Eb+<^c#(~e%Jbd=TuK}126G=9>7DT(nqe0jcLsnSU~vhXFI?d9g8%>k07*qoM6N<$g7~PwwEzGB literal 0 HcmV?d00001 diff --git a/res/vector-icons/apple-touch-icon-76.png b/res/vector-icons/apple-touch-icon-76.png new file mode 100644 index 0000000000000000000000000000000000000000..e37586cc991effdc8003364c1158ed9278401d20 GIT binary patch literal 1050 zcmV+#1m*jQP)Px#32;bRa{vGf6951U69E94oEQKA1FuO$K~#9!?V3$$ z+dve@=K{S!ZqOUJC$LXYpP;=#ZqQA4DOq%vLJHowkU&;0#374760lOTu%Qqy3|1Gh z>qQD(sDC05sx;s8o@9p+Ll%mW^qc?tnl~d}jXu8kAtGdijF1sBLPp3486hKNgfxxU zm!B^l=c~VevMhUeS|^+I^w(^E`u)w-mzM+i@U+Sl7yfm;xWg>$He~O1kXc*}pfW;s zu8uOh3#!6~cM@{%{2=#6%L|h3oqyUrpM;o*H};&6l*4qJNFm+Z0mj?O@Wanb1l#60 zTga0z4I#b> z9|{}8&-`km`ZGJhi%(}r*pG@3cz$epi$%(96mow$Qbf)*Rqn34dL@xyB2aAfTwW)_ zT@i$YCH3**hbH!5SyM=DU&@O>L!~7&LRMyZY)VURkRb6(46dUdV2fhC-cPZNy&^nm9O%v~+AV?B)0|VaSUGWLKs8e0h_LFaAk1gT^UoSi) z@>xM@mU)_pPulVtNt@A>koBUufYjt}rp#Gf_OodPIsQMamF+}dg^>_S3udRc24Bau<$GVGH-Ul$c^o3@3pJoSmxSTtST|6F3f^=1}1=%w%Ckf8aFBl zTVymFK2lBeo@u!QP0}J0Oe;NOqiJkX5)+5V2KG29A)ht%iI7GNPNx47S zRh-(mN_%Lk+qQ-586k_2pJ(GWQ2^65i&wX$lV(M0QSmQ U7qxxJRsaA107*qoM6N<$f literal 0 HcmV?d00001 diff --git a/res/vector-icons/browserconfig.xml b/res/vector-icons/browserconfig.xml new file mode 100644 index 0000000..0ac4931 --- /dev/null +++ b/res/vector-icons/browserconfig.xml @@ -0,0 +1,12 @@ + + + + + + + + + #da532c + + + diff --git a/res/vector-icons/favicon.ico b/res/vector-icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6ad5fb0865163f8495780972b9587748fee0caa4 GIT binary patch literal 15086 zcmeI3Ym8M_6~_;uroapjU({F=(SU7YHKb~(F)=kJeozywF=_P!R`i3$RzGM=svjhp z)WTp}jkFZCP}^z^wADhj$lRG}2S&U#&V6kQ?IrEshTQBr>0gw-Uiwk#7o?jj+@T3=Fo2~l4fo32>}m4e z66qVI4@$q%n3L#%1x!m;X<)XOnZ+^G=)1J?ne|4-hC(piM21ibsi(`XkY+}S* z8Xqz*pMK2z=7np8R@Hjg5Msx-2dcr3jr^+V?PlZtTg|cF=M=9=XyX%?%rot`t36di zGsFz`b=Ay+Z9lZ_LuPOH!{*Z1Py*`W?RN+OP@5|{o9HF zC;2OH@}{#dXC7=_SPLHjKiG#W!SAs54DF9aoX=0F?H@h!H`CU!!sL$p$ZR_JO~JmX zR@lK`QC`K~*KE69*y3$&hYzs-z}pD)1=c48*+)8R%oD|2<~-yMBh%|w1w`nbl@;Y&T{^x$r@ zr|UtpVc(Y|FT6*2zPxDU-qYM5mhwhZulkvN`&?$1Tb751-SSou~Z+3UBcI5O*Jl}HY z`=Rd3>0v)>wp}Ok&57-dW#Z%Y{x*%v_JM~EZmEn1YOtBwU9E*}5Hrq;-$ffZ z8gg?|<-|O0POglBZ*r;1+uE?Bl2?1E6u+a5 ze2HDeU!MnR*A4q_6+Y8_0b8R+zc@DF02=(0yie|=z8s&pSa=34Y`R+f@PU27!+}%l z3-h}_j`eQVXKA?s9IP{Z8)=lnLDwrfU`>&x z1LV(IDJp*^p#I_+IH{GNmw3MA&|MlAYlYqM3`S}v-=DFqG(YA!>pj*?(MAo)`o!wl z`W(8#{~X;~T~!BC_YI76Mj_~0j`ir|He~&mbzihG7qw&>|CR9IVo+2b$O@T78!|<< zX&88pu1Z^8by`_2Nsgh|9=VzN0-MA(xd$C=HrlXhYD_J^G|rG4$&swlSZA_UCWmsLeHU`;9%TUvBFRPsJWBiF4s=Vb*&rrM8 zUesXJV$gIw8=W~?gGT43Hl#*$F@|~EoLS`_ri{>j{|jVh6I8h`L$Yurc5*6r~; zeE2ph>6v2lk#T-amIdSnLZ6`92P-e~&%)%J)YK@(24mhojOfw!>b9AJ2Wv{N{{SHC?t3E#hKQ&66Z#o{R1vy)yzQix^>q_Mnj^oS=?3~|m7FNZ4#Gz}oM&yi+SPEWj zpS2t@lQjkLvxYHpBiO?;$eZQws?JaG0qR?7bk-THm00iTd1)9!YZxEFy2LvJ=Ip)7 z^J}~I!=8wr)<&||yh1;V4V0Z(xQf!d1TZSk6^AcUOM?zZE60oIfM-Y2mlXt&^+B z(aF`x*~y*nv=&IeMS9^oE%}x!sbPQ8ZR!f$(KlV`RJc+fj*Ru2%?FoFl|Hmb)99~inrB)?)?<+~8tS0e zdjBq%?w0l0*UcZLu2_|u8_GYk9i-Amo|_KdA>T-yEAV@2V5jaQ-q-vtsk>(Ax|jNf zzP9a#LOqtWPm;#3d+zpw*b{T@+HrOKdibIr>0~c z_9|)AosaJPl<;i#PpIuy%bM6f7vf#kW@pYFP}!lssn>XRPveB_U$|z^i%RQrbpFr7 zKhXUK_T22=Zt=_(yLX<-NKu$~)k6;~0$H zvJdF=8h1sO#E%^v4eCem#azzM;mw^H$Ble$Vl z^$La!`@US*??;D8=auAd%MWM9-&?6|!@_?!Q0TZ~PIRp*wVlF5MmiI!4#! z`f)9e z_u@U9>#@aX&SQ^|dEt${U3BdG1a!dZ8nN5zI&(e_^-?c3I!|*4IV5hMkDP;zBXh80 zBj|}7MI&dCyO2qdw{n?H_6&RAJcfDLyC%1iW68DHw)0PDW2e!0OV0N9x+kNR^o$w+ z9*`q6&@bJ7S2#m4;HS|zi{7YNl489_E42o)@7w)kbdEpa)5I0xl(RSFj@@EAHs`0x z8`>G_Pdg9%;78P&E}lTsHEL6QCrhpmWdQAr^|y@=)YyK*&#B3Y9Zpu^{Asoa?ab>B z{EPTO3}el~+JiL+YY}2+MtwU>y8Z~)K&;0yt-tU$;wSb<9)YIyu_^g@Vf_`-ck9p0 zwvZHqGswL|-YHpsh8V8c`djE1*59&!Ft<~75?W+eVY%)!fadbG3Qh|TPOZeXL$C*b>`d?7AH{$yv~|ny2_igzr%NoD|N-*op9O!C5EgUmrF99@;BslxNKL z6Zh!(9%p^zSH3&o9ru28ti3l!&p3&D#6iy2HXrjC=4gTC5$QJp)BRIiLtaG)I%@Z@#C&9#X&dFT8jeh>| z>UZ@_m9tFnLepQPLJxkB2{_P=)$dIGn|nOt9f!@yiMg1QxuL=NEi|Exzk&r!U;`t( zGq=OQ-|)n9c!XDYc6J3lWP)tKK^#P8%7;8-KJFn~WE^J;%z^IF5xSz*126o537v9& z9rNvQiT&^#8sLOiWCCt%iupa+Ft)^gks0{l5!)qaW6M#UJGq8q%lwDu#D2cxM^82f ll-Mmc=lmzue{KAp5!z8n3@`ED7WRq@QOiYz^ebZ+`yXqeLxcbT literal 0 HcmV?d00001 diff --git a/res/vector-icons/mstile-150.png b/res/vector-icons/mstile-150.png new file mode 100644 index 0000000000000000000000000000000000000000..79fe7a1bd19d3409e54bbf809f1813f67f9114c2 GIT binary patch literal 1942 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 literal 0 HcmV?d00001 diff --git a/res/vector-icons/mstile-70.png b/res/vector-icons/mstile-70.png new file mode 100644 index 0000000000000000000000000000000000000000..7470321851c9c97e05dac287ff4caf2b16634d61 GIT binary patch literal 940 zcmV;d15^BoP)Px#32;bRa{vGf6951U69E94oEQKA13^hdK~!ko?V3SK zV?hvx`vP+VZ!n%fPhd`9PT<_Y8@QRB!z|n>IFMZy3a%7%$U@KojkriaFpDhW!er&Z zEHXcN@R)hk-LLv}b;n3GO+Xa$KDz3!`s=m%bpG{&ZKFtvq)3XSNQ$ILiu5j!b_eIr zZ?j_md>x&>40i_?o7YFHiuC32Z0=akZ&UpCbMIiqkWMCpxpx6<@2R&+NXO%cIb#8A zBS9!8LE8G&nX{Mpaix-n?Yk~ip^%5nRGCB^=XN~qd+-FQa@QruoeOOHzWYv*)_Vu7 z+fK39F8AplK*3KYLy9#0^IJsRWsvabsH8|9JQh>a5NVVOsLMyfQGmp+)InOmb=z4Q zk}H1ba)lGlmgd#f>u5Ph?fY&e#@weg3$0*lm)~+DS<}F^+I2d1MdB7|nH9;;gQGj0 z48M(YRq7PT}V)uP~|Yp5=4(kq|&=waEVl@IG z)go1xlfb4y(TH!B*<+c0gI=i~iFya>`4S<~9Og`v4CDVg6BKDyd@DYsY_?x!WlF6J zY2kLJf~KIh5{h*X6{J#gXzmIsJ2jX5O2|>X3#D3%iHAUi3-XU; z8u%9@>vL+y1{MF4V*GCeO#$biT-id$GVP|dJ9gSiV-FAQs<~8AtP3)eY4*UMEqYpY z|LdlhF_Yw&-#SKirNN>toK<2BBv6a^v5XiJg2bv?uK2;D<7|ta;?=s5ve}+10jqkI z!!w8l7_zIC%Q#BD1>}tX%lj(g{wmdr&7hYWi44E|yIQJgu9avklj@B+j;j_-a9*3~ zk^ltSb0r|fd^6v@2ZSOjDNJN}Uj + +/* we deliberately inline style here to avoid flash-of-CSS problems, and to avoid + * voodoo where we have to set display: none by default + */ + +h1::after { + content: "!"; +} + +.mx_Parent { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + text-align: center; + padding: 25px 35px; + color: #2e2f32; +} + +.mx_Logo { + height: 54px; + margin-top: 2px; +} + +.mx_ButtonGroup { + margin-top: 10px; +} + +.mx_ButtonRow { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + justify-content: space-between; + box-sizing: border-box; + margin: 12px 0 0; +} + +.mx_ButtonRow > * { + margin: 0 10px; +} + +.mx_ButtonRow > *:first-child { + margin-left: 0; +} + +.mx_ButtonRow > *:last-child { + margin-right: 0; +} + +.mx_ButtonParent { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + padding: 10px 20px; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + border-radius: 4px; + width: 150px; + background-repeat: no-repeat; + background-position: 10px center; + text-decoration: none; + color: #2e2f32 !important; +} + +.mx_ButtonLabel { + margin-left: 20px; +} + +.mx_Header_title { + font-size: 24px; + font-weight: 600; + margin: 20px 0 0; +} + +.mx_Header_subtitle { + font-size: 12px; + font-weight: normal; + margin: 8px 0 0; +} + +.mx_ButtonSignIn { + background-color: #368BD6; + color: white !important; +} + +.mx_ButtonCreateAccount { + background-color: #0DBD8B; + color: white !important; +} + +.mx_SecondaryButton { + background-color: #FFFFFF; + color: #2E2F32; +} + +.mx_Button_iconSignIn { + background-image: url('welcome/images/icon-sign-in.svg'); +} +.mx_Button_iconCreateAccount { + background-image: url('welcome/images/icon-create-account.svg'); +} +.mx_Button_iconHelp { + background-image: url('welcome/images/icon-help.svg'); +} +.mx_Button_iconRoomDirectory { + background-image: url('welcome/images/icon-room-directory.svg'); +} + +/* +.mx_WelcomePage_loggedIn is applied by EmbeddedPage from the Welcome component +If it is set on the page, we should show the buttons. Otherwise, we have to assume +we don't have an account and should hide them. No account == no guest account either. + */ +.mx_WelcomePage:not(.mx_WelcomePage_loggedIn) .mx_WelcomePage_guestFunctions { + display: none; +} + +.mx_ButtonRow.mx_WelcomePage_guestFunctions { + margin-top: 20px; +} +.mx_ButtonRow.mx_WelcomePage_guestFunctions > div { + margin: 0 auto; +} + +@media only screen and (max-width: 480px) { + .mx_ButtonRow { + flex-direction: column; + } + + .mx_ButtonRow > * { + margin: 0 0 10px 0; + } +} + + + +

+ + + +

_t("Welcome to Element")

+

_t("Decentralised, encrypted chat & collaboration powered by [matrix]")

+ +
diff --git a/res/welcome/images/icon-create-account.svg b/res/welcome/images/icon-create-account.svg new file mode 100644 index 0000000..7bbef7f --- /dev/null +++ b/res/welcome/images/icon-create-account.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/welcome/images/icon-help.svg b/res/welcome/images/icon-help.svg new file mode 100644 index 0000000..dc96f8e --- /dev/null +++ b/res/welcome/images/icon-help.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/res/welcome/images/icon-room-directory.svg b/res/welcome/images/icon-room-directory.svg new file mode 100644 index 0000000..3786ce1 --- /dev/null +++ b/res/welcome/images/icon-room-directory.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/welcome/images/icon-sign-in.svg b/res/welcome/images/icon-sign-in.svg new file mode 100644 index 0000000..9bc2fef --- /dev/null +++ b/res/welcome/images/icon-sign-in.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/welcome/images/logo.svg b/res/welcome/images/logo.svg new file mode 100644 index 0000000..b30aafe --- /dev/null +++ b/res/welcome/images/logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/welcome/images/matrix.svg b/res/welcome/images/matrix.svg new file mode 100644 index 0000000..13adcab --- /dev/null +++ b/res/welcome/images/matrix.svg @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/build-jitsi.js b/scripts/build-jitsi.js new file mode 100644 index 0000000..3f2ba29 --- /dev/null +++ b/scripts/build-jitsi.js @@ -0,0 +1,31 @@ +// This is a JS script so that the directory is created in-process on Windows. +// If the script isn't run in-process, there's a risk of it racing or never running +// due to file associations in Windows. +// Sorry. + +const fs = require("fs"); +const path = require("path"); +const mkdirp = require("mkdirp"); +const fetch = require("node-fetch"); +const ProxyAgent = require("simple-proxy-agent"); + +console.log("Making webapp directory"); +mkdirp.sync("webapp"); + +// curl -s https://jitsi.riot.im/libs/external_api.min.js > ./webapp/jitsi_external_api.min.js +console.log("Downloading Jitsi script"); +const fname = path.join("webapp", "jitsi_external_api.min.js"); + +const options = {}; +if (process.env.HTTPS_PROXY) { + options.agent = new ProxyAgent(process.env.HTTPS_PROXY, {tunnel: true}); +} + +fetch("https://jitsi.riot.im/libs/external_api.min.js", options).then(res => { + const stream = fs.createWriteStream(fname); + return new Promise((resolve, reject) => { + res.body.pipe(stream); + res.body.on('error', err => reject(err)); + res.body.on('finish', () => resolve()); + }); +}).then(() => console.log('Done with Jitsi download')); diff --git a/scripts/check-i18n.pl b/scripts/check-i18n.pl new file mode 120000 index 0000000..7d74c7a --- /dev/null +++ b/scripts/check-i18n.pl @@ -0,0 +1 @@ +../../matrix-react-sdk/scripts/check-i18n.pl \ No newline at end of file diff --git a/scripts/ci_package.sh b/scripts/ci_package.sh new file mode 100755 index 0000000..4c6f280 --- /dev/null +++ b/scripts/ci_package.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Runs package.sh setting the version to git hashes of the element-web, +# react-sdk & js-sdk checkouts, for the case where these dependencies +# are git checkouts. + +set -ex + +rm dist/riot-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist + +# Since the deps are fetched from git, we can rev-parse +REACT_SHA=$(cd node_modules/matrix-react-sdk; git rev-parse --short=12 HEAD) +JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD) + +VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop + +CI_PACKAGE=true DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA scripts/package.sh -d diff --git a/scripts/cleanup.sh b/scripts/cleanup.sh new file mode 100755 index 0000000..3e7923a --- /dev/null +++ b/scripts/cleanup.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# +# script to clean up the deployments made by redeploy.py for vectorwebdev and vectorwebexp +set -e + +# currently live deployment (full path) +live=`dirname $(readlink -f "$HOME/live")` + +# currently live bundle (just the name of the bundle) +live_bundle=`grep 'script src="bundles' live/index.html | sed -e 's#.*bundles/##' -e 's#/.*##'` + +# clean up 'extracted': find things which are older than 7 days, exclude the +# current live one, and remove +find $HOME/extracted -mindepth 1 -maxdepth 1 -type d -ctime +7 \ + \! -path "$live" -exec rm -r {} \; + +# clean up 'bundles': ditto +find $HOME/bundles -mindepth 1 -maxdepth 1 -type d -ctime +7 \ + \! -name "$live_bundle" -exec rm -r {} \; diff --git a/scripts/compare-file.js b/scripts/compare-file.js new file mode 100644 index 0000000..f53275e --- /dev/null +++ b/scripts/compare-file.js @@ -0,0 +1,10 @@ +const fs = require("fs"); + +if (process.argv.length < 4) throw new Error("Missing source and target file arguments"); + +const sourceFile = fs.readFileSync(process.argv[2], 'utf8'); +const targetFile = fs.readFileSync(process.argv[3], 'utf8'); + +if (sourceFile !== targetFile) { + throw new Error("Files do not match"); +} diff --git a/scripts/copy-res.js b/scripts/copy-res.js new file mode 100755 index 0000000..ebe1c62 --- /dev/null +++ b/scripts/copy-res.js @@ -0,0 +1,291 @@ +#!/usr/bin/env node + +const loaderUtils = require("loader-utils"); + +// copies the resources into the webapp directory. +// + +// Languages are listed manually so we can choose when to include +// a translation in the app (because having a translation with only +// 3 strings translated is just frustrating) +// This could readily be automated, but it's nice to explicitly +// control when new languages are available. +const INCLUDE_LANGS = [ + {'value': 'bg', 'label': 'Български'}, + {'value': 'ca', 'label': 'Català'}, + {'value': 'cs', 'label': 'čeština'}, + {'value': 'da', 'label': 'Dansk'}, + {'value': 'de_DE', 'label': 'Deutsch'}, + {'value': 'el', 'label': 'Ελληνικά'}, + {'value': 'en_EN', 'label': 'English'}, + {'value': 'en_US', 'label': 'English (US)'}, + {'value': 'eo', 'label': 'Esperanto'}, + {'value': 'es', 'label': 'Español'}, + {'value': 'et', 'label': 'Eesti'}, + {'value': 'eu', 'label': 'Euskara'}, + {'value': 'fi', 'label': 'Suomi'}, + {'value': 'fr', 'label': 'Français'}, + {'value': 'gl', 'label': 'Galego'}, + {'value': 'hi', 'label': 'हिन्दी'}, + {'value': 'hu', 'label': 'Magyar'}, + {'value': 'is', 'label': 'íslenska'}, + {'value': 'it', 'label': 'Italiano'}, + {'value': 'ja', 'label': '日本語'}, + {'value': 'jbo', 'label': 'banjubu\'o'}, + {'value': 'kab', 'label': 'Taqbaylit'}, + {'value': 'ko', 'label': '한국어'}, + {'value': 'lt', 'label': 'Lietuvių'}, + {'value': 'lv', 'label': 'Latviešu'}, + {'value': 'nb_NO', 'label': 'Norwegian Bokmål'}, + {'value': 'nl', 'label': 'Nederlands'}, + {'value': 'nn', 'label': 'Norsk Nynorsk'}, + {'value': 'pl', 'label': 'Polski'}, + {'value': 'pt', 'label': 'Português'}, + {'value': 'pt_BR', 'label': 'Português do Brasil'}, + {'value': 'ru', 'label': 'Русский'}, + {'value': 'sk', 'label': 'Slovenčina'}, + {'value': 'sq', 'label': 'Shqip'}, + {'value': 'sr', 'label': 'српски'}, + {'value': 'sv', 'label': 'Svenska'}, + {'value': 'te', 'label': 'తెలుగు'}, + {'value': 'th', 'label': 'ไทย'}, + {'value': 'tr', 'label': 'Türkçe'}, + {'value': 'uk', 'label': 'українська мова'}, + {'value': 'vls', 'label': 'West-Vlaams'}, + {'value': 'zh_Hans', 'label': '简体中文'}, // simplified chinese + {'value': 'zh_Hant', 'label': '繁體中文'}, // traditional chinese +]; + +// cpx includes globbed parts of the filename in the destination, but excludes +// common parents. Hence, "res/{a,b}/**": the output will be "dest/a/..." and +// "dest/b/...". +const COPY_LIST = [ + ["res/manifest.json", "webapp"], + ["res/sw.js", "webapp"], + ["res/welcome.html", "webapp"], + ["res/welcome/**", "webapp/welcome"], + ["res/themes/**", "webapp/themes"], + ["res/vector-icons/**", "webapp/vector-icons"], + ["res/decoder-ring/**", "webapp/decoder-ring"], + ["node_modules/matrix-react-sdk/res/media/**", "webapp/media"], + ["node_modules/olm/olm_legacy.js", "webapp", { directwatch: 1 }], + ["./config.json", "webapp", { directwatch: 1 }], + ["contribute.json", "webapp"], +]; + +const parseArgs = require('minimist'); +const Cpx = require('cpx'); +const chokidar = require('chokidar'); +const fs = require('fs'); +const rimraf = require('rimraf'); + +const argv = parseArgs( + process.argv.slice(2), {} +); + +const watch = argv.w; +const verbose = argv.v; + +function errCheck(err) { + if (err) { + console.error(err.message); + process.exit(1); + } +} + +// Check if webapp exists +if (!fs.existsSync('webapp')) { + fs.mkdirSync('webapp'); +} +// Check if i18n exists +if (!fs.existsSync('webapp/i18n/')) { + fs.mkdirSync('webapp/i18n/'); +} + +function next(i, err) { + errCheck(err); + + if (i >= COPY_LIST.length) { + return; + } + + const ent = COPY_LIST[i]; + const source = ent[0]; + const dest = ent[1]; + const opts = ent[2] || {}; + let cpx = undefined; + + if (!opts.lang) { + cpx = new Cpx.Cpx(source, dest); + } + + if (verbose && cpx) { + cpx.on("copy", (event) => { + console.log(`Copied: ${event.srcPath} --> ${event.dstPath}`); + }); + cpx.on("remove", (event) => { + console.log(`Removed: ${event.path}`); + }); + } + + const cb = (err) => { next(i + 1, err) }; + + if (watch) { + if (opts.directwatch) { + // cpx -w creates a watcher for the parent of any files specified, + // which in the case of config.json is '.', which inevitably takes + // ages to crawl. So we create our own watcher on the files + // instead. + const copy = () => { cpx.copy(errCheck) }; + chokidar.watch(source) + .on('add', copy) + .on('change', copy) + .on('ready', cb) + .on('error', errCheck); + } else { + cpx.on('watch-ready', cb); + cpx.on("watch-error", cb); + cpx.watch(); + } + } else { + cpx.copy(cb); + } +} + +function genLangFile(lang, dest) { + const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + lang + '.json'; + const riotWebFile = 'src/i18n/strings/' + lang + '.json'; + + let translations = {}; + [reactSdkFile, riotWebFile].forEach(function(f) { + if (fs.existsSync(f)) { + try { + Object.assign( + translations, + JSON.parse(fs.readFileSync(f).toString()) + ); + } catch (e) { + console.error("Failed: " + f, e); + throw e; + } + } + }); + + translations = weblateToCounterpart(translations); + + const json = JSON.stringify(translations, null, 4); + const jsonBuffer = Buffer.from(json); + const digest = loaderUtils.getHashDigest(jsonBuffer, null, null, 7); + const filename = `${lang}.${digest}.json`; + + fs.writeFileSync(dest + filename, json); + if (verbose) { + console.log("Generated language file: " + filename); + } + + return filename; +} + +function genLangList(langFileMap) { + const languages = {}; + INCLUDE_LANGS.forEach(function(lang) { + const normalizedLanguage = lang.value.toLowerCase().replace("_", "-"); + const languageParts = normalizedLanguage.split('-'); + if (languageParts.length == 2 && languageParts[0] == languageParts[1]) { + languages[languageParts[0]] = {'fileName': langFileMap[lang.value], 'label': lang.label}; + } else { + languages[normalizedLanguage] = {'fileName': langFileMap[lang.value], 'label': lang.label}; + } + }); + fs.writeFile('webapp/i18n/languages.json', JSON.stringify(languages, null, 4), function(err) { + if (err) { + console.error("Copy Error occured: " + err); + throw new Error("Failed to generate languages.json"); + } + }); + if (verbose) { + console.log("Generated languages.json"); + } +} + +/** + * Convert translation key from weblate format + * (which only supports a single level) to counterpart + * which requires object values for 'count' translations. + * + * eg. + * "there are %(count)s badgers|one": "a badger", + * "there are %(count)s badgers|other": "%(count)s badgers" + * becomes + * "there are %(count)s badgers": { + * "one": "a badger", + * "other": "%(count)s badgers" + * } + */ +function weblateToCounterpart(inTrs) { + const outTrs = {}; + + for (const key of Object.keys(inTrs)) { + const keyParts = key.split('|', 2); + if (keyParts.length === 2) { + let obj = outTrs[keyParts[0]]; + if (obj === undefined) { + obj = {}; + outTrs[keyParts[0]] = obj; + } + obj[keyParts[1]] = inTrs[key]; + } else { + outTrs[key] = inTrs[key]; + } + } + + return outTrs; +} + +/** +watch the input files for a given language, +regenerate the file, adding its content-hashed filename to langFileMap +and regenerating languages.json with the new filename +*/ +function watchLanguage(lang, dest, langFileMap) { + const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + lang + '.json'; + const riotWebFile = 'src/i18n/strings/' + lang + '.json'; + + // XXX: Use a debounce because for some reason if we read the language + // file immediately after the FS event is received, the file contents + // appears empty. Possibly https://github.com/nodejs/node/issues/6112 + let makeLangDebouncer; + const makeLang = () => { + if (makeLangDebouncer) { + clearTimeout(makeLangDebouncer); + } + makeLangDebouncer = setTimeout(() => { + const filename = genLangFile(lang, dest); + langFileMap[lang]=filename; + genLangList(langFileMap); + }, 500); + }; + + [reactSdkFile, riotWebFile].forEach(function(f) { + chokidar.watch(f) + .on('add', makeLang) + .on('change', makeLang) + .on('error', errCheck); + }); +} + +// language resources +const I18N_DEST = "webapp/i18n/"; +const I18N_FILENAME_MAP = INCLUDE_LANGS.reduce((m, l) => { + const filename = genLangFile(l.value, I18N_DEST); + m[l.value] = filename; + return m; +}, {}); +genLangList(I18N_FILENAME_MAP); + +if (watch) { + INCLUDE_LANGS.forEach(l => watchLanguage(l.value, I18N_DEST, I18N_FILENAME_MAP)); +} + +// non-language resources +next(0); diff --git a/scripts/deploy.py b/scripts/deploy.py new file mode 100755 index 0000000..33aa0af --- /dev/null +++ b/scripts/deploy.py @@ -0,0 +1,191 @@ +#!/usr/bin/env python +# +# download and unpack a riot-web tarball. +# +# Allows `bundles` to be extracted to a common directory, and a link to +# config.json to be added. + +from __future__ import print_function + +import argparse +import os +import os.path +import subprocess +import sys +import tarfile +import shutil +import glob + +try: + # python3 + from urllib.request import urlretrieve +except ImportError: + # python2 + from urllib import urlretrieve + +class DeployException(Exception): + pass + +def create_relative_symlink(linkname, target): + relpath = os.path.relpath(target, os.path.dirname(linkname)) + print ("Symlink %s -> %s" % (linkname, relpath)) + os.symlink(relpath, linkname) + + +def move_bundles(source, dest): + """Move the contents of the 'bundles' directory to a common dir + + We check that we will not be overwriting anything before we proceed. + + Args: + source (str): path to 'bundles' within the extracted tarball + dest (str): target common directory + """ + + if not os.path.isdir(dest): + os.mkdir(dest) + + # build a map from source to destination, checking for non-existence as we go. + renames = {} + for f in os.listdir(source): + dst = os.path.join(dest, f) + if os.path.exists(dst): + print ( + "Skipping bundle. The bundle includes '%s' which we have previously deployed." + % f + ) + else: + renames[os.path.join(source, f)] = dst + + for (src, dst) in renames.iteritems(): + print ("Move %s -> %s" % (src, dst)) + os.rename(src, dst) + +class Deployer: + def __init__(self): + self.packages_path = "." + self.bundles_path = None + self.should_clean = False + # filename -> symlink path e.g 'config.localhost.json' => '../localhost/config.json' + self.symlink_paths = {} + self.verify_signature = True + + def deploy(self, tarball, extract_path): + """Download a tarball if necessary, and unpack it + + Returns: + (str) the path to the unpacked deployment + """ + print("Deploying %s to %s" % (tarball, extract_path)) + + name_str = os.path.basename(tarball).replace(".tar.gz", "") + extracted_dir = os.path.join(extract_path, name_str) + if os.path.exists(extracted_dir): + raise DeployException('Cannot unpack %s: %s already exists' % ( + tarball, extracted_dir)) + + downloaded = False + if tarball.startswith("http://") or tarball.startswith("https://"): + tarball = self.download_and_verify(tarball) + print("Downloaded file: %s" % tarball) + downloaded = True + + try: + with tarfile.open(tarball) as tar: + tar.extractall(extract_path) + finally: + if self.should_clean and downloaded: + os.remove(tarball) + + print ("Extracted into: %s" % extracted_dir) + + if self.symlink_paths: + for link_path, file_path in self.symlink_paths.iteritems(): + create_relative_symlink( + target=file_path, + linkname=os.path.join(extracted_dir, link_path) + ) + + if self.bundles_path: + extracted_bundles = os.path.join(extracted_dir, 'bundles') + move_bundles(source=extracted_bundles, dest=self.bundles_path) + + # replace the extracted_bundles dir (which may not be empty if some + # bundles were skipped) with a symlink to the common dir. + shutil.rmtree(extracted_bundles) + create_relative_symlink( + target=self.bundles_path, + linkname=extracted_bundles, + ) + return extracted_dir + + def download_and_verify(self, url): + tarball = self.download_file(url) + + if self.verify_signature: + sigfile = self.download_file(url + ".asc") + subprocess.check_call(["gpg", "--verify", sigfile, tarball]) + + return tarball + + def download_file(self, url): + if not os.path.isdir(self.packages_path): + os.mkdir(self.packages_path) + local_filename = os.path.join(self.packages_path, + url.split('/')[-1]) + sys.stdout.write("Downloading %s -> %s..." % (url, local_filename)) + sys.stdout.flush() + urlretrieve(url, local_filename) + print ("Done") + return local_filename + +if __name__ == "__main__": + parser = argparse.ArgumentParser("Deploy a Riot build on a web server.") + parser.add_argument( + "-p", "--packages-dir", default="./packages", help=( + "The directory to download the tarball into. (Default: '%(default)s')" + ) + ) + parser.add_argument( + "-e", "--extract-path", default="./deploys", help=( + "The location to extract .tar.gz files to. (Default: '%(default)s')" + ) + ) + parser.add_argument( + "-b", "--bundles-dir", nargs='?', default="./bundles", help=( + "A directory to move the contents of the 'bundles' directory to. A \ + symlink to the bundles directory will also be written inside the \ + extracted tarball. Example: './bundles'. \ + (Default: '%(default)s')" + ) + ) + parser.add_argument( + "-c", "--clean", action="store_true", default=False, help=( + "Remove .tar.gz files after they have been downloaded and extracted. \ + (Default: %(default)s)" + ) + ) + parser.add_argument( + "--include", nargs='*', default=['./config*.json'], help=( + "Symlink these files into the root of the deployed tarball. \ + Useful for config files and home pages. Supports glob syntax. \ + (Default: '%(default)s')" + ) + ) + parser.add_argument( + "tarball", help=( + "filename of tarball, or URL to download." + ), + ) + + args = parser.parse_args() + + deployer = Deployer() + deployer.packages_path = args.packages_dir + deployer.bundles_path = args.bundles_dir + deployer.should_clean = args.clean + + for include in args.include: + deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) }) + + deployer.deploy(args.tarball, args.extract_path) diff --git a/scripts/docker-link-repos.sh b/scripts/docker-link-repos.sh new file mode 100644 index 0000000..cf824d8 --- /dev/null +++ b/scripts/docker-link-repos.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +set -ex + +# Automatically link to develop if we're building develop, but only if the caller +# hasn't asked us to build something else +BRANCH=$(git rev-parse --abbrev-ref HEAD) +if [ $USE_CUSTOM_SDKS == false ] && [ $BRANCH == 'develop' ] +then + echo "using develop dependencies for react-sdk and js-sdk" + USE_CUSTOM_SDKS=true + JS_SDK_BRANCH='develop' + REACT_SDK_BRANCH='develop' +fi + +if [ $USE_CUSTOM_SDKS == false ] +then + echo "skipping react-sdk and js-sdk installs: USE_CUSTOM_SDKS is false" + exit 0 +fi + +echo "Linking js-sdk" +git clone --depth 1 --branch $JS_SDK_BRANCH $JS_SDK_REPO js-sdk +cd js-sdk +yarn link +yarn --network-timeout=100000 install +cd ../ + +echo "Linking react-sdk" +git clone --depth 1 --branch $REACT_SDK_BRANCH $REACT_SDK_REPO react-sdk +cd react-sdk +yarn link +yarn link matrix-js-sdk +yarn --network-timeout=100000 install +cd ../ + +echo "Setting up element-web with react-sdk and js-sdk packages" +yarn link matrix-js-sdk +yarn link matrix-react-sdk diff --git a/scripts/docker-write-version.sh b/scripts/docker-write-version.sh new file mode 100644 index 0000000..87014b4 --- /dev/null +++ b/scripts/docker-write-version.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +set -ex + +TAG=$(git describe --tags) +BRANCH=$(git rev-parse --abbrev-ref HEAD) +DIST_VERSION=$TAG + +# If the branch comes out as HEAD then we're probably checked out to a tag, so if the thing is *not* +# coming out as HEAD then we're on a branch. When we're on a branch, we want to resolve ourselves to +# a few SHAs rather than a version. +# Docker Hub doesn't always check out the tag and sometimes checks out the branch, so we should look +# for an appropriately tagged branch as well (heads/v1.2.3). +if [[ $BRANCH != HEAD && ! $BRANCH =~ heads/v.+ ]] +then + REACT_SHA=$(cd node_modules/matrix-react-sdk; git rev-parse --short=12 HEAD) + JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD) + VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop + DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA +fi + +echo $DIST_VERSION > /src/webapp/version diff --git a/scripts/fetch-develop.deps.sh b/scripts/fetch-develop.deps.sh new file mode 100755 index 0000000..c4001f7 --- /dev/null +++ b/scripts/fetch-develop.deps.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +# Fetches the js-sdk and matrix-react-sdk dependencies for development +# or testing purposes +# If there exists a branch of that dependency with the same name as +# the branch the current checkout is on, use that branch. Otherwise, +# use develop. + +set -ex + +GIT_CLONE_ARGS=("$@") +[ -z "$defbranch" ] && defbranch="develop" + +# clone a specific branch of a github repo +function clone() { + org=$1 + repo=$2 + branch=$3 + + # Chop 'origin' off the start as jenkins ends up using + # branches on the origin, but this doesn't work if we + # specify the branch when cloning. + branch=${branch#origin/} + + if [ -n "$branch" ] + then + echo "Trying to use $org/$repo#$branch" + git clone git://github.com/$org/$repo.git $repo --branch $branch \ + "${GIT_CLONE_ARGS[@]}" + return $? + fi + return 1 +} + +function dodep() { + deforg=$1 + defrepo=$2 + rm -rf $defrepo + + # Try the PR author's branch in case it exists on the deps as well. + # Try the target branch of the push or PR. + # Use the default branch as the last resort. + if [[ "$BUILDKITE" == true ]]; then + # If BUILDKITE_BRANCH is set, it will contain either: + # * "branch" when the author's branch and target branch are in the same repo + # * "author:branch" when the author's branch is in their fork + # We can split on `:` into an array to check. + BUILDKITE_BRANCH_ARRAY=(${BUILDKITE_BRANCH//:/ }) + if [[ "${#BUILDKITE_BRANCH_ARRAY[@]}" == "2" ]]; then + prAuthor=${BUILDKITE_BRANCH_ARRAY[0]} + prBranch=${BUILDKITE_BRANCH_ARRAY[1]} + else + prAuthor=$deforg + prBranch=$BUILDKITE_BRANCH + fi + clone $prAuthor $defrepo $prBranch || + clone $deforg $defrepo $BUILDKITE_PULL_REQUEST_BASE_BRANCH || + clone $deforg $defrepo $defbranch || + return $? + else + clone $deforg $defrepo $ghprbSourceBranch || + clone $deforg $defrepo $GIT_BRANCH || + clone $deforg $defrepo `git rev-parse --abbrev-ref HEAD` || + clone $deforg $defrepo $defbranch || + return $? + fi + + echo "$defrepo set to branch "`git -C "$defrepo" rev-parse --abbrev-ref HEAD` +} + +############################## + +echo 'Setting up matrix-js-sdk' + +dodep matrix-org matrix-js-sdk + +pushd matrix-js-sdk +yarn link +yarn install +yarn build +popd + +yarn link matrix-js-sdk + +############################## + +echo 'Setting up matrix-react-sdk' + +dodep matrix-org matrix-react-sdk + +pushd matrix-react-sdk +yarn link +yarn link matrix-js-sdk +yarn install +yarn build +popd + +yarn link matrix-react-sdk + +############################## + +# Link the reskindex binary in place: if we used `yarn link`, +# Yarn would do this for us, but we don't because we'd have +# to define the Yarn binary prefix somewhere so it could put the +# intermediate symlinks there. Instead, we do it ourselves. +mkdir -p node_modules/.bin +ln -sfv ../matrix-react-sdk/scripts/reskindex.js node_modules/.bin/reskindex diff --git a/scripts/genflags.sh b/scripts/genflags.sh new file mode 100755 index 0000000..d960c6d --- /dev/null +++ b/scripts/genflags.sh @@ -0,0 +1,70 @@ +# Copyright 2017 Vector Creations Ltd +# +# 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. + +# genflags.sh - Generates pngs for use with CountryDropdown.js +# +# Dependencies: +# - imagemagick --with-rsvg (because default imagemagick SVG +# renderer does not produce accurate results) +# +# on macOS, this is most easily done with: +# brew install imagemagick --with-librsvg +# +# This will clone the googlei18n flag repo before converting +# all phonenumber.js-supported country flags (as SVGs) into +# PNGs that can be used by CountryDropdown.js. + +# Allow CTRL+C to terminate the script +trap "echo Exited!; exit;" SIGINT SIGTERM + +# git clone the google repo to get flag SVGs +git clone git@github.com:googlei18n/region-flags +for f in region-flags/svg/*.svg; do + # Skip state flags + if [[ $f =~ [A-Z]{2}-[A-Z]{2,3}.svg ]] ; then + echo "Skipping state flag "$f + continue + fi + + # Skip countries not included in phonenumber.js + if [[ $f =~ (AC|CP|DG|EA|EU|IC|TA|UM|UN|XK).svg ]] ; then + echo "Skipping non-phonenumber supported flag "$f + continue + fi + + # Run imagemagick convert + # -background none : transparent background + # -resize 50x30 : resize the flag to have a height of 15px (2x) + # By default, aspect ratio is respected so the width will + # be correct and not necessarily 25px. + # -filter Lanczos : use sharper resampling to avoid muddiness + # -gravity Center : keep the image central when adding an -extent + # -border 1 : add a 1px border around the flag + # -bordercolor : set the border colour + # -extent 54x54 : surround the image with padding so that it + # has the dimensions 27x27px (2x). + convert $f -background none -filter Lanczos -resize 50x30 \ + -gravity Center -border 1 -bordercolor \#e0e0e0 \ + -extent 54x54 $f.png + + # $f.png will be region-flags/svg/XX.svg.png at this point + + # Extract filename from path $f + newname=${f##*/} + # Replace .svg with .png + newname=${newname%.svg}.png + # Move the file to flags directory + mv $f.png ../res/flags/$newname + echo "Generated res/flags/"$newname +done diff --git a/scripts/issues-burndown.pl b/scripts/issues-burndown.pl new file mode 100755 index 0000000..f7cc413 --- /dev/null +++ b/scripts/issues-burndown.pl @@ -0,0 +1,136 @@ +#!/usr/bin/env perl + +use warnings; +use strict; + +use Net::GitHub; +use Time::Moment; +use Term::ReadPassword; + +# This version of the script emits the cumulative number of bugs, split into open & closed +# suitable for drawing the 'top' and 'bottom' of a burndown graph. +# +# N.B. this doesn't take into account issues changing priority over time, but only their most recent priority. +# +# If you want instead the number of open issues on a given day, then look at issues-no-state.pl + +my $gh = Net::GitHub->new( + login => 'ara4n', pass => read_password("github password: "), +); + +$gh->set_default_user_repo('vector-im', 'element-web'); + +#my @issues = $gh->issue->repos_issues({ state => 'all', milestone => 3 }); +my @issues = $gh->issue->repos_issues({ state => 'all' }); +while ($gh->issue->has_next_page) { + push @issues, $gh->issue->next_page; +} + +# we want: +# day by day: +# split by { open, closed } +# split by { bug, feature, neither } +# each split by { p1, p2, p3, p4, p5, unprioritised } <- priority +# each split by { minor, major, critical, cosmetic, network, no-severity } <- severity +# then split (with overlap between the groups) as { total, tag1, tag2, ... }? + +# ...and then all over again split by milestone. + +my $days = {}; +my $schema = {}; +my $now = Time::Moment->now; + +foreach my $issue (@issues) { + next if ($issue->{pull_request}); + + # use Data::Dumper; + # print STDERR Dumper($issue); + + my @label_list = map { $_->{name} } @{$issue->{labels}}; + my $labels = {}; + $labels->{$_} = 1 foreach (@label_list); + $labels->{bug}++ if ($labels->{cosmetic} && !$labels->{bug} && !$labels->{feature}); + + my $extract_labels = sub { + my $label = undef; + foreach (@_) { + $label ||= $_ if (delete $labels->{$_}); + } + return $label; + }; + + my $state = $issue->{state}; + my $type = &$extract_labels(qw(bug feature)) || "neither"; + my $priority = &$extract_labels(qw(p1 p2 p3 p4 p5)) || "unprioritised"; + my $severity = &$extract_labels(qw(minor major critical cosmetic network)) || "no-severity"; + + my $start = Time::Moment->from_string($issue->{created_at}); + + do { + my $ymd = $start->strftime('%F'); + + $days->{ $ymd }->{ 'created' }->{ $type }->{ $priority }->{ $severity }->{ total }++; + $schema->{ 'created' }->{ $type }->{ $priority }->{ $severity }->{ total }++; + foreach (keys %$labels) { + $days->{ $ymd }->{ 'created' }->{ $type }->{ $priority }->{ $severity }->{ $_ }++; + $schema->{ 'created' }->{ $type }->{ $priority }->{ $severity }->{ $_ }++; + } + + $start = $start->plus_days(1); + # print STDERR "^"; + } while ($start->compare($now) < 0); + + if ($state eq 'closed') { + my $end = Time::Moment->from_string($issue->{closed_at}); + do { + my $ymd = $end->strftime('%F'); + + $days->{ $ymd }->{ 'resolved' }->{ $type }->{ $priority }->{ $severity }->{ total }++; + $schema->{ 'resolved' }->{ $type }->{ $priority }->{ $severity }->{ total }++; + foreach (keys %$labels) { + $days->{ $ymd }->{ 'resolved' }->{ $type }->{ $priority }->{ $severity }->{ $_ }++; + $schema->{ 'resolved' }->{ $type }->{ $priority }->{ $severity }->{ $_ }++; + } + + $end = $end->plus_days(1); + } while ($end->compare($now) < 0); + # print STDERR "v"; + } + + # print STDERR "\n"; +} + +print "day,"; +foreach my $state (sort keys %{$schema}) { + foreach my $type (grep { /^(bug|feature)$/ } sort keys %{$schema->{$state}}) { + foreach my $priority (grep { /^(p1|p2)$/ } sort keys %{$schema->{$state}->{$type}}) { + foreach my $severity (sort keys %{$schema->{$state}->{$type}->{$priority}}) { + # foreach my $tag (sort keys %{$schema->{$state}->{$type}->{$priority}->{$severity}}) { + # print "\"$type\n$priority\n$severity\n$tag\","; + # } + print "\"$state\n$type\n$priority\n$severity\","; + } + } + } +} +print "\n"; + +foreach my $day (sort keys %$days) { + print "$day,"; + foreach my $state (sort keys %{$schema}) { + foreach my $type (grep { /^(bug|feature)$/ } sort keys %{$schema->{$state}}) { + foreach my $priority (grep { /^(p1|p2)$/ } sort keys %{$schema->{$state}->{$type}}) { + foreach my $severity (sort keys %{$schema->{$state}->{$type}->{$priority}}) { + # foreach my $tag (sort keys %{$schema->{$state}->{$type}->{$priority}->{$severity}}) { + # print $days->{$day}->{$state}->{$type}->{$priority}->{$severity}->{$tag} || 0; + # print ","; + # } + print $days->{$day}->{$state}->{$type}->{$priority}->{$severity}->{total} || 0; + print ","; + } + } + } + } + print "\n"; +} + diff --git a/scripts/issues-no-state.pl b/scripts/issues-no-state.pl new file mode 100755 index 0000000..748809c --- /dev/null +++ b/scripts/issues-no-state.pl @@ -0,0 +1,112 @@ +#!/usr/bin/env perl + +use warnings; +use strict; + +use Net::GitHub; +use DateTime; +use DateTime::Format::ISO8601; +use Term::ReadPassword; + +# This version of the script emits the total number of bugs open on a given day, +# split by various tags. +# +# If you want instead the cumulative number of open & closed issues on a given day, +# then look at issues-burndown.pl + +my $gh = Net::GitHub->new( + login => 'ara4n', pass => read_password("github password: "), +); + +$gh->set_default_user_repo('vector-im', 'riot-web'); + +#my @issues = $gh->issue->repos_issues({ state => 'all', milestone => 3 }); +my @issues = $gh->issue->repos_issues({ state => 'all' }); +while ($gh->issue->has_next_page) { + push @issues, $gh->issue->next_page; +} + +# we want: +# day by day: +# split by { open, closed } +# split by { bug, feature, neither } +# each split by { p1, p2, p3, p4, p5, unprioritised } <- priority +# each split by { minor, major, critical, cosmetic, network, no-severity } <- severity +# then split (with overlap between the groups) as { total, tag1, tag2, ... }? + +# ...and then all over again split by milestone. + +my $days = {}; +my $schema = {}; +my $now = DateTime->now(); + +foreach my $issue (@issues) { + next if ($issue->{pull_request}); + + use Data::Dumper; + print STDERR Dumper($issue); + + my @label_list = map { $_->{name} } @{$issue->{labels}}; + my $labels = {}; + $labels->{$_} = 1 foreach (@label_list); + $labels->{bug}++ if ($labels->{cosmetic} && !$labels->{bug} && !$labels->{feature}); + + my $extract_labels = sub { + my $label = undef; + foreach (@_) { + $label ||= $_ if (delete $labels->{$_}); + } + return $label; + }; + + my $type = &$extract_labels(qw(bug feature)) || "neither"; + my $priority = &$extract_labels(qw(p1 p2 p3 p4 p5)) || "unprioritised"; + my $severity = &$extract_labels(qw(minor major critical cosmetic network)) || "no-severity"; + + my $start = DateTime::Format::ISO8601->parse_datetime($issue->{created_at}); + my $end = $issue->{closed_at} ? DateTime::Format::ISO8601->parse_datetime($issue->{closed_at}) : $now; + + do { + my $ymd = $start->ymd(); + + $days->{ $ymd }->{ $type }->{ $priority }->{ $severity }->{ total }++; + $schema->{ $type }->{ $priority }->{ $severity }->{ total }++; + foreach (keys %$labels) { + $days->{ $ymd }->{ $type }->{ $priority }->{ $severity }->{ $_ }++; + $schema->{ $type }->{ $priority }->{ $severity }->{ $_ }++; + } + + $start = $start->add(days => 1); + } while (DateTime->compare($start, $end) < 0); +} + +print "day,"; +foreach my $type (sort keys %{$schema}) { + foreach my $priority (sort keys %{$schema->{$type}}) { + foreach my $severity (sort keys %{$schema->{$type}->{$priority}}) { + # foreach my $tag (sort keys %{$schema->{$type}->{$priority}->{$severity}}) { + # print "\"$type\n$priority\n$severity\n$tag\","; + # } + print "\"$type\n$priority\n$severity\","; + } + } +} +print "\n"; + +foreach my $day (sort keys %$days) { + print "$day,"; + foreach my $type (sort keys %{$schema}) { + foreach my $priority (sort keys %{$schema->{$type}}) { + foreach my $severity (sort keys %{$schema->{$type}->{$priority}}) { + # foreach my $tag (sort keys %{$schema->{$type}->{$priority}->{$severity}}) { + # print $days->{$day}->{$type}->{$priority}->{$severity}->{$tag} || 0; + # print ","; + # } + print $days->{$day}->{$type}->{$priority}->{$severity}->{total} || 0; + print ","; + } + } + } + print "\n"; +} + diff --git a/scripts/make-icons.sh b/scripts/make-icons.sh new file mode 100755 index 0000000..2db5293 --- /dev/null +++ b/scripts/make-icons.sh @@ -0,0 +1,117 @@ +#!/bin/bash +# +# Converts an svg logo into the various image resources required by +# the various platforms deployments. +# +# On debian-based systems you need these deps: +# apt-get install xmlstarlet python3-cairosvg icnsutils + +if [ $# != 1 ] +then + echo "Usage: $0 " + exit +fi + +set -e +set -x + +tmpdir=`mktemp -d 2>/dev/null || mktemp -d -t 'icontmp'` + +for i in 1024 512 310 256 192 180 152 150 144 128 120 114 96 76 72 70 64 60 57 48 36 32 24 16 +do + #convert -background none -density 1000 -resize $i -extent $i -gravity center "$1" "$tmpdir/$i.png" + + # Above is the imagemagick command to render an svg to png. Unfortunately, its support for SVGs + # with CSS isn't very good (with rsvg and even moreso the built in renderer) so we use cairosvg. + # This can be installed with: + # pip install cairosvg==1.0.22 # Version 2 doesn't support python 2 + # pip install tinycss + # pip install cssselect # These are necessary for CSS support + # You'll also need xmlstarlet from your favourite package manager + # + # Cairosvg doesn't suport rendering at a specific size (https://github.com/Kozea/CairoSVG/issues/83#issuecomment-215720176) + # so we have to 'resize the svg' first (add width and height attributes to the svg element) to make it render at the + # size we need. + # XXX: This will break if the svg already has width and height attributes + cp "$1" "$tmpdir/tmp.svg" + xmlstarlet ed -N x="http://www.w3.org/2000/svg" --insert "/x:svg" --type attr -n width -v $i "$tmpdir/tmp.svg" > "$tmpdir/tmp2.svg" + xmlstarlet ed -N x="http://www.w3.org/2000/svg" --insert "/x:svg" --type attr -n height -v $i "$tmpdir/tmp2.svg" > "$tmpdir/tmp3.svg" + cairosvg -f png -o "$tmpdir/$i.png" "$tmpdir/tmp3.svg" + rm "$tmpdir/tmp.svg" "$tmpdir/tmp2.svg" "$tmpdir/tmp3.svg" +done + +# one more for the non-square mstile +cp "$1" "$tmpdir/tmp.svg" +xmlstarlet ed -N x="http://www.w3.org/2000/svg" --insert "/x:svg" --type attr -n width -v 310 "$tmpdir/tmp.svg" > "$tmpdir/tmp2.svg" +xmlstarlet ed -N x="http://www.w3.org/2000/svg" --insert "/x:svg" --type attr -n height -v 150 "$tmpdir/tmp2.svg" > "$tmpdir/tmp3.svg" +cairosvg -f png -o "$tmpdir/310x150.png" "$tmpdir/tmp3.svg" +rm "$tmpdir/tmp.svg" "$tmpdir/tmp2.svg" "$tmpdir/tmp3.svg" + +mkdir "$tmpdir/Riot.iconset" +cp "$tmpdir/16.png" "$tmpdir/Riot.iconset/icon_16x16.png" +cp "$tmpdir/32.png" "$tmpdir/Riot.iconset/icon_16x16@2x.png" +cp "$tmpdir/32.png" "$tmpdir/Riot.iconset/icon_32x32.png" +cp "$tmpdir/64.png" "$tmpdir/Riot.iconset/icon_32x32@2x.png" +cp "$tmpdir/128.png" "$tmpdir/Riot.iconset/icon_128x128.png" +cp "$tmpdir/256.png" "$tmpdir/Riot.iconset/icon_128x128@2x.png" +cp "$tmpdir/256.png" "$tmpdir/Riot.iconset/icon_256x256.png" +cp "$tmpdir/512.png" "$tmpdir/Riot.iconset/icon_256x256@2x.png" +cp "$tmpdir/512.png" "$tmpdir/Riot.iconset/icon_512x512.png" +cp "$tmpdir/1024.png" "$tmpdir/Riot.iconset/icon_512x512@2x.png" + +if [ -x "$(command -v iconutil)" ]; then + # available on macos + iconutil -c icns -o electron_app/build/icon.icns "$tmpdir/Riot.iconset" +elif [ -x "$(command -v png2icns)" ]; then + # available on linux + # png2icns is more finicky about its input than iconutil + # 1. it doesn't support a 64x64 (aka 32x32@2x) + # 2. it doesn't like duplicates (128x128@2x == 256x256) + rm "$tmpdir/Riot.iconset/icon_128x128@2x.png" + rm "$tmpdir/Riot.iconset/icon_256x256@2x.png" + rm "$tmpdir/Riot.iconset/icon_16x16@2x.png" + rm "$tmpdir/Riot.iconset/icon_32x32@2x.png" + png2icns electron_app/build/icon.icns "$tmpdir"/Riot.iconset/*png +else + echo "WARNING: Unsupported platform. Skipping icns build" +fi + +cp "$tmpdir/36.png" "res/vector-icons/android-chrome-36x36.png" +cp "$tmpdir/48.png" "res/vector-icons/android-chrome-48x48.png" +cp "$tmpdir/72.png" "res/vector-icons/android-chrome-72x72.png" +cp "$tmpdir/96.png" "res/vector-icons/android-chrome-96x96.png" +cp "$tmpdir/144.png" "res/vector-icons/android-chrome-144x144.png" +cp "$tmpdir/192.png" "res/vector-icons/android-chrome-192x192.png" +cp "$tmpdir/180.png" "res/vector-icons/apple-touch-icon.png" +cp "$tmpdir/180.png" "res/vector-icons/apple-touch-icon-precomposed.png" +cp "$tmpdir/57.png" "res/vector-icons/apple-touch-icon-57x57.png" +cp "$tmpdir/60.png" "res/vector-icons/apple-touch-icon-60x60.png" +cp "$tmpdir/72.png" "res/vector-icons/apple-touch-icon-72x72.png" +cp "$tmpdir/76.png" "res/vector-icons/apple-touch-icon-76x76.png" +cp "$tmpdir/114.png" "res/vector-icons/apple-touch-icon-114x114.png" +cp "$tmpdir/120.png" "res/vector-icons/apple-touch-icon-120x120.png" +cp "$tmpdir/144.png" "res/vector-icons/apple-touch-icon-144x144.png" +cp "$tmpdir/152.png" "res/vector-icons/apple-touch-icon-152x152.png" +cp "$tmpdir/180.png" "res/vector-icons/apple-touch-icon-180x180.png" +cp "$tmpdir/16.png" "res/vector-icons/favicon-16x16.png" +cp "$tmpdir/32.png" "res/vector-icons/favicon-32x32.png" +cp "$tmpdir/96.png" "res/vector-icons/favicon-96x96.png" +cp "$tmpdir/70.png" "res/vector-icons/mstile-70x70.png" +cp "$tmpdir/144.png" "res/vector-icons/mstile-144x144.png" +cp "$tmpdir/150.png" "res/vector-icons/mstile-150x150.png" +cp "$tmpdir/310.png" "res/vector-icons/mstile-310x310.png" +cp "$tmpdir/310x150.png" "res/vector-icons/mstile-310x150.png" +cp "$tmpdir/180.png" "electron_app/img/riot.png" + +convert "$tmpdir/16.png" "$tmpdir/32.png" "$tmpdir/64.png" "$tmpdir/128.png" "$tmpdir/256.png" "res/vector-icons/favicon.ico" + +cp "res/vector-icons/favicon.ico" "electron_app/build/icon.ico" +cp "res/vector-icons/favicon.ico" "electron_app/img/riot.ico" + +# https://github.com/electron-userland/electron-builder/blob/3f97b86993d4ea5172e562b182230a194de0f621/src/targets/LinuxTargetHelper.ts#L127 +for i in 24 96 16 48 64 128 256 512 +do + cp "$tmpdir/$i.png" "electron_app/build/icons/${i}x${i}.png" +done + +rm -r "$tmpdir" diff --git a/scripts/package.sh b/scripts/package.sh new file mode 100755 index 0000000..70569fd --- /dev/null +++ b/scripts/package.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +if [ -n "$DIST_VERSION" ]; then + version=$DIST_VERSION +else + version=`git describe --dirty --tags || echo unknown` +fi + +yarn clean +yarn build + +# include the sample config in the tarball. Arguably this should be done by +# `yarn build`, but it's just too painful. +cp config.sample.json webapp/ + +mkdir -p dist +cp -r webapp riot-$version + +# Just in case you have a local config, remove it before packaging +rm riot-$version/config.json || true + +# if $version looks like semver with leading v, strip it before writing to file +if [[ ${version} =~ ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-.+)?$ ]]; then + echo ${version:1} > riot-$version/version +else + echo ${version} > riot-$version/version +fi + +tar chvzf dist/riot-$version.tar.gz riot-$version +rm -r riot-$version + +echo +echo "Packaged dist/riot-$version.tar.gz" diff --git a/scripts/redeploy.py b/scripts/redeploy.py new file mode 100755 index 0000000..e5f2cff --- /dev/null +++ b/scripts/redeploy.py @@ -0,0 +1,308 @@ +#!/usr/bin/env python +# +# auto-deploy script for https://develop.element.io +# +# Listens for buildkite webhook pokes (https://buildkite.com/docs/apis/webhooks) +# When it gets one, downloads the artifact from buildkite +# and deploys it as the new version. +# +# Requires the following python packages: +# +# - requests +# - flask +# +from __future__ import print_function +import json, requests, tarfile, argparse, os, errno +import time +import traceback +from urlparse import urljoin +import glob +import re +import shutil +import threading +from Queue import Queue + +from flask import Flask, jsonify, request, abort + +from deploy import Deployer, DeployException + +app = Flask(__name__) + +deployer = None +arg_extract_path = None +arg_symlink = None +arg_webhook_token = None +arg_api_token = None + +workQueue = Queue() + +def create_symlink(source, linkname): + try: + os.symlink(source, linkname) + except OSError, e: + if e.errno == errno.EEXIST: + # atomic modification + os.symlink(source, linkname + ".tmp") + os.rename(linkname + ".tmp", linkname) + else: + raise e + +def req_headers(): + return { + "Authorization": "Bearer %s" % (arg_api_token,), + } + +# Buildkite considers a poke to have failed if it has to wait more than 10s for +# data (any data, not just the initial response) and it normally takes longer than +# that to download an artifact from buildkite. Apparently there is no way in flask +# to finish the response and then keep doing stuff, so instead this has to involve +# threading. Sigh. +def worker_thread(): + while True: + toDeploy = workQueue.get() + deploy_buildkite_artifact(*toDeploy) + +@app.route("/", methods=["POST"]) +def on_receive_buildkite_poke(): + got_webhook_token = request.headers.get('X-Buildkite-Token') + if got_webhook_token != arg_webbook_token: + print("Denying request with incorrect webhook token: %s" % (got_webhook_token,)) + abort(400, "Incorrect webhook token") + return + + required_api_prefix = None + if arg_buildkite_org is not None: + required_api_prefix = 'https://api.buildkite.com/v2/organizations/%s' % (arg_buildkite_org,) + + incoming_json = request.get_json() + if not incoming_json: + abort(400, "No JSON provided!") + return + print("Incoming JSON: %s" % (incoming_json,)) + + event = incoming_json.get("event") + if event is None: + abort(400, "No 'event' specified") + return + + if event == 'ping': + print("Got ping request - responding") + return jsonify({'response': 'pong!'}) + + if event != 'build.finished': + print("Rejecting '%s' event") + abort(400, "Unrecognised event") + return + + build_obj = incoming_json.get("build") + if build_obj is None: + abort(400, "No 'build' object") + return + + build_url = build_obj.get('url') + if build_url is None: + abort(400, "build has no url") + return + + if required_api_prefix is not None and not build_url.startswith(required_api_prefix): + print("Denying poke for build url with incorrect prefix: %s" % (build_url,)) + abort(400, "Invalid build url") + return + + build_num = build_obj.get('number') + if build_num is None: + abort(400, "build has no number") + return + + pipeline_obj = incoming_json.get("pipeline") + if pipeline_obj is None: + abort(400, "No 'pipeline' object") + return + + pipeline_name = pipeline_obj.get('name') + if pipeline_name is None: + abort(400, "pipeline has no name") + return + + artifacts_url = build_url + "/artifacts" + artifacts_resp = requests.get(artifacts_url, headers=req_headers()) + artifacts_resp.raise_for_status() + artifacts_array = artifacts_resp.json() + + artifact_to_deploy = None + for artifact in artifacts_array: + if re.match(r"dist/.*.tar.gz", artifact['path']): + artifact_to_deploy = artifact + if artifact_to_deploy is None: + print("No suitable artifacts found") + return jsonify({}) + + # double paranoia check: make sure the artifact is on the right org too + if required_api_prefix is not None and not artifact_to_deploy['url'].startswith(required_api_prefix): + print("Denying poke for build url with incorrect prefix: %s" % (artifact_to_deploy['url'],)) + abort(400, "Refusing to deploy artifact from URL %s", artifact_to_deploy['url']) + return + + # there's no point building up a queue of things to deploy, so if there are any pending jobs, + # remove them + while not workQueue.empty(): + try: + workQueue.get(False) + except: + pass + workQueue.put([artifact_to_deploy, pipeline_name, build_num]) + + return jsonify({}) + +def deploy_buildkite_artifact(artifact, pipeline_name, build_num): + artifact_response = requests.get(artifact['url'], headers=req_headers()) + artifact_response.raise_for_status() + artifact_obj = artifact_response.json() + + # we extract into a directory based on the build number. This avoids the + # problem of multiple builds building the same git version and thus having + # the same tarball name. That would lead to two potential problems: + # (a) sometimes jenkins serves corrupted artifacts; we would replace + # a good deploy with a bad one + # (b) we'll be overwriting the live deployment, which means people might + # see half-written files. + build_dir = os.path.join(arg_extract_path, "%s-#%s" % (pipeline_name, build_num)) + try: + extracted_dir = deploy_tarball(artifact_obj, build_dir) + except DeployException as e: + traceback.print_exc() + abort(400, e.message) + + create_symlink(source=extracted_dir, linkname=arg_symlink) + +def deploy_tarball(artifact, build_dir): + """Download a tarball from jenkins and unpack it + + Returns: + (str) the path to the unpacked deployment + """ + if os.path.exists(build_dir): + raise DeployException( + "Not deploying. We have previously deployed this build." + ) + os.mkdir(build_dir) + + print("Fetching artifact %s -> %s..." % (artifact['download_url'], artifact['filename'])) + + # Download the tarball here as buildkite needs auth to do this + # we don't pgp-sign buildkite artifacts, relying on HTTPS and buildkite + # not being evil. If that's not good enough for you, don't use develop.element.io. + resp = requests.get(artifact['download_url'], stream=True, headers=req_headers()) + resp.raise_for_status() + with open(artifact['filename'], 'wb') as ofp: + shutil.copyfileobj(resp.raw, ofp) + print("...download complete. Deploying...") + + # we rely on the fact that flask only serves one request at a time to + # ensure that we do not overwrite a tarball from a concurrent request. + + return deployer.deploy(artifact['filename'], build_dir) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser("Runs a Vector redeployment server.") + parser.add_argument( + "-p", "--port", dest="port", default=4000, type=int, help=( + "The port to listen on for requests from Jenkins." + ) + ) + parser.add_argument( + "-e", "--extract", dest="extract", default="./extracted", help=( + "The location to extract .tar.gz files to." + ) + ) + parser.add_argument( + "-b", "--bundles-dir", dest="bundles_dir", help=( + "A directory to move the contents of the 'bundles' directory to. A \ + symlink to the bundles directory will also be written inside the \ + extracted tarball. Example: './bundles'." + ) + ) + parser.add_argument( + "-c", "--clean", dest="clean", action="store_true", default=False, help=( + "Remove .tar.gz files after they have been downloaded and extracted." + ) + ) + parser.add_argument( + "-s", "--symlink", dest="symlink", default="./latest", help=( + "Write a symlink to this location pointing to the extracted tarball. \ + New builds will keep overwriting this symlink. The symlink will point \ + to the /vector directory INSIDE the tarball." + ) + ) + + # --include ../../config.json ./localhost.json homepages/* + parser.add_argument( + "--include", nargs='*', default='./config*.json', help=( + "Symlink these files into the root of the deployed tarball. \ + Useful for config files and home pages. Supports glob syntax. \ + (Default: '%(default)s')" + ) + ) + parser.add_argument( + "--test", dest="tarball_uri", help=( + "Don't start an HTTP listener. Instead download a build from Jenkins \ + immediately." + ), + ) + + parser.add_argument( + "--webhook-token", dest="webhook_token", help=( + "Only accept pokes with this buildkite token." + ), required=True, + ) + + parser.add_argument( + "--api-token", dest="api_token", help=( + "API access token for buildkite. Require read_artifacts scope." + ), required=True, + ) + + # We require a matching webhook token, but because we take everything else + # about what to deploy from the poke body, we can be a little more paranoid + # and only accept builds / artifacts from a specific buildkite org + parser.add_argument( + "--org", dest="buildkite_org", help=( + "Lock down to this buildkite org" + ) + ) + + args = parser.parse_args() + arg_extract_path = args.extract + arg_symlink = args.symlink + arg_webbook_token = args.webhook_token + arg_api_token = args.api_token + arg_buildkite_org = args.buildkite_org + + if not os.path.isdir(arg_extract_path): + os.mkdir(arg_extract_path) + + deployer = Deployer() + deployer.bundles_path = args.bundles_dir + deployer.should_clean = args.clean + + for include in args.include: + deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) }) + + if args.tarball_uri is not None: + build_dir = os.path.join(arg_extract_path, "test-%i" % (time.time())) + deploy_tarball(args.tarball_uri, build_dir) + else: + print( + "Listening on port %s. Extracting to %s%s. Symlinking to %s. Include files: %s" % + (args.port, + arg_extract_path, + " (clean after)" if deployer.should_clean else "", + arg_symlink, + deployer.symlink_paths, + ) + ) + fred = threading.Thread(target=worker_thread) + fred.daemon = True + fred.start() + app.run(port=args.port, debug=False) diff --git a/scripts/yarn-sub.js b/scripts/yarn-sub.js new file mode 100644 index 0000000..817ad33 --- /dev/null +++ b/scripts/yarn-sub.js @@ -0,0 +1,22 @@ +const path = require('path'); +const child_process = require('child_process'); + +const moduleName = process.argv[2]; +if (!moduleName) { + console.error("Expected module name"); + process.exit(1); +} + +const argString = process.argv.length > 3 ? process.argv.slice(3).join(" ") : ""; +if (!argString) { + console.error("Expected an yarn argument string to use"); + process.exit(1); +} + +const modulePath = path.dirname(require.resolve(`${moduleName}/package.json`)); + +child_process.execSync("yarn " + argString, { + env: process.env, + cwd: modulePath, + stdio: ['inherit', 'inherit', 'inherit'], +}); diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts new file mode 100644 index 0000000..469ef59 --- /dev/null +++ b/src/@types/global.d.ts @@ -0,0 +1,47 @@ +/* +Copyright 2020 New Vector Ltd + +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. +*/ + +import "matrix-react-sdk/src/@types/global"; // load matrix-react-sdk's type extensions first +import type {Renderer} from "react-dom"; + +declare global { + interface Window { + mxSendRageshake: (text: string, withLogs?: boolean) => void; + matrixChat: ReturnType; + + // electron-only + ipcRenderer: any; + + // opera-only + opera: any; + + // https://developer.mozilla.org/en-US/docs/Web/API/InstallTrigger + InstallTrigger: any; + } + + interface Navigator { + // PWA badging extensions https://w3c.github.io/badging/ + setAppBadge?(count: number): Promise; + clearAppBadge?(): Promise; + } +} + +// add method which is missing from the node typing +declare module "url" { + interface Url { + format(): string; + } +} diff --git a/src/async-components/structures/CompatibilityView.tsx b/src/async-components/structures/CompatibilityView.tsx new file mode 100644 index 0000000..05a09c6 --- /dev/null +++ b/src/async-components/structures/CompatibilityView.tsx @@ -0,0 +1,118 @@ +/* +Copyright 2020 New Vector Ltd + +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. +*/ + +import * as React from "react"; +import { _t } from "matrix-react-sdk/src/languageHandler"; +import SdkConfig from 'matrix-react-sdk/src/SdkConfig'; + +// directly import the style here as this layer does not support rethemedex at this time so no matrix-react-sdk +// scss variables will be accessible. +import "../../../res/css/structures/ErrorView.scss"; + +interface IProps { + onAccept(): void; +} + +const CompatibilityView: React.FC = ({ onAccept }) => { + const brand = SdkConfig.get().brand; + return
+
+
+ + Element + +

{ _t("Unsupported browser") }

+
+ +
+
+
+

{ _t("Your browser can't run %(brand)s", { brand }) }

+

+ { _t( + "%(brand)s uses advanced browser features which aren't " + + "supported by your current browser.", + { brand }, + ) } +

+

+ { _t( + 'Please install Chrome, Firefox, ' + + 'or Safari for the best experience.', + {}, + { + 'chromeLink': (sub) => {sub}, + 'firefoxLink': (sub) => {sub}, + 'safariLink': (sub) => {sub}, + }, + )} +

+

+ { _t( + "You can continue using your current browser, but some or all features may not work " + + "and the look and feel of the application may be incorrect.", + ) } +

+ +
+
+
+ +
+
+
+

Use Element on mobile

+

iOS (iPhone or iPad)

+ + Apple App Store + +

Android

+ + Google Play Store + + + F-Droid + +
+
+
+ + +
+
; +}; + +export default CompatibilityView; diff --git a/src/async-components/structures/ErrorView.tsx b/src/async-components/structures/ErrorView.tsx new file mode 100644 index 0000000..acde7ac --- /dev/null +++ b/src/async-components/structures/ErrorView.tsx @@ -0,0 +1,61 @@ +/* +Copyright 2020 New Vector Ltd + +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. +*/ + +import * as React from "react"; +import { _t } from "matrix-react-sdk/src/languageHandler"; + +// directly import the style here as this layer does not support rethemedex at this time so no matrix-react-sdk +// scss variables will be accessible. +import "../../../res/css/structures/ErrorView.scss"; + +interface IProps { + // both of these should already be internationalised + title: string; + messages?: string[]; +} + +const ErrorView: React.FC = ({title, messages}) => { + return
+
+
+ + Element + +

{ _t("Failed to start") }

+
+
+
+
+

{ title }

+ {messages && messages.map(msg =>

+ { msg } +

)} +
+
+
+ +
+
; +}; + +export default ErrorView; + diff --git a/src/components/structures/VectorEmbeddedPage.js b/src/components/structures/VectorEmbeddedPage.js new file mode 100644 index 0000000..747b91e --- /dev/null +++ b/src/components/structures/VectorEmbeddedPage.js @@ -0,0 +1,36 @@ +/* +Copyright 2016 OpenMarket Ltd +Copyright 2017 Vector Creations Ltd +Copyright 2019 New Vector Ltd + +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. +*/ + +'use strict'; + +import EmbeddedPage from 'matrix-react-sdk/src/components/structures/EmbeddedPage'; +import sanitizeHtml from 'sanitize-html'; +import { _t } from 'matrix-react-sdk/src/languageHandler'; + +export default class VectorEmbeddedPage extends EmbeddedPage { + static replaces = 'EmbeddedPage'; + + // we're overriding the base component here, for Element-specific tweaks + translate(s) { + s = sanitizeHtml(_t(s)); + // ugly fix for https://github.com/vector-im/element-web/issues/4243 + // eslint-disable-next-line max-len + s = s.replace(/\[matrix\]/, 'Matrix'); + return s; + } +} diff --git a/src/components/views/auth/VectorAuthFooter.js b/src/components/views/auth/VectorAuthFooter.js new file mode 100644 index 0000000..31a994b --- /dev/null +++ b/src/components/views/auth/VectorAuthFooter.js @@ -0,0 +1,53 @@ +/* +Copyright 2015, 2016 OpenMarket Ltd +Copyright 2019 New Vector Ltd + +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. +*/ + +import React from 'react'; +import SdkConfig from 'matrix-react-sdk/src/SdkConfig'; +import { _t } from 'matrix-react-sdk/src/languageHandler'; + +const VectorAuthFooter = () => { + const brandingConfig = SdkConfig.get().branding; + let links = [ + {"text": "Blog", "url": "https://element.io/blog"}, + {"text": "Twitter", "url": "https://twitter.com/element_hq"}, + {"text": "GitHub", "url": "https://github.com/vector-im/element-web"}, + ]; + + if (brandingConfig && brandingConfig.authFooterLinks) { + links = brandingConfig.authFooterLinks; + } + + const authFooterLinks = []; + for (const linkEntry of links) { + authFooterLinks.push( + + {linkEntry.text} + , + ); + } + + return ( +
+ {authFooterLinks} + { _t('Powered by Matrix') } +
+ ); +}; + +VectorAuthFooter.replaces = 'AuthFooter'; + +export default VectorAuthFooter; diff --git a/src/components/views/auth/VectorAuthHeaderLogo.js b/src/components/views/auth/VectorAuthHeaderLogo.js new file mode 100644 index 0000000..821d38e --- /dev/null +++ b/src/components/views/auth/VectorAuthHeaderLogo.js @@ -0,0 +1,44 @@ +/* +Copyright 2015, 2016 OpenMarket Ltd +Copyright 2019 New Vector Ltd + +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. +*/ + +'use strict'; + +import React from 'react'; +import PropTypes from 'prop-types'; +import SdkConfig from 'matrix-react-sdk/src/SdkConfig'; + +export default class VectorAuthHeaderLogo extends React.PureComponent { + static replaces = 'AuthHeaderLogo' + + static propTypes = { + icon: PropTypes.string, + } + + render() { + const brandingConfig = SdkConfig.get().branding; + let logoUrl = "themes/element/img/logos/element-logo.svg"; + if (brandingConfig && brandingConfig.authHeaderLogoUrl) { + logoUrl = brandingConfig.authHeaderLogoUrl; + } + + return ( +
+ Element +
+ ); + } +} diff --git a/src/components/views/auth/VectorAuthPage.js b/src/components/views/auth/VectorAuthPage.js new file mode 100644 index 0000000..19fd618 --- /dev/null +++ b/src/components/views/auth/VectorAuthPage.js @@ -0,0 +1,85 @@ +/* +Copyright 2019, 2020 New Vector Ltd + +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. +*/ + +import React from 'react'; +import * as sdk from 'matrix-react-sdk/src/index'; +import SdkConfig from 'matrix-react-sdk/src/SdkConfig'; + +export default class VectorAuthPage extends React.PureComponent { + static replaces = 'AuthPage' + + static welcomeBackgroundUrl; + + // cache the url as a static to prevent it changing without refreshing + static getWelcomeBackgroundUrl() { + if (VectorAuthPage.welcomeBackgroundUrl) return VectorAuthPage.welcomeBackgroundUrl; + + const brandingConfig = SdkConfig.get().branding; + VectorAuthPage.welcomeBackgroundUrl = "themes/element/img/backgrounds/lake.jpg"; + if (brandingConfig && brandingConfig.welcomeBackgroundUrl) { + if (Array.isArray(brandingConfig.welcomeBackgroundUrl)) { + const index = Math.floor(Math.random() * brandingConfig.welcomeBackgroundUrl.length); + VectorAuthPage.welcomeBackgroundUrl = brandingConfig.welcomeBackgroundUrl[index]; + } else { + VectorAuthPage.welcomeBackgroundUrl = brandingConfig.welcomeBackgroundUrl; + } + } + + return VectorAuthPage.welcomeBackgroundUrl; + } + + render() { + const AuthFooter = sdk.getComponent('auth.AuthFooter'); + + const pageStyle = { + background: `center/cover fixed url(${VectorAuthPage.getWelcomeBackgroundUrl()})`, + }; + + const modalStyle = { + position: 'relative', + background: 'initial', + }; + + const blurStyle = { + position: 'absolute', + top: 0, + right: 0, + bottom: 0, + left: 0, + filter: 'blur(40px)', + background: pageStyle.background, + }; + + const modalContentStyle = { + display: 'flex', + zIndex: 1, + background: 'rgba(255, 255, 255, 0.59)', + borderRadius: '8px', + }; + + return ( +
+
+
+
+ { this.props.children } +
+
+ +
+ ); + } +} diff --git a/src/customisations/README.md b/src/customisations/README.md new file mode 120000 index 0000000..cacf116 --- /dev/null +++ b/src/customisations/README.md @@ -0,0 +1 @@ +../../docs/customisations.md \ No newline at end of file diff --git a/src/favicon.ts b/src/favicon.ts new file mode 100644 index 0000000..a7f4d15 --- /dev/null +++ b/src/favicon.ts @@ -0,0 +1,255 @@ +/* +Copyright 2020 New Vector Ltd + +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. +*/ + +interface IParams { + // colour parameters + bgColor: string; + textColor: string; + // font styling parameters + fontFamily: string; + fontWeight: "normal" | "italic" | "bold" | "bolder" | "lighter" | number; + + // positioning parameters + isUp: boolean; + isLeft: boolean; +} + +const defaults: IParams = { + bgColor: "#d00", + textColor: "#fff", + fontFamily: "sans-serif", // Arial,Verdana,Times New Roman,serif,sans-serif,... + fontWeight: "bold", // normal,italic,oblique,bold,bolder,lighter,100,200,300,400,500,600,700,800,900 + + isUp: false, + isLeft: false, +}; + +// Allows dynamic rendering of a circular badge atop the loaded favicon +// supports colour, font and basic positioning parameters. +// Based upon https://github.com/ejci/favico.js/blob/master/favico.js [MIT license] +export default class Favicon { + private readonly browser = { + ff: typeof window.InstallTrigger !== "undefined", + opera: !!window.opera || navigator.userAgent.includes("Opera"), + }; + + private readonly params: IParams; + private readonly canvas: HTMLCanvasElement; + private readonly baseImage: HTMLImageElement; + private context: CanvasRenderingContext2D; + private icons: HTMLLinkElement[]; + + private isReady = false; + // callback to run once isReady is asserted, allows for a badge to be queued for when it can be shown + private readyCb = () => {}; + + constructor(params: Partial = {}) { + this.params = {...defaults, ...params}; + + this.icons = Favicon.getIcons(); + // create work canvas + this.canvas = document.createElement("canvas"); + // create clone of favicon as a base + this.baseImage = document.createElement("img"); + + const lastIcon = this.icons[this.icons.length - 1]; + if (lastIcon.hasAttribute("href")) { + this.baseImage.setAttribute("crossOrigin", "anonymous"); + this.baseImage.onload = () => { + // get height and width of the favicon + this.canvas.height = (this.baseImage.height > 0) ? this.baseImage.height : 32; + this.canvas.width = (this.baseImage.width > 0) ? this.baseImage.width : 32; + this.context = this.canvas.getContext("2d"); + this.ready(); + }; + this.baseImage.setAttribute("src", lastIcon.getAttribute("href")); + } else { + this.canvas.height = this.baseImage.height = 32; + this.canvas.width = this.baseImage.width = 32; + this.context = this.canvas.getContext("2d"); + this.ready(); + } + } + + private reset() { + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height); + } + + private options(n: number | string, params: IParams) { + const opt = { + n: ((typeof n) === "number") ? Math.abs(n as number | 0) : n, + len: ("" + n).length, + // badge positioning constants as percentages + x: 0.4, + y: 0.4, + w: 0.6, + h: 0.6, + }; + + // apply positional transformations + if (params.isUp) { + if (opt.y < 0.6) { + opt.y = opt.y - 0.4; + } else { + opt.y = opt.y - 2 * opt.y + (1 - opt.w); + } + } + if (params.isLeft) { + if (opt.x < 0.6) { + opt.x = opt.x - 0.4; + } else { + opt.x = opt.x - 2 * opt.x + (1 - opt.h); + } + } + + // scale the position to the canvas + opt.x = this.canvas.width * opt.x; + opt.y = this.canvas.height * opt.y; + opt.w = this.canvas.width * opt.w; + opt.h = this.canvas.height * opt.h; + return opt; + } + + private circle(n: number | string, opts?: Partial) { + const params = {...this.params, ...opts}; + const opt = this.options(n, params); + + let more = false; + if (opt.len === 2) { + opt.x = opt.x - opt.w * 0.4; + opt.w = opt.w * 1.4; + more = true; + } else if (opt.len >= 3) { + opt.x = opt.x - opt.w * 0.65; + opt.w = opt.w * 1.65; + more = true; + } + + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height); + this.context.beginPath(); + const fontSize = Math.floor(opt.h * (opt.n > 99 ? 0.85 : 1)) + "px"; + this.context.font = `${params.fontWeight} ${fontSize} ${params.fontFamily}`; + this.context.textAlign = "center"; + + if (more) { + this.context.moveTo(opt.x + opt.w / 2, opt.y); + this.context.lineTo(opt.x + opt.w - opt.h / 2, opt.y); + this.context.quadraticCurveTo(opt.x + opt.w, opt.y, opt.x + opt.w, opt.y + opt.h / 2); + this.context.lineTo(opt.x + opt.w, opt.y + opt.h - opt.h / 2); + this.context.quadraticCurveTo(opt.x + opt.w, opt.y + opt.h, opt.x + opt.w - opt.h / 2, opt.y + opt.h); + this.context.lineTo(opt.x + opt.h / 2, opt.y + opt.h); + this.context.quadraticCurveTo(opt.x, opt.y + opt.h, opt.x, opt.y + opt.h - opt.h / 2); + this.context.lineTo(opt.x, opt.y + opt.h / 2); + this.context.quadraticCurveTo(opt.x, opt.y, opt.x + opt.h / 2, opt.y); + } else { + this.context.arc(opt.x + opt.w / 2, opt.y + opt.h / 2, opt.h / 2, 0, 2 * Math.PI); + } + + this.context.fillStyle = params.bgColor; + this.context.fill(); + this.context.closePath(); + this.context.beginPath(); + this.context.stroke(); + this.context.fillStyle = params.textColor; + + if ((typeof opt.n) === "number" && opt.n > 999) { + const count = ((opt.n > 9999) ? 9 : Math.floor(opt.n as number / 1000)) + "k+"; + this.context.fillText(count, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.2)); + } else { + this.context.fillText("" + opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15)); + } + + this.context.closePath(); + } + + private ready() { + if (this.isReady) return; + this.isReady = true; + this.readyCb(); + } + + private setIcon(canvas) { + setImmediate(() => { + this.setIconSrc(canvas.toDataURL("image/png")); + }); + } + + private setIconSrc(url) { + // if is attached to fav icon + if (this.browser.ff || this.browser.opera) { + // for FF we need to "recreate" element, attach to dom and remove old + const old = this.icons[this.icons.length - 1]; + const newIcon = window.document.createElement("link"); + this.icons = [newIcon]; + newIcon.setAttribute("rel", "icon"); + newIcon.setAttribute("type", "image/png"); + window.document.getElementsByTagName("head")[0].appendChild(newIcon); + newIcon.setAttribute("href", url); + if (old.parentNode) { + old.parentNode.removeChild(old); + } + } else { + this.icons.forEach(icon => { + icon.setAttribute("href", url); + }); + } + } + + public badge(content: number | string, opts?: Partial) { + if (!this.isReady) { + this.readyCb = () => { + this.badge(content, opts); + } + return; + } + + if (typeof content === "string" || content > 0) { + this.circle(content, opts); + } else { + this.reset(); + } + + this.setIcon(this.canvas); + } + + private static getLinks() { + const icons: HTMLLinkElement[] = []; + const links = window.document.getElementsByTagName("head")[0].getElementsByTagName("link"); + for (let i = 0; i < links.length; i++) { + if ((/(^|\s)icon(\s|$)/i).test(links[i].getAttribute("rel"))) { + icons.push(links[i]); + } + } + return icons; + } + + private static getIcons() { + // get favicon link elements + let elms = Favicon.getLinks(); + if (elms.length === 0) { + elms = [window.document.createElement("link")]; + elms[0].setAttribute("rel", "icon"); + window.document.getElementsByTagName("head")[0].appendChild(elms[0]); + } + + elms.forEach(item => { + item.setAttribute("type", "image/png"); + }); + return elms; + } +} diff --git a/src/header b/src/header new file mode 100644 index 0000000..e80658c --- /dev/null +++ b/src/header @@ -0,0 +1,15 @@ +/* +Copyright 2018 New Vector Ltd + +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/src/i18n/strings/ar.json b/src/i18n/strings/ar.json new file mode 100644 index 0000000..44758f6 --- /dev/null +++ b/src/i18n/strings/ar.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "أهمِل", + "Unknown device": "جهاز مجهول", + "You need to be using HTTPS to place a screen-sharing call.": "عليك استعمال ميفاق HTTPS للاتصال بمشاركة الشاشة.", + "powered by Matrix": "مشغل بواسطة Matrix", + "Welcome to Element": "مرحبًا بك في Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "دردشة وتعاون غير مركزي معمّى، تدعمه [matrix]", + "Create Account": "أنشِئ حسابًا", + "Explore rooms": "استكشِف الغرف", + "Sign In": "لِج", + "Missing indexeddb worker script!": "سكربت عامل indexeddb ناقص!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "الضبط غير صالح: يمكنك تحديد واحدًا من الآتي فقط: default_server_config أو default_server_name أو default_hs_url.", + "Invalid configuration: no default server specified.": "الضبط غير صالح: لم تحدّد خادومًا مبدئيًا.", + "Your Element is misconfigured": "لم يُضبط تطبيق Element كما ينبغي", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "يحتوي ضبط تطبيق Element على تنسيق JSON غير صالح. من فضلك صحّح المشكلة وأعِد تحميل الصفحة.", + "The message from the parser is: %(message)s": "الرسالة القادمة من المحلّل: %(message)s", + "Invalid JSON": "تنسيق JSON غير صالح", + "Unable to load config file: please refresh the page to try again.": "تعذّر تحميل ملف الضبط: من فضلك أنعِش الصفحة لمعاودة المحاولة.", + "Unexpected error preparing the app. See console for details.": "حدث عُطل غير متوقع أثناء تجهيز التطبيق. طالِع المِعراض للتفاصيل.", + "Download Completed": "اكتمل التنزيل", + "Open": "افتح", + "Open user settings": "افتح إعدادات المستخدم", + "Previous/next recently visited room or community": "الغرفة أو المجتمع التالي/السابق الذي زرته حديثًا", + "%(brand)s Desktop (%(platformName)s)": "‏‏%(brand)s لسطح المكتب (%(platformName)s)", + "Go to your browser to complete Sign In": "افتح المتصفح لإكمال الولوج", + "%(appName)s (%(browserName)s, %(osName)s)": "‏‏%(appName)s (‏‏%(browserName)s، ‏‏%(osName)s)", + "Unsupported browser": "متصفح غير مدعوم", + "Your browser can't run %(brand)s": "لا يمكن لمتصفحك تشغيل %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "يستعمل %(brand)s ميزات متقدمة في المتصفحات لا يدعمها متصفحك الحالي.", + "Please install Chrome, Firefox, or Safari for the best experience.": "من فضلك ثبّت كروم أو فَيَرفُكس أو سفاري لأفضل تجربة.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "يمكنك مواصل استعمال متصفحك الحالي ولكن قد لا تعمل بعض المزايا (أو كلها) وقد لا يظهر التطبيق كما ينبغي له أن يظهر.", + "I understand the risks and wish to continue": "أفهم المخاطرة وأود المواصلة", + "Go to element.io": "انتقل إلى element.io", + "Failed to start": "فشل البدء", + "Powered by Matrix": "تدعمه «ماترِكس»" +} diff --git a/src/i18n/strings/az.json b/src/i18n/strings/az.json new file mode 100644 index 0000000..6958694 --- /dev/null +++ b/src/i18n/strings/az.json @@ -0,0 +1,16 @@ +{ + "Unknown device": "Naməlum qurğu", + "You need to be using HTTPS to place a screen-sharing call.": "İş stolunun birgə istifadəsi üçün HTTPS-dan istifadə tələb olunur.", + "Invalid JSON": "Yanlış JSON", + "Sign In": "Daxil ol", + "Create Account": "Hesab Aç", + "Explore rooms": "Otaqları kəşf edin", + "Unexpected error preparing the app. See console for details.": "Proqramın başlanmasında gözlənilməz xəta. İzah üçün konsola baxın", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Yanlış konfiqurasiya: bunlardan yalnız birini təyin edin - default_server_config, default_server_name, və ya default_hs_url.", + "Invalid configuration: no default server specified.": "Yanlış konfiqurasiya: ilkin server təyin edilməyib", + "The message from the parser is: %(message)s": "Sözügedən mesaj: %(message)s", + "powered by Matrix": "Matrix tərəfindən təchiz edilmişdir", + "Dismiss": "Nəzərə almayın", + "Welcome to Element": "Element-ə xoş gəlmişsiniz", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] tərəfindən təchiz edilmiş mərkəziləşdirilməmiş, şifrələnmiş çat və əməkdaşlıq platforması" +} diff --git a/src/i18n/strings/basefile.json b/src/i18n/strings/basefile.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/i18n/strings/basefile.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/i18n/strings/be.json b/src/i18n/strings/be.json new file mode 100644 index 0000000..2078f53 --- /dev/null +++ b/src/i18n/strings/be.json @@ -0,0 +1,4 @@ +{ + "Dismiss": "Aдхіліць", + "powered by Matrix": "працуе на Matrix" +} diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json new file mode 100644 index 0000000..b8d9db3 --- /dev/null +++ b/src/i18n/strings/bg.json @@ -0,0 +1,36 @@ +{ + "Unknown device": "Непознато устройство", + "You need to be using HTTPS to place a screen-sharing call.": "Трябва да използвате HTTPS, за да споделите екрана си.", + "Dismiss": "Затвори", + "powered by Matrix": "базирано на Matrix", + "Welcome to Element": "Добре дошли в Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализиран, шифрован чат и съвместна работа, базирани на [matrix]", + "Sign In": "Вписване", + "Create Account": "Създай профил", + "Explore rooms": "Открий стаи", + "Unexpected error preparing the app. See console for details.": "Неочаквана грешка при подготвянето на приложението. Вижте конзолата за подробности.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Невалидна конфигурация: може да е указано само едно от: default_server_config, default_server_name, или default_hs_url.", + "Invalid configuration: no default server specified.": "Невалидна конфигурация: не е указан сървър по подразбиране.", + "The message from the parser is: %(message)s": "Грешката от парсъра е: %(message)s", + "Invalid JSON": "Невалиден JSON", + "Open user settings": "Отвори потребителските настройки", + "Go to your browser to complete Sign In": "Отидете в браузъра за да завършите влизането", + "Missing indexeddb worker script!": "Липсва indexdb worker скриптът!", + "Unable to load config file: please refresh the page to try again.": "Неуспешно зареждане на конфигурационния файл: презаредете страницата за да опитате пак.", + "Previous/next recently visited room or community": "Предишна/следваща наскоро-посетена стая или общност", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Неподдържан браузър", + "Please install Chrome, Firefox, or Safari for the best experience.": "Инсталирайте Chrome, Firefox или Safari за най-добра работа.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Може да продължите да използвате сегашния си браузър, но някои или всички функции може да се окажат неработещи, или пък външния вид на приложението да изглежда неправилен.", + "I understand the risks and wish to continue": "Разбирам рисковете и желая да продължа", + "Go to element.io": "Отиди на element.io", + "Failed to start": "Неуспешно стартиране", + "Your Element is misconfigured": "Вашият Element не е конфигуриран правилно", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Вашата Element конфигурация съдържа невалиден JSON. Коригирайте проблема и презаредете страницата.", + "Download Completed": "Свалянето завърши", + "Open": "Отвори", + "Your browser can't run %(brand)s": "Браузърът ви не може да изпълни %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s използва модерни функции на браузъра, които не се поддържат от Вашия.", + "Powered by Matrix": "Базирано на Matrix" +} diff --git a/src/i18n/strings/bn_BD.json b/src/i18n/strings/bn_BD.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/i18n/strings/bn_BD.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/i18n/strings/bn_IN.json b/src/i18n/strings/bn_IN.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/i18n/strings/bn_IN.json @@ -0,0 +1 @@ +{} diff --git a/src/i18n/strings/bs.json b/src/i18n/strings/bs.json new file mode 100644 index 0000000..a423a49 --- /dev/null +++ b/src/i18n/strings/bs.json @@ -0,0 +1,35 @@ +{ + "Missing indexeddb worker script!": "Nedostaje indexeddb radna skripta!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neispravna konfiguracija: navesti se samo može jedan od default_server_config, default_server_name ili default_hs_url.", + "Invalid configuration: no default server specified.": "Neispravna konfiguracija: nije naveden zadani server.", + "Your Element is misconfigured": "Vaš element je pogrešno konfiguriran", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracija vašeg elementa sadrži nevažeći JSON. Ispravite problem i ponovo učitajte stranicu.", + "The message from the parser is: %(message)s": "Poruka parsera je: %(message)s", + "Invalid JSON": "Nevažeći JSON", + "Unable to load config file: please refresh the page to try again.": "Nije moguće učitati konfiguracijsku datoteku: osvježite stranicu i pokušajte ponovo.", + "Unexpected error preparing the app. See console for details.": "Neočekivana greška prilikom pripreme aplikacije. Pogledajte konzolu za detalje.", + "Download Completed": "Preuzimanje završeno", + "Open": "Otvori", + "Dismiss": "Odbaci", + "Open user settings": "Otvori korisničke postavke", + "Previous/next recently visited room or community": "Prethodna / sljedeća nedavno posjećena soba ili zajednica", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Radna povrsina (%(platformName)s)", + "Go to your browser to complete Sign In": "Idite na svoj pretraživač da biste dovršili prijavu", + "Unknown device": "Nepoznat uređaj", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "You need to be using HTTPS to place a screen-sharing call.": "Morate koristiti HTTPS za upućivanje poziva za dijeljenje ekrana.", + "Powered by Matrix": "Pokretano uz Matrix", + "Unsupported browser": "Nepodržani pretraživač", + "Your browser can't run %(brand)s": "Vaš pretraživač ne može pokretati %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s koristi napredne funkcije pretraživača koje vaš trenutni pretraživač ne podržava.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Molimo instalirajte Chrome, Firefox ili Safari za najbolje iskustvo.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Možete nastaviti koristiti svoj trenutni pretraživač, ali neke ili sve funkcije možda neće raditi, a izgled i dojam aplikacije mogu biti neispravani.", + "I understand the risks and wish to continue": "Razumijem rizike i želim nastaviti", + "Go to element.io": "Idite na element.io", + "Failed to start": "Pokretanje nije uspjelo", + "Welcome to Element": "Dobrodošli u Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirani, šifrirani razgovor & suradnja pokrenuta [matrix]", + "Sign In": "Prijavite se", + "Create Account": "Otvori račun", + "Explore rooms": "Istražite sobe" +} diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json new file mode 100644 index 0000000..1e18641 --- /dev/null +++ b/src/i18n/strings/ca.json @@ -0,0 +1,35 @@ +{ + "Dismiss": "Omet", + "Unknown device": "Dispositiu desconegut", + "Welcome to Element": "Us donem la benvinguda a Element", + "You need to be using HTTPS to place a screen-sharing call.": "Heu d'utilitzar HTTPS per poder fer una trucada amb pantalla compartida.", + "powered by Matrix": "amb tecnologia de Matrix", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Xat descentralitzat, encriptat i col·laboratiu amb tecnologia de [matrix]", + "Create Account": "Crea un compte", + "Explore rooms": "Exploreu les sales", + "Sign In": "Inicia la sessió", + "Invalid configuration: no default server specified.": "Configuració no vàlida: no s'ha especificat cap servidor per defecte.", + "Invalid JSON": "JSON no vàlid", + "Go to your browser to complete Sign In": "Aneu al vostre navegador per completar l'inici de sessió", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuració incorrecta: només podeu especificar una de les opcions default_server_config, default_server_name, o default_hs_url.", + "Your Element is misconfigured": "El vostre Element està mal configurat", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "El vostre Element conté un JSON incorrecte. Si us plau arregleu el problema i recarregueu la pàgina.", + "The message from the parser is: %(message)s": "El missatge de l'analitzador és: %(message)s", + "Unable to load config file: please refresh the page to try again.": "No he pogut carregar l'arxiu de configuració: si us plau recarregueu la pàgina per provar-ho de nou.", + "Unexpected error preparing the app. See console for details.": "Error inesperat preparant l'app. Vegeu la consola pels detalls.", + "Download Completed": "Descàrrega completada", + "Open": "Obre", + "Open user settings": "Obre configuració d'usuari", + "Previous/next recently visited room or community": "Anterior/Següent sala o comunitat visitada recentment", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s d'escriptori (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Powered by Matrix": "En funcionament gràcies a Matrix", + "Unsupported browser": "Navegador no suportat", + "Your browser can't run %(brand)s": "El vostre navegador no pot executar %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa característiques avançades del navegador que el vostre navegador no suporta.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Si us plau instal·leuChrome, Firefox, o Safari per una millor experiència.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Podeu continuar usant el vostre navegador actual, però algunes o totes les característiques podrien no funcionar i l'aspepte de l'aplicació podria mostrar errors.", + "I understand the risks and wish to continue": "Entenc els riscos i voldria continuar", + "Go to element.io": "Vés a element.io", + "Failed to start": "Ha fallat en iniciar-se" +} diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json new file mode 100644 index 0000000..b2a5071 --- /dev/null +++ b/src/i18n/strings/cs.json @@ -0,0 +1,32 @@ +{ + "Welcome to Element": "Vítá vás Element", + "Unknown device": "Neznámé zařízení", + "You need to be using HTTPS to place a screen-sharing call.": "Pro uskutečnění hovoru se sdílením obrazovky musíte používat HTTPS.", + "Dismiss": "Zahodit", + "powered by Matrix": "používá protokol Matrix", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráce na platformě [matrix]", + "Sign In": "Přihlásit se", + "Create Account": "Vytvořit účet", + "Explore rooms": "Procházet místnosti", + "The message from the parser is: %(message)s": "Zpráva z parseru je: %(message)s", + "Invalid JSON": "Neplatný JSON", + "Unexpected error preparing the app. See console for details.": "Neočekávaná chyba při přípravě aplikace. Podrobnosti najdete v konzoli.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neplatná konfigurace: je možné specifikovat pouze jednu volbu z default_server_config, default_server_name, nebo default_hs_url.", + "Invalid configuration: no default server specified.": "Neplatná konfigurace: není zadán výchozí server.", + "Open user settings": "Otevřít uživatelské nastavení", + "Go to your browser to complete Sign In": "Přejděte do prohlížeče a dokončete přihlášení", + "Your Element is misconfigured": "Váš Element je nesprávně nastaven", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Vaše konfigurace Elementu obsahuje nesprávná data JSON. Vyřešte prosím problém a načtěte znovu stránku.", + "Unable to load config file: please refresh the page to try again.": "Nepodařilo se načíst konfigurační soubor: abyste to zkusili znovu, načtěte prosím znovu stránku.", + "Download Completed": "Stahování dokončeno", + "Open": "Otevřít", + "Previous/next recently visited room or community": "Předchozí/další nedávno navštívená místnost či skupina", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Nepodporovaný prohlížeč", + "Your browser can't run %(brand)s": "Váš prohlížeč nedokáže spustit %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s využívá pokročilých funkcí prohlížeče, které ten váš nepodporuje.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Pro nejlepší zážitek si prosím nainstalujte prohlížeč Chrome, Firefox, nebo Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Můžete pokračovat v užívání vašeho současného prohlížeče, ale některé (nebo dokonce všechny) funkce nemusí fungovat a vzhled a chování aplikace nemusí být správné.", + "I understand the risks and wish to continue": "Rozumím a přesto chci pokračovat", + "Go to element.io": "Přejít na element.io" +} diff --git a/src/i18n/strings/cy.json b/src/i18n/strings/cy.json new file mode 100644 index 0000000..dcee343 --- /dev/null +++ b/src/i18n/strings/cy.json @@ -0,0 +1,17 @@ +{ + "The message from the parser is: %(message)s": "Y neges gan y dosrannudd yn: %(message)s", + "Invalid JSON": "JSON annilys", + "Unexpected error preparing the app. See console for details.": "Gwall annisgwyl wrth baratoi'r app. Gweler y consol am fanylion.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Gosodiad annilys: dim ond un o default_server_config, default_server_name, neu default_hs_url y gall ei nodi.", + "Invalid configuration: no default server specified.": "Gosodiad annilys: ni nodwyd gweinydd diofyn.", + "Unknown device": "Dyfais anhysbys", + "You need to be using HTTPS to place a screen-sharing call.": "Mae angen i chi fod yn defnyddio HTTPS i osod galwad rhannu sgrin.", + "powered by Matrix": "pwerwyd gan Matrix", + "Dismiss": "Wfftio", + "Welcome to Element": "Croeso i Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Sgwrsio a chydweithredu datganoledig a amgryptiedig â phwerwyd gan [matrix]", + "Sign In": "Mewngofnodi", + "Create Account": "Creu Cyfrif", + "Explore rooms": "Archwilio Ystafelloedd", + "Go to your browser to complete Sign In": "Ewch i'ch porwr i gwblhau Mewngofnodi" +} diff --git a/src/i18n/strings/da.json b/src/i18n/strings/da.json new file mode 100644 index 0000000..d31f055 --- /dev/null +++ b/src/i18n/strings/da.json @@ -0,0 +1,21 @@ +{ + "Dismiss": "Afslut", + "powered by Matrix": "Drevet af Matrix", + "Unknown device": "Ukendt enhed", + "You need to be using HTTPS to place a screen-sharing call.": "Du skal bruge HTTPS for at lave skærmdelings opkald.", + "Welcome to Element": "Velkommen til Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliseret, krypteret chat & samarbejde baseret på [matrix]", + "The message from the parser is: %(message)s": "Beskeden fra parseren er: %(message)s", + "Invalid JSON": "Ugyldig JSON", + "Unexpected error preparing the app. See console for details.": "Uventet fejl ved forberedelse af appen. Se konsollen for detaljer.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfiguration: kan kun angive en af default_server_config, default_server_name eller default_hs_url.", + "Invalid configuration: no default server specified.": "Ugyldig konfiguration: ingen standardserver angivet.", + "Sign In": "Log ind", + "Create Account": "Opret brugerkonto", + "Explore rooms": "Udforsk rum", + "Missing indexeddb worker script!": "Manglende indexeddb worker script!", + "Unable to load config file: please refresh the page to try again.": "Ikke i stand til at loade config fil: genopfrisk venligst siden for at prøve igen.", + "Open user settings": "Åbn brugerindstillinger", + "Previous/next recently visited room or community": "Forrige/næste besøgte rum eller fællesskab", + "Go to your browser to complete Sign In": "Gå til din browser for at færdiggøre Log ind" +} diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json new file mode 100644 index 0000000..1007742 --- /dev/null +++ b/src/i18n/strings/de_DE.json @@ -0,0 +1,36 @@ +{ + "powered by Matrix": "betrieben mit Matrix", + "Dismiss": "Ausblenden", + "Unknown device": "Unbekanntes Gerät", + "You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen um einen Anruf mit Bildschirmfreigabe durchzuführen.", + "Welcome to Element": "Willkommen bei Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung unterstützt von [matrix]", + "Sign In": "Anmelden", + "Create Account": "Account erstellen", + "Explore rooms": "Erkunde Räume", + "Unexpected error preparing the app. See console for details.": "Unerwarteter Fehler bei der Vorbereitung der App. Siehe Konsole für Details.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ungültige Konfiguration: Es kann nur eine der Optionen default_server_config, default_server_name oder default_hs_url angegeben werden.", + "Invalid configuration: no default server specified.": "Ungültige Konfiguration: Es wurde kein Standardserver angegeben.", + "The message from the parser is: %(message)s": "Die Nachricht des Parsers ist: %(message)s", + "Invalid JSON": "Ungültiges JSON", + "Go to your browser to complete Sign In": "Gehe zu deinem Browser, um die Anmeldung abzuschließen", + "Open user settings": "Öffne Nutzer-Einstellungen", + "Unable to load config file: please refresh the page to try again.": "Konfigurationsdatei kann nicht geladen werden: Bitte aktualisiere die Seite, um es erneut zu versuchen.", + "Missing indexeddb worker script!": "Fehlendes indexeddb Worker-Skript!", + "Previous/next recently visited room or community": "Vorheriger/nächster kürzlich besuchter Raum oder Community", + "Unsupported browser": "Nicht unterstützter Browser", + "Go to element.io": "Gehe zu element.io", + "Failed to start": "Start fehlgeschlagen", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Please install Chrome, Firefox, or Safari for the best experience.": "Bitte installiere Chrome, Firefox, oder Safari für das beste Erlebnis.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kannst mit diesem Browser weitermachen, aber einiges könnte nicht funktionieren und die Darstellung könnte fehlerhaft sein.", + "I understand the risks and wish to continue": "Ich verstehe die Risiken und möchte fortfahren", + "Your Element is misconfigured": "Dein Element ist fehlkonfiguriert", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Deine Element Konfiguration enthält ungültiges JSON. Bitte korrigiere das Problem und lade die Seite neu.", + "Download Completed": "Download fertiggestellt", + "Open": "Öffnen", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s verwendet erweiterte Browserfunktionen, die von Ihrem aktuellen Browser nicht unterstützt werden.", + "Your browser can't run %(brand)s": "Dein Browser kann %(brand)s nicht ausführen", + "Powered by Matrix": "Betrieben mit Matrix" +} diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json new file mode 100644 index 0000000..af818dd --- /dev/null +++ b/src/i18n/strings/el.json @@ -0,0 +1,33 @@ +{ + "Dismiss": "Απόρριψη", + "Unknown device": "Άγνωστη συσκευή", + "You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για την πραγματοποίηση κλήσης διαμοιρασμού επιφάνειας εργασίας.", + "powered by Matrix": "λειτουργεί με το Matrix", + "Welcome to Element": "Καλώς ήλθατε στο Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία και συνεργασία χρησιμοποιώντας το [matrix]", + "Sign In": "Σύνδεση", + "Create Account": "Δημιουργία Λογαριασμού", + "The message from the parser is: %(message)s": "Το μήνυμα από τον αναλυτή είναι: %(message)s", + "Invalid JSON": "Μη έγκυρο JSON", + "Unexpected error preparing the app. See console for details.": "Απρόοπτο σφάλμα κατά την προετοιμασία της εφαρμογής. Δείτε το τερματικό για λεπτομέρειες.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Μη έγκυρη ρύθμιση: δυνατότητα ορισμού μόνο ένα από τα default_server_config, default_server_name, ή default_hs_url.", + "Invalid configuration: no default server specified.": "Μη έγκυρη ρύθμιση παραμέτρων: δεν έχει οριστεί προκαθορισμένος διακομιστής.", + "Explore rooms": "Εξερευνήστε δωμάτια", + "Open": "Άνοιγμα", + "Go to your browser to complete Sign In": "Μεταβείτε στο πρόγραμμα περιήγησής σας για να ολοκληρώσετε τη σύνδεση", + "Powered by Matrix": "Με την υποστήριξη του Matrix", + "Please install Chrome, Firefox, or Safari for the best experience.": "Παρακαλούμε εγκαταστήστε Chrome, Firefox, ή Safari για καλύτερη εμπειρία χρήσης.", + "Your Element is misconfigured": "Το Element σας δεν εχει ρυθμιστεί σωστά", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Η ρύθμιση του Element περιέχει μη έγκυρο JSON. Διορθώστε το πρόβλημα και φορτώστε ξανά τη σελίδα.", + "Unable to load config file: please refresh the page to try again.": "Δεν είναι δυνατή η φόρτωση του αρχείου config: ανανεώστε τη σελίδα για να δοκιμάσετε ξανά.", + "Download Completed": "Η λήψη ολοκληρώθηκε", + "Open user settings": "Ανοίξτε τις ρυθμίσεις χρήστη", + "Previous/next recently visited room or community": "Προηγούμενο / επόμενο δωμάτιο ή κοινότητα που επισκεφτήκατε πρόσφατα", + "Unsupported browser": "Μη υποστηριζόμενο πρόγραμμα περιήγησης", + "Your browser can't run %(brand)s": "Το πρόγραμμα περιήγησής σας δεν μπορεί να εκτελέσει %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s χρησιμοποιεί προηγμένες δυνατότητες προγράμματος περιήγησης που δεν υποστηρίζονται από το τρέχον πρόγραμμα περιήγησής σας.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Μπορείτε να συνεχίσετε να χρησιμοποιείτε το τρέχον πρόγραμμα περιήγησής σας, αλλά ορισμένες ή όλες οι λειτουργίες ενδέχεται να μην λειτουργούν και η εμφάνιση και η αίσθηση της εφαρμογής ενδέχεται να είναι λανθασμένη.", + "I understand the risks and wish to continue": "Κατανοώ τους κινδύνους και επιθυμώ να συνεχίσω", + "Go to element.io": "Πήγαινε στο element.io", + "Failed to start": "Αποτυχία έναρξης" +} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json new file mode 100644 index 0000000..9c71b85 --- /dev/null +++ b/src/i18n/strings/en_EN.json @@ -0,0 +1,35 @@ +{ + "Missing indexeddb worker script!": "Missing indexeddb worker script!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.", + "Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.", + "Your Element is misconfigured": "Your Element is misconfigured", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.", + "The message from the parser is: %(message)s": "The message from the parser is: %(message)s", + "Invalid JSON": "Invalid JSON", + "Unable to load config file: please refresh the page to try again.": "Unable to load config file: please refresh the page to try again.", + "Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.", + "Download Completed": "Download Completed", + "Open": "Open", + "Dismiss": "Dismiss", + "Open user settings": "Open user settings", + "Previous/next recently visited room or community": "Previous/next recently visited room or community", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "Go to your browser to complete Sign In": "Go to your browser to complete Sign In", + "Unknown device": "Unknown device", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", + "Powered by Matrix": "Powered by Matrix", + "Unsupported browser": "Unsupported browser", + "Your browser can't run %(brand)s": "Your browser can't run %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uses advanced browser features which aren't supported by your current browser.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Please install Chrome, Firefox, or Safari for the best experience.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.", + "I understand the risks and wish to continue": "I understand the risks and wish to continue", + "Go to element.io": "Go to element.io", + "Failed to start": "Failed to start", + "Welcome to Element": "Welcome to Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]", + "Sign In": "Sign In", + "Create Account": "Create Account", + "Explore rooms": "Explore rooms" +} diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json new file mode 100644 index 0000000..d602690 --- /dev/null +++ b/src/i18n/strings/en_US.json @@ -0,0 +1,16 @@ +{ + "Dismiss": "Dismiss", + "powered by Matrix": "powered by Matrix", + "Unknown device": "Unknown device", + "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", + "Welcome to Element": "Welcome to Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]", + "Sign In": "Sign In", + "Create Account": "Create Account", + "Explore rooms": "Explore rooms", + "The message from the parser is: %(message)s": "The message from the parser is: %(message)s", + "Invalid JSON": "Invalid JSON", + "Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.", + "Invalid configuration: no default server specified.": "Invalid configuration: no default server specified." +} diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json new file mode 100644 index 0000000..89edcd1 --- /dev/null +++ b/src/i18n/strings/eo.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Rezigni", + "powered by Matrix": "povigita per Matrix", + "Unknown device": "Nekonata aparato", + "You need to be using HTTPS to place a screen-sharing call.": "Vi devas uzi HTTPS por ekranvidadi.", + "Welcome to Element": "Bonvenon al Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Malcentra, ĉifrita babilado & kunlaboro povigita per [matrix]", + "Sign In": "Saluti", + "Create Account": "Krei konton", + "Explore rooms": "Esplori ĉambrojn", + "Unexpected error preparing the app. See console for details.": "Neatendita eraro okazis dum la preparado de la aplikaĵo. Rigardu la konzolon por detaloj.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Nevalida agordo: vi povas specifi nur unu elekteblon el « default_server_config », « default_server_name », aŭ « default_hs_url ».", + "Invalid configuration: no default server specified.": "Nevalida agordo: neniu implicita servilo estas specifita.", + "The message from the parser is: %(message)s": "La mesaĝo el la analizilo estas: %(message)s", + "Invalid JSON": "Nevalida JSON", + "Go to your browser to complete Sign In": "Iru al via foliumilo por fini la saluton", + "Open user settings": "Malfermi agordojn de uzanto", + "Unable to load config file: please refresh the page to try again.": "Ne povas enlegi agordan dosieron: bonvolu reprovi per aktualigo de la paĝo.", + "Previous/next recently visited room or community": "Antaŭa/sekva freŝe vizitita ĉambro aŭ komunumo", + "Missing indexeddb worker script!": "Mankas fonskripto «indexeddb»!", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s labortabla (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Nesubtenata foliumilo", + "Please install Chrome, Firefox, or Safari for the best experience.": "Bonvolu instali foliumilon Chrome, Firefox, aŭ Safari, por la plej bona sperto.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Vi povas daŭre uzadi vian nunan foliumilon, sed iuj (eĉ ĉiuj) funkcioj eble ne funkcios, kaj la aspekto de la aplikaĵo eble ne estos ĝusta.", + "I understand the risks and wish to continue": "Mi komprenas la riskon kaj volas pluiĝi", + "Go to element.io": "Iri al element.io", + "Failed to start": "Malsukcesis starti", + "Download Completed": "Elŝuto finiĝis", + "Open": "Malfermi", + "Your Element is misconfigured": "Via Elemento estas misagordita", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Via agordaro de Elemento enhavas nevalidajn datumojn de JSON. Bonvolu korekti la problemon kaj aktualigi la paĝon.", + "Your browser can't run %(brand)s": "Via foliumilo ne povas ruli %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uzas specialajn funkciojn de foliumilo, kiujn via nuna foliumilo ne subtenas.", + "Powered by Matrix": "Povigata de Matrix" +} diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json new file mode 100644 index 0000000..f48ad2c --- /dev/null +++ b/src/i18n/strings/es.json @@ -0,0 +1,36 @@ +{ + "Unknown device": "Dispositivo desconocido", + "Dismiss": "Omitir", + "powered by Matrix": "con el poder de Matrix", + "You need to be using HTTPS to place a screen-sharing call.": "Debes usar HTTPS para hacer una llamada con pantalla compartida.", + "Welcome to Element": "Bienvenido a Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas & colaboración impulsada por [matrix]", + "Sign In": "Iniciar sesión", + "Create Account": "Crear cuenta", + "Explore rooms": "Explorar salas", + "Unexpected error preparing the app. See console for details.": "Error inesperado preparando la aplicación. Vea la consola para más detalles.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración errónea: sólo puede especificar uno de default_server_config, default_server_name, o default_hs_url.", + "Invalid configuration: no default server specified.": "Configuración errónea: no se ha especificado servidor.", + "The message from the parser is: %(message)s": "El mensaje del parser es: %(message)s", + "Invalid JSON": "JSON inválido", + "Open user settings": "Abrir opciones de usuario", + "Go to your browser to complete Sign In": "Abre tu navegador web para completar el registro", + "Missing indexeddb worker script!": "Falta el script de trabajo indexeddb!", + "Unable to load config file: please refresh the page to try again.": "No se ha podido cargar el archivo de configuración. Recarga la página para intentar nuevamente.", + "Previous/next recently visited room or community": "Anterior/siguiente sala o comunidad visitada recientemente", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Escritorio (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Navegador no soportado", + "Please install Chrome, Firefox, or Safari for the best experience.": "Por favor, instale Chrome, Firefox, o Safari para la mejor experiencia.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Puedes seguir utilizando tu navegador actual, pero puede que algunas funcionalidades no estén disponibles o que algunas partes de la aplicación se muestren de forma incorrecta.", + "I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar", + "Go to element.io": "Ir a element.io", + "Failed to start": "Fallo al iniciar", + "Your Element is misconfigured": "Tu elemento está mal configurado", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Su configuración de Element contiene JSON inválido. Por favor corríjalo e inténtelo de nuevo.", + "Download Completed": "Descarga completada", + "Open": "Abrir", + "Your browser can't run %(brand)s": "Su navegador es incompatible con %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funciones avanzadas que su navegador actual no soporta.", + "Powered by Matrix": "Desarrollado por Matrix" +} diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json new file mode 100644 index 0000000..8b6dc8d --- /dev/null +++ b/src/i18n/strings/et.json @@ -0,0 +1,36 @@ +{ + "The message from the parser is: %(message)s": "Sõnum parserist on: %(message)s", + "Invalid JSON": "Vigane JSON", + "Unknown device": "Tundmatu seade", + "Invalid configuration: no default server specified.": "Vigane seadistus: vaikimisi server on määramata.", + "Unable to load config file: please refresh the page to try again.": "Seadistuste faili laadimine ei õnnestunud: uuesti proovimiseks palun lae leht uuesti.", + "Unexpected error preparing the app. See console for details.": "Rakenduse ettevalmistamisel tekkis ootamatu viga. Täpsema teabe leiad konsoolist.", + "Open user settings": "Ava kasutaja seadistused", + "Go to your browser to complete Sign In": "Sisselogimiseks ava oma brauser", + "Dismiss": "Loobu", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Matrix'i protokollil põhinev hajutatud ja krüpteeritud suhtlus- ning ühistöörakendus", + "Explore rooms": "Uuri jututubasid", + "Missing indexeddb worker script!": "Lahendusest puudub indexeddb skript!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Vigane seadistus. Sa võid määrata vaid ühe alljärgnevatest: default_server_config, default_server_name või default_hs_url.", + "Previous/next recently visited room or community": "Eelmine/järgmine hiljuti kasutatud jututuba või kogukond", + "You need to be using HTTPS to place a screen-sharing call.": "Ekraani jagava kõne jaoks pead kasutama HTTPS-ühendust.", + "powered by Matrix": "põhineb Matrix'il", + "Welcome to Element": "Tere tulemast Element kasutajaks", + "Sign In": "Logi sisse", + "Create Account": "Loo konto", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s'i töölauaversioon (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Sellele brauserile puudub tugi", + "Please install Chrome, Firefox, or Safari for the best experience.": "Parima kasutuskogemuse jaoks palun paigalda Chrome, Firefox või Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Sa võid jätkata praeguse brauseri kasutamist, kuid mõned või kõik funktsionaalsused ei pruugi toimida ning rakenduse välimus võib vigane olla.", + "I understand the risks and wish to continue": "Ma mõistan riske ja soovin jätkata", + "Go to element.io": "Mine element.io lehele", + "Failed to start": "Käivitamine ei õnnestunud", + "Download Completed": "Allalaadimine on lõpetatud", + "Open": "Ava", + "Your Element is misconfigured": "Sinu Element on valesti seadistatud", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Sinu Element'i seadistustes on vigased JSON-vormingus andmed. Palun paranda see viga ja lae leht uuesti.", + "Your browser can't run %(brand)s": "%(brand)s ei toimi sinu brauseris", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s kasutab mitmeid uusi brauseri-põhiseid tehnoloogiaid, mis ei ole veel sinu veebibrauseris toetatud.", + "Powered by Matrix": "Põhineb Matrix'il" +} diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json new file mode 100644 index 0000000..030f113 --- /dev/null +++ b/src/i18n/strings/eu.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Baztertu", + "powered by Matrix": "Matrix-ekin egina", + "Unknown device": "Gailu ezezaguna", + "You need to be using HTTPS to place a screen-sharing call.": "HTTPS erabili behar duzu sekretuak partekatzeko dei bat ezartzeko.", + "Welcome to Element": "Ongi etorri Element mezularitzara", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Txat eta elkarlan deszentralizatua eta zifratua [matrix] sarean", + "Sign In": "Hasi saioa", + "Create Account": "Sortu kontua", + "Explore rooms": "Arakatu gelak", + "Unexpected error preparing the app. See console for details.": "Ustekabeko errorea aplikazioa prestatzean. Ikusi xehetasunak kontsolan.", + "Invalid configuration: no default server specified.": "Konfigurazio baliogabea: Ez da lehenetsitako zerbitzaririk zehaztu.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Konfigurazio baliogabea: default_server_config, default_server_name, edo default_hs_url bat bakarra zehaztu daiteke.", + "The message from the parser is: %(message)s": "Prozesatzailearen mezua hau da: %(message)s", + "Invalid JSON": "JSON baliogabea", + "Go to your browser to complete Sign In": "Joan zure nabigatzailera izena ematen bukatzeko", + "Open user settings": "Ireki erabiltzailearen ezarpenak", + "Missing indexeddb worker script!": "indexeddb langile scripta falta da!", + "Unable to load config file: please refresh the page to try again.": "Ezin izan da konfigurazio fitxategia kargatu: Saiatu orria birkargatzen.", + "Previous/next recently visited room or community": "Berriki bisitatutako aurreko/hurrengo gela edo komunitatea", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Onartu gabeko nabigatzailea", + "Please install Chrome, Firefox, or Safari for the best experience.": "Instalatu Chrome, Firefox, edo Safari esperientzia hobe baterako.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Zure oraingo nabigatzailea erabiltzen jarraitu dezakezu, baina ezaugarri batzuk agian ez dute funtzionatuko eta itxura desegokia izan daiteke.", + "I understand the risks and wish to continue": "Arriskuak ulertzen ditut eta jarraitu nahi dut", + "Go to element.io": "Joan element.io gunera", + "Failed to start": "Huts egin du abiatzean", + "Your Element is misconfigured": "Zure Element ez dago ondo konfiguratuta", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Zure Element-en konfigurazioak JSON baliogabea dauka. Mesedez, konpondu arazoa eta birkargatu orria.", + "Download Completed": "Deskarga burututa", + "Open": "Ireki", + "Your browser can't run %(brand)s": "Zure nabigatzaileak ezin du %(brand)s exekutatu", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s-(e)k zure oraingo nabigatzaile honek euskarririk ematen ez dien ezaugarri aurreratuak erabiltzen ditu.", + "Powered by Matrix": "Matrixekin egina" +} diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json new file mode 100644 index 0000000..2b504cf --- /dev/null +++ b/src/i18n/strings/fa.json @@ -0,0 +1,36 @@ +{ + "powered by Matrix": "قدرت‌یافته از ماتریکس", + "Unknown device": "دستگاه ناشناخته", + "Welcome to Element": "به Element خوش‌آمدید", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "چت غیر‌متمرکز، رمزنگاری‌شده & قدرت‌گرفته از ماتریکس", + "Dismiss": "نادیده بگیر", + "You need to be using HTTPS to place a screen-sharing call.": "شما باید از ارتباط امن HTTPS برای به‌راه‌اندازی یک چتِ شامل به اشتراک‌گذاری صفحه‌ی کامیپوتر استفاده کنید.", + "Invalid JSON": "JSON اشتباه", + "Open user settings": "تنظیمات کاربر", + "Go to your browser to complete Sign In": "برای تکمیل ورود به مرورگر خود بروید", + "Sign In": "ورود", + "Create Account": "ایجاد اکانت", + "Explore rooms": "کاوش اتاق", + "Missing indexeddb worker script!": "اسکریپت کارگر نمایه پایگاه داده از دست رفته است!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "پیکربندی نامعتبر: فقط میتوانید یکی از default_server_config، default_server_name یا default_hs_url را مشخص کنید.", + "Invalid configuration: no default server specified.": "پیکربندی نامعتبر: سرور پیشفرض مشخص نشده است.", + "Your Element is misconfigured": "Element شما پیکربندی نشده است", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "پیکربندی المنت شما شامل JSON نا معتبر است. لطفا مشکل را اصلاح کنید و صفحه را بارگذاری مجدد کنید.", + "The message from the parser is: %(message)s": "پیام از طرف تجزیه کننده: %(message)s", + "Unable to load config file: please refresh the page to try again.": "قادر به بارگذاری فایل پیکربندی نیست: لطفا برای تلاش مجدد صفحه را تازه کنید.", + "Unexpected error preparing the app. See console for details.": "خطای غیر منتظره در آماده سازی برنامه. کنسول را برای جزئیات مشاهده کنید.", + "Download Completed": "بارگیری کامل شد", + "Open": "باز", + "Previous/next recently visited room or community": "قبلی/بعدی اتاق ها یا اجتماع های اخیرا بازدید شده", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s میزکار %(platformName)s", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s%(browserName)s، %(osName)s", + "Unsupported browser": "مرورگر پش‬تبانی نشده", + "Your browser can't run %(brand)s": "مرورگر شما نمیتواند %(brand)s را اجرا کند", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s از ویژگی های پیشرفته مرورگر استفاده میکند که که در مرورگر فعلی شما پشتیبانی نمیشوند.", + "Please install Chrome, Firefox, or Safari for the best experience.": "لطفا برای تجربه بهتر کروم، فایرفاکس، یا سافاری را نصب کنید.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "شما میتوانید با مرورگر فعلی خود ادامه دهید، اما ممکن است برخی یا کل ویژگی ها کار نکنند و نگاه و احساس از برنامه ممکن است درست نباشد.", + "I understand the risks and wish to continue": "از خطرات این کار آگاهم و مایلم که ادامه بدهم", + "Go to element.io": "برو به element.io", + "Failed to start": "مشکل در آغاز", + "Powered by Matrix": "قدرت‌گرفته از ماتریکس" +} diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json new file mode 100644 index 0000000..64b60b0 --- /dev/null +++ b/src/i18n/strings/fi.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Hylkää", + "Unknown device": "Tuntematon laite", + "Welcome to Element": "Tervetuloa Element-sovellukseen", + "You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS-yhteyttä, jotta voit jakaa ruudun puhelussa.", + "powered by Matrix": "moottorina Matrix", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Hajautettua ja salattua viestintää Matrix-teknologialla", + "Sign In": "Kirjaudu", + "Create Account": "Luo tili", + "Explore rooms": "Selaa huoneita", + "Unexpected error preparing the app. See console for details.": "Odottamaton virhe sovellusta valmisteltaessa. Katso konsolista lisätietoja.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Virheellinen asetus. Vain yhden seuraavista voi määrittää: default_server_config, default_server_name, tai default_hs_url.", + "Invalid configuration: no default server specified.": "Virheellinen asetus: oletuspalvelinta ei ole määritetty.", + "The message from the parser is: %(message)s": "Viesti jäsentimeltä: %(message)s", + "Invalid JSON": "Virheellinen JSON", + "Missing indexeddb worker script!": "Indexeddb-suorittajan skripti puuttuu!", + "Unable to load config file: please refresh the page to try again.": "Asetustiedostoa ei voi ladata. Yritä uudelleen lataamalla sivu uudelleen.", + "Open user settings": "Avaa käyttäjäasetukset", + "Previous/next recently visited room or community": "Edellinen/seuraava hiljattain vierailtu huone tai yhteisö", + "%(brand)s Desktop (%(platformName)s)": "%(brand)sin työpöytäversio (%(platformName)s)", + "Go to your browser to complete Sign In": "Tee kirjautuminen loppuun selaimessasi", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Selainta ei tueta", + "Please install Chrome, Firefox, or Safari for the best experience.": "Asenna Chrome, Firefox tai Safari, jotta kaikki toimii parhaiten.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Voit käyttää edelleen nykyistä selaintasi, mutta jotkut tai kaikki ominaisuudet eivät ehkä toimi ja sovelluksen ulkoasu voi olla virheellinen.", + "I understand the risks and wish to continue": "Ymmärrän riskit ja haluan jatkaa", + "Failed to start": "Käynnistys ei onnistunut", + "Download Completed": "Lataus valmis", + "Open": "Avaa", + "Go to element.io": "Mene osoitteeseen riot.im", + "Your Element is misconfigured": "Elementisi asetukset ovat pielessä", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element-asetuksesi sisältävät epäkelpoa JSONia. Korjaa ongelma ja lataa sivu uudelleen.", + "Powered by Matrix": "Moottorina Matrix", + "Your browser can't run %(brand)s": "%(brand)s ei toimi selaimessasi", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s käyttää edistyneitä selaimen ominaisuuksia, joita nykyinen selaimesi ei tue." +} diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json new file mode 100644 index 0000000..dd7784b --- /dev/null +++ b/src/i18n/strings/fr.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Ignorer", + "powered by Matrix": "propulsé par Matrix", + "Unknown device": "Appareil inconnu", + "You need to be using HTTPS to place a screen-sharing call.": "Vous devez utiliser HTTPS pour effectuer un appel avec partage d’écran.", + "Welcome to Element": "Bienvenue sur Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Discussion & collaboration décentralisées et chiffrées, propulsées par [matrix]", + "Sign In": "Se connecter", + "Create Account": "Créer un compte", + "Explore rooms": "Explorer les salons", + "Unexpected error preparing the app. See console for details.": "Une erreur inattendue est survenue pendant la préparation de l’application. Consultez la console pour avoir des détails.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuration invalide : il ne faut spécifier qu’un des trois champs entre default_server_config, default_server_name et default_hs_url.", + "Invalid configuration: no default server specified.": "Configuration invalide : aucun serveur par défaut spécifié.", + "The message from the parser is: %(message)s": "Le message de l’analyseur est : %(message)s", + "Invalid JSON": "JSON non valide", + "Go to your browser to complete Sign In": "Utilisez votre navigateur pour terminer la connexion", + "Open user settings": "Ouvrir les paramètres utilisateur", + "Missing indexeddb worker script!": "Script du worker IndexedDB manquant !", + "Unable to load config file: please refresh the page to try again.": "Impossible de charger le fichier de configuration : rafraichissez la page pour réessayer.", + "Previous/next recently visited room or community": "Salon ou communauté visité récemment précédent/suivant", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Navigateur non pris en charge", + "Please install Chrome, Firefox, or Safari for the best experience.": "Veuillez installer Chrome, Firefox ou Safari pour une expérience optimale.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Vous pouvez continuer à utiliser votre navigateur actuel, mais vous risquez de trouver que certaines fonctionnalités et/ou l'apparence de l'application sont incorrectes.", + "I understand the risks and wish to continue": "Je comprends les risques et souhaite continuer", + "Go to element.io": "Aller vers element.io", + "Failed to start": "Échec au démarrage", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s pour bureau (%(platformName)s)", + "Download Completed": "Téléchargement terminé", + "Open": "Ouvrir", + "Your Element is misconfigured": "Votre Element est mal configuré", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuration de votre Element contient du JSON invalide. Veuillez corriger le problème et recharger la page.", + "Your browser can't run %(brand)s": "Votre navigateur ne peut pas exécuter %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s nécessite des fonctionnalités avancées que votre navigateur actuel ne supporte pas.", + "Powered by Matrix": "Propulsé par Matrix" +} diff --git a/src/i18n/strings/ga.json b/src/i18n/strings/ga.json new file mode 100644 index 0000000..2b46f75 --- /dev/null +++ b/src/i18n/strings/ga.json @@ -0,0 +1,11 @@ +{ + "Unknown device": "Gléas nár aithníodh", + "You need to be using HTTPS to place a screen-sharing call.": "Ní mór HTTPS a úsáid chun glaoch comhroinnt scáileáin a chur.", + "powered by Matrix": "cumhachtaithe ag Matrix", + "Dismiss": "Cuir uait", + "Welcome to Element": "Fáilte romhat chuig Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Meán comhrá agus comhoibriú, díláraithe agus criptithe, cumhachtaithe ag [matrix]", + "Sign In": "Sínigh Isteach", + "Create Account": "Déan cuntas a chruthú", + "Explore rooms": "Breathnaigh thart ar na seomraí" +} diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json new file mode 100644 index 0000000..d37ae41 --- /dev/null +++ b/src/i18n/strings/gl.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Rexeitar", + "powered by Matrix": "funciona grazas a Matrix", + "Unknown device": "Dispositivo descoñecido", + "You need to be using HTTPS to place a screen-sharing call.": "Precisa utilizar HTTPS para establecer unha chamada de pantalla compartida.", + "Welcome to Element": "Benvida/o a Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversas e colaboración descentralizada e cifrada grazas a [matrix]", + "Sign In": "Conectar", + "Create Account": "Crear conta", + "Explore rooms": "Explorar salas", + "The message from the parser is: %(message)s": "A mensaxe desde o intérprete é: %(message)s", + "Invalid JSON": "JSON non válido", + "Unexpected error preparing the app. See console for details.": "Fallo non agardado ao preparar a app. Detalles na consola.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración non válida: só se pode indicar un de default_server_config, default_server_name, ou default_hs_url.", + "Invalid configuration: no default server specified.": "Configuración non válida: non se indicou servidor por omisión.", + "Missing indexeddb worker script!": "Falta o script indexeddb!", + "Unable to load config file: please refresh the page to try again.": "Non se cargou o ficheiro de configuración: actualiza a páxina para reintentalo.", + "Open user settings": "Abrir axustes da usuaria", + "Previous/next recently visited room or community": "Anterior/seguinte sala ou comunidade recentes", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "Go to your browser to complete Sign In": "Abre o navegador para realizar a Conexión", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Navegador non soportado", + "Please install Chrome, Firefox, or Safari for the best experience.": "Instala Chrome, Firefox, ou Safari para ter unha mellor experiencia.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Podes continuar co teu navegador, pero algunhas características poderían non funcionar e o aspecto da aplicación podería non ser o correcto.", + "I understand the risks and wish to continue": "Entendo os riscos e desexo continuar", + "Go to element.io": "Ir a element.io", + "Failed to start": "Fallou o inicio", + "Download Completed": "Descarga realizada", + "Open": "Abrir", + "Your Element is misconfigured": "Element non está ben configurado", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "A configuración de Element contén JSON non válido. Corrixe o problema e recarga a páxina.", + "Your browser can't run %(brand)s": "O teu navegador non pode executar %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utiliza características avanzadas do navegador que non están dispoñibles no teu navegador.", + "Powered by Matrix": "Funciona grazas a Matrix" +} diff --git a/src/i18n/strings/he.json b/src/i18n/strings/he.json new file mode 100644 index 0000000..555c001 --- /dev/null +++ b/src/i18n/strings/he.json @@ -0,0 +1,13 @@ +{ + "Dismiss": "שחרר", + "powered by Matrix": "מופעל ע\"י Matrix", + "Unknown device": "מכשיר לא ידוע", + "You need to be using HTTPS to place a screen-sharing call.": "עליך להשתמש ב HTTPS בכדי לבצע שיחת ווידאו משותפת.", + "Welcome to Element": "ברוכים הבאים ל Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "צ'ט מוצפן & ושת\"פ נעשה ע\"י ה [matrix]", + "Invalid JSON": "JSON לא חוקי", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "תצורה שגויה: ניתן לציין רק אחד מהבאים, default_server_config, default_server_name, או default_hs_url.", + "Invalid configuration: no default server specified.": "תצורה שגויה: לא צוין שרת ברירת מחדל.", + "Open user settings": "פתיחת הגדרות משתמש", + "Go to your browser to complete Sign In": "עבור לדפדפן להמשך ההתחברות" +} diff --git a/src/i18n/strings/hi.json b/src/i18n/strings/hi.json new file mode 100644 index 0000000..8aa012a --- /dev/null +++ b/src/i18n/strings/hi.json @@ -0,0 +1,11 @@ +{ + "Unknown device": "अज्ञात यन्त्र", + "You need to be using HTTPS to place a screen-sharing call.": "स्क्रीन साझा की कॉल करने के लिए आपको HTTPS का उपयोग करने की आवश्यकता है।", + "Dismiss": "खारिज", + "powered by Matrix": "मैट्रिक्स द्वारा संचालित", + "Welcome to Element": "Element में आपका स्वागत है", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "[मैट्रिक्स] द्वारा संचालित विकेंद्रीकृत, एन्क्रिप्टेड चैट और सहयोगिता", + "Sign In": "साइन करना", + "Create Account": "खाता बनाएं", + "Explore rooms": "रूम का अन्वेषण करें" +} diff --git a/src/i18n/strings/hr.json b/src/i18n/strings/hr.json new file mode 100644 index 0000000..a3dfce0 --- /dev/null +++ b/src/i18n/strings/hr.json @@ -0,0 +1,8 @@ +{ + "Unknown device": "Nepoznati uređaj", + "You need to be using HTTPS to place a screen-sharing call.": "Morate koristiti HTTPS kako biste pokrenuli poziv s dijeljenjem ekrana.", + "Dismiss": "Odbaci", + "powered by Matrix": "powered by Matrix", + "Welcome to Element": "Dobrodošli u Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirani, enkriptirani chat & kolaboracija powered by [matrix]" +} diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json new file mode 100644 index 0000000..e33e527 --- /dev/null +++ b/src/i18n/strings/hu.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Eltüntetés", + "powered by Matrix": "a gépházban: Matrix", + "Unknown device": "Ismeretlen eszköz", + "You need to be using HTTPS to place a screen-sharing call.": "Képernyőmegosztás indításához HTTPS-t kell használnod.", + "Welcome to Element": "Üdvözöl a Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizált, titkosított csevegés és kollaboráció [matrix] alapokon", + "Sign In": "Bejelentkezés", + "Create Account": "Fiók létrehozása", + "Explore rooms": "Szobák felderítése", + "Unexpected error preparing the app. See console for details.": "Váratlan hiba történt az alkalmazás előkészítésénél. A részletekért nézd meg a konzolt.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Érvénytelen konfiguráció: csak egyet lehet megadni a default_server_config, default_server_name és default_hs_url közül.", + "Invalid configuration: no default server specified.": "Érvénytelen konfiguráció: nincs megadva alapértelmezett kiszolgáló.", + "The message from the parser is: %(message)s": "A feldolgozó algoritmus üzenete: %(message)s", + "Invalid JSON": "Érvénytelen JSON", + "Go to your browser to complete Sign In": "A böngészőben fejezd be a bejelentkezést", + "Open user settings": "Felhasználói beállítások megnyitása", + "Missing indexeddb worker script!": "Hiányzó indexeddb worker parancsfájl!", + "Unable to load config file: please refresh the page to try again.": "A konfigurációs fájlt nem sikerült betölteni: frissítsd az oldalt és próbáld meg újra.", + "Previous/next recently visited room or community": "Előző/következő nemrég meglátogatott szobák vagy közösségek", + "%(brand)s Desktop (%(platformName)s)": "Asztali %(brand)s (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "A böngésző nem támogatott", + "Please install Chrome, Firefox, or Safari for the best experience.": "A legjobb élmény eléréséhez kérlek telepíts Chrome-ot, Firefoxot vagy Safarit.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Folytathatod a jelenlegi böngésződdel, de néhány vagy az összes funkció használhatatlan lehet, vagy hibák lehetnek az alkalmazás kinézetében és viselkedésében.", + "I understand the risks and wish to continue": "Megértettem a kockázatot és folytatom", + "Go to element.io": "Irány a element.io", + "Failed to start": "Az indítás sikertelen", + "Download Completed": "A letöltés befejeződött", + "Open": "Megnyitás", + "Your Element is misconfigured": "Az Element hibásan van beállítva", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Az Element érvénytelen JSON-t tartalmazó konfigurációval rendelkezik. Kérlek javítsd és töltsd újra az oldalt.", + "Your browser can't run %(brand)s": "A böngésződ nem tudja futtatni ezt: %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s haladó böngésző funkciókat használ amiket a jelenlegi böngésződ nem támogat.", + "Powered by Matrix": "A gépházban: Matrix" +} diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json new file mode 100644 index 0000000..86cd1a4 --- /dev/null +++ b/src/i18n/strings/id.json @@ -0,0 +1,8 @@ +{ + "Dismiss": "Abaikan", + "powered by Matrix": "didukung oleh Matrix", + "Unknown device": "Perangkat Tidak Diketahui", + "You need to be using HTTPS to place a screen-sharing call.": "Anda perlu menggunakan HTTPS untuk melakukan panggilan berbagi-layar.", + "Welcome to Element": "Selamat datang di Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Obrolan terenkripsi, terdesentralisasi & kolaborasi didukung oleh [matrix]" +} diff --git a/src/i18n/strings/is.json b/src/i18n/strings/is.json new file mode 100644 index 0000000..7e1fc15 --- /dev/null +++ b/src/i18n/strings/is.json @@ -0,0 +1,22 @@ +{ + "powered by Matrix": "keyrt með Matrix", + "Welcome to Element": "Velkomin í Element", + "Unknown device": "Óþekkt tæki", + "Dismiss": "Hafna", + "You need to be using HTTPS to place a screen-sharing call.": "Þú verður að nota HTTPS til að hringja samtal með deilingu á skjá.", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dulritað dreifvinnsluspjall & samstarfstól keyrt með [matrix]", + "Open": "Opna", + "Unsupported browser": "Óstuddur vafri", + "Your browser can't run %(brand)s": "Vafri þinn geta ekki keyrt upp %(brand)s", + "Sign In": "Skrá inn", + "Create Account": "Stofna Reikning", + "Explore rooms": "Kanna herbergi", + "Missing indexeddb worker script!": "Að vanta indexeddb vinnumaður tölvuhandrit!", + "The message from the parser is: %(message)s": "Skilaboðið frá þáttaranum er %(message)s", + "Invalid JSON": "Ógilt JSON", + "Download Completed": "Niðurhalið Búið", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Please install Chrome, Firefox, or Safari for the best experience.": "vinsamlegast setja upp Chrome, Firefox, eða Safari fyrir besta reynsluna.", + "I understand the risks and wish to continue": "Ég skil áhættuna og óska að halda áfram", + "Go to element.io": "farðu í element.io" +} diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json new file mode 100644 index 0000000..d503c07 --- /dev/null +++ b/src/i18n/strings/it.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Chiudi", + "powered by Matrix": "offerto da Matrix", + "Unknown device": "Dispositivo sconosciuto", + "You need to be using HTTPS to place a screen-sharing call.": "Devi usare HTTPS per effettuare una chiamata con la condivisione dello schermo.", + "Welcome to Element": "Benvenuti su Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat criptate, decentralizzate e collaborazioni offerte da [matrix]", + "Sign In": "Accedi", + "Create Account": "Crea account", + "Explore rooms": "Esplora stanze", + "Unexpected error preparing the app. See console for details.": "Errore inaspettato preparando l'app. Vedi la console per i dettagli.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configurazione non valida: specificare solo uno di default_server_config, default_server_name, o default_hs_url.", + "Invalid configuration: no default server specified.": "Configurazione non valida: nessun server predefinito specificato.", + "The message from the parser is: %(message)s": "Il messaggio dal parser è: %(message)s", + "Invalid JSON": "JSON non valido", + "Go to your browser to complete Sign In": "Vai nel tuo browser per completare l'accesso", + "Open user settings": "Apri impostazioni utente", + "Missing indexeddb worker script!": "Script di lavoro indexeddb mancante!", + "Unable to load config file: please refresh the page to try again.": "Impossibile caricare il file di configurazione: ricarica la pagina per riprovare.", + "Previous/next recently visited room or community": "Avanti/indietro stanze o comunità visitate di recente", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Browser non supportato", + "Please install Chrome, Firefox, or Safari for the best experience.": "Installa Chrome, Firefox, o Safari per una migliore esperienza.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Puoi comunque usare il browser attuale, ma alcune o tutte le caratteristiche potrebbero non funzionare e l'aspetto dell'applicazione potrebbe essere sbagliato.", + "I understand the risks and wish to continue": "Capisco i rischi e desidero continuare", + "Go to element.io": "Vai su element.io", + "Failed to start": "Avvio fallito", + "Download Completed": "Scaricamento completato", + "Open": "Apri", + "Your Element is misconfigured": "Il tuo elemento è configurato male", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configurazione del tuo elemento contiene un JSON non valido. Correggi il problema e ricarica la pagina.", + "Your browser can't run %(brand)s": "Il tuo browser non può eseguire %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funzionalità avanzate del browser che non sono supportate dal tuo browser attuale.", + "Powered by Matrix": "Offerto da Matrix" +} diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json new file mode 100644 index 0000000..eeaf0d4 --- /dev/null +++ b/src/i18n/strings/ja.json @@ -0,0 +1,34 @@ +{ + "Welcome to Element": "Element へようこそ", + "Unknown device": "不明な端末", + "Dismiss": "やめる", + "powered by Matrix": "powered by Matrix", + "You need to be using HTTPS to place a screen-sharing call.": "画面共有通話を行うにはHTTPS通信を使う必要があります。", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] による、分散型で暗号化された会話とコラボレーション", + "Unexpected error preparing the app. See console for details.": "アプリケーションの準備中に予期しないエラーが発生しました。詳細はコンソールを参照してください。", + "Invalid configuration: no default server specified.": "不正な設定です:デフォルトのサーバーが設定されていません。", + "Sign In": "サインイン", + "Create Account": "アカウント作成", + "Explore rooms": "部屋を探索する", + "The message from the parser is: %(message)s": "パーザーのメッセージ: %(message)s", + "Invalid JSON": "妥当でないJSON", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "無効な設定: default_server_config、default_server_name、または default_hs_urlのいずれか一つのみが指定できます。", + "Please install Chrome, Firefox, or Safari for the best experience.": "最高のユーザー体験を得るためには、ChromeFirefox、もしくはSafariをインストールしてください。", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "現在のブラウザを使い続けることもできますが、いくつか (もしくは全ての) 機能が動作しない可能性や、外観が崩れる可能性があります。", + "I understand the risks and wish to continue": "リスクを理解したうえで続行する", + "Missing indexeddb worker script!": "IndexedDBのワーカースクリプトがありません!", + "Unable to load config file: please refresh the page to try again.": "設定ファイルの読み込みに失敗しました: ページを再読み込みしてもう一度お試しください。", + "Download Completed": "ダウンロード完了", + "Open": "開く", + "Open user settings": "ユーザー設定を開く", + "%(brand)s Desktop (%(platformName)s)": "%(brand)sデスクトップ版(%(platformName)s)", + "Go to your browser to complete Sign In": "サインインを完了させるためにブラウザへ移動してください", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s(%(browserName)s, %(osName)s)", + "Unsupported browser": "サポートされていないブラウザ", + "Go to element.io": "element.ioへ移動", + "Failed to start": "起動に失敗しました", + "Your Element is misconfigured": "Elementの設定が間違っています", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Elementの設定ファイルに不正なJSONが含まれています。問題を修正してからページを再読込してください。", + "Your browser can't run %(brand)s": "このブラウザでは%(brand)sが動きません", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)sはブラウザの高度な機能を使う必要がありますが、このブラウザではその機能がサポートされていないようです。" +} diff --git a/src/i18n/strings/jbo.json b/src/i18n/strings/jbo.json new file mode 100644 index 0000000..dfdb595 --- /dev/null +++ b/src/i18n/strings/jbo.json @@ -0,0 +1,36 @@ +{ + "Unknown device": "se samtcise'u vau je na slabu", + "You need to be using HTTPS to place a screen-sharing call.": ".i lo nu do pilno la'au xy. bu ty. ty. py. sy. li'u sarcu lo nu do co'a vidni benji", + "Dismiss": "nu mipri", + "powered by Matrix": ".i la .meitriks. cu jicmu", + "Decentralised, encrypted chat & collaboration powered by [matrix]": ".i la .meitriks. cu jicmu lo nu catni be na ku je mifra tavla je ke kansa gunka", + "Invalid JSON": ".i le veirdjeisano na drani", + "Download Completed": ".i mo'u kibycpa", + "Open": "nu viska", + "%(brand)s Desktop (%(platformName)s)": ".i la'o zoi. %(brand)s .zoi samtci .i le vanbi na kibrbrauzero .i la'o zoi. %(platformName)s .zoi samcmu", + "Go to your browser to complete Sign In": ".i do ka'e pilno pa kibrbrauzero lo nu mo'u co'a jaspu", + "%(appName)s (%(browserName)s, %(osName)s)": ".i la'o zoi. %(appName)s .zoi samtci .i la'o zoi. %(browserName)s .zoi kibrbrauzero .i la'o zoi. %(osName)s .zoi samcmu", + "Unsupported browser": ".i le kibrbrauzero na kakne", + "Your browser can't run %(brand)s": ".i na ka'e pilno le kibrbrauzero lo nu pilno la'o zoi. %(brand)s .zoi", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": ".i la'o zoi. %(brand)s .zoi pilno pa na jai se kakne be le kibrbrauzero", + "Please install Chrome, Firefox, or Safari for the best experience.": ".i ko ci'erse'a la .krom. ja la .fairfoks. ja la .safaris.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": ".i do ka'e za'o pilno le kibrbrauzero .i ku'i la'a spofu pa jo nai ro te pilno vau je na drani fa le jvinu", + "I understand the risks and wish to continue": ".i mi jimpe le du'u ckape vau vau je za'o djica", + "Go to element.io": "nu viska le se judri be zoi zoi. element.io .zoi", + "Failed to start": ".i da nabmi fi lo nu co'a pilno", + "Welcome to Element": ".i fi'i zo'e do pilno la .elyment.", + "Sign In": "nu co'a jaspu", + "Create Account": "nu pa re'u co'a jaspu", + "Explore rooms": "nu facki le du'u ve zilbe'i", + "Missing indexeddb worker script!": ".i na pa gunka samtci pe la'o zoi. indexeddb .zoi vanbi", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": ".i le tcimi'e vreji na drani le ka jai do'e fai gi jo nai zoi zoi. default_server_config .zoi gi zoi zoi. default_server_name .zoi gi zoi zoi. default_hs_url .zoi cmene da", + "Invalid configuration: no default server specified.": ".i le tcimi'e vreji na drani le ka jai do'e zmicu'a fo le ka samtcise'u", + "Your Element is misconfigured": ".i le tcimi'e be la .elyment. be'o vreji na drani", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": ".i le tcimi'e be la .elyment. be'o vreji na drani le ka veirdjeisano .i gau ko drani je ba kibycpa le kibypapri", + "The message from the parser is: %(message)s": ".i notci fi le genturfa'i fa zoi zoi. %(message)s .zoi", + "Unable to load config file: please refresh the page to try again.": ".i da nabmi fi lo nu samymo'i le tcimi'e vreji .i ko ba zukte le ka kibycpa le kibypapri kei le ka troci", + "Unexpected error preparing the app. See console for details.": ".i da nabmi fi lo nu co'a ka'e pilno le samtci .i ko tcidu le notci be fi le samymi'etci", + "Open user settings": "nu viska le pilno tcimi'e tutci", + "Previous/next recently visited room or community": "ve zilbe'i vau ja girzu vau je bo lamli'e vau ja se lamli'e", + "Powered by Matrix": ".i la .meitriks. cu jicmu" +} diff --git a/src/i18n/strings/ka.json b/src/i18n/strings/ka.json new file mode 100644 index 0000000..b16781e --- /dev/null +++ b/src/i18n/strings/ka.json @@ -0,0 +1,8 @@ +{ + "Unknown device": "უცნობი მოწყობილობა", + "You need to be using HTTPS to place a screen-sharing call.": "ეკრანის გაზიარების ფუნქციის მქონე ზარისთვის საჭიროა, იყენებდეთ HTTPS-ს.", + "Dismiss": "უარის თქმა", + "powered by Matrix": "Matrix-ზე დაფუძნებული", + "Welcome to Element": "კეთილი იყოს თქვენი მობრძანება Element-ზე", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "დეცენტრალიზებული, დაშიფრული ჩატი & კოლაბორაცია, დაფუძნებული [matrix]-ზე" +} diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json new file mode 100644 index 0000000..9a3ccd2 --- /dev/null +++ b/src/i18n/strings/kab.json @@ -0,0 +1,36 @@ +{ + "Invalid JSON": "JSON armeɣtu", + "Open user settings": "Ldi iɣewwaṛen n useqdac", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s n tnarit (%(platformName)s)", + "Go to your browser to complete Sign In": "Ddu ɣer iminig akken ad tkemleḍ ajerred", + "Unknown device": "Ibenk arussin", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Create Account": "Rnu amiḍan", + "powered by Matrix": "s lmendad n Matrix", + "Dismiss": "Agwi", + "Sign In": "Kcem", + "Explore rooms": "Snirem tixxamin", + "Missing indexeddb worker script!": "Asekript n uxeddam Indexeddb ulac-it!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Tawila d tarmeɣtut: mudd-d kan yiwen seg default_server_config, default_server_name, neɣ default_hs_url.", + "Invalid configuration: no default server specified.": "Tawila d tarmeɣtut: ulac aqeddac amezwer i d-yettwafernen.", + "The message from the parser is: %(message)s": "Izen n umaslaḍ d: %(message)s", + "Unable to load config file: please refresh the page to try again.": "Yegguma ad d-yali ufaylu n twila: ma ulac aɣilif smiren asebter akken ad tεerḍeḍ tikkelt-nniḍen.", + "Unexpected error preparing the app. See console for details.": "Tella-d tuccḍa lawan n uheyyi n usnas: Wali tadiwent i wugar telqeyt.", + "Previous/next recently visited room or community": "Taxxamt neɣ tamɣiwent wuɣur kecmen imerza send/seld", + "You need to be using HTTPS to place a screen-sharing call.": "Ilaq-ak(am) ad tesqedceḍ HTTPs akken ad tesεeddiḍ asiwel s beṭṭu n ugdil.", + "Unsupported browser": "Ur yettusefrak ara yiminig", + "Please install Chrome, Firefox, or Safari for the best experience.": "Ma ulac aɣilif, sebded Chrome, Firefox, neɣSafari i tirmit igerrzen.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Tzemreḍ ad tkemmleḍ deg useqdec n yiminig-ik(im) amiran, maca kra n tmahilin neɣ akk zemrent ur nteddu ara, rnu arwes n usnas yezmer ad d-iban d armeɣtu.", + "I understand the risks and wish to continue": "Gziɣ ayen ara d-yeḍrun maca bɣiɣ ad kemmleɣ", + "Go to element.io": "Ṛuḥ ɣer element.io", + "Failed to start": "Asenker ur yeddi ara", + "Welcome to Element": "Ansuf ɣer Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Adiwenni & attekki araslemmas d uwgelhan s lmendad n [matrix]", + "Your Element is misconfigured": "Aferdis-inek·inem ur yettuswel ara akken iwata", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Deg twila n uferdis-inek·inem yella JSON d arameɣtu. Ttxil-k·m seɣti ugur syen ales asali n usebter.", + "Download Completed": "Asider yemmed", + "Open": "Ldi", + "Your browser can't run %(brand)s": "Iminig-inek·inem ur isselkan ara %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s isseqdac timahilin n yiminig leqqayen ur yessefrak ara yiminig-ik·im amiran.", + "Powered by Matrix": "Iteddu s lmendad n Matrix" +} diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json new file mode 100644 index 0000000..6d2d710 --- /dev/null +++ b/src/i18n/strings/ko.json @@ -0,0 +1,28 @@ +{ + "Dismiss": "버리기", + "powered by Matrix": "Matrix의 지원을 받음", + "Unknown device": "알 수 없는 기기", + "Welcome to Element": "Element에 오신 것을 환영합니다", + "You need to be using HTTPS to place a screen-sharing call.": "화면 공유 전화를 걸려면 HTTPS를 사용해야 합니다.", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "분산되고, 암호화된 대화 & [matrix]의 지원으로 협력", + "The message from the parser is: %(message)s": "파서에서 온 메시지: %(message)s", + "Invalid JSON": "잘못된 JSON", + "Unexpected error preparing the app. See console for details.": "앱을 준비하는 동안 예기치 않은 오류가 발생했습니다. 자세한 내용은 콘솔을 확인하세요.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "잘못된 설정: default_server_config 와 defalut_server_name, default_hs_url 중 하나만 지정할 수 있습니다.", + "Invalid configuration: no default server specified.": "잘못된 설정: 기본 서버가 지정되지 않았습니다.", + "Sign In": "로그인", + "Create Account": "계정 만들기", + "Explore rooms": "방 검색", + "Unable to load config file: please refresh the page to try again.": "설정 파일을 불러오는 데 실패: 페이지를 새로고침한 후에 다시 시도해 주십시오.", + "Open user settings": "사용자 설정 열기", + "Previous/next recently visited room or community": "최근에 방문한 이전/다음 방 또는 커뮤니티", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s 데스크탑 (%(platformName)s)", + "Go to your browser to complete Sign In": "로그인을 완료하려면 브라우저로 이동해주세요", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "지원되지 않는 브라우저", + "Please install Chrome, Firefox, or Safari for the best experience.": "최상의 경험을 위해 Chrome, Firefox, 또는 Safari를 설치해주세요.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "현재 사용중이신 브라우저를 계속 사용하셔도 됩니다, 다만 일부 기능들이 작동하지 않을 수 있으며 애플리케이션이 잘못돼 보일 수 있습니다.", + "I understand the risks and wish to continue": "위험하다는 것을 이해했으며 계속하고 싶습니다", + "Go to element.io": "element.io으로 가기", + "Failed to start": "시작 실패" +} diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json new file mode 100644 index 0000000..7fbe124 --- /dev/null +++ b/src/i18n/strings/lt.json @@ -0,0 +1,35 @@ +{ + "Unknown device": "Nežinomas įrenginys", + "powered by Matrix": "veikia su Matrix", + "Welcome to Element": "Sveiki atvykę į Element", + "You need to be using HTTPS to place a screen-sharing call.": "Norint skambinti naudojant ekrano vaizdo dalijimosi funkciją, jūs turite naudoti HTTPS.", + "Dismiss": "Atmesti", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizuoti, šifruoti pokalbiai ir bendradarbiavimas, veikiantis su [matrix]", + "Sign In": "Prisijungti", + "Create Account": "Sukurti paskyrą", + "Explore rooms": "Žvalgyti kambarius", + "The message from the parser is: %(message)s": "Analizatoriaus žinutė yra: %(message)s", + "Invalid JSON": "Klaidingas JSON", + "Unexpected error preparing the app. See console for details.": "Netikėta klaida ruošiant programą. Norėdami sužinoti daugiau detalių, žiūrėkite konsolę.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Klaidinga konfigūracija: galima nurodyti tik vieną iš default_server_config, default_server_name, arba default_hs_url.", + "Invalid configuration: no default server specified.": "Klaidinga konfigūracija: nenurodytas numatytasis serveris.", + "Go to your browser to complete Sign In": "Norėdami užbaigti prisijungimą, eikite į naršyklę", + "Open user settings": "Atidaryti vartotojo nustatymus", + "Missing indexeddb worker script!": "Trūksta indexeddb worker skripto!", + "Unable to load config file: please refresh the page to try again.": "Nepavyko įkelti konfigūracijos failo: atnaujinkite puslapį, kad pabandytumėte dar kartą.", + "Previous/next recently visited room or community": "Ankstesnis/sekantis neseniai lankytas kambarys ar bendruomenė", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Kompiuteriui (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Nepalaikoma naršyklė", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Jūs galite toliau naudotis savo dabartine naršykle, bet kai kurios arba visos funkcijos gali neveikti ir programos išvaizda bei sąsaja gali būti neteisingai rodoma.", + "I understand the risks and wish to continue": "Suprantu šią riziką ir noriu tęsti", + "Go to element.io": "Eiti į element.io", + "Failed to start": "Nepavyko paleisti", + "Your Element is misconfigured": "Jūsų Element yra neteisingai sukonfigūruotas", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Jūsų Element konfigūracijoje yra klaidingas JSON. Ištaisykite problemą ir iš naujo įkelkite puslapį.", + "Download Completed": "Atsisiuntimas baigtas", + "Open": "Atidaryti", + "Your browser can't run %(brand)s": "Jūsų naršyklė negali paleisti %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s naudoja išplėstines naršyklės funkcijas, kurių jūsų dabartinė naršyklė nepalaiko.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Geriausiam veikimui suinstaliuokite Chrome, Firefox, arba Safari." +} diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json new file mode 100644 index 0000000..3968ca9 --- /dev/null +++ b/src/i18n/strings/lv.json @@ -0,0 +1,25 @@ +{ + "Dismiss": "Atteikt", + "powered by Matrix": "Tiek darbināta ar Matrix", + "Unknown device": "Nezināma ierīce", + "You need to be using HTTPS to place a screen-sharing call.": "Lai izmantotu ekrāna kopīgošanas zvanu, nepieciešams izmantot HTTPS savienojumu.", + "Welcome to Element": "Esiet gaidīti Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizēta, šifrēta čata & kopdarbošanās sistēma uz [matrix] bāzes", + "Sign In": "Ienākt", + "Create Account": "Izveidot kontu", + "Explore rooms": "Atklāt istabas", + "Unexpected error preparing the app. See console for details.": "Negaidīta kļūda, sagatavojot lietotni. Sīkāku informāciju skatiet konsolē.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Nederīga konfigurācija: var norādīt tikai vienu no default_server_config, default_server_name, vai default_hs_url.", + "Invalid configuration: no default server specified.": "Nekorekta konfigurācija: nav norādīts noklusējuma serveris.", + "The message from the parser is: %(message)s": "Ziņojums no parsētāja ir: %(message)s", + "Invalid JSON": "Nederīgs JSON", + "Unable to load config file: please refresh the page to try again.": "Neizdevās ielādēt config datni: lūdzu pārlādē lapu lai mēģinātu vēlreiz.", + "Open user settings": "Atver lietotāja iestatījumus", + "Go to your browser to complete Sign In": "Aizej uz savu pārlūku lai pabeigtu Piekļuvi", + "Unsupported browser": "Neatbalstīts pārlūks", + "Please install Chrome, Firefox, or Safari for the best experience.": "Lūdzu instalē Chrome, Firefox, vai Safari priekš labākās pieredzes.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Tu vari turpināt izmantot savu pašreizējo pārlūku, bet dažas vai visas funkcijas nestrādās, un lietotnes izskats var būt nepareizs.", + "I understand the risks and wish to continue": "Es pieņemu riskus un vēlos turpināt", + "Go to element.io": "Ej uz element.io", + "Failed to start": "Neizdevās palaist" +} diff --git a/src/i18n/strings/ml.json b/src/i18n/strings/ml.json new file mode 100644 index 0000000..f873d3d --- /dev/null +++ b/src/i18n/strings/ml.json @@ -0,0 +1,7 @@ +{ + "Dismiss": "ഒഴിവാക്കുക", + "powered by Matrix": "മാട്രിക്സില്‍ പ്രവര്‍ത്തിക്കുന്നു", + "Unknown device": "അപരിചിത ഡിവൈസ്", + "You need to be using HTTPS to place a screen-sharing call.": "സ്ക്രീന്‍ ഷെയറിങ്ങ് കോള്‍ നടത്തണമെങ്കില്‍ https ഉപയോഗിക്കണം.", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "വികേന്ദ്രീകൃത , എന്‍ക്രിപ്റ്റഡ് ചാറ്റ് & മാട്രിക്സ് നല്‍കുന്ന കൊളാബൊറേഷന്‍" +} diff --git a/src/i18n/strings/mn.json b/src/i18n/strings/mn.json new file mode 100644 index 0000000..a4bea55 --- /dev/null +++ b/src/i18n/strings/mn.json @@ -0,0 +1,18 @@ +{ + "The message from the parser is: %(message)s": "Парсераас ирсэн мессеж нь: %(message)s", + "Invalid JSON": "Буруу ЖСОН", + "Unexpected error preparing the app. See console for details.": "Апп бэлдэх үед гарах ёсгүй алдаа. Дэлгэрэнгүйг консолоос харна уу.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Буруу тохиргоо: default_server_config, default_server_name, эсвэл default_hs_url утгын зөвхөн аль нэгийг л зааж болно.", + "Invalid configuration: no default server specified.": "Буруу тохиргоо: Өгөгдсөл серверийг зааж өгөөгүй байна.", + "Unknown device": "Үл мэдэгдэх төхөөрөмж", + "You need to be using HTTPS to place a screen-sharing call.": "Та дэлгэц хуваалцах дуудлага хийхдээ HTTPS ашиглах ёстой.", + "powered by Matrix": "Matrix - Ивээв", + "Dismiss": "Орхих", + "Welcome to Element": "Element -д тавтай морил", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Төвлөрсөн бус, нууцлалтай чат & хамтын ажиллагааг [matrix] - ивээв", + "Sign In": "Нэвтрэх", + "Create Account": "Хэрэглэгч үүсгэх", + "Explore rooms": "Өрөөнүүд үзэх", + "Open user settings": "Хэрэглэгчийн тохиргоо нээх", + "Go to your browser to complete Sign In": "Бүрэн нэвтрэхийн тулд вэб хөтөч рүү шилжинэ үү" +} diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json new file mode 100644 index 0000000..2485a03 --- /dev/null +++ b/src/i18n/strings/nb_NO.json @@ -0,0 +1,18 @@ +{ + "powered by Matrix": "Drevet av Matrix", + "Unknown device": "Ukjent enhet", + "You need to be using HTTPS to place a screen-sharing call.": "Du er nødt til å bruke HTTPS for å ha en samtale med skjermdeling.", + "Dismiss": "Avvis", + "Welcome to Element": "Velkommen til Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert chat & samarbeid drevet av [matrix]", + "Sign In": "Logg inn", + "Create Account": "Opprett konto", + "Explore rooms": "Se alle rom", + "The message from the parser is: %(message)s": "Meldingen fra parseren er: %(message)s", + "Invalid JSON": "Ugyldig JSON", + "Invalid configuration: no default server specified.": "Ugyldig konfigurasjon: ingen standardserver spesifisert.", + "Unexpected error preparing the app. See console for details.": "Uventet feil oppsto mens appen ble gjort klar. Se konsollen for detaljer.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfigurasjon: Spesifiser kun en av følgende: default_server_config, default_server_name eller default_hs_url.", + "Open user settings": "Åpne brukerinnstillinger", + "Go to your browser to complete Sign In": "Gå til nettleseren din for å fullføre innloggingen" +} diff --git a/src/i18n/strings/ne.json b/src/i18n/strings/ne.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/i18n/strings/ne.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json new file mode 100644 index 0000000..32d3dac --- /dev/null +++ b/src/i18n/strings/nl.json @@ -0,0 +1,29 @@ +{ + "Dismiss": "Afwijzen", + "powered by Matrix": "draait op Matrix", + "Unknown device": "Onbekend apparaat", + "You need to be using HTTPS to place a screen-sharing call.": "Oproepen met schermdelen vergen HTTPS.", + "Welcome to Element": "Welkom bij Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chatten & samenwerken dankzij [matrix]", + "Sign In": "Aanmelden", + "Create Account": "Account aanmaken", + "Explore rooms": "Gesprekken ontdekken", + "Unexpected error preparing the app. See console for details.": "Er is een onverwachte fout opgetreden bij het voorbereiden van de app. Zie de console voor details.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratiefout: kan slechts één van default_server_config, default_server_name, of default_hs_url opgeven.", + "Invalid configuration: no default server specified.": "Configuratie ongeldig: geen standaardserver opgegeven.", + "The message from the parser is: %(message)s": "De ontleder meldt: %(message)s", + "Invalid JSON": "Ongeldige JSON", + "Go to your browser to complete Sign In": "Ga naar uw browser om de aanmelding te voltooien", + "Open user settings": "Open de gebruikersinstellingen", + "Missing indexeddb worker script!": "Het indexeddb script ontbreekt!", + "Unable to load config file: please refresh the page to try again.": "Kan het configuratiebestand niet laden. Herlaad de pagina alstublieft.", + "Previous/next recently visited room or community": "Vorige/volgende recent bezochte kamer of gemeenschap", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Niet-ondersteunde browser", + "Please install Chrome, Firefox, or Safari for the best experience.": "Installeer Chrome, Firefox, of Safari voor de beste gebruikservaring.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "U kunt uw huidige browser blijven gebruiken, maar sommige of alle features zouden niet kunnen werken en de uitstraling van het programma kan verkeerd zijn.", + "I understand the risks and wish to continue": "Ik begrijp de risico's en wil verder gaan", + "Go to element.io": "Ga naar element.io", + "Failed to start": "Opstarten gefaald" +} diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json new file mode 100644 index 0000000..3189edc --- /dev/null +++ b/src/i18n/strings/nn.json @@ -0,0 +1,22 @@ +{ + "Unknown device": "Ukjend eining", + "You need to be using HTTPS to place a screen-sharing call.": "Du må bruka HTTPS for å ha ein samtale med skjermdeling.", + "Dismiss": "Avvis", + "powered by Matrix": "Matrixdriven", + "Welcome to Element": "Velkomen til Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert nettprat & samarbeid drive av [matrix]", + "Sign In": "Logg inn", + "Create Account": "Opprett konto", + "Explore rooms": "Utforsk romma", + "The message from the parser is: %(message)s": "Meldinga frå kodetolkaren er: %(message)s", + "Invalid JSON": "Ugyldig JSON", + "Unexpected error preparing the app. See console for details.": "Uventa feil under lasting av programmet. Sjå konsollen for detaljar.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig oppsett: berre muleg å berre spesifiere ein av default_server_config, default_server_name eller default_hs_url.", + "Invalid configuration: no default server specified.": "Ugyldig oppsett: ingen \"default server\" er spesifisert.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Oppsettet for din Element inneheld ugyldig JSON. Sjekk konfigurasjonsfila, deretter last om sida.", + "Unable to load config file: please refresh the page to try again.": "Fekk ikkje til å lasta konfigurasjonsfila: last inn sida for å prøva om att.", + "Go to your browser to complete Sign In": "Opna nettlesaren din for å fullføra innlogginga", + "Unsupported browser": "Nettlesaren er ikkje støtta", + "Your browser can't run %(brand)s": "Din nettlesar kan ikkje køyra %(brand)s", + "Go to element.io": "Gå til element.io" +} diff --git a/src/i18n/strings/oc.json b/src/i18n/strings/oc.json new file mode 100644 index 0000000..002f260 --- /dev/null +++ b/src/i18n/strings/oc.json @@ -0,0 +1,14 @@ +{ + "The message from the parser is: %(message)s": "Lo messatge de l’analisaire es : %(message)s", + "Invalid JSON": "Invalid JSON", + "Unexpected error preparing the app. See console for details.": "Error inesperada en preparant l’aplicacion. Vejatz la consòla pels detalhs.", + "Go to your browser to complete Sign In": "Anatz al navegador per acabar la connexion", + "Unknown device": "Periferic desconegut", + "powered by Matrix": "propulsat per Matrix", + "Dismiss": "Refusar", + "Welcome to Element": "La benvenguda a Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Messatjariá chifrada, descentralizada e collaborativa propulsada per [matrix]", + "Sign In": "Se connectar", + "Create Account": "Crear un compte", + "Explore rooms": "Percórrer las salas" +} diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json new file mode 100644 index 0000000..707418e --- /dev/null +++ b/src/i18n/strings/pl.json @@ -0,0 +1,35 @@ +{ + "Dismiss": "Zamknij", + "powered by Matrix": "napędzany przez Matrix", + "Unknown device": "Nieznane urządzenie", + "You need to be using HTTPS to place a screen-sharing call.": "Musisz używać bezpiecznego protokołu HTTPS aby użyć połączenia współdzielenia ekranu.", + "Welcome to Element": "Witamy w Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Zdecentralizowany, szyfrowany czat & współpraca oparta na [matrix]", + "Create Account": "Stwórz konto", + "Sign In": "Zaloguj", + "Explore rooms": "Przeglądaj pokoje", + "The message from the parser is: %(message)s": "Wiadomość od parsera to: %(message)s", + "Invalid JSON": "Błędny JSON", + "Unexpected error preparing the app. See console for details.": "Niespodziewany błąd podczas przygotowywania aplikacji. Otwórz konsolę po szczegóły.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Błędna konfiguracja. Akceptowalne wartości to: default_server_config, default_server_name, default_hs_url.", + "Invalid configuration: no default server specified.": "Błędna konfiguracja: nie wybrano domyślnego serwera.", + "Open user settings": "Otwórz ustawienia użytkownika", + "Go to your browser to complete Sign In": "Aby dokończyć proces rejestracji, przejdź do swojej przeglądarki", + "Missing indexeddb worker script!": "Brakujący skrypt workera indexeddb!", + "Unable to load config file: please refresh the page to try again.": "Nie udało się załadować pliku konfiguracyjnego: odśwież stronę aby spróbować ponownie.", + "Previous/next recently visited room or community": "Poprzedni/następny niedawno odwiedzony pokój lub społeczność", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Niewspierana przeglądarka", + "Please install Chrome, Firefox, or Safari for the best experience.": "Zainstaluj Chrome, Firefox, lub Safari w celu zapewnienia najlepszego działania.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Możesz kontynuować używanie obecnej przeglądarki, lecz niektóre lub wszystkie funkcje mogą nie działać oraz wygląd aplikacji może być niepoprawny.", + "I understand the risks and wish to continue": "Rozumiem ryzyko i chcę kontynuować", + "Go to element.io": "Przejdź do element.io", + "Failed to start": "Nie udało się wystartować", + "Download Completed": "Pobieranie Zakończone", + "Open": "Otwórz", + "Your browser can't run %(brand)s": "Twoja przeglądarka nie obsługuje %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s używa zaawansowanych funkcji przeglądarki, które nie są dostępne w twojej przeglądarce.", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracja Elementa zawiera niepoprawny JSON. Popraw konfiguracje i odśwież stronę.", + "Your Element is misconfigured": "Element jest nieprawidłowo skonfigurowany" +} diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json new file mode 100644 index 0000000..1092b66 --- /dev/null +++ b/src/i18n/strings/pt.json @@ -0,0 +1,17 @@ +{ + "Dismiss": "Descartar", + "powered by Matrix": "powered by Matrix", + "Unknown device": "Dispositivo desconhecido", + "You need to be using HTTPS to place a screen-sharing call.": "Necessita de estar a usar HTTPS para poder iniciar uma chamada com partilha de ecrã.", + "Welcome to Element": "Boas-vindas ao Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, encriptado & colaborativo powered by [matrix]", + "The message from the parser is: %(message)s": "A mensagem do parser é: %(message)s", + "Invalid JSON": "JSON inválido", + "Unexpected error preparing the app. See console for details.": "Erro inesperado na preparação da aplicação. Veja a consola para mais detalhes.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuração inválida: só pode especificar uma das default_server_config, default_server_name, ou default_hs_url.", + "Invalid configuration: no default server specified.": "Configuração inválida: servidor padrão não especificado.", + "Sign In": "Iniciar sessão", + "Create Account": "Criar conta", + "Explore rooms": "Explorar rooms", + "Go to your browser to complete Sign In": "Abra o seu navegador para completar o inicio de sessão" +} diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json new file mode 100644 index 0000000..8f83d05 --- /dev/null +++ b/src/i18n/strings/pt_BR.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Descartar", + "powered by Matrix": "oferecido por Matrix", + "Unknown device": "Aparelho desconhecido", + "You need to be using HTTPS to place a screen-sharing call.": "Você precisa usar HTTPS para compartilhar a tela durante uma chamada.", + "Welcome to Element": "Boas-vindas ao Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, criptografado e colaborativo construído com [matrix]", + "Sign In": "Entrar", + "Create Account": "Criar Conta", + "Explore rooms": "Explorar salas", + "The message from the parser is: %(message)s": "A mensagem do parser é: %(message)s", + "Invalid JSON": "JSON inválido", + "Unexpected error preparing the app. See console for details.": "Erro inesperado preparando o aplicativo. Veja o console para mais detalhes.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuração inválida: você só pode especificar um valor dentre default_server_config, default_server_name, ou default_hs_url.", + "Invalid configuration: no default server specified.": "Configuração inválida: servidor padrão não especificado.", + "Unable to load config file: please refresh the page to try again.": "Não foi possível carregar o arquivo de configuração: por favor, atualize a página para tentar novamente.", + "Download Completed": "Download concluído", + "Open user settings": "Abrir configurações do usuário", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Navegador não suportado", + "Please install Chrome, Firefox, or Safari for the best experience.": "Por favor, instale o Chrome, o Firefox ou o Safari para obter a melhor experiência de uso.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Você pode continuar usando o navegador atual, mas alguns dos recursos podem não funcionar e a aparência do aplicativo pode estar incorreta.", + "I understand the risks and wish to continue": "Entendo os riscos e desejo continuar", + "Go to element.io": "Vá para element.io", + "Failed to start": "Falha ao iniciar", + "Missing indexeddb worker script!": "O script indexeddb não foi encontrado!", + "Open": "Abrir", + "Previous/next recently visited room or community": "Anterior/Próxima sala ou comunidade visitada recentemente", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s para Computador (%(platformName)s)", + "Go to your browser to complete Sign In": "Vá para o seu navegador para concluir o login", + "Your Element is misconfigured": "Seu Element está desconfigurado", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Sua configuração do Element contém JSON inválido. Por favor, corrija o problema e recarregue a página.", + "Your browser can't run %(brand)s": "Seu navegador não consegue rodar o %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa recursos avançados que não são suportados pelo seu navegador de internet atual.", + "Powered by Matrix": "Construído com tecnologia Matrix" +} diff --git a/src/i18n/strings/ro.json b/src/i18n/strings/ro.json new file mode 100644 index 0000000..5957187 --- /dev/null +++ b/src/i18n/strings/ro.json @@ -0,0 +1,20 @@ +{ + "Unknown device": "Device necunoscut", + "Dismiss": "Închide", + "powered by Matrix": "propulsat de Matrix", + "Welcome to Element": "Bun venit pe Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat decentralizat, criptat & colaborare propulsata de [matrix]", + "You need to be using HTTPS to place a screen-sharing call.": "Trebuie să folosești HTTPS pentru a plasa un apel de tip screen-sharing.", + "Sign In": "Autentificare", + "Create Account": "Înregistare", + "Explore rooms": "Explorează camerele", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratie invalida: se poate specifica doar una dintre default_server_config, default_server_name, or default_hs_url.", + "Invalid JSON": "JSON invalid", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Acest browser nu este suportat", + "Please install Chrome, Firefox, or Safari for the best experience.": "Instalati va rog Chrome, Firefox, or Safari pentru o experienta mai buna.", + "I understand the risks and wish to continue": "Inteleg riscul si doresc sa continui", + "Go to element.io": "Acceseaza element.io", + "Failed to start": "Nu reuseste sa porneasca" +} diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json new file mode 100644 index 0000000..fed1c23 --- /dev/null +++ b/src/i18n/strings/ru.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Закрыть", + "powered by Matrix": "основано на Matrix", + "Unknown device": "Неизвестное устройство", + "You need to be using HTTPS to place a screen-sharing call.": "Для трансляции рабочего стола требуется использование HTTPS.", + "Welcome to Element": "Добро пожаловать в Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованный, шифрованный чат и совместное рабочее пространство на основе [matrix]", + "Sign In": "Войти", + "Create Account": "Создать учётную запись", + "Explore rooms": "Список комнат", + "Unexpected error preparing the app. See console for details.": "Неожиданная ошибка при подготовке приложения. Подробности см. в консоли.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Неверная конфигурация: может указывать только один из следующих параметров: default_server_config, default_server_name или default_hs_url.", + "Invalid configuration: no default server specified.": "Неверная конфигурация: сервер по умолчанию не указан.", + "The message from the parser is: %(message)s": "Сообщение из парсера: %(message)s", + "Invalid JSON": "Нерабочий JSON", + "Go to your browser to complete Sign In": "Перейдите в браузер для завершения входа", + "Open user settings": "Открыть настройки пользователя", + "Missing indexeddb worker script!": "Отсутствует скрипт воркера для indexeddb!", + "Unable to load config file: please refresh the page to try again.": "Не удалось загрузить файл конфигурации. Попробуйте обновить страницу.", + "Previous/next recently visited room or community": "Предыдущая/следующая недавно посещённая комната или сообщество", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s десктоп (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Неподдерживаемый браузер", + "Please install Chrome, Firefox, or Safari for the best experience.": "Пожалуйста поставьте Chrome, Firefox, или Safari для лучшей совместимости.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Вы можете продолжать пользоваться этим браузером но некоторые возможности будут недоступны и интерфейс может быть отрисован неправильно.", + "I understand the risks and wish to continue": "Я понимаю риск и хочу продолжить", + "Go to element.io": "К element.io", + "Failed to start": "Старт не удался", + "Your Element is misconfigured": "Ваш Element неверно настроен", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Конфигурация Element содержит неверный JSON. Исправьте проблему и обновите страницу.", + "Download Completed": "Загрузка завершена", + "Open": "Открыть", + "Your browser can't run %(brand)s": "Ваш браузер не может запустить %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s использует расширенные возможности, которые не поддерживаются вашим браузером.", + "Powered by Matrix": "На технологии Matrix" +} diff --git a/src/i18n/strings/sco.json b/src/i18n/strings/sco.json new file mode 100644 index 0000000..7078a33 --- /dev/null +++ b/src/i18n/strings/sco.json @@ -0,0 +1,3 @@ +{ + "Unexpected error preparing the app. See console for details.": "Unexpectit error came up gittin the app set up. See the console? Mair details ur thare." +} diff --git a/src/i18n/strings/si.json b/src/i18n/strings/si.json new file mode 100644 index 0000000..6b6ee57 --- /dev/null +++ b/src/i18n/strings/si.json @@ -0,0 +1,4 @@ +{ + "Unknown device": "නොදන්නා උපකරණය", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)" +} diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json new file mode 100644 index 0000000..c6128e6 --- /dev/null +++ b/src/i18n/strings/sk.json @@ -0,0 +1,36 @@ +{ + "Unknown device": "Neznáme zariadenie", + "You need to be using HTTPS to place a screen-sharing call.": "Ak si želáte spustiť zdieľanie obrazovky, musíte byť pripojení cez protokol HTTPS.", + "Dismiss": "Zamietnuť", + "powered by Matrix": "poháňa Matrix", + "Welcome to Element": "Víta vás Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráca na platforme [matrix]", + "Sign In": "Prihlásiť sa", + "Create Account": "Vytvoriť účet", + "Explore rooms": "Preskúmať miestnosti", + "The message from the parser is: %(message)s": "Správa z parsera je: %(message)s", + "Invalid JSON": "Neplatný JSON", + "Unexpected error preparing the app. See console for details.": "Neočakávaná chyba počas pripravovania aplikácie. Pre podrobnosti pozri konzolu.", + "Invalid configuration: no default server specified.": "Neplatné nastavenie: nebol určený východiskový server.", + "Missing indexeddb worker script!": "Chýba indexovaný databázový skript pracovníka!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neplatná konfigurácia: je možné špecifikovať len jednu možnosť z default_server_config, default_server_name, alebo default_hs_url.", + "Unable to load config file: please refresh the page to try again.": "Nemožno načítať konfiguračný súbor: prosím obnovte stránku a skúste to znova.", + "Open user settings": "Otvoriť používateľské nastavenia", + "Previous/next recently visited room or community": "Predchádzajúca/ďalšia nedávno navštívená miestnosť alebo komunita", + "Go to your browser to complete Sign In": "Prejdite do prehliadača a dokončite prihlásenie", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Nepodporovaný prehliadač", + "Please install Chrome, Firefox, or Safari for the best experience.": "Prosím, nainštalujte si Chrome, Firefox alebo Safari pre najlepší zážitok.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Môžete naďalej používať váš súčasný prehliadač, ale niektoré alebo všetky funkcie nemusia fungovať a zážitok z aplikácie nemusí byť optimálny.", + "I understand the risks and wish to continue": "Rozumiem riziku a chcem pokračovať", + "Go to element.io": "Prejsť na element.io", + "Failed to start": "Zapnutie zlyhalo", + "Download Completed": "Preberanie dokončené", + "Open": "Otvoriť", + "Your Element is misconfigured": "Váš Element je nesprávne nastavený", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Vaša konfigurácia Elementu obsahuje nesprávny údaj JSON. Prosím, opravte chybu a obnovte stránku.", + "Your browser can't run %(brand)s": "Váš prehliadač nerozbehne %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s používa pokročilé funkcie prehliadača, ktoré nie sú podporované vaším aktuálnym prehliadačom.", + "Powered by Matrix": "používa protokol Matrix" +} diff --git a/src/i18n/strings/sl.json b/src/i18n/strings/sl.json new file mode 100644 index 0000000..8d130a3 --- /dev/null +++ b/src/i18n/strings/sl.json @@ -0,0 +1,36 @@ +{ + "Unknown device": "Neznana naprava", + "You need to be using HTTPS to place a screen-sharing call.": "Za klic s skupno rabo zaslona potrebujete HTTPS.", + "powered by Matrix": "poganja Matrix", + "Dismiss": "Opusti", + "Welcome to Element": "Dobrodošli v Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirano šifrirano sporočanje & sodelovanje s pomočjo [matrix]", + "Sign In": "Prijava", + "Create Account": "Registracija", + "Explore rooms": "Raziščite sobe", + "Missing indexeddb worker script!": "Manjka skript za IndexDB!", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neveljavna konfiguracija: lahko izberete samo eno izmed default_server_config, default_server_name ali default_hs_url.", + "Invalid configuration: no default server specified.": "Neveljavna konfiguracija: privzeti strežnik ni nastavljen.", + "Your Element is misconfigured": "Vaš Element je napačno nastavljen", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracije vašega Elementa vsebujejo neveljaven JSON. Prosim, popravite napako in znova naložite stran.", + "The message from the parser is: %(message)s": "Sporočilo parserja je: %(message)s", + "Invalid JSON": "Neveljaven JSON", + "Unable to load config file: please refresh the page to try again.": "Ni uspelo naložiti konfiguracijske datoteke: prosim, ponovno naložite stran.", + "Unexpected error preparing the app. See console for details.": "Nepričakovana napaka pri pripravi aplikacije: Za več poglejte konzolo.", + "Download Completed": "Prenos zaključen", + "Open": "Odpri", + "Open user settings": "Odpri uporabniške nastavitve", + "Previous/next recently visited room or community": "Prejšnja/naslednja soba ali skupnost, ki je bila pred kratkim odprta", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s namizje za (%(platformName)s)", + "Go to your browser to complete Sign In": "Nadaljujte s prijavo v spletnem brskalniku", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Powered by Matrix": "Poganja Matrix", + "Unsupported browser": "Nepodprt brskalnik", + "Your browser can't run %(brand)s": "Vaš brskalnik ne more poganjati %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uporablja napredne lastnosti brskalnika, ki jih vaš trenutni brskalnik ne podpira.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Za najboljšo izkušnjo, prosim namestite Chrome, Firefox ali Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Lahko nadaljujete z uporabo vašega trenutnega brskalnika, vendar lahko to privede do manjkajočih funkcionalnosti ali napačnega izgleda aplikacije.", + "I understand the risks and wish to continue": "Razumem riziko in želim vseeno nadaljevati", + "Go to element.io": "Pojdi na element.io", + "Failed to start": "Neuspel zagon" +} diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json new file mode 100644 index 0000000..3e4987b --- /dev/null +++ b/src/i18n/strings/sq.json @@ -0,0 +1,36 @@ +{ + "Unknown device": "Pajisje e panjohur", + "You need to be using HTTPS to place a screen-sharing call.": "Që të bëni një thirrje me ndarje ekrani, duhet të jeni duke përdorur HTTPS-në.", + "Dismiss": "Mos e merr parasysh", + "powered by Matrix": "bazuar në Matrix", + "Welcome to Element": "Mirë se vini te Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Fjalosje & bashkëpunim të decentralizuar, të fshehtëzuar, bazuar në [matrix]", + "Sign In": "Hyni", + "Create Account": "Krijoni Llogari", + "Explore rooms": "Eksploroni dhoma", + "Unexpected error preparing the app. See console for details.": "Gabim i papritur gjatë përgatitjes së aplikacionit. Për hollësi, shihni konsolën.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Formësim i pavlefshëm: mund të caktohet vetëm një prej default_server_config, default_server_name, ose default_hs_url.", + "Invalid configuration: no default server specified.": "Formësim i pavlefshëm: s’është caktuar shërbyes parazgjedhje.", + "The message from the parser is: %(message)s": "Mesazhi prej procesit është: %(message)s", + "Invalid JSON": "JSON i pavlefshëm", + "Go to your browser to complete Sign In": "Që të plotësoni Hyrjen, kaloni te shfletuesi juaj", + "Open user settings": "Hapni rregullime përdoruesi", + "Unable to load config file: please refresh the page to try again.": "S’arrihet të ngarkohet kartelë formësimesh: ju lutemi, rifreskoni faqen dhe riprovoni.", + "Previous/next recently visited room or community": "Dhomë ose bashkësi e mëparshme/pasuese e vizituar së fundi", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Shfletues i pambuluar", + "Please install Chrome, Firefox, or Safari for the best experience.": "Ju lutemi, për funksionimin më të mirë, instaloni Chrome, Firefox, ose Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Mund të vazhdoni të përdorni shfletuesin tuaj të tanishëm, por disa ose krejt veçoritë mund të mos funksionojnë dhe pamja dhe ndjesitë prej aplikacionit të mos jenë të sakta.", + "I understand the risks and wish to continue": "I kuptoj rreziqet dhe dëshiroj të vazhdoj", + "Go to element.io": "Shko te element.io", + "Failed to start": "S’u arrit të nisej", + "Missing indexeddb worker script!": "Mungon programth worker-i indexeddb-je!", + "Download Completed": "Shkarkim i Plotësuar", + "Open": "Hape", + "Your Element is misconfigured": "Element-i juaj është i keqformësuar", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Formësimi juaj i Element-it përmban JSON të pavlefshëm. Ju lutemi, ndreqeni problemin dhe ringarkoni faqen.", + "Your browser can't run %(brand)s": "Shfletuesi juaj s’mund të xhirojë %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s përdor veçori të thelluara të shfletuesit, të cilat shfletuesi juaj i tanishëm s’i mbulon.", + "Powered by Matrix": "Bazuar në Matrix" +} diff --git a/src/i18n/strings/sr.json b/src/i18n/strings/sr.json new file mode 100644 index 0000000..560fa14 --- /dev/null +++ b/src/i18n/strings/sr.json @@ -0,0 +1,35 @@ +{ + "Unknown device": "Непознати уређај", + "You need to be using HTTPS to place a screen-sharing call.": "Морате користити HTTPS да бисте започели позив са дељењем екрана.", + "Dismiss": "Одбаци", + "powered by Matrix": "покреће Матрикс", + "Welcome to Element": "Добродошли у Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализовано, шифровано ћаскање и сарадња коју покреће [matrix]", + "Sign In": "Пријава", + "Create Account": "Направи налог", + "Explore rooms": "Истражи собе", + "Invalid configuration: no default server specified.": "Погрешно подешавање: подразумевани сервер није наведен.", + "The message from the parser is: %(message)s": "Порука из парсера: %(message)s", + "Invalid JSON": "Погрешан JSON", + "Unexpected error preparing the app. See console for details.": "Неочекивана грешка приликом припреме апликације. Погледајте конзолу за више детаља.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Погрешно подешавање: можете навести само једну вредност од default_server_config, default_server_name, or default_hs_url.", + "Missing indexeddb worker script!": "Недостаје скрипта indexeddb радника!", + "Your Element is misconfigured": "Ваша Елемент апликација је лоше подешена", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Подешавање ваше Елемент апликације садржи неисправни JSON. Поправите проблем па поново учитајте ову страницу.", + "Unable to load config file: please refresh the page to try again.": "Не могу да учитам датотеку подешавања: освежите страницу и покушајте поново.", + "Download Completed": "Преузимање завршено", + "Open": "Отвори", + "Open user settings": "Отвори корисничка подешавања", + "Previous/next recently visited room or community": "Претходно/следеће недавно посећене собе или заједнице", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s радна површ (%(platformName)s)", + "Go to your browser to complete Sign In": "Отворите ваш прегледач за довршавање пријаве", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Неподржан прегледач", + "Your browser can't run %(brand)s": "Ваш прегледач не може покретати %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s користи напредне могућности које нису подржане у вашем тренутном прегледачу.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Инсталирајте Хром, Фајерфокс, или Сафари за најбољи доживљај.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Можете наставити користећи тренутни прегледач али неке могућности можда неће радити и изглед и доживљај апликације може бити лош.", + "I understand the risks and wish to continue": "Разумем могуће последице и желим наставити", + "Go to element.io": "Иди на element.io", + "Failed to start": "Неуспех при покретању" +} diff --git a/src/i18n/strings/sr_Latn.json b/src/i18n/strings/sr_Latn.json new file mode 100644 index 0000000..ea4b29a --- /dev/null +++ b/src/i18n/strings/sr_Latn.json @@ -0,0 +1,16 @@ +{ + "The message from the parser is: %(message)s": "Poruka iz parsera je: %(message)s", + "Invalid JSON": "Pogrešan JSON", + "Unexpected error preparing the app. See console for details.": "Neočekivana greška prilikom pripreme aplikacije. Pogledajte konzolu za više detalja.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Pogrešno podešavanje: možete navesti samo jednu vrednost od default_server_config, default_server_name, or default_hs_url.", + "Invalid configuration: no default server specified.": "Pogrešno podešavanje: podrazumevani server nije naveden.", + "Unknown device": "Nepoznat uređaj", + "You need to be using HTTPS to place a screen-sharing call.": "Treba da koristite HTTPS da bi ste započeli poziv sa deljenjem ekrana.", + "powered by Matrix": "pokreće Matriks", + "Dismiss": "Odbaci", + "Welcome to Element": "Dobrodošli u Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovano, šifrovano ćaskanje & i saradnja koju pokreće [matrix]", + "Sign In": "Prijavite se", + "Create Account": "Napravite nalog", + "Explore rooms": "Istražite sobe" +} diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json new file mode 100644 index 0000000..6f88bb9 --- /dev/null +++ b/src/i18n/strings/sv.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Avvisa", + "powered by Matrix": "drivs av Matrix", + "Unknown device": "Okänd enhet", + "You need to be using HTTPS to place a screen-sharing call.": "Du måste använda HTTPS för att ringa med skärmdelning.", + "Welcome to Element": "Välkommen till Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliserad, krypterad chatt & samarbetsplattform baserad på [matrix]", + "Sign In": "Logga in", + "Create Account": "Skapa konto", + "Explore rooms": "Utforska rum", + "The message from the parser is: %(message)s": "Meddelandet från parsern är: %(message)s", + "Invalid JSON": "Ogiltig JSON", + "Unexpected error preparing the app. See console for details.": "Oväntat fel vid appstart. Se konsolen för mer information.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ogiltiga inställningar: det är enbart möjligt att specificera en default_config, default_server, eller default_hs_url.", + "Invalid configuration: no default server specified.": "Ogiltiga inställningar: ingen standardserver specificerad.", + "Open user settings": "Öppna användarinställningar", + "Go to your browser to complete Sign In": "Gå till din webbläsare för att slutföra inloggningen", + "Missing indexeddb worker script!": "Saknar IndexedDB-workerscript!", + "Unable to load config file: please refresh the page to try again.": "Kan inte ladda konfigurationsfilen: ladda om sidan för att försöka igen.", + "Previous/next recently visited room or community": "Föregående/nästa nyligen besökt rum eller gemenskap", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s skrivbord (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "Webbläsaren stöds ej", + "Please install Chrome, Firefox, or Safari for the best experience.": "Installera Chrome, Firefox, eller Safari för den bästa upplevelsen.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kan fortsätta använda din nuvarande webbläsare, men vissa eller alla funktioner kanske inte fungerar och utseendet och känslan av applikationen kan var felaktig.", + "I understand the risks and wish to continue": "Jag förstår riskerna och vill fortsätta", + "Go to element.io": "Gå till element.io", + "Failed to start": "Misslyckade att starta", + "Your Element is misconfigured": "Din Element är felkonfigurerad", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Din Elementkonfiguration innehåller ogiltig JSON. Vänligen rätta till problemet och ladda om sidan.", + "Download Completed": "Nedladdning slutförd", + "Open": "Öppna", + "Powered by Matrix": "Drivs av Matrix", + "Your browser can't run %(brand)s": "Din webbläsare kan inte köra %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s använder avancerade webbläsarfunktioner som inte stöds av din aktuella webbläsare." +} diff --git a/src/i18n/strings/ta.json b/src/i18n/strings/ta.json new file mode 100644 index 0000000..6e6f472 --- /dev/null +++ b/src/i18n/strings/ta.json @@ -0,0 +1,16 @@ +{ + "Dismiss": "நீக்கு", + "powered by Matrix": "Matrix-ஆல் ஆனது", + "Unknown device": "தெரியாத கருவி", + "You need to be using HTTPS to place a screen-sharing call.": "நீங்கள் திரைபகிர்வு அழைப்பை மேற்க்கொள்ள HTTPS-ஐ பயன்படுத்த வேண்டும்.", + "Welcome to Element": "Element -ற்க்கு வரவேற்க்கிறோம்", + "The message from the parser is: %(message)s": "பாகுபடுத்தி அனுப்பிய செய்தி: %(message)s", + "Invalid JSON": "தவறான JSON", + "Unexpected error preparing the app. See console for details.": "பயன்பாட்டைத் தயாரிப்பதில் எதிர்பாராத பிழை. விவரங்களுக்கு console ஐப் பார்க்கவும்.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "தவறான உள்ளமைவு: default_server_config, default_server_name அல்லது default_hs_url இல் ஒன்றை மட்டுமே குறிப்பிட முடியும்.", + "Invalid configuration: no default server specified.": "தவறான உள்ளமைவு: இயல்புநிலை சேவையகம் குறிப்பிடப்படவில்லை.", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] ஆல் இயக்கப்படும் பரவலாக்கப்பட்ட, மறைகுறியாக்கப்பட்ட அரட்டை & ஒத்துழைப்பு", + "Sign In": "உள்நுழைக", + "Create Account": "உங்கள் கணக்கை துவங்குங்கள்", + "Explore rooms": "அறைகளை ஆராயுங்கள்" +} diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json new file mode 100644 index 0000000..4afc3b0 --- /dev/null +++ b/src/i18n/strings/te.json @@ -0,0 +1,5 @@ +{ + "Dismiss": "రద్దుచేసే", + "Unknown device": "తెలుయని పరికరం", + "You need to be using HTTPS to place a screen-sharing call.": "తెర ని పంచే కాల్ కి HTTPS అవసరం." +} diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json new file mode 100644 index 0000000..d9740a9 --- /dev/null +++ b/src/i18n/strings/th.json @@ -0,0 +1,13 @@ +{ + "powered by Matrix": "ใช้เทคโนโลยี Matrix", + "Dismiss": "ไม่สนใจ", + "Unknown device": "อุปกรณ์ที่ไม่รู้จัก", + "You need to be using HTTPS to place a screen-sharing call.": "คุณต้องใช้ HTTPS เพื่อเริ่มติดต่อแบบแบ่งปันหน้าจอ", + "Welcome to Element": "ยินดีต้อนรับสู่ Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "ระบบแชทและประสานงาน ไร้ศูนย์กลางและเข้ารหัสได้ โดยใช้เทคโนโลยีจาก [matrix]", + "The message from the parser is: %(message)s": "ข้อความจากparserคือ:%(message)s", + "Invalid JSON": "JSON ไม่ถูกต้อง", + "Sign In": "เข้าสู่ระบบ", + "Create Account": "สร้างบัญชี", + "Explore rooms": "สำรวจห้อง" +} diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json new file mode 100644 index 0000000..48ef245 --- /dev/null +++ b/src/i18n/strings/tr.json @@ -0,0 +1,30 @@ +{ + "Dismiss": "Kapat", + "powered by Matrix": "Matrix'den besleniyor", + "Unknown device": "Bilinmeyen aygıt", + "You need to be using HTTPS to place a screen-sharing call.": "Ekran paylaşımlı arama yapmak için HTTPS kullanıyor olmalısınız.", + "Welcome to Element": "Element'e hoş geldiniz", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Merkezsiz, şifreli sohbet & işbirliği ile Matrix tarafından desteklenmektedir", + "Sign In": "Giriş Yap", + "Create Account": "Hesap Oluştur", + "Explore rooms": "Odaları keşfet", + "Invalid JSON": "Geçersiz JSON", + "Unexpected error preparing the app. See console for details.": "Uygulama hazırlanırken beklenmeyen bir hata oldu. Detaylar için konsola bakın.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Geçersiz yapılandırma: default_server_config, default_server_name, yada default_hs_url den sadece birisi seçilebilir.", + "Invalid configuration: no default server specified.": "Geçersiz yapılandırma: varsayılan sunucu seçilmemiş.", + "The message from the parser is: %(message)s": "Ayrıştırıcıdan gelen mesaj: %(message)s", + "Go to your browser to complete Sign In": "Oturum açmayı tamamlamak için tarayıcınıza gidin", + "Open user settings": "Kullanıcı ayarlarını aç", + "Your Element is misconfigured": "Element uygulaması hatalı ayarlanmış", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element uygulamasının ayarları hatalı JSON içeriyor. Lütfen hatayı düzeltip sayfayı yenileyin.", + "Unable to load config file: please refresh the page to try again.": "Yapılandırma (config) dosyası yüklenemedi: lütfen yeniden denemek için sayfayı yenileyin.", + "Download Completed": "İndirme Tamamlandı", + "Unsupported browser": "Desteklenmeyen tarayıcı", + "Your browser can't run %(brand)s": "", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s, kullandığınız tarayıcı tarafından desteklenmeyen, gelişmiş tarayıcı özellikleri kullanıyor.", + "Please install Chrome, Firefox, or Safari for the best experience.": "Daha iyi bir deneyim için lütfen Chrome, Firefox ya da Safari tarayıcılarından birini yükleyin.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Şu anda kullanmış olduğunuz tarayıcınızı kullanmaya devam edebilirsiniz ancak uygulamanın sunduğu bazı ya da bütün özellikler çalışmayabilir ve deneyiminizi kötü yönde etkileyebilir.", + "I understand the risks and wish to continue": "Riskleri anlıyorum ve devam etmek istiyorum", + "Go to element.io": "element.io adresine git", + "Failed to start": "Başlatılamadı" +} diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json new file mode 100644 index 0000000..fe57f2f --- /dev/null +++ b/src/i18n/strings/uk.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "Відхилити", + "powered by Matrix": "працює на Matrix", + "Unknown device": "Невідомий пристрій", + "You need to be using HTTPS to place a screen-sharing call.": "Ви маєте використовувати HTTPS щоб зробити виклик із поширенням екрану.", + "Welcome to Element": "Ласкаво просимо до Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентралізована, зашифрована балачка та засіб для співробітництва, що працює на [matrix]", + "Sign In": "Увійти", + "Create Account": "Створити обліковий запис", + "Explore rooms": "Шукати кімнати", + "Unexpected error preparing the app. See console for details.": "Неочікувана помилка при готуванні програми. Дивіться деталі у виводі консолі.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Невірна конфігурація: можна вказати лише default_server_config, default_server_name або default_hs_url.", + "Invalid configuration: no default server specified.": "Невірна конфігурація: не вказано усталений сервер.", + "The message from the parser is: %(message)s": "Аналізатор повідомляє: %(message)s", + "Invalid JSON": "Хибний JSON", + "Unsupported browser": "Непідтримуваний переглядач", + "Please install Chrome, Firefox, or Safari for the best experience.": "Для найкращих вражень від користування встановіть, будь ласка, Chrome, Firefox, або Safari.", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Ви можете продовжити, користуючись вашим поточним переглядачем, але деякі функції можуть не працювати, а застосунок може виглядати неправильно.", + "I understand the risks and wish to continue": "Я усвідомлюю ризик і бажаю продовжити", + "Go to element.io": "Перейти на element.io", + "Failed to start": "Запуск не вдався", + "Download Completed": "Завантаження завершено", + "Missing indexeddb worker script!": "Відсутній скрипт воркеру для IndexedDB!", + "Your Element is misconfigured": "Ваш Element налаштовано неправильно", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Ваша конфігурація Element містить хибний JSON. Виправте проблему та оновіть сторінку.", + "Unable to load config file: please refresh the page to try again.": "Неможливо завантажити файл конфігурації. Оновіть, будь ласка, сторінку.", + "Open": "Відкрити", + "Open user settings": "Відкрити користувацькі налаштування", + "Previous/next recently visited room or community": "Попередня/наступна нещодавно відвідана кімната чи спільнота", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", + "Go to your browser to complete Sign In": "Перейдіть у ваш переглядач щоб завершити входження", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Powered by Matrix": "Працює на Matrix", + "Your browser can't run %(brand)s": "Ваш переглядач неспроможний запустити %(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s використовує передові властивості, які ваш переглядач не підтримує." +} diff --git a/src/i18n/strings/vi.json b/src/i18n/strings/vi.json new file mode 100644 index 0000000..ddf67f5 --- /dev/null +++ b/src/i18n/strings/vi.json @@ -0,0 +1,16 @@ +{ + "Unknown device": "Thiết bị không được nhận biết", + "You need to be using HTTPS to place a screen-sharing call.": "Bạn phải sử dụng HTTPS để dùng chức năng chia sẻ màn hình.", + "Dismiss": "Bỏ qua", + "powered by Matrix": "tài trợ bởi Matrix", + "Welcome to Element": "Chào mừng tới Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat phân tán, mã hóa & giao tiếp được tài trợ bởi [matrix]", + "Unexpected error preparing the app. See console for details.": "Lỗi xảy ra trong lúc chuẩn bị app. Xem console log để biết chi tiết.", + "The message from the parser is: %(message)s": "Nội dung tin là: %(message)s", + "Invalid JSON": "JSON không hợp lệ", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Thiết lập không hợp lệ: chỉ có thể điền một trong số default_server_config, default_server_name, hoặc default_hs_url.", + "Invalid configuration: no default server specified.": "Cấu hình không hợp lệ: máy chủ mặc định không được thiết lập.", + "Sign In": "Đăng nhập", + "Create Account": "Tạo tài khoản", + "Explore rooms": "Khám phá phòng chat" +} diff --git a/src/i18n/strings/vls.json b/src/i18n/strings/vls.json new file mode 100644 index 0000000..2a4fdc4 --- /dev/null +++ b/src/i18n/strings/vls.json @@ -0,0 +1,17 @@ +{ + "Unexpected error preparing the app. See console for details.": "’t Is een onverwachte foute ipgetreedn by ’t voorbereidn van den app. Bekykt de console vo details.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Oungeldige configuroasje: ku moar één van default_server_config, default_server_name, of default_hs_url ingeevn.", + "Invalid configuration: no default server specified.": "Oungeldige configuroasje: geen standoardserver ingegeevn.", + "Unknown device": "Ounbekend toestel", + "You need to be using HTTPS to place a screen-sharing call.": "Je moet HTTPS gebruukn vo een iproep me schermdeeln te kunn startn.", + "powered by Matrix": "meuglik gemakt deur Matrix", + "Dismiss": "Afwyzn", + "Welcome to Element": "Welgekommn by Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chattn & soamenwerkn meuglik gemakt deur [matrix]", + "Sign In": "Anmeldn", + "Create Account": "Account anmoakn", + "Explore rooms": "Gesprekkn ountdekkn", + "The message from the parser is: %(message)s": "’t Bericht van de verwerker is: %(message)s", + "Invalid JSON": "Oungeldigen JSON", + "Go to your browser to complete Sign In": "Goa noa je browser voe d’anmeldienge te voltooin" +} diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json new file mode 100644 index 0000000..c5096b3 --- /dev/null +++ b/src/i18n/strings/zh_Hans.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "标记为已读", + "powered by Matrix": "由 Matrix 驱动", + "Unknown device": "未知设备", + "You need to be using HTTPS to place a screen-sharing call.": "您需要使用 HTTPS 以进行共享屏幕通话。", + "Welcome to Element": "欢迎来到 Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、加密聊天&与协作,由 [matrix] 驱动", + "Sign In": "登入", + "Create Account": "创建帐号", + "Explore rooms": "探索聊天室", + "The message from the parser is: %(message)s": "语法分析器的信息:%(message)s", + "Invalid JSON": "无效的 JSON", + "Unexpected error preparing the app. See console for details.": "软件准备时出错,详细信息请查看控制台。", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "无效的配置:只能设置 default_server_config,default_server_name,或 default_hs_url 中的一个。", + "Invalid configuration: no default server specified.": "无效的配置:没有设置默认服务器。", + "Missing indexeddb worker script!": "缺少 IndexedDB 辅助脚本!", + "Unable to load config file: please refresh the page to try again.": "无法加载配置文件:请再次刷新页面。", + "Open user settings": "打开用户设置", + "Previous/next recently visited room or community": "上一个 / 下一个最近访问的聊天室或社区", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s 桌面版 (%(platformName)s)", + "Go to your browser to complete Sign In": "去您的浏览器完成登录", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "不支持的浏览器", + "Please install Chrome, Firefox, or Safari for the best experience.": "请安装 ChromeFirefoxSafari 以获得最佳体验。", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "您可以继续使用您目前的浏览器,但部分或全部的功能可能无法正常工作,应用程序的外观可能也看起来不正确。", + "I understand the risks and wish to continue": "我了解风险并希望继续", + "Go to element.io": "去 element.io", + "Failed to start": "启动失败", + "Your Element is misconfigured": "Element 配置错误", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element 配置文件中包含无效的JSON,请改正错误并重新加载页面。", + "Download Completed": "下载成功", + "Open": "打开", + "Your browser can't run %(brand)s": "浏览器无法运行%(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "当前浏览器不支持%(brand)s调用的高级浏览器特性。", + "Powered by Matrix": "由 Matrix 驱动" +} diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json new file mode 100644 index 0000000..f9eca46 --- /dev/null +++ b/src/i18n/strings/zh_Hant.json @@ -0,0 +1,36 @@ +{ + "Dismiss": "關閉", + "powered by Matrix": "由 Matrix 提供", + "Unknown device": "未知裝置", + "You need to be using HTTPS to place a screen-sharing call.": "你需要使用 HTTPS 來撥打螢幕分享的通話。", + "Welcome to Element": "歡迎來到 Element", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、保密的聊天與協作,由 [matrix] 提供", + "Sign In": "登入", + "Create Account": "建立帳號", + "Explore rooms": "探索聊天室", + "Unexpected error preparing the app. See console for details.": "準備應用程式時發生未預期的錯誤。請見主控台以取得更多資訊。", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "無效的設定:只能指定 default_server_config、default_server_name 或 default_hs_url 其中之一。", + "Invalid configuration: no default server specified.": "無效設定:未指定預設的伺服器。", + "The message from the parser is: %(message)s": "從解析器而來的訊息為:%(message)s", + "Invalid JSON": "無效的 JSON", + "Go to your browser to complete Sign In": "到您的瀏覽器完成登入", + "Open user settings": "開啟使用者設定", + "Missing indexeddb worker script!": "缺少 indexeddb 輔助指令稿!", + "Unable to load config file: please refresh the page to try again.": "無法載入設定檔:請重新整理頁面以再試一次。", + "Previous/next recently visited room or community": "上一個/下一個最近造訪的聊天室或社群", + "%(brand)s Desktop (%(platformName)s)": "%(brand)s 桌面版 (%(platformName)s)", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Unsupported browser": "不支援的瀏覽器", + "Please install Chrome, Firefox, or Safari for the best experience.": "請安裝 ChromeFirefoxSafari 以取得最佳體驗。", + "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "您可以繼續使用您目前的瀏覽器,但部份或全部的功能可能會無法運作,而應用程式的外觀與感覺可能也會不正確。", + "I understand the risks and wish to continue": "我了解風險並希望繼續", + "Go to element.io": "到 element.io", + "Failed to start": "啟動失敗", + "Download Completed": "下載完成", + "Open": "開啟", + "Your Element is misconfigured": "Element 配置錯誤", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element 的配置中包含無效JSON,請更正錯誤並重新加載網頁。", + "Your browser can't run %(brand)s": "當前瀏覽器無法運行%(brand)s", + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "當前瀏覽器不支持%(brand)s使用的高級特性。", + "Powered by Matrix": "由 Matrix 提供" +} diff --git a/src/vector/app.tsx b/src/vector/app.tsx new file mode 100644 index 0000000..63dd0f6 --- /dev/null +++ b/src/vector/app.tsx @@ -0,0 +1,262 @@ +/* +Copyright 2015, 2016 OpenMarket Ltd +Copyright 2017 Vector Creations Ltd +Copyright 2018, 2019 New Vector Ltd +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2020 The Matrix.org Foundation C.I.C. + +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. +*/ + +import React from 'react'; +// add React and ReactPerf to the global namespace, to make them easier to access via the console +// this incidentally means we can forget our React imports in JSX files without penalty. +window.React = React; + +import url from 'url'; +import * as sdk from 'matrix-react-sdk'; +import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg'; +import {_td, newTranslatableError} from 'matrix-react-sdk/src/languageHandler'; +import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils'; +import {AutoDiscovery} from "matrix-js-sdk/src/autodiscovery"; +import * as Lifecycle from "matrix-react-sdk/src/Lifecycle"; +import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat"; +import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg'; +import SdkConfig from "matrix-react-sdk/src/SdkConfig"; + +import {parseQs, parseQsFromFragment} from './url_utils'; +import VectorBasePlatform from "./platform/VectorBasePlatform"; + +let lastLocationHashSet: string = null; + +// Parse the given window.location and return parameters that can be used when calling +// MatrixChat.showScreen(screen, params) +function getScreenFromLocation(location: Location) { + const fragparts = parseQsFromFragment(location); + return { + screen: fragparts.location.substring(1), + params: fragparts.params, + }; +} + +// Here, we do some crude URL analysis to allow +// deep-linking. +function routeUrl(location: Location) { + if (!window.matrixChat) return; + + console.log("Routing URL ", location.href); + const s = getScreenFromLocation(location); + (window.matrixChat as MatrixChatType).showScreen(s.screen, s.params); +} + +function onHashChange(ev: HashChangeEvent) { + if (decodeURIComponent(window.location.hash) === lastLocationHashSet) { + // we just set this: no need to route it! + return; + } + routeUrl(window.location); +} + +// This will be called whenever the SDK changes screens, +// so a web page can update the URL bar appropriately. +function onNewScreen(screen: string, replaceLast = false) { + console.log("newscreen " + screen); + const hash = '#/' + screen; + lastLocationHashSet = hash; + + if (replaceLast) { + window.location.replace(hash); + } else { + window.location.assign(hash); + } +} + +// We use this to work out what URL the SDK should +// pass through when registering to allow the user to +// click back to the client having registered. +// It's up to us to recognise if we're loaded with +// this URL and tell MatrixClient to resume registration. +// +// If we're in electron, we should never pass through a file:// URL otherwise +// the identity server will try to 302 the browser to it, which breaks horribly. +// so in that instance, hardcode to use app.element.io for now instead. +function makeRegistrationUrl(params: object) { + let url; + if (window.location.protocol === "vector:") { + url = 'https://app.element.io/#/register'; + } else { + url = ( + window.location.protocol + '//' + + window.location.host + + window.location.pathname + + '#/register' + ); + } + + const keys = Object.keys(params); + for (let i = 0; i < keys.length; ++i) { + if (i === 0) { + url += '?'; + } else { + url += '&'; + } + const k = keys[i]; + url += k + '=' + encodeURIComponent(params[k]); + } + return url; +} + +function onTokenLoginCompleted() { + // if we did a token login, we're now left with the token, hs and is + // url as query params in the url; a little nasty but let's redirect to + // clear them. + const parsedUrl = url.parse(window.location.href); + parsedUrl.search = ""; + const formatted = url.format(parsedUrl); + console.log(`Redirecting to ${formatted} to drop loginToken from queryparams`); + window.location.href = formatted; +} + +export async function loadApp(fragParams: {}) { + // XXX: the way we pass the path to the worker script from webpack via html in body's dataset is a hack + // but alternatives seem to require changing the interface to passing Workers to js-sdk + const vectorIndexeddbWorkerScript = document.body.dataset.vectorIndexeddbWorkerScript; + if (!vectorIndexeddbWorkerScript) { + // If this is missing, something has probably gone wrong with + // the bundling. The js-sdk will just fall back to accessing + // indexeddb directly with no worker script, but we want to + // make sure the indexeddb script is present, so fail hard. + throw newTranslatableError(_td("Missing indexeddb worker script!")); + } + MatrixClientPeg.setIndexedDbWorkerScript(vectorIndexeddbWorkerScript); + + window.addEventListener('hashchange', onHashChange); + + const platform = PlatformPeg.get(); + + const params = parseQs(window.location); + + const urlWithoutQuery = window.location.protocol + '//' + window.location.host + window.location.pathname; + console.log("Vector starting at " + urlWithoutQuery); + + (platform as VectorBasePlatform).startUpdater(); + + // Don't bother loading the app until the config is verified + const config = await verifyServerConfig(); + const MatrixChat = sdk.getComponent('structures.MatrixChat'); + return ; +} + +async function verifyServerConfig() { + let validatedConfig; + try { + console.log("Verifying homeserver configuration"); + + // Note: the query string may include is_url and hs_url - we only respect these in the + // context of email validation. Because we don't respect them otherwise, we do not need + // to parse or consider them here. + + // Note: Although we throw all 3 possible configuration options through a .well-known-style + // verification, we do not care if the servers are online at this point. We do moderately + // care if they are syntactically correct though, so we shove them through the .well-known + // validators for that purpose. + + const config = SdkConfig.get(); + let wkConfig = config['default_server_config']; // overwritten later under some conditions + const serverName = config['default_server_name']; + const hsUrl = config['default_hs_url']; + const isUrl = config['default_is_url']; + + const incompatibleOptions = [wkConfig, serverName, hsUrl].filter(i => !!i); + if (incompatibleOptions.length > 1) { + // noinspection ExceptionCaughtLocallyJS + throw newTranslatableError(_td( + "Invalid configuration: can only specify one of default_server_config, default_server_name, " + + "or default_hs_url.", + )); + } + if (incompatibleOptions.length < 1) { + // noinspection ExceptionCaughtLocallyJS + throw newTranslatableError(_td("Invalid configuration: no default server specified.")); + } + + if (hsUrl) { + console.log("Config uses a default_hs_url - constructing a default_server_config using this information"); + console.warn( + "DEPRECATED CONFIG OPTION: In the future, default_hs_url will not be accepted. Please use " + + "default_server_config instead.", + ); + + wkConfig = { + "m.homeserver": { + "base_url": hsUrl, + }, + }; + if (isUrl) { + wkConfig["m.identity_server"] = { + "base_url": isUrl, + }; + } + } + + let discoveryResult = null; + if (wkConfig) { + console.log("Config uses a default_server_config - validating object"); + discoveryResult = await AutoDiscovery.fromDiscoveryConfig(wkConfig); + } + + if (serverName) { + console.log("Config uses a default_server_name - doing .well-known lookup"); + console.warn( + "DEPRECATED CONFIG OPTION: In the future, default_server_name will not be accepted. Please " + + "use default_server_config instead.", + ); + discoveryResult = await AutoDiscovery.findClientConfig(serverName); + } + + validatedConfig = AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, discoveryResult, true); + } catch (e) { + const {hsUrl, isUrl, userId} = Lifecycle.getLocalStorageSessionVars(); + if (hsUrl && userId) { + console.error(e); + console.warn("A session was found - suppressing config error and using the session's homeserver"); + + console.log("Using pre-existing hsUrl and isUrl: ", {hsUrl, isUrl}); + validatedConfig = await AutoDiscoveryUtils.validateServerConfigWithStaticUrls(hsUrl, isUrl, true); + } else { + // the user is not logged in, so scream + throw e; + } + } + + validatedConfig.isDefault = true; + + // Just in case we ever have to debug this + console.log("Using homeserver config:", validatedConfig); + + // Add the newly built config to the actual config for use by the app + console.log("Updating SdkConfig with validated discovery information"); + SdkConfig.add({"validated_server_config": validatedConfig}); + + return SdkConfig.get(); +} diff --git a/src/vector/getconfig.ts b/src/vector/getconfig.ts new file mode 100644 index 0000000..f9ec5a1 --- /dev/null +++ b/src/vector/getconfig.ts @@ -0,0 +1,73 @@ +/* +Copyright 2018, 2020 New Vector Ltd + +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. +*/ + +import request from 'browser-request'; + +// Load the config file. First try to load up a domain-specific config of the +// form "config.$domain.json" and if that fails, fall back to config.json. +export async function getVectorConfig(relativeLocation='') { + if (relativeLocation !== '' && !relativeLocation.endsWith('/')) relativeLocation += '/'; + + const specificConfigPromise = getConfig(`${relativeLocation}config.${document.domain}.json`); + const generalConfigPromise = getConfig(relativeLocation + "config.json"); + + try { + const configJson = await specificConfigPromise; + // 404s succeed with an empty json config, so check that there are keys + if (Object.keys(configJson).length === 0) { + throw new Error(); // throw to enter the catch + } + return configJson; + } catch (e) { + return await generalConfigPromise; + } +} + +function getConfig(configJsonFilename: string): Promise<{}> { + return new Promise(function(resolve, reject) { + request( + { method: "GET", url: configJsonFilename, qs: { cachebuster: Date.now() } }, + (err, response, body) => { + try { + if (err || response.status < 200 || response.status >= 300) { + // Lack of a config isn't an error, we should + // just use the defaults. + // Also treat a blank config as no config, assuming + // the status code is 0, because we don't get 404s + // from file: URIs so this is the only way we can + // not fail if the file doesn't exist when loading + // from a file:// URI. + if (response) { + if (response.status == 404 || (response.status == 0 && body == '')) { + resolve({}); + } + } + reject({err: err, response: response}); + return; + } + + // We parse the JSON ourselves rather than use the JSON + // parameter, since this throws a parse error on empty + // which breaks if there's no config.json and we're + // loading from the filesystem (see above). + resolve(JSON.parse(body)); + } catch (e) { + reject({err: e}); + } + }, + ); + }); +} diff --git a/src/vector/index.html b/src/vector/index.html new file mode 100644 index 0000000..4cda4b3 --- /dev/null +++ b/src/vector/index.html @@ -0,0 +1,92 @@ + + + + + Element + + + + + + + + + + + + + + + + + + + + + + <% for (var i=0; i < htmlWebpackPlugin.files.css.length; i++) { + var file = htmlWebpackPlugin.files.css[i]; + var match = file.match(/^bundles\/.*?\/theme-(.*)\.css$/); + if (match) { + var title = match[1].charAt(0).toUpperCase() + match[1].slice(1); + %> + + <% } else { %> + + <% } + } %> + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + diff --git a/src/vector/index.ts b/src/vector/index.ts new file mode 100644 index 0000000..a88c1d0 --- /dev/null +++ b/src/vector/index.ts @@ -0,0 +1,230 @@ +/* +Copyright 2015, 2016 OpenMarket Ltd +Copyright 2017 Vector Creations Ltd +Copyright 2018, 2019 New Vector Ltd +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2020 The Matrix.org Foundation C.I.C. + +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. +*/ + +// Require common CSS here; this will make webpack process it into bundle.css. +// Our own CSS (which is themed) is imported via separate webpack entry points +// in webpack.config.js +require('gfm.css/gfm.css'); +require('highlight.js/styles/github.css'); + +// These are things that can run before the skin loads - be careful not to reference the react-sdk though. +import {parseQsFromFragment} from "./url_utils"; +import './modernizr'; + +// load service worker if available on this platform +if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('sw.js'); +} + +async function settled(...promises: Array>) { + for (const prom of promises) { + try { + await prom; + } catch (e) { + console.error(e); + } + } +} + +function checkBrowserFeatures() { + if (!window.Modernizr) { + console.error("Cannot check features - Modernizr global is missing."); + return false; + } + + // custom checks atop Modernizr because it doesn't have ES2018/ES2019 checks in it for some features we depend on, + // Modernizr requires rules to be lowercase with no punctuation: + // ES2018: http://www.ecma-international.org/ecma-262/9.0/#sec-promise.prototype.finally + window.Modernizr.addTest("promiseprototypefinally", () => + window.Promise && window.Promise.prototype && typeof window.Promise.prototype.finally === "function"); + // ES2019: http://www.ecma-international.org/ecma-262/10.0/#sec-object.fromentries + window.Modernizr.addTest("objectfromentries", () => + window.Object && typeof window.Object.fromEntries === "function"); + + const featureList = Object.keys(window.Modernizr); + + let featureComplete = true; + for (let i = 0; i < featureList.length; i++) { + if (window.Modernizr[featureList[i]] === undefined) { + console.error( + "Looked for feature '%s' but Modernizr has no results for this. " + + "Has it been configured correctly?", featureList[i], + ); + return false; + } + if (window.Modernizr[featureList[i]] === false) { + console.error("Browser missing feature: '%s'", featureList[i]); + // toggle flag rather than return early so we log all missing features rather than just the first. + featureComplete = false; + } + } + return featureComplete; +} + +const supportedBrowser = checkBrowserFeatures(); + +// React depends on Map & Set which we check for using modernizr's es6collections +// if modernizr fails we may not have a functional react to show the error message. +// try in react but fallback to an `alert` +// We start loading stuff but don't block on it until as late as possible to allow +// the browser to use as much parallelism as it can. +// Load parallelism is based on research in https://github.com/vector-im/element-web/issues/12253 +async function start() { + // load init.ts async so that its code is not executed immediately and we can catch any exceptions + const { + rageshakePromise, + preparePlatform, + loadOlm, + loadConfig, + loadSkin, + loadLanguage, + loadTheme, + loadApp, + showError, + showIncompatibleBrowser, + _t, + } = await import( + /* webpackChunkName: "init" */ + /* webpackPreload: true */ + "./init"); + + try { + // give rageshake a chance to load/fail, we don't actually assert rageshake loads, we allow it to fail if no IDB + await settled(rageshakePromise); + + const fragparts = parseQsFromFragment(window.location); + + // don't try to redirect to the native apps if we're + // verifying a 3pid (but after we've loaded the config) + // or if the user is following a deep link + // (https://github.com/vector-im/element-web/issues/7378) + const preventRedirect = fragparts.params.client_secret || fragparts.location.length > 0; + + if (!preventRedirect) { + const isIos = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; + const isAndroid = /Android/.test(navigator.userAgent); + if (isIos || isAndroid) { + if (document.cookie.indexOf("element_mobile_redirect_to_guide=false") === -1) { + window.location.href = "mobile_guide/"; + return; + } + } + } + + const loadOlmPromise = loadOlm(); + // set the platform for react sdk + preparePlatform(); + // load config requires the platform to be ready + const loadConfigPromise = loadConfig(); + await settled(loadConfigPromise); // wait for it to settle + // keep initialising so that we can show any possible error with as many features (theme, i18n) as possible + + // Load language after loading config.json so that settingsDefaults.language can be applied + const loadLanguagePromise = loadLanguage(); + // as quickly as we possibly can, set a default theme... + const loadThemePromise = loadTheme(); + const loadSkinPromise = loadSkin(); + + // await things settling so that any errors we have to render have features like i18n running + await settled(loadSkinPromise, loadThemePromise, loadLanguagePromise); + + let acceptBrowser = supportedBrowser; + if (!acceptBrowser && window.localStorage) { + acceptBrowser = Boolean(window.localStorage.getItem("mx_accepts_unsupported_browser")); + } + + // ########################## + // error handling begins here + // ########################## + if (!acceptBrowser) { + await new Promise(resolve => { + console.error("Browser is missing required features."); + // take to a different landing page to AWOOOOOGA at the user + showIncompatibleBrowser(() => { + if (window.localStorage) { + window.localStorage.setItem('mx_accepts_unsupported_browser', String(true)); + } + console.log("User accepts the compatibility risks."); + resolve(); + }); + }); + } + + try { + // await config here + await loadConfigPromise; + } catch (error) { + // Now that we've loaded the theme (CSS), display the config syntax error if needed. + if (error.err && error.err instanceof SyntaxError) { + // This uses the default brand since the app config is unavailable. + return showError(_t("Your Element is misconfigured"), [ + _t("Your Element configuration contains invalid JSON. " + + "Please correct the problem and reload the page."), + _t( + "The message from the parser is: %(message)s", + { message: error.err.message || _t("Invalid JSON") }, + ), + ]); + } + return showError(_t("Unable to load config file: please refresh the page to try again.")); + } + + // ################################## + // app load critical path starts here + // assert things started successfully + // ################################## + await loadOlmPromise; + await loadSkinPromise; + await loadThemePromise; + await loadLanguagePromise; + + // Finally, load the app. All of the other react-sdk imports are in this file which causes the skinner to + // run on the components. + await loadApp(fragparts.params); + } catch (err) { + console.error(err); + // Like the compatibility page, AWOOOOOGA at the user + // This uses the default brand since the app config is unavailable. + await showError(_t("Your Element is misconfigured"), [ + err.translatedMessage || _t("Unexpected error preparing the app. See console for details."), + ]); + } +} + +start().catch(err => { + console.error(err); + // show the static error in an iframe to not lose any context / console data + // with some basic styling to make the iframe full page + delete document.body.style.height; + const iframe = document.createElement("iframe"); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore - typescript seems to only like the IE syntax for iframe sandboxing + iframe["sandbox"] = ""; + iframe.src = supportedBrowser ? "static/unable-to-load.html" : "static/incompatible-browser.html"; + iframe.style.width = "100%"; + iframe.style.height = "100%"; + iframe.style.position = "absolute"; + iframe.style.top = "0"; + iframe.style.left = "0"; + iframe.style.right = "0"; + iframe.style.bottom = "0"; + iframe.style.border = "0"; + document.getElementById("matrixchat").appendChild(iframe); +}); diff --git a/src/vector/indexeddb-worker.js b/src/vector/indexeddb-worker.js new file mode 100644 index 0000000..3cb2cb9 --- /dev/null +++ b/src/vector/indexeddb-worker.js @@ -0,0 +1,21 @@ +/* +Copyright 2017 Vector Creations Ltd + +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. +*/ + +import {IndexedDBStoreWorker} from 'matrix-js-sdk/src/indexeddb-worker.js'; + +const remoteWorker = new IndexedDBStoreWorker(postMessage); + +global.onmessage = remoteWorker.onMessage; diff --git a/src/vector/init.tsx b/src/vector/init.tsx new file mode 100644 index 0000000..139e67a --- /dev/null +++ b/src/vector/init.tsx @@ -0,0 +1,169 @@ +/* +Copyright 2015, 2016 OpenMarket Ltd +Copyright 2017 Vector Creations Ltd +Copyright 2018, 2019, 2020 New Vector Ltd +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> + +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. +*/ + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import olmWasmPath from "olm/olm.wasm"; +import Olm from 'olm'; +import * as ReactDOM from "react-dom"; +import * as React from "react"; + +import * as languageHandler from "matrix-react-sdk/src/languageHandler"; +import SettingsStore from "matrix-react-sdk/src/settings/SettingsStore"; +import ElectronPlatform from "./platform/ElectronPlatform"; +import PWAPlatform from "./platform/PWAPlatform"; +import WebPlatform from "./platform/WebPlatform"; +import PlatformPeg from "matrix-react-sdk/src/PlatformPeg"; +import SdkConfig from "matrix-react-sdk/src/SdkConfig"; +import {setTheme} from "matrix-react-sdk/src/theme"; + +import { initRageshake } from "./rageshakesetup"; + + +export const rageshakePromise = initRageshake(); + +export function preparePlatform() { + if (window.ipcRenderer) { + console.log("Using Electron platform"); + PlatformPeg.set(new ElectronPlatform()); + } else if (window.matchMedia('(display-mode: standalone)').matches) { + console.log("Using PWA platform"); + PlatformPeg.set(new PWAPlatform()); + } else { + console.log("Using Web platform"); + PlatformPeg.set(new WebPlatform()); + } +} + +export async function loadConfig() { + // XXX: We call this twice, once here and once in MatrixChat as a prop. We call it here to ensure + // granular settings are loaded correctly and to avoid duplicating the override logic for the theme. + // + // Note: this isn't called twice for some wrappers, like the Jitsi wrapper. + SdkConfig.put(await PlatformPeg.get().getConfig() || {}); +} + +export function loadOlm(): Promise { + /* Load Olm. We try the WebAssembly version first, and then the legacy, + * asm.js version if that fails. For this reason we need to wait for this + * to finish before continuing to load the rest of the app. In future + * we could somehow pass a promise down to react-sdk and have it wait on + * that so olm can be loading in parallel with the rest of the app. + * + * We also need to tell the Olm js to look for its wasm file at the same + * level as index.html. It really should be in the same place as the js, + * ie. in the bundle directory, but as far as I can tell this is + * completely impossible with webpack. We do, however, use a hashed + * filename to avoid caching issues. + */ + return Olm.init({ + locateFile: () => olmWasmPath, + }).then(() => { + console.log("Using WebAssembly Olm"); + }).catch((e) => { + console.log("Failed to load Olm: trying legacy version", e); + return new Promise((resolve, reject) => { + const s = document.createElement('script'); + s.src = 'olm_legacy.js'; // XXX: This should be cache-busted too + s.onload = resolve; + s.onerror = reject; + document.body.appendChild(s); + }).then(() => { + // Init window.Olm, ie. the one just loaded by the script tag, + // not 'Olm' which is still the failed wasm version. + return window.Olm.init(); + }).then(() => { + console.log("Using legacy Olm"); + }).catch((e) => { + console.log("Both WebAssembly and asm.js Olm failed!", e); + }); + }); +} + +export async function loadLanguage() { + const prefLang = SettingsStore.getValue("language", null, /*excludeDefault=*/true); + let langs = []; + + if (!prefLang) { + languageHandler.getLanguagesFromBrowser().forEach((l) => { + langs.push(...languageHandler.getNormalizedLanguageKeys(l)); + }); + } else { + langs = [prefLang]; + } + try { + await languageHandler.setLanguage(langs); + document.documentElement.setAttribute("lang", languageHandler.getCurrentLanguage()); + } catch (e) { + console.error("Unable to set language", e); + } +} + +export async function loadSkin() { + // Ensure the skin is the very first thing to load for the react-sdk. We don't even want to reference + // the SDK until we have to in imports. + console.log("Loading skin..."); + // load these async so that its code is not executed immediately and we can catch any exceptions + const [sdk, skin] = await Promise.all([ + import( + /* webpackChunkName: "matrix-react-sdk" */ + /* webpackPreload: true */ + "matrix-react-sdk"), + import( + /* webpackChunkName: "riot-web-component-index" */ + /* webpackPreload: true */ + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore - this module is generated so may fail lint + "../component-index"), + ]); + sdk.loadSkin(skin); + console.log("Skin loaded!"); +} + +export async function loadTheme() { + setTheme(); +} + +export async function loadApp(fragParams: {}) { + // load app.js async so that its code is not executed immediately and we can catch any exceptions + const module = await import( + /* webpackChunkName: "riot-web-app" */ + /* webpackPreload: true */ + "./app"); + window.matrixChat = ReactDOM.render(await module.loadApp(fragParams), + document.getElementById('matrixchat')); +} + +export async function showError(title: string, messages?: string[]) { + const ErrorView = (await import( + /* webpackChunkName: "error-view" */ + "../async-components/structures/ErrorView")).default; + window.matrixChat = ReactDOM.render(, + document.getElementById('matrixchat')); +} + +export async function showIncompatibleBrowser(onAccept) { + const CompatibilityView = (await import( + /* webpackChunkName: "compatibility-view" */ + "../async-components/structures/CompatibilityView")).default; + window.matrixChat = ReactDOM.render(, + document.getElementById('matrixchat')); +} + +export const _t = languageHandler._t; diff --git a/src/vector/jitsi/index.html b/src/vector/jitsi/index.html new file mode 100644 index 0000000..1a05c60 --- /dev/null +++ b/src/vector/jitsi/index.html @@ -0,0 +1,24 @@ + + + + + Jitsi Widget + + +
+
+
+
+ + +

Jitsi Video Conference

+
+ +
+
+
+
+ + + + diff --git a/src/vector/jitsi/index.scss b/src/vector/jitsi/index.scss new file mode 100644 index 0000000..2c7e020 --- /dev/null +++ b/src/vector/jitsi/index.scss @@ -0,0 +1,107 @@ +/* +Copyright 2020 New Vector Ltd. + +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. +*/ + +// TODO: Match the user's theme: https://github.com/vector-im/riot-web/issues/12794 + +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url('~matrix-react-sdk/res/fonts/Nunito/Nunito-Regular.ttf') format('truetype'); +} + +$dark-fg: #edf3ff; +$dark-bg: #363c43; +$light-fg: #2e2f32; +$light-bg: #fff; +body { + font-family: Nunito, Arial, Helvetica, sans-serif; + background-color: $dark-bg; + color: $dark-fg; +} + +body.theme-light { + background-color: $light-bg; + color: $light-fg; +} + +body, html { + padding: 0; + margin: 0; +} + +#jitsiContainer { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +#joinButtonContainer { + display: table; + position: absolute; + height: 100%; + width: 100%; +} + +.joinConferenceFloating { + display: table-cell; + vertical-align: middle; +} + +.joinConferencePrompt { + margin-left: auto; + margin-right: auto; + width: 90%; + text-align: center; +} + +#joinButton { + // A mix of AccessibleButton styles + cursor: pointer; + padding: 7px 18px; + text-align: center; + border-radius: 4px; + display: inline-block; + font-size: 14px; + color: #ffffff; + background-color: #03b381; + border: 0; +} + +.icon { + $icon-size: 42px; + margin-top: -$icon-size; // to visually center the form + + &::before { + content: ''; + background-size: contain; + background-color: $dark-fg; + mask-repeat: no-repeat; + mask-position: center; + mask-image: url("~matrix-react-sdk/res/img/element-icons/call/video-call.svg"); + mask-size: $icon-size; + display: block; + width: $icon-size; + height: $icon-size; + margin: 0 auto; // center + } +} + +body.theme-light .icon::before { + background-color: $light-fg; +} diff --git a/src/vector/jitsi/index.ts b/src/vector/jitsi/index.ts new file mode 100644 index 0000000..a5a8be3 --- /dev/null +++ b/src/vector/jitsi/index.ts @@ -0,0 +1,241 @@ +/* +Copyright 2020 New Vector Ltd. + +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. +*/ + +// We have to trick webpack into loading our CSS for us. +require("./index.scss"); + +import * as qs from 'querystring'; +import {KJUR} from 'jsrsasign'; +import { + IOpenIDCredentials, + IWidgetApiRequest, + VideoConferenceCapabilities, + WidgetApi, +} from "matrix-widget-api"; +import { ElementWidgetActions } from "matrix-react-sdk/src/stores/widgets/ElementWidgetActions"; + +const JITSI_OPENIDTOKEN_JWT_AUTH = 'openidtoken-jwt'; + +// Dev note: we use raw JS without many dependencies to reduce bundle size. +// We do not need all of React to render a Jitsi conference. + +declare let JitsiMeetExternalAPI: any; + +let inConference = false; + +// Jitsi params +let jitsiDomain: string; +let conferenceId: string; +let displayName: string; +let avatarUrl: string; +let userId: string; +let jitsiAuth: string; +let roomId: string; +let openIdToken: IOpenIDCredentials; + +let widgetApi: WidgetApi; +let meetApi: any; // JitsiMeetExternalAPI + +(async function() { + try { + // The widget's options are encoded into the fragment to avoid leaking info to the server. The widget + // spec on the other hand requires the widgetId and parentUrl to show up in the regular query string. + const widgetQuery = qs.parse(window.location.hash.substring(1)); + const query = Object.assign({}, qs.parse(window.location.search.substring(1)), widgetQuery); + const qsParam = (name: string, optional = false): string => { + if (!optional && (!query[name] || typeof (query[name]) !== 'string')) { + throw new Error(`Expected singular ${name} in query string`); + } + return query[name]; + }; + + // If we have these params, expect a widget API to be available (ie. to be in an iframe + // inside a matrix client). Otherwise, assume we're on our own, eg. have been popped + // out into a browser. + const parentUrl = qsParam('parentUrl', true); + const widgetId = qsParam('widgetId', true); + const theme = qsParam('theme', true); + + if (theme) { + document.body.classList.add(`theme-${theme.replace(" ", "_")}`); + } + + // Set this up as early as possible because Element will be hitting it almost immediately. + let readyPromise: Promise<[void, void]>; + if (parentUrl && widgetId) { + const parentOrigin = new URL(qsParam('parentUrl')).origin; + widgetApi = new WidgetApi(qsParam("widgetId"), parentOrigin); + widgetApi.requestCapabilities(VideoConferenceCapabilities); + readyPromise = Promise.all([ + new Promise(resolve => { + widgetApi.once(`action:${ElementWidgetActions.ClientReady}`, ev => { + ev.preventDefault(); + widgetApi.transport.reply(ev.detail, {}); + resolve(); + }); + }), + new Promise(resolve => { + widgetApi.once("ready", () => resolve()); + }), + ]); + widgetApi.start(); + } else { + console.warn("No parent URL or no widget ID - assuming no widget API is available"); + } + + // Populate the Jitsi params now + jitsiDomain = qsParam('conferenceDomain'); + conferenceId = qsParam('conferenceId'); + displayName = qsParam('displayName', true); + avatarUrl = qsParam('avatarUrl', true); // http not mxc + userId = qsParam('userId'); + jitsiAuth = qsParam('auth', true); + roomId = qsParam('roomId', true); + + if (widgetApi) { + await readyPromise; + await widgetApi.setAlwaysOnScreen(false); // start off as detachable from the screen + + // See https://github.com/matrix-org/prosody-mod-auth-matrix-user-verification + if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) { + // Request credentials, give callback to continue when received + openIdToken = await widgetApi.requestOpenIDConnectToken(); + console.log("Got OpenID Connect token"); + } + + // TODO: register widgetApi listeners for PTT controls (https://github.com/vector-im/riot-web/issues/12795) + + widgetApi.on(`action:${ElementWidgetActions.HangupCall}`, + (ev: CustomEvent) => { + if (meetApi) meetApi.executeCommand('hangup'); + widgetApi.transport.reply(ev.detail, {}); // ack + }, + ); + } + + enableJoinButton(); // always enable the button + } catch (e) { + console.error("Error setting up Jitsi widget", e); + document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget"; + } +})(); + +function enableJoinButton() { + document.getElementById("joinButton").onclick = () => joinConference(); +} + +function switchVisibleContainers() { + inConference = !inConference; + document.getElementById("jitsiContainer").style.visibility = inConference ? 'unset' : 'hidden'; + document.getElementById("joinButtonContainer").style.visibility = inConference ? 'hidden' : 'unset'; +} + +/** + * Create a JWT token fot jitsi openidtoken-jwt auth + * + * See https://github.com/matrix-org/prosody-mod-auth-matrix-user-verification + */ +function createJWTToken() { + // Header + const header = {alg: 'HS256', typ: 'JWT'}; + // Payload + const payload = { + // As per Jitsi token auth, `iss` needs to be set to something agreed between + // JWT generating side and Prosody config. Since we have no configuration for + // the widgets, we can't set one anywhere. Using the Jitsi domain here probably makes sense. + iss: jitsiDomain, + sub: jitsiDomain, + aud: `https://${jitsiDomain}`, + room: "*", + context: { + matrix: { + token: openIdToken.access_token, + room_id: roomId, + }, + user: { + avatar: avatarUrl, + name: displayName, + }, + }, + }; + // Sign JWT + // The secret string here is irrelevant, we're only using the JWT + // to transport data to Prosody in the Jitsi stack. + return KJUR.jws.JWS.sign( + 'HS256', + JSON.stringify(header), + JSON.stringify(payload), + 'notused', + ); +} + +function joinConference() { // event handler bound in HTML + let jwt; + if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) { + if (!openIdToken?.access_token) { // eslint-disable-line camelcase + // We've failing to get a token, don't try to init conference + console.warn('Expected to have an OpenID credential, cannot initialize widget.'); + document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget"; + return; + } + jwt = createJWTToken(); + } + + switchVisibleContainers(); + + if (widgetApi) { + // ignored promise because we don't care if it works + // noinspection JSIgnoredPromiseFromCall + widgetApi.setAlwaysOnScreen(true); + } + + console.warn( + "[Jitsi Widget] The next few errors about failing to parse URL parameters are fine if " + + "they mention 'external_api' or 'jitsi' in the stack. They're just Jitsi Meet trying to parse " + + "our fragment values and not recognizing the options.", + ); + const options = { + width: "100%", + height: "100%", + parentNode: document.querySelector("#jitsiContainer"), + roomName: conferenceId, + interfaceConfigOverwrite: { + SHOW_JITSI_WATERMARK: false, + SHOW_WATERMARK_FOR_GUESTS: false, + MAIN_TOOLBAR_BUTTONS: [], + VIDEO_LAYOUT_FIT: "height", + }, + jwt: jwt, + }; + + meetApi = new JitsiMeetExternalAPI(jitsiDomain, options); + if (displayName) meetApi.executeCommand("displayName", displayName); + if (avatarUrl) meetApi.executeCommand("avatarUrl", avatarUrl); + if (userId) meetApi.executeCommand("email", userId); + + meetApi.on("readyToClose", () => { + switchVisibleContainers(); + + if (widgetApi) { + // ignored promise because we don't care if it works + // noinspection JSIgnoredPromiseFromCall + widgetApi.setAlwaysOnScreen(false); + } + + document.getElementById("jitsiContainer").innerHTML = ""; + meetApi = null; + }); +} diff --git a/src/vector/mobile_guide/index.html b/src/vector/mobile_guide/index.html new file mode 100644 index 0000000..da49907 --- /dev/null +++ b/src/vector/mobile_guide/index.html @@ -0,0 +1,341 @@ + + + + + + + + + + + + +
+ +
+ +
+
+ +

Set up Element on iOS or Android

+
+ + + +
+ + diff --git a/src/vector/mobile_guide/index.js b/src/vector/mobile_guide/index.js new file mode 100644 index 0000000..9a2af3c --- /dev/null +++ b/src/vector/mobile_guide/index.js @@ -0,0 +1,110 @@ +import {getVectorConfig} from '../getconfig'; + +function onBackToElementClick() { + // Cookie should expire in 4 hours + document.cookie = 'element_mobile_redirect_to_guide=false;path=/;max-age=14400'; + window.location.href = '../'; +} + +// NEVER pass user-controlled content to this function! Hardcoded strings only please. +function renderConfigError(message) { + const contactMsg = "If this is unexpected, please contact your system administrator " + + "or technical support representative."; + message = `

Error loading Element

${message}

${contactMsg}

`; + + const toHide = document.getElementsByClassName("mx_HomePage_container"); + const errorContainers = document.getElementsByClassName("mx_HomePage_errorContainer"); + + for (const e of toHide) { + // We have to clear the content because .style.display='none'; doesn't work + // due to an !important in the CSS. + e.innerHTML = ''; + } + for (const e of errorContainers) { + e.style.display = 'block'; + e.innerHTML = message; + } +} + +async function initPage() { + document.getElementById('back_to_element_button').onclick = onBackToElementClick; + + const config = await getVectorConfig('..'); + + // We manually parse the config similar to how validateServerConfig works because + // calling that function pulls in roughly 4mb of JS we don't use. + + const wkConfig = config['default_server_config']; // overwritten later under some conditions + const serverName = config['default_server_name']; + const defaultHsUrl = config['default_hs_url']; + const defaultIsUrl = config['default_is_url']; + + const incompatibleOptions = [wkConfig, serverName, defaultHsUrl].filter(i => !!i); + if (incompatibleOptions.length > 1) { + return renderConfigError( + "Invalid configuration: can only specify one of default_server_config, default_server_name, " + + "or default_hs_url.", + ); + } + if (incompatibleOptions.length < 1) { + return renderConfigError("Invalid configuration: no default server specified."); + } + + let hsUrl = ''; + let isUrl = ''; + + if (wkConfig && wkConfig['m.homeserver']) { + hsUrl = wkConfig['m.homeserver']['base_url']; + + if (wkConfig['m.identity_server']) { + isUrl = wkConfig['m.identity_server']['base_url']; + } + } + + if (serverName) { + // We also do our own minimal .well-known validation to avoid pulling in the js-sdk + try { + const result = await fetch(`https://${serverName}/.well-known/matrix/client`); + const wkConfig = await result.json(); + if (wkConfig && wkConfig['m.homeserver']) { + hsUrl = wkConfig['m.homeserver']['base_url']; + + if (wkConfig['m.identity_server']) { + isUrl = wkConfig['m.identity_server']['base_url']; + } + } + } catch (e) { + console.error(e); + return renderConfigError("Unable to fetch homeserver configuration"); + } + } + + if (defaultHsUrl) { + hsUrl = defaultHsUrl; + isUrl = defaultIsUrl; + } + + if (!hsUrl) { + return renderConfigError("Unable to locate homeserver"); + } + + if (hsUrl && !hsUrl.endsWith('/')) hsUrl += '/'; + if (isUrl && !isUrl.endsWith('/')) isUrl += '/'; + + if (hsUrl !== 'https://matrix.org/') { + document.getElementById('configure_element_button').href = + "https://mobile.element.io?hs_url=" + encodeURIComponent(hsUrl) + + "&is_url=" + encodeURIComponent(isUrl); + document.getElementById('step1_heading').innerHTML= '1: Install the app'; + document.getElementById('step2_container').style.display = 'block'; + document.getElementById('hs_url').innerText = hsUrl; + + if (isUrl) { + document.getElementById('custom_is').style.display = 'block'; + document.getElementById('is_url').style.display = 'block'; + document.getElementById('is_url').innerText = isUrl; + } + } +} + +initPage(); diff --git a/src/vector/modernizr.js b/src/vector/modernizr.js new file mode 100644 index 0000000..19bfb14 --- /dev/null +++ b/src/vector/modernizr.js @@ -0,0 +1,3 @@ +/*! modernizr 3.10.0 (Custom Build) | MIT * + * https://modernizr.com/download/?-cors-cryptography-cssanimations-cssfilters-displaytable-es5date-es5function-es5object-es5undefined-es6array-es6collections-es6string-fetch-flexbox-json-localstorage-objectfit-promises-sandbox-svg-svgasimg-svgfilters-urlparser-urlsearchparams-setclasses-cssclassprefix:modernizr_ !*/ +!function(e,t,n,r){function o(e,t){return typeof e===t}function i(e){var t=C.className,n=Modernizr._config.classPrefix||"";if(_&&(t=t.baseVal),Modernizr._config.enableJSClass){var r=new RegExp("(^|\\s)"+n+"no-js(\\s|$)");t=t.replace(r,"$1"+n+"js$2")}Modernizr._config.enableClasses&&(e.length>0&&(t+=" "+n+e.join(" "+n)),_?C.className.baseVal=t:C.className=t)}function s(e,t){return!!~(""+e).indexOf(t)}function a(){return"function"!=typeof n.createElement?n.createElement(arguments[0]):_?n.createElementNS.call(n,"http://www.w3.org/2000/svg",arguments[0]):n.createElement.apply(n,arguments)}function l(){var e=n.body;return e||(e=a(_?"svg":"body"),e.fake=!0),e}function f(e,t,r,o){var i,s,f,u,d="modernizr",c=a("div"),p=l();if(parseInt(r,10))for(;r--;)f=a("div"),f.id=o?o[r]:d+(r+1),c.appendChild(f);return i=a("style"),i.type="text/css",i.id="s"+d,(p.fake?p:c).appendChild(i),p.appendChild(c),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(n.createTextNode(e)),c.id=d,p.fake&&(p.style.background="",p.style.overflow="hidden",u=C.style.overflow,C.style.overflow="hidden",C.appendChild(p)),s=t(c,e),p.fake?(p.parentNode.removeChild(p),C.style.overflow=u,C.offsetHeight):c.parentNode.removeChild(c),!!s}function u(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}).replace(/^ms-/,"-ms-")}function d(e,n,r){var o;if("getComputedStyle"in t){o=getComputedStyle.call(t,e,n);var i=t.console;if(null!==o)r&&(o=o.getPropertyValue(r));else if(i){var s=i.error?"error":"log";i[s].call(i,"getComputedStyle returning null, its possible modernizr test results are inaccurate")}}else o=!n&&e.currentStyle&&e.currentStyle[r];return o}function c(e,n){var o=e.length;if("CSS"in t&&"supports"in t.CSS){for(;o--;)if(t.CSS.supports(u(e[o]),n))return!0;return!1}if("CSSSupportsRule"in t){for(var i=[];o--;)i.push("("+u(e[o])+":"+n+")");return i=i.join(" or "),f("@supports ("+i+") { #modernizr { position: absolute; } }",function(e){return"absolute"===d(e,null,"position")})}return r}function p(e){return e.replace(/([a-z])-([a-z])/g,function(e,t,n){return t+n.toUpperCase()}).replace(/^-/,"")}function y(e,t,n,i){function l(){u&&(delete P.style,delete P.modElem)}if(i=!o(i,"undefined")&&i,!o(n,"undefined")){var f=c(e,n);if(!o(f,"undefined"))return f}for(var u,d,y,m,g,h=["modernizr","tspan","samp"];!P.style&&h.length;)u=!0,P.modElem=a(h.shift()),P.style=P.modElem.style;for(y=e.length,d=0;d9)}),Modernizr.addTest("flexbox",v("flexBasis","1px",!0));var L=function(e){var n,o=A.length,i=t.CSSRule;if(void 0===i)return r;if(!e)return!1;if(e=e.replace(/^@/,""),(n=e.replace(/-/g,"_").toUpperCase()+"_RULE")in i)return"@"+e;for(var s=0;s +Copyright 2020 The Matrix.org Foundation C.I.C. + +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. +*/ + +import VectorBasePlatform from './VectorBasePlatform'; +import {UpdateCheckStatus} from "matrix-react-sdk/src/BasePlatform"; +import BaseEventIndexManager, { + CrawlerCheckpoint, + EventAndProfile, + IndexStats, + MatrixEvent, + MatrixProfile, + SearchArgs, + SearchResult, +} from 'matrix-react-sdk/src/indexing/BaseEventIndexManager'; +import dis from 'matrix-react-sdk/src/dispatcher/dispatcher'; +import {_t, _td} from 'matrix-react-sdk/src/languageHandler'; +import SdkConfig from 'matrix-react-sdk/src/SdkConfig'; +import * as rageshake from 'matrix-react-sdk/src/rageshake/rageshake'; +import {MatrixClient} from "matrix-js-sdk/src/client"; +import {Room} from "matrix-js-sdk/src/models/room"; +import Modal from "matrix-react-sdk/src/Modal"; +import InfoDialog from "matrix-react-sdk/src/components/views/dialogs/InfoDialog"; +import Spinner from "matrix-react-sdk/src/components/views/elements/Spinner"; +import {Categories, Modifiers, registerShortcut} from "matrix-react-sdk/src/accessibility/KeyboardShortcuts"; +import {Key} from "matrix-react-sdk/src/Keyboard"; +import React from "react"; +import {randomString} from "matrix-js-sdk/src/randomstring"; +import {Action} from "matrix-react-sdk/src/dispatcher/actions"; +import {ActionPayload} from "matrix-react-sdk/src/dispatcher/payloads"; +import {showToast as showUpdateToast} from "matrix-react-sdk/src/toasts/UpdateToast"; +import {CheckUpdatesPayload} from "matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload"; +import ToastStore from "matrix-react-sdk/src/stores/ToastStore"; +import GenericExpiringToast from "matrix-react-sdk/src/components/views/toasts/GenericExpiringToast"; + +const ipcRenderer = window.ipcRenderer; +const isMac = navigator.platform.toUpperCase().includes('MAC'); + +function platformFriendlyName(): string { + // used to use window.process but the same info is available here + if (navigator.userAgent.includes('Macintosh')) { + return 'macOS'; + } else if (navigator.userAgent.includes('FreeBSD')) { + return 'FreeBSD'; + } else if (navigator.userAgent.includes('OpenBSD')) { + return 'OpenBSD'; + } else if (navigator.userAgent.includes('SunOS')) { + return 'SunOS'; + } else if (navigator.userAgent.includes('Windows')) { + return 'Windows'; + } else if (navigator.userAgent.includes('Linux')) { + return 'Linux'; + } else { + return 'Unknown'; + } +} + +function _onAction(payload: ActionPayload) { + // Whitelist payload actions, no point sending most across + if (['call_state'].includes(payload.action)) { + ipcRenderer.send('app_onAction', payload); + } +} + +function getUpdateCheckStatus(status: boolean | string) { + if (status === true) { + return { status: UpdateCheckStatus.Downloading }; + } else if (status === false) { + return { status: UpdateCheckStatus.NotAvailable }; + } else { + return { + status: UpdateCheckStatus.Error, + detail: status, + }; + } +} + +interface IPCPayload { + id?: number; + error?: string; + reply?: any; +} + +class SeshatIndexManager extends BaseEventIndexManager { + private pendingIpcCalls: Record = {}; + private nextIpcCallId = 0; + + constructor() { + super(); + + ipcRenderer.on('seshatReply', this._onIpcReply); + } + + async _ipcCall(name: string, ...args: any[]): Promise { + // TODO this should be moved into the preload.js file. + const ipcCallId = ++this.nextIpcCallId; + return new Promise((resolve, reject) => { + this.pendingIpcCalls[ipcCallId] = {resolve, reject}; + window.ipcRenderer.send('seshat', {id: ipcCallId, name, args}); + }); + } + + _onIpcReply = (ev: {}, payload: IPCPayload) => { + if (payload.id === undefined) { + console.warn("Ignoring IPC reply with no ID"); + return; + } + + if (this.pendingIpcCalls[payload.id] === undefined) { + console.warn("Unknown IPC payload ID: " + payload.id); + return; + } + + const callbacks = this.pendingIpcCalls[payload.id]; + delete this.pendingIpcCalls[payload.id]; + if (payload.error) { + callbacks.reject(payload.error); + } else { + callbacks.resolve(payload.reply); + } + }; + + async supportsEventIndexing(): Promise { + return this._ipcCall('supportsEventIndexing'); + } + + async initEventIndex(userId: string, deviceId: string): Promise { + return this._ipcCall('initEventIndex', userId, deviceId); + } + + async addEventToIndex(ev: MatrixEvent, profile: MatrixProfile): Promise { + return this._ipcCall('addEventToIndex', ev, profile); + } + + async deleteEvent(eventId: string): Promise { + return this._ipcCall('deleteEvent', eventId); + } + + async isEventIndexEmpty(): Promise { + return this._ipcCall('isEventIndexEmpty'); + } + + async isRoomIndexed(roomId: string): Promise { + return this._ipcCall('isRoomIndexed', roomId); + } + + async commitLiveEvents(): Promise { + return this._ipcCall('commitLiveEvents'); + } + + async searchEventIndex(searchConfig: SearchArgs): Promise { + return this._ipcCall('searchEventIndex', searchConfig); + } + + async addHistoricEvents( + events: [EventAndProfile], + checkpoint: CrawlerCheckpoint | null, + oldCheckpoint: CrawlerCheckpoint | null, + ): Promise { + return this._ipcCall('addHistoricEvents', events, checkpoint, oldCheckpoint); + } + + async addCrawlerCheckpoint(checkpoint: CrawlerCheckpoint): Promise { + return this._ipcCall('addCrawlerCheckpoint', checkpoint); + } + + async removeCrawlerCheckpoint(checkpoint: CrawlerCheckpoint): Promise { + return this._ipcCall('removeCrawlerCheckpoint', checkpoint); + } + + async loadFileEvents(args): Promise<[EventAndProfile]> { + return this._ipcCall('loadFileEvents', args); + } + + async loadCheckpoints(): Promise<[CrawlerCheckpoint]> { + return this._ipcCall('loadCheckpoints'); + } + + async closeEventIndex(): Promise { + return this._ipcCall('closeEventIndex'); + } + + async getStats(): Promise { + return this._ipcCall('getStats'); + } + + async getUserVersion(): Promise { + return this._ipcCall('getUserVersion'); + } + + async setUserVersion(version: number): Promise { + return this._ipcCall('setUserVersion', version); + } + + async deleteEventIndex(): Promise { + return this._ipcCall('deleteEventIndex'); + } +} + +export default class ElectronPlatform extends VectorBasePlatform { + private eventIndexManager: BaseEventIndexManager = new SeshatIndexManager(); + private pendingIpcCalls: Record = {}; + private nextIpcCallId = 0; + // this is the opaque token we pass to the HS which when we get it in our callback we can resolve to a profile + private ssoID: string = randomString(32); + + constructor() { + super(); + + dis.register(_onAction); + /* + IPC Call `check_updates` returns: + true if there is an update available + false if there is not + or the error if one is encountered + */ + ipcRenderer.on('check_updates', (event, status) => { + dis.dispatch({ + action: Action.CheckUpdates, + ...getUpdateCheckStatus(status), + }); + }); + + // try to flush the rageshake logs to indexeddb before quit. + ipcRenderer.on('before-quit', function() { + console.log('riot-desktop closing'); + rageshake.flush(); + }); + + ipcRenderer.on('ipcReply', this._onIpcReply); + ipcRenderer.on('update-downloaded', this.onUpdateDownloaded); + + ipcRenderer.on('preferences', () => { + dis.fire(Action.ViewUserSettings); + }); + + ipcRenderer.on('userDownloadCompleted', (ev, {path, name}) => { + const onAccept = () => { + ipcRenderer.send('userDownloadOpen', {path}); + }; + + ToastStore.sharedInstance().addOrReplaceToast({ + key: `DOWNLOAD_TOAST_${path}`, + title: _t("Download Completed"), + props: { + description: name, + acceptLabel: _t("Open"), + onAccept, + dismissLabel: _t("Dismiss"), + numSeconds: 10, + }, + component: GenericExpiringToast, + priority: 99, + }); + }); + + // register OS-specific shortcuts + if (isMac) { + registerShortcut(Categories.NAVIGATION, { + keybinds: [{ + modifiers: [Modifiers.COMMAND], + key: Key.COMMA, + }], + description: _td("Open user settings"), + }); + + registerShortcut(Categories.NAVIGATION, { + keybinds: [{ + modifiers: [Modifiers.COMMAND], + key: Key.SQUARE_BRACKET_LEFT, + }, { + modifiers: [Modifiers.COMMAND], + key: Key.SQUARE_BRACKET_RIGHT, + }], + description: _td("Previous/next recently visited room or community"), + }); + } else { + registerShortcut(Categories.NAVIGATION, { + keybinds: [{ + modifiers: [Modifiers.ALT], + key: Key.ARROW_LEFT, + }, { + modifiers: [Modifiers.ALT], + key: Key.ARROW_RIGHT, + }], + description: _td("Previous/next recently visited room or community"), + }); + } + + this._ipcCall("startSSOFlow", this.ssoID); + } + + async getConfig(): Promise<{}> { + return this._ipcCall('getConfig'); + } + + onUpdateDownloaded = async (ev, {releaseNotes, releaseName}) => { + dis.dispatch({ + action: Action.CheckUpdates, + status: UpdateCheckStatus.Ready, + }); + if (this.shouldShowUpdate(releaseName)) { + showUpdateToast(await this.getAppVersion(), releaseName, releaseNotes); + } + }; + + getHumanReadableName(): string { + return 'Electron Platform'; // no translation required: only used for analytics + } + + setNotificationCount(count: number) { + if (this.notificationCount === count) return; + super.setNotificationCount(count); + + ipcRenderer.send('setBadgeCount', count); + } + + supportsNotifications(): boolean { + return true; + } + + maySendNotifications(): boolean { + return true; + } + + displayNotification(title: string, msg: string, avatarUrl: string, room: Room): Notification { + // GNOME notification spec parses HTML tags for styling... + // Electron Docs state all supported linux notification systems follow this markup spec + // https://github.com/electron/electron/blob/master/docs/tutorial/desktop-environment-integration.md#linux + // maybe we should pass basic styling (italics, bold, underline) through from MD + // we only have to strip out < and > as the spec doesn't include anything about things like & + // so we shouldn't assume that all implementations will treat those properly. Very basic tag parsing is done. + if (navigator.userAgent.includes('Linux')) { + msg = msg.replace(//g, '>'); + } + + // Notifications in Electron use the HTML5 notification API + const notifBody = { + body: msg, + silent: true, // we play our own sounds + }; + if (avatarUrl) notifBody['icon'] = avatarUrl; + const notification = new window.Notification(title, notifBody); + + notification.onclick = () => { + dis.dispatch({ + action: 'view_room', + room_id: room.roomId, + }); + window.focus(); + this._ipcCall('focusWindow'); + }; + + return notification; + } + + loudNotification(ev: Event, room: Object) { + ipcRenderer.send('loudNotification'); + } + + async getAppVersion(): Promise { + return this._ipcCall('getAppVersion'); + } + + supportsAutoLaunch(): boolean { + return true; + } + + async getAutoLaunchEnabled(): Promise { + return this._ipcCall('getAutoLaunchEnabled'); + } + + async setAutoLaunchEnabled(enabled: boolean): Promise { + return this._ipcCall('setAutoLaunchEnabled', enabled); + } + + supportsAutoHideMenuBar(): boolean { + // This is irelevant on Mac as Menu bars don't live in the app window + return !isMac; + } + + async getAutoHideMenuBarEnabled(): Promise { + return this._ipcCall('getAutoHideMenuBarEnabled'); + } + + async setAutoHideMenuBarEnabled(enabled: boolean): Promise { + return this._ipcCall('setAutoHideMenuBarEnabled', enabled); + } + + supportsMinimizeToTray(): boolean { + // Things other than Mac support tray icons + return !isMac; + } + + async getMinimizeToTrayEnabled(): Promise { + return this._ipcCall('getMinimizeToTrayEnabled'); + } + + async setMinimizeToTrayEnabled(enabled: boolean): Promise { + return this._ipcCall('setMinimizeToTrayEnabled', enabled); + } + + async canSelfUpdate(): Promise { + const feedUrl = await this._ipcCall('getUpdateFeedUrl'); + return Boolean(feedUrl); + } + + startUpdateCheck() { + super.startUpdateCheck(); + ipcRenderer.send('check_updates'); + } + + installUpdate() { + // IPC to the main process to install the update, since quitAndInstall + // doesn't fire the before-quit event so the main process needs to know + // it should exit. + ipcRenderer.send('install_update'); + } + + getDefaultDeviceDisplayName(): string { + const brand = SdkConfig.get().brand; + return _t('%(brand)s Desktop (%(platformName)s)', { + brand, + platformName: platformFriendlyName(), + }); + } + + screenCaptureErrorString(): string | null { + return null; + } + + requestNotificationPermission(): Promise { + return Promise.resolve('granted'); + } + + reload() { + // we used to remote to the main process to get it to + // reload the webcontents, but in practice this is unnecessary: + // the normal way works fine. + window.location.reload(false); + } + + async _ipcCall(name: string, ...args: any[]): Promise { + const ipcCallId = ++this.nextIpcCallId; + return new Promise((resolve, reject) => { + this.pendingIpcCalls[ipcCallId] = {resolve, reject}; + window.ipcRenderer.send('ipcCall', {id: ipcCallId, name, args}); + // Maybe add a timeout to these? Probably not necessary. + }); + } + + _onIpcReply = (ev, payload) => { + if (payload.id === undefined) { + console.warn("Ignoring IPC reply with no ID"); + return; + } + + if (this.pendingIpcCalls[payload.id] === undefined) { + console.warn("Unknown IPC payload ID: " + payload.id); + return; + } + + const callbacks = this.pendingIpcCalls[payload.id]; + delete this.pendingIpcCalls[payload.id]; + if (payload.error) { + callbacks.reject(payload.error); + } else { + callbacks.resolve(payload.reply); + } + }; + + getEventIndexingManager(): BaseEventIndexManager | null { + return this.eventIndexManager; + } + + setLanguage(preferredLangs: string[]) { + this._ipcCall('setLanguage', preferredLangs).catch(error => { + console.log("Failed to send setLanguage IPC to Electron"); + console.error(error); + }); + } + + getSSOCallbackUrl(fragmentAfterLogin: string): URL { + const url = super.getSSOCallbackUrl(fragmentAfterLogin); + url.protocol = "element"; + url.searchParams.set("element-desktop-ssoid", this.ssoID); + return url; + } + + startSingleSignOn(mxClient: MatrixClient, loginType: "sso" | "cas", fragmentAfterLogin: string) { + // this will get intercepted by electron-main will-navigate + super.startSingleSignOn(mxClient, loginType, fragmentAfterLogin); + Modal.createTrackedDialog('Electron', 'SSO', InfoDialog, { + title: _t("Go to your browser to complete Sign In"), + description: , + }); + } + + _navigateForwardBack(back: boolean) { + this._ipcCall(back ? "navigateBack" : "navigateForward"); + } + + onKeyDown(ev: KeyboardEvent): boolean { + let handled = false; + + switch (ev.key) { + case Key.SQUARE_BRACKET_LEFT: + case Key.SQUARE_BRACKET_RIGHT: + if (isMac && ev.metaKey && !ev.altKey && !ev.ctrlKey && !ev.shiftKey) { + this._navigateForwardBack(ev.key === Key.SQUARE_BRACKET_LEFT); + handled = true; + } + break; + + case Key.ARROW_LEFT: + case Key.ARROW_RIGHT: + if (!isMac && ev.altKey && !ev.metaKey && !ev.ctrlKey && !ev.shiftKey) { + this._navigateForwardBack(ev.key === Key.ARROW_LEFT); + handled = true; + } + break; + } + + return handled; + } + + async getPickleKey(userId: string, deviceId: string): Promise { + try { + return await this._ipcCall('getPickleKey', userId, deviceId); + } catch (e) { + // if we can't connect to the password storage, assume there's no + // pickle key + return null; + } + } + + async createPickleKey(userId: string, deviceId: string): Promise { + try { + return await this._ipcCall('createPickleKey', userId, deviceId); + } catch (e) { + // if we can't connect to the password storage, assume there's no + // pickle key + return null; + } + } + + async destroyPickleKey(userId: string, deviceId: string): Promise { + try { + await this._ipcCall('destroyPickleKey', userId, deviceId); + } catch (e) {} + } +} diff --git a/src/vector/platform/PWAPlatform.ts b/src/vector/platform/PWAPlatform.ts new file mode 100644 index 0000000..cca3a8e --- /dev/null +++ b/src/vector/platform/PWAPlatform.ts @@ -0,0 +1,29 @@ +/* +Copyright 2020 New Vector Ltd + +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. +*/ + +import WebPlatform from "./WebPlatform"; + +export default class PWAPlatform extends WebPlatform { + setNotificationCount(count: number) { + if (!navigator.setAppBadge) return super.setNotificationCount(count); + if (this.notificationCount === count) return; + this.notificationCount = count; + + navigator.setAppBadge(count).catch(e => { + console.error("Failed to update PWA app badge", e); + }); + } +} diff --git a/src/vector/platform/VectorBasePlatform.ts b/src/vector/platform/VectorBasePlatform.ts new file mode 100644 index 0000000..8345c3f --- /dev/null +++ b/src/vector/platform/VectorBasePlatform.ts @@ -0,0 +1,89 @@ +/* +Copyright 2016 Aviral Dasgupta +Copyright 2016 OpenMarket Ltd +Copyright 2018, 2020 New Vector Ltd +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> + +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. +*/ + +import BasePlatform from 'matrix-react-sdk/src/BasePlatform'; +import {_t} from 'matrix-react-sdk/src/languageHandler'; +import {getVectorConfig} from "../getconfig"; + +import Favicon from "../../favicon"; + +/** + * Vector-specific extensions to the BasePlatform template + */ +export default abstract class VectorBasePlatform extends BasePlatform { + protected _favicon: Favicon; + + async getConfig(): Promise<{}> { + return getVectorConfig(); + } + + getHumanReadableName(): string { + return 'Vector Base Platform'; // no translation required: only used for analytics + } + + /** + * Delay creating the `Favicon` instance until first use (on the first notification) as + * it uses canvas, which can trigger a permission prompt in Firefox's resist fingerprinting mode. + * See https://github.com/vector-im/riot-web/issues/9605. + */ + get favicon() { + if (this._favicon) { + return this._favicon; + } + return this._favicon = new Favicon(); + } + + _updateFavicon() { + let bgColor = "#d00"; + let notif: string | number = this.notificationCount; + + if (this.errorDidOccur) { + notif = notif || "×"; + bgColor = "#f00"; + } + + this.favicon.badge(notif, { bgColor }); + } + + setNotificationCount(count: number) { + if (this.notificationCount === count) return; + super.setNotificationCount(count); + this._updateFavicon(); + } + + setErrorStatus(errorDidOccur: boolean) { + if (this.errorDidOccur === errorDidOccur) return; + super.setErrorStatus(errorDidOccur); + this._updateFavicon(); + } + + /** + * Begin update polling, if applicable + */ + startUpdater() { + } + + /** + * Get a sensible default display name for the + * device Vector is running on + */ + getDefaultDeviceDisplayName(): string { + return _t("Unknown device"); + } +} diff --git a/src/vector/platform/WebPlatform.ts b/src/vector/platform/WebPlatform.ts new file mode 100644 index 0000000..2e739a2 --- /dev/null +++ b/src/vector/platform/WebPlatform.ts @@ -0,0 +1,214 @@ +/* +Copyright 2016 Aviral Dasgupta +Copyright 2016 OpenMarket Ltd +Copyright 2017-2020 New Vector Ltd + +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. +*/ + +import VectorBasePlatform from './VectorBasePlatform'; +import {UpdateCheckStatus} from "matrix-react-sdk/src/BasePlatform"; +import request from 'browser-request'; +import dis from 'matrix-react-sdk/src/dispatcher/dispatcher'; +import {_t} from 'matrix-react-sdk/src/languageHandler'; +import {Room} from "matrix-js-sdk/src/models/room"; +import {hideToast as hideUpdateToast, showToast as showUpdateToast} from "matrix-react-sdk/src/toasts/UpdateToast"; +import {Action} from "matrix-react-sdk/src/dispatcher/actions"; +import { CheckUpdatesPayload } from 'matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload'; + +import url from 'url'; +import UAParser from 'ua-parser-js'; + +const POKE_RATE_MS = 10 * 60 * 1000; // 10 min + +export default class WebPlatform extends VectorBasePlatform { + private runningVersion: string = null; + + getHumanReadableName(): string { + return 'Web Platform'; // no translation required: only used for analytics + } + + /** + * Returns true if the platform supports displaying + * notifications, otherwise false. + */ + supportsNotifications(): boolean { + return Boolean(window.Notification); + } + + /** + * Returns true if the application currently has permission + * to display notifications. Otherwise false. + */ + maySendNotifications(): boolean { + return window.Notification.permission === 'granted'; + } + + /** + * Requests permission to send notifications. Returns + * a promise that is resolved when the user has responded + * to the request. The promise has a single string argument + * that is 'granted' if the user allowed the request or + * 'denied' otherwise. + */ + requestNotificationPermission(): Promise { + // annoyingly, the latest spec says this returns a + // promise, but this is only supported in Chrome 46 + // and Firefox 47, so adapt the callback API. + return new Promise(function(resolve, reject) { + window.Notification.requestPermission((result) => { + resolve(result); + }); + }); + } + + displayNotification(title: string, msg: string, avatarUrl: string, room: Room) { + const notifBody = { + body: msg, + tag: "vector", + silent: true, // we play our own sounds + }; + if (avatarUrl) notifBody['icon'] = avatarUrl; + const notification = new window.Notification(title, notifBody); + + notification.onclick = function() { + dis.dispatch({ + action: 'view_room', + room_id: room.roomId, + }); + window.focus(); + notification.close(); + }; + } + + _getVersion(): Promise { + // We add a cachebuster to the request to make sure that we know about + // the most recent version on the origin server. That might not + // actually be the version we'd get on a reload (particularly in the + // presence of intermediate caching proxies), but still: we're trying + // to tell the user that there is a new version. + + return new Promise(function(resolve, reject) { + request( + { + method: "GET", + url: "version", + qs: { cachebuster: Date.now() }, + }, + (err, response, body) => { + if (err || response.status < 200 || response.status >= 300) { + if (err === null) err = { status: response.status }; + reject(err); + return; + } + + const ver = body.trim(); + resolve(ver); + }, + ); + }); + } + + getAppVersion(): Promise { + if (this.runningVersion !== null) { + return Promise.resolve(this.runningVersion); + } + return this._getVersion(); + } + + startUpdater() { + this.pollForUpdate(); + setInterval(this.pollForUpdate, POKE_RATE_MS); + } + + async canSelfUpdate(): Promise { + return true; + } + + pollForUpdate = () => { + return this._getVersion().then((ver) => { + if (this.runningVersion === null) { + this.runningVersion = ver; + } else if (this.runningVersion !== ver) { + if (this.shouldShowUpdate(ver)) { + showUpdateToast(this.runningVersion, ver); + } + return { status: UpdateCheckStatus.Ready }; + } else { + hideUpdateToast(); + } + + return { status: UpdateCheckStatus.NotAvailable }; + }, (err) => { + console.error("Failed to poll for update", err); + return { + status: UpdateCheckStatus.Error, + detail: err.message || err.status ? err.status.toString() : 'Unknown Error', + }; + }); + }; + + startUpdateCheck() { + super.startUpdateCheck(); + this.pollForUpdate().then((updateState) => { + dis.dispatch({ + action: Action.CheckUpdates, + ...updateState, + }); + }); + } + + installUpdate() { + window.location.reload(true); + } + + getDefaultDeviceDisplayName(): string { + // strip query-string and fragment from uri + const u = url.parse(window.location.href); + u.protocol = ""; + u.search = ""; + u.hash = ""; + // Remove trailing slash if present + u.pathname = u.pathname.replace(/\/$/, ""); + + let appName = u.format(); + // Remove leading slashes if present + appName = appName.replace(/^\/\//, ""); + // `appName` is now in the format `develop.element.io`. + + const ua = new UAParser(); + const browserName = ua.getBrowser().name || "unknown browser"; + let osName = ua.getOS().name || "unknown OS"; + // Stylise the value from the parser to match Apple's current branding. + if (osName === "Mac OS") osName = "macOS"; + return _t('%(appName)s (%(browserName)s, %(osName)s)', { + appName, + browserName, + osName, + }); + } + + screenCaptureErrorString(): string | null { + // it won't work at all if you're not on HTTPS so whine whine whine + if (window.location.protocol !== "https:") { + return _t("You need to be using HTTPS to place a screen-sharing call."); + } + return null; + } + + reload() { + // forceReload=false since we don't really need new HTML/JS files + // we just need to restart the JS runtime. + window.location.reload(false); + } +} diff --git a/src/vector/rageshakesetup.ts b/src/vector/rageshakesetup.ts new file mode 100644 index 0000000..cc29670 --- /dev/null +++ b/src/vector/rageshakesetup.ts @@ -0,0 +1,74 @@ +/* +Copyright 2018 New Vector Ltd +Copyright 2020 The Matrix.org Foundation C.I.C. + +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. +*/ + +/* + * Separate file that sets up rageshake logging when imported. + * This is necessary so that rageshake logging is set up before + * anything else. Webpack puts all import statements at the top + * of the file before any code, so imports will always be + * evaluated first. Other imports can cause other code to be + * evaluated (eg. the loglevel library in js-sdk, which if set + * up before rageshake causes some js-sdk logging to be missing + * from the rageshake.) + */ + +import * as rageshake from "matrix-react-sdk/src/rageshake/rageshake"; +import SdkConfig from "matrix-react-sdk/src/SdkConfig"; +import sendBugReport from "matrix-react-sdk/src/rageshake/submit-rageshake"; + +export function initRageshake() { + const prom = rageshake.init(); + prom.then(() => { + console.log("Initialised rageshake."); + console.log("To fix line numbers in Chrome: " + + "Meatball menu → Settings → Blackboxing → Add /rageshake\\.js$"); + + window.addEventListener('beforeunload', (e) => { + console.log('riot-web closing'); + // try to flush the logs to indexeddb + rageshake.flush(); + }); + + rageshake.cleanup(); + }, (err) => { + console.error("Failed to initialise rageshake: " + err); + }); + return prom; +} + +window.mxSendRageshake = function(text: string, withLogs?: boolean) { + const url = SdkConfig.get().bug_report_endpoint_url; + if (!url) { + console.error("Cannot send a rageshake - no bug_report_endpoint_url configured"); + return; + } + + if (withLogs === undefined) withLogs = true; + if (!text || !text.trim()) { + console.error("Cannot send a rageshake without a message - please tell us what went wrong"); + return; + } + sendBugReport(url, { + userText: text, + sendLogs: withLogs, + progressCallback: console.log.bind(console), + }).then(() => { + console.log("Bug report sent!"); + }, (err) => { + console.error(err); + }); +}; diff --git a/src/vector/static/incompatible-browser.html b/src/vector/static/incompatible-browser.html new file mode 100644 index 0000000..bc839d6 --- /dev/null +++ b/src/vector/static/incompatible-browser.html @@ -0,0 +1,475 @@ + + + + + + + + + + +
+
+ +

Unsupported browser

+
+
+
+
+

Your browser can't run Element

+

Element uses many advanced browser features, some of which are not available or experimental in your current browser.

+

Please install Chrome, Firefox, + or Safari for the best experience.

+
+
+
+ + +
+ + diff --git a/src/vector/static/unable-to-load.html b/src/vector/static/unable-to-load.html new file mode 100644 index 0000000..3d06779 --- /dev/null +++ b/src/vector/static/unable-to-load.html @@ -0,0 +1,183 @@ + + + + + + + + + + + + +
+ +
+ +
+
+ +

Unable to load

+
+
+
+
+

Element can't load

+

Something went wrong and Element was unable to load.

+
+
+
+ +
+ + diff --git a/src/vector/url_utils.ts b/src/vector/url_utils.ts new file mode 100644 index 0000000..1e14fb5 --- /dev/null +++ b/src/vector/url_utils.ts @@ -0,0 +1,46 @@ +/* +Copyright 2018, 2020 New Vector Ltd + +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. +*/ + +import * as qs from 'querystring'; + +// We want to support some name / value pairs in the fragment +// so we're re-using query string like format +// +// returns {location, params} +export function parseQsFromFragment(location: Location) { + // if we have a fragment, it will start with '#', which we need to drop. + // (if we don't, this will return ''). + const fragment = location.hash.substring(1); + + // our fragment may contain a query-param-like section. we need to fish + // this out *before* URI-decoding because the params may contain ? and & + // characters which are only URI-encoded once. + const hashparts = fragment.split('?'); + + const result = { + location: decodeURIComponent(hashparts[0]), + params: {}, + }; + + if (hashparts.length > 1) { + result.params = qs.parse(hashparts[1]); + } + return result; +} + +export function parseQs(location: Location) { + return qs.parse(location.search.substring(1)); +} diff --git a/test/.eslintrc.js b/test/.eslintrc.js new file mode 100644 index 0000000..4cc4659 --- /dev/null +++ b/test/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + mocha: true, + }, +} diff --git a/test/app-tests/joining-test.js b/test/app-tests/joining-test.js new file mode 100644 index 0000000..7440373 --- /dev/null +++ b/test/app-tests/joining-test.js @@ -0,0 +1,235 @@ +/* +Copyright 2016 OpenMarket Ltd + +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. +*/ + +/* joining.js: tests for the various paths when joining a room */ + +import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg'; +import WebPlatform from '../../src/vector/platform/WebPlatform'; +import * as sdk from "matrix-react-sdk"; +import * as jssdk from "matrix-js-sdk"; +import "../skin-sdk"; +import "../jest-mocks"; +import React from "react"; +import ReactDOM from "react-dom"; +import ReactTestUtils from "react-dom/test-utils"; +import {makeType} from "matrix-react-sdk/src/utils/TypeUtils"; +import {ValidatedServerConfig} from "matrix-react-sdk/src/utils/AutoDiscoveryUtils"; +import {sleep} from "../test-utils"; +import * as test_utils from "../test-utils"; +import MockHttpBackend from "matrix-mock-request"; +import "fake-indexeddb/auto"; + + +const MatrixChat = sdk.getComponent('structures.MatrixChat'); +const RoomDirectory = sdk.getComponent('structures.RoomDirectory'); +const RoomPreviewBar = sdk.getComponent('rooms.RoomPreviewBar'); +const RoomView = sdk.getComponent('structures.RoomView'); + +const HS_URL='http://localhost'; +const IS_URL='http://localhost'; +const USER_ID='@me:localhost'; +const ACCESS_TOKEN='access_token'; + +describe('joining a room', function() { + describe('over federation', function() { + let parentDiv; + let httpBackend; + let matrixChat; + + beforeEach(function() { + test_utils.beforeEach(this); + httpBackend = new MockHttpBackend(); + jssdk.request(httpBackend.requestFn); + parentDiv = document.createElement('div'); + + // uncomment this to actually add the div to the UI, to help with + // debugging (but slow things down) + // document.body.appendChild(parentDiv); + }); + + afterEach(function() { + if (parentDiv) { + ReactDOM.unmountComponentAtNode(parentDiv); + parentDiv.remove(); + parentDiv = null; + } + }); + + // TODO: Re-enable test + // The test is currently disabled because the room directory now resides in a dialog, + // which is not accessible from the MatrixChat component anymore. Convincing react that + // the dialog does exist and is under a different tree is incredibly difficult though, + // so for now the test has been disabled. We should revisit this test when someone has + // the time to kill to figure this out. Problem area is highlighted within the test. + xit('should not get stuck at a spinner', function() { + const ROOM_ALIAS = '#alias:localhost'; + const ROOM_ID = '!id:localhost'; + + httpBackend.when('GET', '/pushrules').respond(200, {}); + httpBackend.when('POST', '/filter').respond(200, { filter_id: 'fid' }); + + // note that we deliberately do *not* set an expectation for a + // presence update - setting one makes the first httpBackend.flush + // return before the first /sync arrives. + + // start with a logged-in client + localStorage.setItem("mx_hs_url", HS_URL ); + localStorage.setItem("mx_is_url", IS_URL ); + localStorage.setItem("mx_access_token", ACCESS_TOKEN ); + localStorage.setItem("mx_user_id", USER_ID); + + PlatformPeg.set(new WebPlatform()); + + const config = { + validated_server_config: makeType(ValidatedServerConfig, { + hsUrl: HS_URL, + hsName: "TEST_ENVIRONMENT", + hsNameIsDifferent: false, // yes, we lie + isUrl: IS_URL, + }), + }; + + const mc = ( + {throw new Error("unimplemented");}} + initialScreenAfterLogin={{ + screen: 'directory', + }} + /> + ); + matrixChat = ReactDOM.render(mc, parentDiv); + + let roomView; + + // wait for /sync to happen. This may take some time, as the client + // has to initialise indexeddb. + console.log("waiting for /sync"); + httpBackend.when('GET', '/sync') + .respond(200, {}); + + return httpBackend.flushAllExpected({ + timeout: 1000, + }).then(() => { + // wait for the directory requests + httpBackend.when('POST', '/publicRooms').respond(200, {chunk: []}); + httpBackend.when('GET', '/thirdparty/protocols').respond(200, {}); + return httpBackend.flushAllExpected(); + }).then(() => { + console.log(`${Date.now()} App made requests for directory view; switching to a room.`); + + // TODO: Make this look in the right spot for the directory dialog. + // See the comment block at the top of the test for a bit more information. The short + // story here is that the RoomDirectory does not exist under matrixChat anymore, or even + // the parentDiv we have access to. Asking React to find the RoomDirectory as a child of + // the document results in it complaining that you didn't give it a component tree to + // search in. When you do get a reference to the component tree based off the document + // root and ask it to search, it races and can't find the component in time. To top it + // all off, MatrixReactTestUtils can't find the element in time either even with a very + // high number of attempts. Assuming we can get a reference to the RoomDirectory in a + // dialog, the rest of the test should be fine. + const roomDir = ReactTestUtils.findRenderedComponentWithType( + matrixChat, RoomDirectory, + ); + + // enter an alias in the input, and simulate enter + const input = ReactTestUtils.findRenderedDOMComponentWithTag( + roomDir, 'input'); + input.value = ROOM_ALIAS; + ReactTestUtils.Simulate.change(input); + ReactTestUtils.Simulate.keyUp(input, {key: 'Enter'}); + + // that should create a roomview which will start a peek; wait + // for the peek. + httpBackend.when('GET', '/directory/room/'+encodeURIComponent(ROOM_ALIAS)).respond(200, { room_id: ROOM_ID }); + httpBackend.when('GET', '/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync") + .respond(401, {errcode: 'M_GUEST_ACCESS_FORBIDDEN'}); + + return httpBackend.flushAllExpected(); + }).then(() => { + console.log(`${Date.now()} App made room preview request`); + + // we should now have a roomview + roomView = ReactTestUtils.findRenderedComponentWithType( + matrixChat, RoomView); + + // the preview bar may take a tick to be displayed + return sleep(1); + }).then(() => { + const previewBar = ReactTestUtils.findRenderedComponentWithType( + roomView, RoomPreviewBar); + + const joinLink = ReactTestUtils.findRenderedDOMComponentWithTag( + previewBar, 'a'); + + ReactTestUtils.Simulate.click(joinLink); + + httpBackend.when('POST', '/join/'+encodeURIComponent(ROOM_ALIAS)) + .respond(200, {room_id: ROOM_ID}); + }).then(() => { + // wait for the join request to be made + return sleep(1); + }).then(() => { + // and again, because the state update has to go to the store and + // then one dispatch within the store, then to the view + // XXX: This is *super flaky*: a better way would be to declare + // that we expect a certain state transition to happen, then wait + // for that transition to occur. + return sleep(1); + }).then(() => { + // the roomview should now be loading + expect(roomView.state.room).toBe(null); + expect(roomView.state.joining).toBe(true); + + // there should be a spinner + ReactTestUtils.findRenderedDOMComponentWithClass( + roomView, "mx_Spinner"); + + // flush it through + return httpBackend.flush('/join/'+encodeURIComponent(ROOM_ALIAS)); + }).then(() => { + httpBackend.verifyNoOutstandingExpectation(); + + return sleep(1); + }).then(() => { + // NB. we don't expect the 'joining' flag to reset at any point: + // it will stay set and we observe whether we have Room object for + // the room and whether our member event shows we're joined. + + // now send the room down the /sync pipe + httpBackend.when('GET', '/sync'). + respond(200, { + rooms: { + join: { + [ROOM_ID]: { + state: {}, + timeline: { + events: [], + limited: true, + }, + }, + }, + }, + }); + return httpBackend.flush(); + }).then(() => { + // now the room should have loaded + expect(roomView.state.room).toExist(); + }); + }); + }); +}); diff --git a/test/app-tests/loading-test.js b/test/app-tests/loading-test.js new file mode 100644 index 0000000..f08cb95 --- /dev/null +++ b/test/app-tests/loading-test.js @@ -0,0 +1,745 @@ +/* +Copyright 2016 OpenMarket Ltd +Copyright 2020 New Vector Ltd + +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. +*/ + +/* loading.js: test the myriad paths we have for loading the application */ + +import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg'; +import WebPlatform from '../../src/vector/platform/WebPlatform'; +import '../skin-sdk'; +import "../jest-mocks"; +import React from 'react'; +import ReactDOM from 'react-dom'; +import ReactTestUtils from 'react-dom/test-utils'; +import MatrixReactTestUtils from 'matrix-react-test-utils'; +import * as jssdk from 'matrix-js-sdk'; +import * as sdk from 'matrix-react-sdk'; +import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg'; +import {Views} from 'matrix-react-sdk/src/components/structures/MatrixChat'; +import dis from 'matrix-react-sdk/src/dispatcher/dispatcher'; +import * as test_utils from '../test-utils'; +import MockHttpBackend from 'matrix-mock-request'; +import {parseQs, parseQsFromFragment} from '../../src/vector/url_utils'; +import {makeType} from "matrix-react-sdk/src/utils/TypeUtils"; +import {ValidatedServerConfig} from "matrix-react-sdk/src/utils/AutoDiscoveryUtils"; +import {sleep} from "../test-utils"; +import "fake-indexeddb/auto"; +import {cleanLocalstorage} from "../test-utils"; +import {IndexedDBCryptoStore} from "matrix-js-sdk/src/crypto/store/indexeddb-crypto-store"; + +const DEFAULT_HS_URL='http://my_server'; +const DEFAULT_IS_URL='http://my_is'; + +describe('loading:', function() { + let parentDiv; + let httpBackend; + + // an Object simulating the window.location + let windowLocation; + + // the mounted MatrixChat + let matrixChat; + + // a promise which resolves when the MatrixChat calls onTokenLoginCompleted + let tokenLoginCompletePromise; + + beforeEach(function() { + httpBackend = new MockHttpBackend(); + jssdk.request(httpBackend.requestFn); + parentDiv = document.createElement('div'); + + // uncomment this to actually add the div to the UI, to help with + // debugging (but slow things down) + // document.body.appendChild(parentDiv); + + windowLocation = null; + matrixChat = null; + }); + + afterEach(async function() { + console.log(`${Date.now()}: loading: afterEach`); + if (parentDiv) { + ReactDOM.unmountComponentAtNode(parentDiv); + parentDiv.remove(); + parentDiv = null; + } + + // unmounting should have cleared the MatrixClientPeg + expect(MatrixClientPeg.get()).toBe(null); + + // clear the indexeddbs so we can start from a clean slate next time. + await Promise.all([ + test_utils.deleteIndexedDB('matrix-js-sdk:crypto'), + test_utils.deleteIndexedDB('matrix-js-sdk:riot-web-sync'), + ]); + cleanLocalstorage(); + console.log(`${Date.now()}: loading: afterEach complete`); + }); + + /* simulate the load process done by index.js + * + * TODO: it would be nice to factor some of this stuff out of index.js so + * that we can test it rather than our own implementation of it. + */ + function loadApp(opts) { + opts = opts || {}; + const queryString = opts.queryString || ""; + const uriFragment = opts.uriFragment || ""; + + windowLocation = { + search: queryString, + hash: uriFragment, + toString: function() { return this.search + this.hash; }, + }; + + function onNewScreen(screen) { + console.log(Date.now() + " newscreen "+screen); + const hash = '#/' + screen; + windowLocation.hash = hash; + console.log(Date.now() + " browser URI now "+ windowLocation); + } + + // Parse the given window.location and return parameters that can be used when calling + // MatrixChat.showScreen(screen, params) + function getScreenFromLocation(location) { + const fragparts = parseQsFromFragment(location); + return { + screen: fragparts.location.substring(1), + params: fragparts.params, + }; + } + + const MatrixChat = sdk.getComponent('structures.MatrixChat'); + const fragParts = parseQsFromFragment(windowLocation); + + const config = Object.assign({ + default_hs_url: DEFAULT_HS_URL, + default_is_url: DEFAULT_IS_URL, + validated_server_config: makeType(ValidatedServerConfig, { + hsUrl: DEFAULT_HS_URL, + hsName: "TEST_ENVIRONMENT", + hsNameIsDifferent: false, // yes, we lie + isUrl: DEFAULT_IS_URL, + }), + embeddedPages: { + homeUrl: 'data:text/html;charset=utf-8;base64,PGh0bWw+PC9odG1sPg==', + }, + }, opts.config || {}); + + PlatformPeg.set(new WebPlatform()); + + const params = parseQs(windowLocation); + + tokenLoginCompletePromise = new Promise(resolve => { + matrixChat = ReactDOM.render( + {throw new Error('Not implemented');}} + />, parentDiv, + ); + }); + } + + // set an expectation that we will get a call to /sync, then flush + // http requests until we do. + // + // returns a promise resolving to the received request + async function expectAndAwaitSync(opts) { + let syncRequest = null; + const isGuest = opts && opts.isGuest; + if (!isGuest) { + httpBackend.when('GET', '/_matrix/client/versions') + .respond(200, { + "versions": ["r0.3.0"], + "unstable_features": { + "m.lazy_load_members": true + } + }); + // the call to create the LL filter + httpBackend.when('POST', '/filter').respond(200, { filter_id: 'llfid' }); + } + httpBackend.when('GET', '/sync') + .check((r) => {syncRequest = r;}) + .respond(200, {}); + + for (let attempts = 10; attempts > 0; attempts--) { + console.log(Date.now() + " waiting for /sync"); + if (syncRequest) { + return syncRequest; + } + await httpBackend.flush(); + } + throw new Error("Gave up waiting for /sync"); + } + + describe("Clean load with no stored credentials:", function() { + it('gives a welcome page by default', function() { + loadApp(); + + return sleep(1).then(() => { + // at this point, we're trying to do a guest registration; + // we expect a spinner + assertAtLoadingSpinner(matrixChat); + + httpBackend.when('POST', '/register').check(function(req) { + expect(req.queryParams.kind).toEqual('guest'); + }).respond(403, "Guest access is disabled"); + + return httpBackend.flush(); + }).then(() => { + // Wait for another trip around the event loop for the UI to update + return awaitWelcomeComponent(matrixChat); + }).then(() => { + expect(windowLocation.hash).toEqual("#/welcome"); + }); + }); + + it('should follow the original link after successful login', function() { + loadApp({ + uriFragment: "#/room/!room:id", + }); + + // Pass the liveliness checks + httpBackend.when("GET", "/versions").respond(200, {versions: ["r0.4.0"]}); + httpBackend.when("GET", "/api/v1").respond(200, {}); + + return sleep(1).then(() => { + // at this point, we're trying to do a guest registration; + // we expect a spinner + assertAtLoadingSpinner(matrixChat); + + httpBackend.when('POST', '/register').check(function(req) { + expect(req.queryParams.kind).toEqual('guest'); + }).respond(403, "Guest access is disabled"); + + return httpBackend.flush(); + }).then(() => { + // Wait for another trip around the event loop for the UI to update + return sleep(10); + }).then(() => { + return moveFromWelcomeToLogin(matrixChat); + }).then(() => { + return completeLogin(matrixChat); + }).then(() => { + // once the sync completes, we should have a room view + return awaitRoomView(matrixChat); + }).then(() => { + httpBackend.verifyNoOutstandingExpectation(); + expect(windowLocation.hash).toEqual("#/room/!room:id"); + + // and the localstorage should have been updated + expect(localStorage.getItem('mx_user_id')).toEqual('@user:id'); + expect(localStorage.getItem('mx_access_token')).toEqual('access_token'); + expect(localStorage.getItem('mx_hs_url')).toEqual(DEFAULT_HS_URL); + expect(localStorage.getItem('mx_is_url')).toEqual(DEFAULT_IS_URL); + }); + }); + + it('should not register as a guest when using a #/login link', function() { + loadApp({ + uriFragment: "#/login", + }); + + // Pass the liveliness checks + httpBackend.when("GET", "/versions").respond(200, {versions: ["r0.4.0"]}); + httpBackend.when("GET", "/api/v1").respond(200, {}); + + return awaitLoginComponent(matrixChat).then(() => { + // we expect a single component + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.auth.Login')); + + // the only outstanding request should be a GET /login + // (in particular there should be no /register request for + // guest registration). + const allowedRequests = [ + "/_matrix/client/r0/login", + "/versions", + "/api/v1", + ]; + for (const req of httpBackend.requests) { + if (req.method === 'GET' && allowedRequests.find(p => req.path.endsWith(p))) { + continue; + } + + throw new Error(`Unexpected HTTP request to ${req}`); + } + return completeLogin(matrixChat); + }).then(() => { + // once the sync completes, we should have a room view + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.EmbeddedPage')); + expect(windowLocation.hash).toEqual("#/home"); + }); + }); + }); + + describe("MatrixClient rehydrated from stored credentials:", function() { + beforeEach(async function() { + localStorage.setItem("mx_hs_url", "http://localhost" ); + localStorage.setItem("mx_is_url", "http://localhost" ); + localStorage.setItem("mx_access_token", "access_token"); + localStorage.setItem("mx_user_id", "@me:localhost"); + localStorage.setItem("mx_last_room_id", "!last_room:id"); + + // Create a crypto store as well to satisfy storage consistency checks + const cryptoStore = new IndexedDBCryptoStore( + indexedDB, + "matrix-js-sdk:crypto", + ); + await cryptoStore.startup(); + }); + + it('shows the last known room by default', function() { + httpBackend.when('GET', '/pushrules').respond(200, {}); + + loadApp(); + + return awaitLoggedIn(matrixChat).then(() => { + // we are logged in - let the sync complete + return expectAndAwaitSync(); + }).then(() => { + // once the sync completes, we should have a room view + return awaitRoomView(matrixChat); + }).then(() => { + httpBackend.verifyNoOutstandingExpectation(); + expect(windowLocation.hash).toEqual("#/room/!last_room:id"); + }); + }); + + it('shows a home page by default if we have no joined rooms', function() { + localStorage.removeItem("mx_last_room_id"); + + httpBackend.when('GET', '/pushrules').respond(200, {}); + + loadApp(); + + return awaitLoggedIn(matrixChat).then(() => { + // we are logged in - let the sync complete + return expectAndAwaitSync(); + }).then(() => { + // once the sync completes, we should have a home page + httpBackend.verifyNoOutstandingExpectation(); + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.EmbeddedPage')); + expect(windowLocation.hash).toEqual("#/home"); + }); + }); + + it('shows a room view if we followed a room link', function() { + httpBackend.when('GET', '/pushrules').respond(200, {}); + + loadApp({ + uriFragment: "#/room/!room:id", + }); + + return awaitLoggedIn(matrixChat).then(() => { + // we are logged in - let the sync complete + return expectAndAwaitSync(); + }).then(() => { + // once the sync completes, we should have a room view + return awaitRoomView(matrixChat); + }).then(() => { + httpBackend.verifyNoOutstandingExpectation(); + expect(windowLocation.hash).toEqual("#/room/!room:id"); + }); + }); + + describe('/#/login link:', function() { + beforeEach(function() { + loadApp({ + uriFragment: "#/login", + }); + + // give the UI a chance to display + return awaitLoginComponent(matrixChat); + }); + + it('shows a login view', function() { + // Pass the liveliness checks + httpBackend.when("GET", "/versions").respond(200, {versions: ["r0.4.0"]}); + httpBackend.when("GET", "/api/v1").respond(200, {}); + + // we expect a single component + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.auth.Login'), + ); + + // the only outstanding request should be a GET /login + // (in particular there should be no /register request for + // guest registration, nor /sync, etc). + const allowedRequests = [ + "/_matrix/client/r0/login", + "/versions", + "/api/v1", + ]; + for (const req of httpBackend.requests) { + if (req.method === 'GET' && allowedRequests.find(p => req.path.endsWith(p))) { + continue; + } + + throw new Error(`Unexpected HTTP request to ${req}`); + } + }); + + it('shows the homepage after login', function() { + // Pass the liveliness checks + httpBackend.when("GET", "/versions").respond(200, {versions: ["r0.4.0"]}); + httpBackend.when("GET", "/api/v1").respond(200, {}); + + return completeLogin(matrixChat).then(() => { + // we should see a home page, even though we previously had + // a stored mx_last_room_id + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.EmbeddedPage')); + expect(windowLocation.hash).toEqual("#/home"); + }); + }); + }); + }); + + describe('Guest auto-registration:', function() { + it('shows a welcome page by default', function() { + loadApp(); + + return sleep(1).then(() => { + // at this point, we're trying to do a guest registration; + // we expect a spinner + assertAtLoadingSpinner(matrixChat); + + httpBackend.when('POST', '/register').check(function(req) { + expect(req.queryParams.kind).toEqual('guest'); + }).respond(200, { + user_id: "@guest:localhost", + access_token: "secret_token", + }); + + return httpBackend.flush(); + }).then(() => { + return awaitLoggedIn(matrixChat); + }).then(() => { + // we are logged in - let the sync complete + return expectAndAwaitSync({isGuest: true}); + }).then(() => { + // once the sync completes, we should have a welcome page + httpBackend.verifyNoOutstandingExpectation(); + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('auth.Welcome')); + expect(windowLocation.hash).toEqual("#/welcome"); + }); + }); + + it('uses the default homeserver to register with', function() { + loadApp(); + + return sleep(1).then(() => { + // at this point, we're trying to do a guest registration; + // we expect a spinner + assertAtLoadingSpinner(matrixChat); + + httpBackend.when('POST', '/register').check(function(req) { + expect(req.path.startsWith(DEFAULT_HS_URL)).toBe(true); + expect(req.queryParams.kind).toEqual('guest'); + }).respond(200, { + user_id: "@guest:localhost", + access_token: "secret_token", + }); + + return httpBackend.flush(); + }).then(() => { + return awaitLoggedIn(matrixChat); + }).then(() => { + return expectAndAwaitSync({isGuest: true}); + }).then((req) => { + expect(req.path.startsWith(DEFAULT_HS_URL)).toBe(true); + + // once the sync completes, we should have a welcome page + httpBackend.verifyNoOutstandingExpectation(); + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('auth.Welcome')); + expect(windowLocation.hash).toEqual("#/welcome"); + expect(MatrixClientPeg.get().baseUrl).toEqual(DEFAULT_HS_URL); + expect(MatrixClientPeg.get().idBaseUrl).toEqual(DEFAULT_IS_URL); + }); + }); + + it('shows a room view if we followed a room link', function() { + loadApp({ + uriFragment: "#/room/!room:id", + }); + return sleep(1).then(() => { + // at this point, we're trying to do a guest registration; + // we expect a spinner + assertAtLoadingSpinner(matrixChat); + + httpBackend.when('POST', '/register').check(function(req) { + expect(req.queryParams.kind).toEqual('guest'); + }).respond(200, { + user_id: "@guest:localhost", + access_token: "secret_token", + }); + + return httpBackend.flush(); + }).then(() => { + return awaitLoggedIn(matrixChat); + }).then(() => { + return expectAndAwaitSync({isGuest: true}); + }).then(() => { + // once the sync completes, we should have a room view + return awaitRoomView(matrixChat); + }).then(() => { + httpBackend.verifyNoOutstandingExpectation(); + expect(windowLocation.hash).toEqual("#/room/!room:id"); + }); + }); + + describe('Login as user', function() { + beforeEach(function() { + // first we have to load the homepage + loadApp(); + + httpBackend.when('POST', '/register').check(function(req) { + expect(req.queryParams.kind).toEqual('guest'); + }).respond(200, { + user_id: "@guest:localhost", + access_token: "secret_token", + }); + + return httpBackend.flush().then(() => { + return awaitLoggedIn(matrixChat); + }).then(() => { + // we got a sync spinner - let the sync complete + return expectAndAwaitSync(); + }).then(() => { + // once the sync completes, we should have a home page + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.EmbeddedPage')); + + // we simulate a click on the 'login' button by firing off + // the relevant dispatch. + // + // XXX: is it an anti-pattern to access the react-sdk's + // dispatcher in this way? Is it better to find the login + // button and simulate a click? (we might have to arrange + // for it to be shown - it's not always, due to the + // collapsing left panel + + dis.dispatch({ action: 'start_login' }); + + return awaitLoginComponent(matrixChat); + }); + }); + + it('should give us a login page', function() { + expect(windowLocation.hash).toEqual("#/login"); + + // we expect a single component + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.auth.Login'), + ); + }); + + /* + // ILAG renders this obsolete. I think. + it('should allow us to return to the app', function() { + const login = ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.auth.Login') + ); + + const linkText = 'Return to app'; + + const returnToApp = ReactTestUtils.scryRenderedDOMComponentsWithTag( + login, 'a').find((e) => e.innerText === linkText); + + if (!returnToApp) { + throw new Error(`Couldn't find '${linkText}' link`); + } + + ReactTestUtils.Simulate.click(returnToApp); + + return sleep(1).then(() => { + // we should be straight back into the home page + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.EmbeddedPage')); + }); + }); + */ + }); + }); + + describe('Token login:', function() { + it('logs in successfully', function() { + localStorage.setItem("mx_sso_hs_url", "https://homeserver"); + localStorage.setItem("mx_sso_is_url", "https://idserver"); + loadApp({ + queryString: "?loginToken=secretToken", + }); + + return sleep(1).then(() => { + // we expect a spinner while we're logging in + assertAtLoadingSpinner(matrixChat); + + httpBackend.when('POST', '/login').check(function(req) { + expect(req.path).toMatch(new RegExp("^https://homeserver/")); + expect(req.data.type).toEqual("m.login.token"); + expect(req.data.token).toEqual("secretToken"); + }).respond(200, { + user_id: "@user:localhost", + device_id: 'DEVICE_ID', + access_token: "access_token", + }); + + return httpBackend.flush(); + }).then(() => { + // at this point, MatrixChat should fire onTokenLoginCompleted, which + // makes index.js reload the app. We're not going to attempt to + // simulate the reload - just check that things are left in the + // right state for the reloaded app. + + return tokenLoginCompletePromise; + }).then(() => { + // check that the localstorage has been set up in such a way that + // the reloaded app can pick up where we leave off. + expect(localStorage.getItem('mx_user_id')).toEqual('@user:localhost'); + expect(localStorage.getItem('mx_access_token')).toEqual('access_token'); + expect(localStorage.getItem('mx_hs_url')).toEqual('https://homeserver'); + expect(localStorage.getItem('mx_is_url')).toEqual('https://idserver'); + }); + }); + }); + + // check that we have a Login component, send a 'user:pass' login, + // and await the HTTP requests. + async function completeLogin(matrixChat) { + // we expect a single component + const login = ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.auth.Login')); + + // When we switch to the login component, it'll hit the login endpoint + // for proof of life and to get flows. We'll only give it one option. + httpBackend.when('GET', '/login') + .respond(200, {"flows": [{"type": "m.login.password"}]}); + httpBackend.flush(); // We already would have tried the GET /login request + + // Give the component some time to finish processing the login flows before + // continuing. + await sleep(100); + + httpBackend.when('POST', '/login').check(function(req) { + expect(req.data.type).toEqual('m.login.password'); + expect(req.data.identifier.type).toEqual('m.id.user'); + expect(req.data.identifier.user).toEqual('user'); + expect(req.data.password).toEqual('pass'); + }).respond(200, { + user_id: '@user:id', + device_id: 'DEVICE_ID', + access_token: 'access_token', + }); + login.onPasswordLogin("user", undefined, undefined, "pass"); + + return httpBackend.flush().then(() => { + // Wait for another trip around the event loop for the UI to update + return sleep(1); + }).then(() => { + httpBackend.when('GET', '/pushrules').respond(200, {}); + return expectAndAwaitSync().catch((e) => { + throw new Error("Never got /sync after login: did the client start?"); + }); + }).then(() => { + httpBackend.verifyNoOutstandingExpectation(); + }); + } +}); + +// assert that we are on the loading page +function assertAtLoadingSpinner(matrixChat) { + const domComponent = ReactDOM.findDOMNode(matrixChat); + expect(domComponent.className).toEqual("mx_MatrixChat_splash"); + + // just the spinner + expect(domComponent.children.length).toEqual(1); +} + +function awaitLoggedIn(matrixChat) { + if (matrixChat.state.view === Views.LOGGED_IN) { + return Promise.resolve(); + } + return new Promise(resolve => { + const onAction = ({ action }) => { + if (action !== "on_logged_in") { + return; + } + console.log(Date.now() + ": Received on_logged_in action"); + dis.unregister(dispatcherRef); + resolve(); + }; + const dispatcherRef = dis.register(onAction); + console.log(Date.now() + ": Waiting for on_logged_in action"); + }); +} + +function awaitRoomView(matrixChat, retryLimit, retryCount) { + if (retryLimit === undefined) { + retryLimit = 5; + } + if (retryCount === undefined) { + retryCount = 0; + } + + if (matrixChat.state.view !== Views.LOGGED_IN || !matrixChat.state.ready) { + console.log(Date.now() + " Awaiting room view: not ready yet."); + if (retryCount >= retryLimit) { + throw new Error("MatrixChat still not ready after " + + retryCount + " tries"); + } + return sleep(0).then(() => { + return awaitRoomView(matrixChat, retryLimit, retryCount + 1); + }); + } + + console.log(Date.now() + " Awaiting room view: now ready."); + + // state looks good, check the rendered output + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.RoomView')); + return Promise.resolve(); +} + +function awaitLoginComponent(matrixChat, attempts) { + return MatrixReactTestUtils.waitForRenderedComponentWithType( + matrixChat, sdk.getComponent('structures.auth.Login'), attempts, + ); +} + +function awaitWelcomeComponent(matrixChat, attempts) { + return MatrixReactTestUtils.waitForRenderedComponentWithType( + matrixChat, sdk.getComponent('auth.Welcome'), attempts, + ); +} + +function moveFromWelcomeToLogin(matrixChat) { + ReactTestUtils.findRenderedComponentWithType( + matrixChat, sdk.getComponent('auth.Welcome')); + dis.dispatch({ action: 'start_login' }); + return awaitLoginComponent(matrixChat); +} diff --git a/test/jest-mocks.js b/test/jest-mocks.js new file mode 100644 index 0000000..e924768 --- /dev/null +++ b/test/jest-mocks.js @@ -0,0 +1,14 @@ +// https://jestjs.io/docs/en/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom +Object.defineProperty(window, 'matchMedia', { + writable: true, + value: jest.fn().mockImplementation(query => ({ + matches: false, + media: query, + onchange: null, + addListener: jest.fn(), // deprecated + removeListener: jest.fn(), // deprecated + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + dispatchEvent: jest.fn(), + })), +}); diff --git a/test/skin-sdk.js b/test/skin-sdk.js new file mode 100644 index 0000000..eaeff52 --- /dev/null +++ b/test/skin-sdk.js @@ -0,0 +1,9 @@ +/* + * skin-sdk.js + * + * Skins the react-sdk with the vector components + */ + +import * as sdk from "matrix-react-sdk"; +import * as skin from "../src/component-index"; +sdk.loadSkin(skin); diff --git a/test/test-utils.js b/test/test-utils.js new file mode 100644 index 0000000..734f960 --- /dev/null +++ b/test/test-utils.js @@ -0,0 +1,39 @@ +export function cleanLocalstorage() { + window.localStorage.clear(); +} + +export function deleteIndexedDB(dbName) { + return new Promise((resolve, reject) => { + if (!window.indexedDB) { + resolve(); + return; + } + + const startTime = Date.now(); + console.log(`${startTime}: Removing indexeddb instance: ${dbName}`); + const req = window.indexedDB.deleteDatabase(dbName); + + req.onblocked = () => { + console.log(`${Date.now()}: can't yet delete indexeddb ${dbName} because it is open elsewhere`); + }; + + req.onerror = (ev) => { + reject(new Error( + `${Date.now()}: unable to delete indexeddb ${dbName}: ${ev.target.error}`, + )); + }; + + req.onsuccess = () => { + const now = Date.now(); + console.log(`${now}: Removed indexeddb instance: ${dbName} in ${now-startTime} ms`); + resolve(); + }; + }).catch((e) => { + console.error(`${Date.now()}: Error removing indexeddb instance ${dbName}: ${e}`); + throw e; + }); +} + +export function sleep(ms) { + return new Promise((resolve) => { setTimeout(resolve, ms); }); +} diff --git a/test/unit-tests/README.md b/test/unit-tests/README.md new file mode 100644 index 0000000..8e5b315 --- /dev/null +++ b/test/unit-tests/README.md @@ -0,0 +1,2 @@ +Any UTs for vector-web layer components or functionality should go here. +This used to contain the UTs for notifications before they got moved to react-sdk. diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e16688a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "module": "commonjs", + "moduleResolution": "node", + "target": "es2016", + "noImplicitAny": false, + "sourceMap": false, + "outDir": "./lib", + "declaration": true, + "jsx": "react", + "types": [ + "node", + "react", + "flux" + ], + "lib": [ + "es2019", + "dom", + "dom.iterable" + ] + }, + "include": [ + "./src/**/*.ts", + "./src/**/*.tsx" + ] +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..23db228 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,415 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const TerserPlugin = require('terser-webpack-plugin'); +const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); +const webpack = require("webpack"); + +let og_image_url = process.env.RIOT_OG_IMAGE_URL; +if (!og_image_url) og_image_url = 'https://app.element.io/themes/element/img/logos/opengraph.png'; + +module.exports = (env, argv) => { + if (process.env.CI_PACKAGE) { + // Don't run minification for CI builds (this is only set for runs on develop) + // We override this via environment variable to avoid duplicating the scripts + // in `package.json` just for a different mode. + argv.mode = "development"; + } + + const development = {}; + if (argv.mode === "production") { + development['devtool'] = 'nosources-source-map'; + } else { + // This makes the sourcemaps human readable for developers. We use eval-source-map + // because the plain source-map devtool ruins the alignment. + development['devtool'] = 'eval-source-map'; + } + + // Resolve the directories for the react-sdk and js-sdk for later use. We resolve these early so we + // don't have to call them over and over. We also resolve to the package.json instead of the src + // directory so we don't have to rely on a index.js or similar file existing. + const reactSdkSrcDir = path.resolve(require.resolve("matrix-react-sdk/package.json"), '..', 'src'); + const jsSdkSrcDir = path.resolve(require.resolve("matrix-js-sdk/package.json"), '..', 'src'); + + return { + ...development, + + entry: { + "bundle": "./src/vector/index.ts", + "indexeddb-worker": "./src/vector/indexeddb-worker.js", + "mobileguide": "./src/vector/mobile_guide/index.js", + "jitsi": "./src/vector/jitsi/index.ts", + "usercontent": "./node_modules/matrix-react-sdk/src/usercontent/index.js", + + // CSS themes + "theme-legacy": "./node_modules/matrix-react-sdk/res/themes/legacy-light/css/legacy-light.scss", + "theme-legacy-dark": "./node_modules/matrix-react-sdk/res/themes/legacy-dark/css/legacy-dark.scss", + "theme-light": "./node_modules/matrix-react-sdk/res/themes/light/css/light.scss", + "theme-dark": "./node_modules/matrix-react-sdk/res/themes/dark/css/dark.scss", + "theme-light-custom": "./node_modules/matrix-react-sdk/res/themes/light-custom/css/light-custom.scss", + "theme-dark-custom": "./node_modules/matrix-react-sdk/res/themes/dark-custom/css/dark-custom.scss", + }, + + optimization: { + // Put all of our CSS into one useful place - this is needed for MiniCssExtractPlugin. + // Previously we used a different extraction plugin that did this magic for us, but + // now we need to consider that the CSS needs to be bundled up together. + splitChunks: { + cacheGroups: { + styles: { + name: 'styles', + test: /\.css$/, + enforce: true, + // Do not add `chunks: 'all'` here because you'll break the app entry point. + }, + default: { + reuseExistingChunk: true, + }, + }, + }, + + // This fixes duplicate files showing up in chrome with sourcemaps enabled. + // See https://github.com/webpack/webpack/issues/7128 for more info. + namedModules: false, + + // Minification is normally enabled by default for webpack in production mode, but + // we use a CSS optimizer too and need to manage it ourselves. + minimize: argv.mode === 'production', + minimizer: argv.mode === 'production' ? [new TerserPlugin({}), new OptimizeCSSAssetsPlugin({})] : [], + }, + + resolve: { + // We define an alternative import path so we can safely use src/ across the react-sdk + // and js-sdk. We already import from src/ where possible to ensure our source maps are + // extremely accurate (and because we're capable of compiling the layers manually rather + // than relying on partially-mangled output from babel), though we do need to fix the + // package level import (stuff like `import {Thing} from "matrix-js-sdk"` for example). + // We can't use the aliasing down below to point at src/ because that'll fail to resolve + // the package.json for the dependency. Instead, we rely on the package.json of each + // layer to have our custom alternate fields to load things in the right order. These are + // the defaults of webpack prepended with `matrix_src_`. + mainFields: ['matrix_src_browser', 'matrix_src_main', 'browser', 'main'], + aliasFields: ['matrix_src_browser', 'browser'], + + // We need to specify that TS can be resolved without an extension + extensions: ['.js', '.json', '.ts', '.tsx'], + alias: { + // alias any requires to the react module to the one in our path, + // otherwise we tend to get the react source included twice when + // using `npm link` / `yarn link`. + "react": path.resolve(__dirname, 'node_modules/react'), + "react-dom": path.resolve(__dirname, 'node_modules/react-dom'), + + // same goes for js-sdk - we don't need two copies. + "matrix-js-sdk": path.resolve(__dirname, 'node_modules/matrix-js-sdk'), + // and prop-types and sanitize-html + "prop-types": path.resolve(__dirname, 'node_modules/prop-types'), + "sanitize-html": path.resolve(__dirname, 'node_modules/sanitize-html'), + + // Define a variable so the i18n stuff can load + "$webapp": path.resolve(__dirname, 'webapp'), + }, + }, + + module: { + noParse: [ + // for cross platform compatibility use [\\\/] as the path separator + // this ensures that the regex trips on both Windows and *nix + + // don't parse the languages within highlight.js. They cause stack + // overflows (https://github.com/webpack/webpack/issues/1721), and + // there is no need for webpack to parse them - they can just be + // included as-is. + /highlight\.js[\\\/]lib[\\\/]languages/, + + // olm takes ages for webpack to process, and it's already heavily + // optimised, so there is little to gain by us uglifying it. + /olm[\\\/](javascript[\\\/])?olm\.js$/, + ], + rules: [ + { + test: /\.(ts|js)x?$/, + include: (f) => { + // our own source needs babel-ing + if (f.startsWith(path.resolve(__dirname, 'src'))) return true; + + // we use the original source files of react-sdk and js-sdk, so we need to + // run them through babel. Because the path tested is the resolved, absolute + // path, these could be anywhere thanks to yarn link. We must also not + // include node modules inside these modules, so we add 'src'. + if (f.startsWith(reactSdkSrcDir)) return true; + if (f.startsWith(jsSdkSrcDir)) return true; + + // but we can't run all of our dependencies through babel (many of them still + // use module.exports which breaks if babel injects an 'include' for its + // polyfills: probably fixable but babeling all our dependencies is probably + // not necessary anyway). So, for anything else, don't babel. + return false; + }, + loader: 'babel-loader', + options: { + cacheDirectory: true + } + }, + { + test: /\.css$/, + use: [ + MiniCssExtractPlugin.loader, + { + loader: 'css-loader', + options: { + importLoaders: 1, + sourceMap: true, + } + }, + { + loader: 'postcss-loader', + ident: 'postcss', + options: { + sourceMap: true, + plugins: () => [ + // Note that we use significantly fewer plugins on the plain + // CSS parser. If we start to parse plain CSS, we end with all + // kinds of nasty problems (like stylesheets not loading). + // + // You might have noticed that we're also sending regular CSS + // through PostCSS. This looks weird, and in fact is probably + // not what you'd expect, however in order for our CSS build + // to work nicely we have to do this. Because down the line + // our SCSS stylesheets reference plain CSS we have to load + // the plain CSS through PostCSS so it can find it safely. This + // also acts like a babel-for-css by transpiling our (S)CSS + // down/up to the right browser support (prefixes, etc). + // Further, if we don't do this then PostCSS assumes that our + // plain CSS is SCSS and it really doesn't like that, even + // though plain CSS should be compatible. The chunking options + // at the top of this webpack config help group the SCSS and + // plain CSS together for the bundler. + + require("postcss-simple-vars")(), + require("postcss-strip-inline-comments")(), + require("postcss-hexrgba")(), + + // It's important that this plugin is last otherwise we end + // up with broken CSS. + require('postcss-preset-env')({stage: 3, browsers: 'last 2 versions'}), + ], + parser: "postcss-scss", + "local-plugins": true, + }, + }, + ] + }, + { + test: /\.scss$/, + use: [ + MiniCssExtractPlugin.loader, + { + loader: 'css-loader', + options: { + importLoaders: 1, + sourceMap: true, + } + }, + { + loader: 'postcss-loader', + ident: 'postcss', + options: { + sourceMap: true, + plugins: () => [ + // Note that we use slightly different plugins for SCSS. + + require('postcss-import')(), + require("postcss-mixins")(), + require("postcss-simple-vars")(), + require("postcss-extend")(), + require("postcss-nested")(), + require("postcss-easings")(), + require("postcss-strip-inline-comments")(), + require("postcss-hexrgba")(), + + // It's important that this plugin is last otherwise we end + // up with broken CSS. + require('postcss-preset-env')({stage: 3, browsers: 'last 2 versions'}), + ], + parser: "postcss-scss", + "local-plugins": true, + }, + }, + ] + }, + { + test: /\.wasm$/, + loader: "file-loader", + type: "javascript/auto", // https://github.com/webpack/webpack/issues/6725 + options: { + name: '[name].[hash:7].[ext]', + outputPath: '.', + }, + }, + { + // cache-bust languages.json file placed in + // riot-web/webapp/i18n during build by copy-res.js + test: /\.*languages.json$/, + type: "javascript/auto", + loader: 'file-loader', + options: { + name: 'i18n/[name].[hash:7].[ext]', + }, + }, + { + test: /\.(gif|png|svg|ttf|woff|woff2|xml|ico)$/, + // Use a content-based hash in the name so that we can set a long cache + // lifetime for assets while still delivering changes quickly. + oneOf: [ + { + // Assets referenced in CSS files + issuer: /\.(scss|css)$/, + loader: 'file-loader', + options: { + esModule: false, + name: '[name].[hash:7].[ext]', + outputPath: getImgOutputPath, + publicPath: function(url, resourcePath) { + // CSS image usages end up in the `bundles/[hash]` output + // directory, so we adjust the final path to navigate up + // twice. + const outputPath = getImgOutputPath(url, resourcePath); + return toPublicPath(path.join("../..", outputPath)); + }, + }, + }, + { + // Assets referenced in HTML and JS files + loader: 'file-loader', + options: { + esModule: false, + name: '[name].[hash:7].[ext]', + outputPath: getImgOutputPath, + publicPath: function(url, resourcePath) { + const outputPath = getImgOutputPath(url, resourcePath); + return toPublicPath(outputPath); + }, + }, + }, + ], + }, + ] + }, + + plugins: [ + // This exports our CSS using the splitChunks and loaders above. + new MiniCssExtractPlugin({ + filename: 'bundles/[hash]/[name].css', + ignoreOrder: false, // Enable to remove warnings about conflicting order + }), + + // This is the app's main entry point. + new HtmlWebpackPlugin({ + template: './src/vector/index.html', + + // we inject the links ourselves via the template, because + // HtmlWebpackPlugin will screw up our formatting like the names + // of the themes and which chunks we actually care about. + inject: false, + excludeChunks: ['mobileguide', 'usercontent', 'jitsi'], + minify: argv.mode === 'production', + vars: { + og_image_url: og_image_url, + }, + }), + + // This is the jitsi widget wrapper (embedded, so isolated stack) + new HtmlWebpackPlugin({ + template: './src/vector/jitsi/index.html', + filename: 'jitsi.html', + minify: argv.mode === 'production', + chunks: ['jitsi'], + }), + + // This is the mobile guide's entry point (separate for faster mobile loading) + new HtmlWebpackPlugin({ + template: './src/vector/mobile_guide/index.html', + filename: 'mobile_guide/index.html', + minify: argv.mode === 'production', + chunks: ['mobileguide'], + }), + + // These are the static error pages for when the javascript env is *really unsupported* + new HtmlWebpackPlugin({ + template: './src/vector/static/unable-to-load.html', + filename: 'static/unable-to-load.html', + minify: argv.mode === 'production', + chunks: [], + }), + new HtmlWebpackPlugin({ + template: './src/vector/static/incompatible-browser.html', + filename: 'static/incompatible-browser.html', + minify: argv.mode === 'production', + chunks: [], + }), + + // This is the usercontent sandbox's entry point (separate for iframing) + new HtmlWebpackPlugin({ + template: './node_modules/matrix-react-sdk/src/usercontent/index.html', + filename: 'usercontent/index.html', + minify: argv.mode === 'production', + chunks: ['usercontent'], + }), + ], + + output: { + path: path.join(__dirname, "webapp"), + + // The generated JS (and CSS, from the extraction plugin) are put in a + // unique subdirectory for the build. There will only be one such + // 'bundle' directory in the generated tarball; however, hosting + // servers can collect 'bundles' from multiple versions into one + // directory and symlink it into place - this allows users who loaded + // an older version of the application to continue to access webpack + // chunks even after the app is redeployed. + filename: "bundles/[hash]/[name].js", + chunkFilename: "bundles/[hash]/[name].js", + }, + + // configuration for the webpack-dev-server + devServer: { + // serve unwebpacked assets from webapp. + contentBase: './webapp', + + // Only output errors, warnings, or new compilations. + // This hides the massive list of modules. + stats: 'minimal', + + // hot module replacement doesn't work (I think we'd need react-hot-reload?) + // so webpack-dev-server reloads the page on every update which is quite + // tedious in Riot since that can take a while. + hot: false, + inline: false, + }, + }; +}; + +/** + * Merge assets found via CSS and imports into a single tree, while also preserving + * directories under `res`. + * + * @param {string} url The adjusted name of the file, such as `warning.1234567.svg`. + * @param {string} resourcePath The absolute path to the source file with unmodified name. + * @return {string} The returned paths will look like `img/warning.1234567.svg`. + */ +function getImgOutputPath(url, resourcePath) { + const prefix = /^.*[/\\]res[/\\]/; + const outputDir = path.dirname(resourcePath).replace(prefix, ""); + return path.join(outputDir, path.basename(url)); +} + +/** + * Convert path to public path format, which always uses forward slashes, since it will + * be placed directly into things like CSS files. + * + * @param {string} path Some path to a file. + */ +function toPublicPath(path) { + return path.replace(/\\/g, '/'); +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..731d022 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,13303 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/cli@^7.7.5": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.1.tgz#b6e5cd43a17b8f639442ab027976408ebe6d79a0" + integrity sha512-cVB+dXeGhMOqViIaZs3A9OUAe4pKw4SBNdMw6yHJMYR7s4TB+Cei7ThquV/84O19PdIFWuwe03vxxES0BHUm5g== + dependencies: + commander "^4.0.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.13" + make-dir "^2.1.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^2.1.8" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1", "@babel/code-frame@^7.5.5": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" + integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== + dependencies: + "@babel/highlight" "^7.10.1" + +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db" + integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw== + dependencies: + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@>=7.2.2", "@babel/core@^7.1.0", "@babel/core@^7.7.5": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a" + integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.2" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helpers" "^7.10.1" + "@babel/parser" "^7.10.2" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.2" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.10.1", "@babel/generator@^7.10.2", "@babel/generator@^7.4.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9" + integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA== + dependencies: + "@babel/types" "^7.10.2" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268" + integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059" + integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-builder-react-jsx-experimental@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.1.tgz#9a7d58ad184d3ac3bafb1a452cec2bad7e4a0bc8" + integrity sha512-irQJ8kpQUV3JasXPSFQ+LCCtJSc5ceZrPFVj6TElR6XCHssi3jV8ch3odIrNtjJFRZZVbrOEfJMI79TPU/h1pQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-module-imports" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-builder-react-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.1.tgz#a327f0cf983af5554701b1215de54a019f09b532" + integrity sha512-KXzzpyWhXgzjXIlJU1ZjIXzUPdej1suE6vzqgImZ/cpAsR/CC8gUcX4EWRmDfWz/cs6HOCPMBIJ3nKoXt3BFuw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-compilation-targets@^7.10.2": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285" + integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA== + dependencies: + "@babel/compat-data" "^7.10.1" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.1": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz#7474295770f217dbcf288bf7572eb213db46ee67" + integrity sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + +"@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" + integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-regex" "^7.10.1" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d" + integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/types" "^7.10.1" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e" + integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg== + dependencies: + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-function-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4" + integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-get-function-arity@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d" + integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-hoist-variables@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077" + integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-member-expression-to-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15" + integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-module-imports@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876" + integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-module-transforms@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622" + integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== + dependencies: + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543" + integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127" + integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA== + +"@babel/helper-plugin-utils@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" + integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432" + integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-wrap-function" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-replace-supers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" + integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-simple-access@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e" + integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== + dependencies: + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-split-export-declaration@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" + integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-validator-identifier@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" + integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9" + integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helpers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" + integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== + dependencies: + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/highlight@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" + integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.10.1", "@babel/parser@^7.10.2", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0" + integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== + +"@babel/parser@^7.10.4": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" + integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== + +"@babel/plugin-proposal-async-generator-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55" + integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-remap-async-to-generator" "^7.10.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.1", "@babel/plugin-proposal-class-properties@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01" + integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-proposal-decorators@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.1.tgz#9373c2d8db45345c6e30452ad77b469758e5c8f7" + integrity sha512-xBfteh352MTke2U1NpclzMDmAmCdQ2fBZjhZQQfGTjXw6qcRYMkt528sA1U8o0ThDCSeuETXIj5bOGdxN+5gkw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-decorators" "^7.10.1" + +"@babel/plugin-proposal-dynamic-import@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0" + integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-default-from@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.10.1.tgz#59ea2a4f09dbb0358c73dab27def3d21a27bd370" + integrity sha512-Xfc1CfHapIkwZ/+AI+j4Ha3g233ol0EEdy6SmnUuQQiZX78SfQXHd8tmntc5zqCkwPnIHoiZa6l6p0OAvxYXHw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-export-default-from" "^7.10.1" + +"@babel/plugin-proposal-json-strings@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09" + integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78" + integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.1", "@babel/plugin-proposal-numeric-separator@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123" + integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-numeric-separator" "^7.10.1" + +"@babel/plugin-proposal-object-rest-spread@^7.10.1", "@babel/plugin-proposal-object-rest-spread@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6" + integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.1" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2" + integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c" + integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598" + integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f" + integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5" + integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-decorators@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.1.tgz#16b869c4beafc9a442565147bda7ce0967bd4f13" + integrity sha512-a9OAbQhKOwSle1Vr0NJu/ISg1sPfdEkfRKWpgPuzhnWWzForou2gIeUIIwjAMHRekhhpJ7eulZlYs0H14Cbi+g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-dynamic-import@^7.7.4", "@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-default-from@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.10.1.tgz#634f58f36b5d6320d80f75441fdc61e1c05c33b0" + integrity sha512-+rcL4S/mN1Ss4zhSCbxzv1Wsf12eauvgTjWi0krXEeX1zd6qSxYnJoniE5Ssr5w2WPt61oUCJyXIFQIqO/29zw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-flow@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.1.tgz#cd4bbca62fb402babacb174f64f8734310d742f0" + integrity sha512-b3pWVncLBYoPP60UOTc7NMlbtsHQ6ITim78KQejNHK6WJ2mzV5kCcg4mIWpasAfJEgwVTibwo2e+FU7UEIKQUg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz#0ae371134a42b91d5418feb3c8c8d43e1565d2da" + integrity sha512-+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99" + integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362" + integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-typescript@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.1.tgz#5e82bc27bb4202b93b949b029e699db536733810" + integrity sha512-X/d8glkrAtra7CaQGMiGs/OGa6XgUzqPcBXCIGFCpCqnfGlT0Wfbzo/B89xHhnInTaItPK8LALblVXcUOEh95Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-arrow-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b" + integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-async-to-generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062" + integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg== + dependencies: + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-remap-async-to-generator" "^7.10.1" + +"@babel/plugin-transform-block-scoped-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d" + integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-block-scoping@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e" + integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f" + integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-define-map" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07" + integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-destructuring@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907" + integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee" + integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-duplicate-keys@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9" + integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-exponentiation-operator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3" + integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-flow-comments@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.10.1.tgz#1befb98f8d37245b70770a1f83c67057e41bd4a9" + integrity sha512-A1yDAD/3pU+NyCHRvm+GQE2xiyRV6mGDyhMdTKPqgs5aRcc2MR4wmnHJJIB91f8NwMNl8dxmN6nmj/7FCr6Jgw== + dependencies: + "@babel/generator" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-flow" "^7.10.1" + +"@babel/plugin-transform-flow-strip-types@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.1.tgz#59eafbff9ae85ec8932d4c16c068654be814ec5e" + integrity sha512-i4o0YwiJBIsIx7/liVCZ3Q2WkWr1/Yu39PksBOnh/khW2SwIFsGa5Ze+MSon5KbDfrEHP9NeyefAgvUSXzaEkw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-flow" "^7.10.1" + +"@babel/plugin-transform-for-of@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5" + integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-function-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d" + integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a" + integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-member-expression-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39" + integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-modules-amd@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a" + integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw== + dependencies: + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301" + integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg== + dependencies: + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6" + integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA== + dependencies: + "@babel/helper-hoist-variables" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595" + integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA== + dependencies: + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + +"@babel/plugin-transform-new-target@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324" + integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-object-super@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde" + integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + +"@babel/plugin-transform-parameters@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd" + integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg== + dependencies: + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-property-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d" + integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-react-display-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.1.tgz#e6a33f6d48dfb213dda5e007d0c7ff82b6a3d8ef" + integrity sha512-rBjKcVwjk26H3VX8pavMxGf33LNlbocMHdSeldIEswtQ/hrjyTG8fKKILW1cSkODyRovckN/uZlGb2+sAV9JUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-react-jsx-development@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.1.tgz#1ac6300d8b28ef381ee48e6fec430cc38047b7f3" + integrity sha512-XwDy/FFoCfw9wGFtdn5Z+dHh6HXKHkC6DwKNWpN74VWinUagZfDcEJc3Y8Dn5B3WMVnAllX8Kviaw7MtC5Epwg== + dependencies: + "@babel/helper-builder-react-jsx-experimental" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" + +"@babel/plugin-transform-react-jsx-self@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.1.tgz#22143e14388d72eb88649606bb9e46f421bc3821" + integrity sha512-4p+RBw9d1qV4S749J42ZooeQaBomFPrSxa9JONLHJ1TxCBo3TzJ79vtmG2S2erUT8PDDrPdw4ZbXGr2/1+dILA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" + +"@babel/plugin-transform-react-jsx-source@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.1.tgz#30db3d4ee3cdebbb26a82a9703673714777a4273" + integrity sha512-neAbaKkoiL+LXYbGDvh6PjPG+YeA67OsZlE78u50xbWh2L1/C81uHiNP5d1fw+uqUIoiNdCC8ZB+G4Zh3hShJA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" + +"@babel/plugin-transform-react-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.1.tgz#91f544248ba131486decb5d9806da6a6e19a2896" + integrity sha512-MBVworWiSRBap3Vs39eHt+6pJuLUAaK4oxGc8g+wY+vuSJvLiEQjW1LSTqKb8OUPtDvHCkdPhk7d6sjC19xyFw== + dependencies: + "@babel/helper-builder-react-jsx" "^7.10.1" + "@babel/helper-builder-react-jsx-experimental" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" + +"@babel/plugin-transform-react-pure-annotations@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.1.tgz#f5e7c755d3e7614d4c926e144f501648a5277b70" + integrity sha512-mfhoiai083AkeewsBHUpaS/FM1dmUENHBMpS/tugSJ7VXqXO5dCN1Gkint2YvM1Cdv1uhmAKt1ZOuAjceKmlLA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-regenerator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490" + integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86" + integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-runtime@^7.7.6": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz#fd1887f749637fb2ed86dc278e79eb41df37f4b1" + integrity sha512-4w2tcglDVEwXJ5qxsY++DgWQdNJcCCsPxfT34wCUwIf2E7dI7pMpH8JczkMBbgBTNzBX62SZlNJ9H+De6Zebaw== + dependencies: + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3" + integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-spread@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8" + integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-sticky-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00" + integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-regex" "^7.10.1" + +"@babel/plugin-transform-template-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628" + integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-typeof-symbol@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e" + integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-typescript@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.1.tgz#2c54daea231f602468686d9faa76f182a94507a6" + integrity sha512-v+QWKlmCnsaimLeqq9vyCsVRMViZG1k2SZTlcZvB+TqyH570Zsij8nvVUZzOASCRiQFUxkLrn9Wg/kH0zgy5OQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-typescript" "^7.10.1" + +"@babel/plugin-transform-unicode-escapes@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940" + integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-unicode-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f" + integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/preset-env@^7.7.6": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb" + integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA== + dependencies: + "@babel/compat-data" "^7.10.1" + "@babel/helper-compilation-targets" "^7.10.2" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-proposal-async-generator-functions" "^7.10.1" + "@babel/plugin-proposal-class-properties" "^7.10.1" + "@babel/plugin-proposal-dynamic-import" "^7.10.1" + "@babel/plugin-proposal-json-strings" "^7.10.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" + "@babel/plugin-proposal-numeric-separator" "^7.10.1" + "@babel/plugin-proposal-object-rest-spread" "^7.10.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" + "@babel/plugin-proposal-optional-chaining" "^7.10.1" + "@babel/plugin-proposal-private-methods" "^7.10.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.1" + "@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.1" + "@babel/plugin-transform-arrow-functions" "^7.10.1" + "@babel/plugin-transform-async-to-generator" "^7.10.1" + "@babel/plugin-transform-block-scoped-functions" "^7.10.1" + "@babel/plugin-transform-block-scoping" "^7.10.1" + "@babel/plugin-transform-classes" "^7.10.1" + "@babel/plugin-transform-computed-properties" "^7.10.1" + "@babel/plugin-transform-destructuring" "^7.10.1" + "@babel/plugin-transform-dotall-regex" "^7.10.1" + "@babel/plugin-transform-duplicate-keys" "^7.10.1" + "@babel/plugin-transform-exponentiation-operator" "^7.10.1" + "@babel/plugin-transform-for-of" "^7.10.1" + "@babel/plugin-transform-function-name" "^7.10.1" + "@babel/plugin-transform-literals" "^7.10.1" + "@babel/plugin-transform-member-expression-literals" "^7.10.1" + "@babel/plugin-transform-modules-amd" "^7.10.1" + "@babel/plugin-transform-modules-commonjs" "^7.10.1" + "@babel/plugin-transform-modules-systemjs" "^7.10.1" + "@babel/plugin-transform-modules-umd" "^7.10.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.10.1" + "@babel/plugin-transform-object-super" "^7.10.1" + "@babel/plugin-transform-parameters" "^7.10.1" + "@babel/plugin-transform-property-literals" "^7.10.1" + "@babel/plugin-transform-regenerator" "^7.10.1" + "@babel/plugin-transform-reserved-words" "^7.10.1" + "@babel/plugin-transform-shorthand-properties" "^7.10.1" + "@babel/plugin-transform-spread" "^7.10.1" + "@babel/plugin-transform-sticky-regex" "^7.10.1" + "@babel/plugin-transform-template-literals" "^7.10.1" + "@babel/plugin-transform-typeof-symbol" "^7.10.1" + "@babel/plugin-transform-unicode-escapes" "^7.10.1" + "@babel/plugin-transform-unicode-regex" "^7.10.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.10.2" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-flow@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.10.1.tgz#29498ec23baf9aa6dae50c568ceba09d71692b82" + integrity sha512-FuQsibb5PaX07fF1XUO5gjjxdEZbcJv8+ugPDaeFEsBIvUTib8hCtEJow/c2F0jq9ZUjpHCQ8IQKNHRvKE1kJQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-transform-flow-strip-types" "^7.10.1" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@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/preset-react@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.1.tgz#e2ab8ae9a363ec307b936589f07ed753192de041" + integrity sha512-Rw0SxQ7VKhObmFjD/cUcKhPTtzpeviEFX1E6PgP+cYOhQ98icNqtINNFANlsdbQHrmeWnqdxA4Tmnl1jy5tp3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-transform-react-display-name" "^7.10.1" + "@babel/plugin-transform-react-jsx" "^7.10.1" + "@babel/plugin-transform-react-jsx-development" "^7.10.1" + "@babel/plugin-transform-react-jsx-self" "^7.10.1" + "@babel/plugin-transform-react-jsx-source" "^7.10.1" + "@babel/plugin-transform-react-pure-annotations" "^7.10.1" + +"@babel/preset-typescript@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.1.tgz#a8d8d9035f55b7d99a2461a0bdc506582914d07e" + integrity sha512-m6GV3y1ShiqxnyQj10600ZVOFrSSAa8HQ3qIUk2r+gcGtHTIRw0dJnFLt1WNXpKjtVw7yw1DAPU/6ma2ZvgJuA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-transform-typescript" "^7.10.1" + +"@babel/register@^7.7.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.1.tgz#b6567c5cb5049f44bbf8c35d6ff68ca3c43238ed" + integrity sha512-sl96+kB3IA2B9EzpwwBmYadOT14vw3KaXOknGDbJaZCOj52GDA4Tivudq9doCJcB+bEIKCEARZYwRgBBsCGXyg== + dependencies: + find-cache-dir "^2.0.0" + lodash "^4.17.13" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" + +"@babel/runtime-corejs3@^7.8.3": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.2.tgz#3511797ddf9a3d6f3ce46b99cc835184817eaa4e" + integrity sha512-+a2M/u7r15o3dV1NEizr9bRi+KUVnrs/qYxF0Z06DAPx/4VCWaz1WA7EcbE+uqGgt39lp5akWGmHsTseIkHkHg== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839" + integrity sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c" + integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.11.2": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.1", "@babel/template@^7.4.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" + integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/template@^7.3.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27" + integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d" + integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@babel/types@^7.10.4", "@babel/types@^7.3.3": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" + integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== + dependencies: + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/console@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.5.2.tgz#94fc4865b1abed7c352b5e21e6c57be4b95604a6" + integrity sha512-lJELzKINpF1v74DXHbCRIkQ/+nUV1M+ntj+X1J8LxCgpmJZjfLmhFejiMSbjjD66fayxl5Z06tbs3HMyuik6rw== + dependencies: + "@jest/types" "^26.5.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.5.2" + jest-util "^26.5.2" + slash "^3.0.0" + +"@jest/core@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.5.2.tgz#e39f14676f4ba4632ecabfdc374071ab22131f22" + integrity sha512-LLTo1LQMg7eJjG/+P1NYqFof2B25EV1EqzD5FonklihG4UJKiK2JBIvWonunws6W7e+DhNLoFD+g05tCY03eyA== + dependencies: + "@jest/console" "^26.5.2" + "@jest/reporters" "^26.5.2" + "@jest/test-result" "^26.5.2" + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.5.2" + jest-config "^26.5.2" + jest-haste-map "^26.5.2" + jest-message-util "^26.5.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.5.2" + jest-resolve-dependencies "^26.5.2" + jest-runner "^26.5.2" + jest-runtime "^26.5.2" + jest-snapshot "^26.5.2" + jest-util "^26.5.2" + jest-validate "^26.5.2" + jest-watcher "^26.5.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.5.2.tgz#eba3cfc698f6e03739628f699c28e8a07f5e65fe" + integrity sha512-YjhCD/Zhkz0/1vdlS/QN6QmuUdDkpgBdK4SdiVg4Y19e29g4VQYN5Xg8+YuHjdoWGY7wJHMxc79uDTeTOy9Ngw== + dependencies: + "@jest/fake-timers" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + jest-mock "^26.5.2" + +"@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/fake-timers@^25.1.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" + integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== + dependencies: + "@jest/types" "^25.5.0" + jest-message-util "^25.5.0" + jest-mock "^25.5.0" + jest-util "^25.5.0" + lolex "^5.0.0" + +"@jest/fake-timers@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.5.2.tgz#1291ac81680ceb0dc7daa1f92c059307eea6400a" + integrity sha512-09Hn5Oraqt36V1akxQeWMVL0fR9c6PnEhpgLaYvREXZJAh2H2Y+QLCsl0g7uMoJeoWJAuz4tozk1prbR1Fc1sw== + dependencies: + "@jest/types" "^26.5.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.5.2" + jest-mock "^26.5.2" + jest-util "^26.5.2" + +"@jest/globals@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.5.2.tgz#c333f82c29e19ecb609a75d1a532915a5c956c59" + integrity sha512-9PmnFsAUJxpPt1s/stq02acS1YHliVBDNfAWMe1bwdRr1iTCfhbNt3ERQXrO/ZfZSweftoA26Q/2yhSVSWQ3sw== + dependencies: + "@jest/environment" "^26.5.2" + "@jest/types" "^26.5.2" + expect "^26.5.2" + +"@jest/reporters@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.5.2.tgz#0f1c900c6af712b46853d9d486c9c0382e4050f6" + integrity sha512-zvq6Wvy6MmJq/0QY0YfOPb49CXKSf42wkJbrBPkeypVa8I+XDxijvFuywo6TJBX/ILPrdrlE/FW9vJZh6Rf9vA== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.5.2" + "@jest/test-result" "^26.5.2" + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.5.2" + jest-resolve "^26.5.2" + jest-util "^26.5.2" + jest-worker "^26.5.0" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^5.0.1" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/source-map@^26.5.0": + version "26.5.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.5.0.tgz#98792457c85bdd902365cd2847b58fff05d96367" + integrity sha512-jWAw9ZwYHJMe9eZq/WrsHlwF8E3hM9gynlcDpOyCb9bR8wEd9ZNBZCi7/jZyzHxC7t3thZ10gO2IDhu0bPKS5g== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-result@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.5.2.tgz#cc1a44cfd4db2ecee3fb0bc4e9fe087aa54b5230" + integrity sha512-E/Zp6LURJEGSCWpoMGmCFuuEI1OWuI3hmZwmULV0GsgJBh7u0rwqioxhRU95euUuviqBDN8ruX/vP/4bwYolXw== + dependencies: + "@jest/console" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.5.2.tgz#c4559c7e134b27b020317303ee5399bf62917a4b" + integrity sha512-XmGEh7hh07H2B8mHLFCIgr7gA5Y6Hw1ZATIsbz2fOhpnQ5AnQtZk0gmP0Q5/+mVB2xygO64tVFQxOajzoptkNA== + dependencies: + "@jest/test-result" "^26.5.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.5.2" + jest-runner "^26.5.2" + jest-runtime "^26.5.2" + +"@jest/transform@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" + integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.9.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.9.0" + jest-regex-util "^24.9.0" + jest-util "^24.9.0" + micromatch "^3.1.10" + pirates "^4.0.1" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/transform@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.5.2.tgz#6a0033a1d24316a1c75184d010d864f2c681bef5" + integrity sha512-AUNjvexh+APhhmS8S+KboPz+D3pCxPvEAGduffaAJYxIFxGi/ytZQkrqcKDUU0ERBAo5R7087fyOYr2oms1seg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.5.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.5.2" + jest-regex-util "^26.0.0" + jest-util "^26.5.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@jest/types@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.5.2.tgz#44c24f30c8ee6c7f492ead9ec3f3c62a5289756d" + integrity sha512-QDs5d0gYiyetI8q+2xWdkixVQMklReZr4ltw7GFDtb4fuJIBCE6mzj2LnitGqCuAlLap6wPyb8fpoHgwZz5fdg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@sinonjs/commons@^1.7.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.10" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.10.tgz#ca58fc195dd9734e77e57c6f2df565623636ab40" + integrity sha512-x8OM8XzITIMyiwl5Vmo2B1cR1S1Ipkyv4mdlbJjMa1lmuKvKY9FrBbEANIaMlnWn5Rf7uO+rC/VgYabNkE17Hw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__core@^7.1.0": + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.8.tgz#057f725aca3641f49fc11c7a87a9de5ec588a5d7" + integrity sha512-KXBiQG2OXvaPWFPDS1rD8yV9vO0OuWIqAEqLsbfX0oU2REN5KuoMnZ1gClWcBhO5I3n6oTVAmrMufOvRqdmFTQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.12.tgz#22f49a028e69465390f87bb103ebd61bd086b8f5" + integrity sha512-t4CoEokHTfcyfb4hUaF9oOHu9RmmNWnm1CP0YmMqOOfClKascOmvlEM736vlqeScuGvBDsHkf8R2INd4DWreQA== + dependencies: + "@babel/types" "^7.3.0" + +"@types/babel__traverse@^7.0.4": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" + integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A== + dependencies: + "@babel/types" "^7.3.0" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + +"@types/fbemitter@*": + version "2.0.32" + resolved "https://registry.yarnpkg.com/@types/fbemitter/-/fbemitter-2.0.32.tgz#8ed204da0f54e9c8eaec31b1eec91e25132d082c" + integrity sha1-jtIE2g9U6cjq7DGx7skeJRMtCCw= + +"@types/flux@^3.1.9": + version "3.1.9" + resolved "https://registry.yarnpkg.com/@types/flux/-/flux-3.1.9.tgz#ddfc9641ee2e2e6cb6cd730c6a48ef82e2076711" + integrity sha512-bSbDf4tTuN9wn3LTGPnH9wnSSLtR5rV7UPWFpM00NJ1pSTBwCzeZG07XsZ9lBkxwngrqjDtM97PLt5IuIdCQUA== + dependencies: + "@types/fbemitter" "*" + "@types/react" "*" + +"@types/glob@^7.1.1": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.2.tgz#06ca26521353a545d94a0adc74f38a59d232c987" + integrity sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" + integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz#79d7a78bad4219f4c03d6557a1c72d9ca6ba62d5" + integrity sha512-rsZg7eL+Xcxsxk2XlBt9KcG8nOp9iYdKCOikY9x2RFJCyOdNj4MKPQty0e8oZr29vVAzKXr1BmR+kZauti3o1w== + +"@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/modernizr@^3.5.3": + version "3.5.3" + resolved "https://registry.yarnpkg.com/@types/modernizr/-/modernizr-3.5.3.tgz#8ef99e6252191c1d88647809109dc29884ba6d7a" + integrity sha512-jhMOZSS0UGYTS9pqvt6q3wtT3uvOSve5piTEmTMx3zzTuBLvSIMxSIBIc3d5lajVD5h4xc41AMZD2M5orN3PxA== + +"@types/node@*": + version "14.0.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.11.tgz#61d4886e2424da73b7b25547f59fdcb534c165a3" + integrity sha512-lCvvI24L21ZVeIiyIUHZ5Oflv1hhHQ5E1S25IRlKIXaRkVgmXpJMI3wUJkmym2bTbCe+WoIibQnMVAU3FguaOg== + +"@types/node@^12.12.41": + version "12.12.44" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.44.tgz#0d400a1453adcb359b133acceae4dd8bb0e0a159" + integrity sha512-jM6QVv0Sm5d3nW+nUD5jSzPcO6oPqboitSNcwgBay9hifVq/Rauq1PYnROnsmuw45JMBiTnsPAno0bKu2e2xrg== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.1.tgz#be148756d5480a84cde100324c03a86ae5739fb5" + integrity sha512-2zs+O+UkDsJ1Vcp667pd3f8xearMdopz/z54i99wtRDI5KLmngk7vlrYZD0ZjKHaROR03EznlBbVY9PfAEyJIQ== + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@types/react-dom@^16.9.4": + version "16.9.8" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" + integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@16.9": + version "16.9.35" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.35.tgz#a0830d172e8aadd9bd41709ba2281a3124bbd368" + integrity sha512-q0n0SsWcGc8nDqH2GJfWQWUOmZSJhXV64CjVN5SvcNti3TdEaA3AH0D8DwNmMdzjMAC/78tB8nAZIlV8yTz+zQ== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + +"@types/sanitize-html@^1.23.3": + version "1.27.0" + resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-1.27.0.tgz#77702dc856f16efecc005014c1d2e45b1f2cbc56" + integrity sha512-j7Vnh3P7W4ZcoRsHNO2HpwA2m1d0c2+l39xqSQqH0+WlfcvKypgZp45eCC7NJ75ZyXPxNb2PSbIL6LtZ6E0Qbw== + dependencies: + htmlparser2 "^4.1.0" + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" + integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== + +"@types/vfile-message@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-2.0.0.tgz#690e46af0fdfc1f9faae00cd049cc888957927d5" + integrity sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw== + dependencies: + vfile-message "*" + +"@types/vfile@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/vfile/-/vfile-3.0.2.tgz#19c18cd232df11ce6fa6ad80259bc86c366b09b9" + integrity sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw== + dependencies: + "@types/node" "*" + "@types/unist" "*" + "@types/vfile-message" "*" + +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^13.0.0": + version "13.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.9.tgz#44028e974343c7afcf3960f1a2b1099c39a7b5e1" + integrity sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^15.0.0": + version "15.0.7" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.7.tgz#dad50a7a234a35ef9460737a56024287a3de1d2b" + integrity sha512-Gf4u3EjaPNcC9cTu4/j2oN14nSVhr8PQ+BvBcBQHAhDZfl0bVIiLgvnRXv/dn58XhTm9UXvBpvJpDlwV65QxOA== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^3.4.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.7.0.tgz#0f91aa3c83d019591719e597fbdb73a59595a263" + integrity sha512-4OEcPON3QIx0ntsuiuFP/TkldmBGXf0uKxPQlGtS/W2F3ndYm8Vgdpj/woPJkzUc65gd3iR+qi3K8SDQP/obFg== + dependencies: + "@typescript-eslint/experimental-utils" "3.7.0" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.7.0.tgz#0ee21f6c48b2b30c63211da23827725078d5169a" + integrity sha512-xpfXXAfZqhhqs5RPQBfAFrWDHoNxD5+sVB5A46TF58Bq1hRfVROrWHcQHHUM9aCBdy9+cwATcvCbRg8aIRbaHQ== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/types" "3.7.0" + "@typescript-eslint/typescript-estree" "3.7.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^3.4.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.7.0.tgz#3e9cd9df9ea644536feb6e5acdb8279ecff96ce9" + integrity sha512-2LZauVUt7jAWkcIW7djUc3kyW+fSarNEuM3RF2JdLHR9BfX/nDEnyA4/uWz0wseoWVZbDXDF7iF9Jc342flNqQ== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "3.7.0" + "@typescript-eslint/types" "3.7.0" + "@typescript-eslint/typescript-estree" "3.7.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/types@3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.7.0.tgz#09897fab0cb95479c01166b10b2c03c224821077" + integrity sha512-reCaK+hyKkKF+itoylAnLzFeNYAEktB0XVfSQvf0gcVgpz1l49Lt6Vo9x4MVCCxiDydA0iLAjTF/ODH0pbfnpg== + +"@typescript-eslint/typescript-estree@3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.7.0.tgz#66872e6da120caa4b64e6b4ca5c8702afc74738d" + integrity sha512-xr5oobkYRebejlACGr1TJ0Z/r0a2/HUf0SXqPvlgUMwiMqOCu/J+/Dr9U3T0IxpE5oLFSkqMx1FE/dKaZ8KsOQ== + dependencies: + "@typescript-eslint/types" "3.7.0" + "@typescript-eslint/visitor-keys" "3.7.0" + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.7.0.tgz#ac0417d382a136e4571a0b0dcfe52088cb628177" + integrity sha512-k5PiZdB4vklUpUX4NBncn5RBKty8G3ihTY+hqJsCdMuD0v4jofI5xuqwnVcWxfv6iTm2P/dfEa2wMUnsUY8ODw== + dependencies: + eslint-visitor-keys "^1.1.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@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@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@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@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@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@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@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@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@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@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@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@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@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@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +acorn@^7.1.1, acorn@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" + integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== + +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== + dependencies: + 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@^6.10.0: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +another-json@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/another-json/-/another-json-0.2.0.tgz#b5f4019c973b6dd5c6506a2d93469cb6d32aeedc" + integrity sha1-tfQBnJc7bdXGUGotk0acttMq7tw= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3, anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= + dependencies: + arr-flatten "^1.0.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array-union@^1.0.1, array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +array.prototype.flatmap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" + integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.0, async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.4.1, async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.6.1, autoprefixer@^9.7.1, autoprefixer@^9.7.3: + version "9.8.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz#68e2d2bef7ba4c3a65436f662d0a56a741e56511" + integrity sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001061" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.30" + postcss-value-parser "^4.1.0" + +await-lock@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/await-lock/-/await-lock-2.0.1.tgz#b3f65fdf66e08f7538260f79b46c15bcfc18cadd" + integrity sha512-ntLi9fzlMT/vWjC1wwVI11/cSRJ3nTS35qVekNc9WnaoMOP2eWH0RvIqwLQkDjX4a4YynsKEv+Ere2VONp9wxg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + +babel-eslint@^10.0.1, babel-eslint@^10.0.3, babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" + integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== + dependencies: + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.9.0" + chalk "^2.4.2" + slash "^2.0.0" + +babel-jest@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.5.2.tgz#164f367a35946c6cf54eaccde8762dec50422250" + integrity sha512-U3KvymF3SczA3vOL/cgiUFOznfMET+XDIXiWnoJV45siAp2pLMG8i2+/MGZlAC3f/F6Q40LR4M4qDrWZ9wkK8A== + dependencies: + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.5.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-loader@^8.0.6: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" + integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + find-up "^3.0.0" + istanbul-lib-instrument "^3.3.0" + test-exclude "^5.2.3" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" + integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== + dependencies: + "@types/babel__traverse" "^7.0.6" + +babel-plugin-jest-hoist@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.5.0.tgz#3916b3a28129c29528de91e5784a44680db46385" + integrity sha512-ck17uZFD3CDfuwCLATWZxkkuGGFhMij8quP8CNhwj8ek1mqFgbFzRJ30xwC04LLscj/aKsVFfRST+b5PT7rSuw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" + integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +babel-preset-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" + integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== + dependencies: + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.9.0" + +babel-preset-jest@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.5.0.tgz#f1b166045cd21437d1188d29f7fba470d5bdb0e7" + integrity sha512-F2vTluljhqkiGSJGBg/jOruA8vIIIL11YrxRcO7nviNTMbbofPSHwnm8mgP7d/wS7wRSexRoI6X1A6T74d4LQA== + dependencies: + babel-plugin-jest-hoist "^26.5.0" + babel-preset-current-node-syntax "^0.1.3" + +babel-runtime@^6.26.0, babel-runtime@^6.9.2: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base-x@^3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" + integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== + dependencies: + safe-buffer "^5.0.1" + +base64-arraybuffer-es6@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.6.0.tgz#036f79f57588dca0018de7792ddf149299382007" + integrity sha512-57nLqKj4ShsDwFJWJsM4sZx6u60WbCge35rWRSevUwqxDtRwwxiKAO800zD2upPv4CfdWjQp//wSLar35nDKvA== + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + 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" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.5.0, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +blueimp-canvas-to-blob@^3.27.0: + version "3.28.0" + resolved "https://registry.yarnpkg.com/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.28.0.tgz#c8ab4dc6bb08774a7f273798cdf94b0776adf6c8" + integrity sha512-5q+YHzgGsuHQ01iouGgJaPJXod2AzTxJXmVv90PpGrRxU7G7IqgPqWXz+PBmt3520jKKi6irWbNV87DicEa7wg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + 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" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + 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@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + 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" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-encrypt-attachment@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/browser-encrypt-attachment/-/browser-encrypt-attachment-0.3.0.tgz#205a94caadf0dc7e81413941812f655bd190ff1c" + integrity sha1-IFqUyq3w3H6BQTlBgS9lW9GQ/xw= + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browser-request@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/browser-request/-/browser-request-0.3.3.tgz#9ece5b5aca89a29932242e18bf933def9876cc17" + integrity sha1-ns5bWsqJopkyJC4Yv5M975h2zBc= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + 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@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" + integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.6.4, browserslist@^4.8.5: + version "4.12.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" + integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== + dependencies: + caniuse-lite "^1.0.30001043" + electron-to-chromium "^1.3.413" + node-releases "^1.1.53" + pkg-up "^2.0.0" + +bs58@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0, buffer-from@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.4.3: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.0, cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + 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" + +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + 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" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" + integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001061: + version "1.0.30001079" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001079.tgz#ed3e5225cd9a6850984fdd88bf24ce45d69b9c22" + integrity sha512-2KaYheg0iOY+CMmDuAB3DHehrXhhb4OZU4KBVGDr/YKyYAcpudaiUQ9PJ9rxrPlKEoJ3ATasQ5AN48MqpwS43Q== + +canvas@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.6.1.tgz#0d087dd4d60f5a5a9efa202757270abea8bef89e" + integrity sha512-S98rKsPcuhfTcYbtF53UIJhcbgIAK533d1kJKMwsMwAIFgfd58MOyxRud3kktlzWiEkFliaJtvyZCBtud/XVEA== + dependencies: + nan "^2.14.0" + node-pre-gyp "^0.11.0" + simple-get "^3.0.3" + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +ccount@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" + integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +character-entities-html4@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" + integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + 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" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.3.1, chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clean-css@4.2.x: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone-regexp@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" + integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q== + dependencies: + is-regexp "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2.17.x: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commander@^2.15.1, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@~2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +commonmark@^0.29.1: + version "0.29.1" + resolved "https://registry.yarnpkg.com/commonmark/-/commonmark-0.29.1.tgz#fdbf5970ca23600f4a27487e30eed43b66b83ef5" + integrity sha512-DafPdNYFXoEhsSiR4O+dJ45UJBfDL4cBTks4B+agKiaWt7qjG0bIhg5xuCE0RqU71ikJcBIf4/sRHh9vYQVF8Q== + dependencies: + entities "~1.1.1" + mdurl "~1.0.1" + minimist "~1.2.0" + string.prototype.repeat "^0.2.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + 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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concurrently@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-4.1.2.tgz#1a683b2b5c41e9ed324c9002b9f6e4c6e1f3b6d7" + integrity sha512-Kim9SFrNr2jd8/0yNYqDTFALzUX1tvimmwFWxmp/D4mRI+kbqIIwE2RkBDrxS2ic25O1UgQMI5AtBqdtX3ynYg== + dependencies: + chalk "^2.4.2" + date-fns "^1.30.1" + lodash "^4.17.15" + read-pkg "^4.0.1" + rxjs "^6.5.2" + spawn-command "^0.0.2-1" + supports-color "^4.5.0" + tree-kill "^1.2.1" + yargs "^12.0.5" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@^1.0.4, content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + 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" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js-pure@^3.0.0: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" + integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + +core-js@^2.4.0, core-js@^2.5.3: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +counterpart@^0.18.6: + version "0.18.6" + resolved "https://registry.yarnpkg.com/counterpart/-/counterpart-0.18.6.tgz#cf6b60d8ef99a4b44b8bf6445fa99b4bd1b2f9dd" + integrity sha512-cAIDAYbC3x8S2DDbvFEJ4TzPtPYXma25/kfAkfmprNLlkPWeX4SdUp1c2xklfphqCU3HnDaivR4R3BrAYf5OMA== + dependencies: + date-names "^0.1.11" + except "^0.1.3" + extend "^3.0.0" + pluralizers "^0.1.7" + sprintf-js "^1.0.3" + +cpx@^1.3.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/cpx/-/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f" + integrity sha1-GFvgGFEdhycN7czCkxceN2VauI8= + dependencies: + babel-runtime "^6.9.2" + chokidar "^1.6.0" + duplexer "^0.1.1" + glob "^7.0.5" + glob2base "^0.0.12" + minimatch "^3.0.2" + mkdirp "^0.5.1" + resolve "^1.1.7" + safe-buffer "^5.0.1" + shell-quote "^1.6.1" + subarg "^1.0.0" + +crc-32@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-0.3.0.tgz#6a3d3687f5baec41f7e9b99fe1953a2e5d19775e" + integrity sha1-aj02h/W67EH36bmf4ZU6Ll0Zd14= + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + 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@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + 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@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + 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-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@^3.3.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz#95ac16468e1adcd95c844729e0bb167639eb0bcf" + integrity sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.27" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.3" + schema-utils "^2.6.6" + semver "^6.3.0" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@1.0.0-alpha.39: + version "1.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== + dependencies: + mdn-data "2.0.6" + source-map "^0.6.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" + integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg== + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + 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@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" + integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== + dependencies: + css-tree "1.0.0-alpha.39" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^2.2.0, csstype@^2.6.7: + version "2.6.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" + integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +date-fns@^1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + +date-names@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/date-names/-/date-names-0.1.13.tgz#c4358f6f77c8056e2f5ea68fdbb05f0bf1e53bd0" + integrity sha512-IxxoeD9tdx8pXVcmqaRlPvrXIsSrSrIZzfzlOkm9u+hyzKp5Wk/odt9O/gd7Ockzy8n/WHeEpTVJ2bF3mMV4LA== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decimal.js@^10.2.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + 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" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@~1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@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" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +diff-dom@^4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/diff-dom/-/diff-dom-4.1.6.tgz#ecd20f4b34703d777b7956790fc7e28e5ff3fece" + integrity sha512-hzHojf1Ar3x1Db/1ijN/uhwYDgde+RoP8pPAPJlrmxp05Bt+Z9Hd7tmuEyPYu1mEuvcO+0pQRZAOCMKi+0I1PQ== + dependencies: + rollup-plugin-terser "^5.1.1" + updates "^8.5.2" + +diff-match-patch@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" + integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== + +diff-sequences@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.5.0.tgz#ef766cf09d43ed40406611f11c6d8d9dd8b2fefd" + integrity sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dijkstrajs@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.1.tgz#d3cd81221e3ea40742cfcde556d4e99e98ddc71b" + integrity sha1-082BIh4+pAdCz83lVtTpnpjdxxs= + +dir-glob@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-helpers@^5.0.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.4.tgz#4609680ab5c79a45f2531441f1949b79d6587f4b" + integrity sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^2.6.7" + +dom-serializer@0, dom-serializer@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domhandler@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" + integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== + dependencies: + domelementtype "^2.0.1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.1.0.tgz#7ade3201af43703fde154952e3a868eb4b635f16" + integrity sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg== + dependencies: + dom-serializer "^0.2.1" + domelementtype "^2.0.1" + domhandler "^3.0.0" + +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.413: + version "1.3.464" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.464.tgz#fe13feaa08f6f865d3c89d5d72e54c194f463aa5" + integrity sha512-Oo+0+CN9d2z6FToQW6Hwvi9ez09Y/usKwr0tsDsyg43a871zVJCi1nR0v03djLbRNcaCKjtrnVf2XJhTxEpPCg== + +elliptic@^6.0.0, elliptic@^6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + 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" + +emittery@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451" + integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojibase-data@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/emojibase-data/-/emojibase-data-5.0.1.tgz#ce6fe36b4affd3578e0be8779211018a2fdae960" + integrity sha512-rYWlogJ2q5P78U8Xx1vhsXHcYKu1wFnr7+o6z9QHssZ1SsJLTCkJINZIPHRFWuDreAUK457TkqHpdOXElu0fzA== + +emojibase-regex@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/emojibase-regex/-/emojibase-regex-4.0.1.tgz#a2cd4bbb42825422da9ec72f15e970bc2c90b46a" + integrity sha512-S42UHkFfz15i4NNz+wi9iMKFo+B6Kalc6PJLpYX0BUANViXw4vSyYZMFdBGRLduSabWHuEcTLZl9xOa2YP3eJw== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0, entities@~2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-get-iterator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8" + integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ== + dependencies: + es-abstract "^1.17.4" + has-symbols "^1.0.1" + is-arguments "^1.0.4" + is-map "^2.0.1" + is-set "^2.0.1" + is-string "^1.0.5" + isarray "^2.0.5" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^1.14.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-esnext@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-esnext/-/eslint-config-esnext-4.1.0.tgz#8695b858fcf40d28c1aedca181f700528c7b60c6" + integrity sha512-GhfVEXdqYKEIIj7j+Fw2SQdL9qyZMekgXfq6PyXM66cQw0B435ddjz3P3kxOBVihMRJ0xGYjosaveQz5Y6z0uA== + dependencies: + babel-eslint "^10.0.1" + eslint "^6.8.0" + eslint-plugin-babel "^5.2.1" + eslint-plugin-import "^2.14.0" + +eslint-config-google@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" + integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== + +eslint-config-matrix-org@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/eslint-config-matrix-org/-/eslint-config-matrix-org-0.1.2.tgz#b5d7e193e4f3fc5041905967b53c5ddd6924c793" + integrity sha512-fD50uevwkFJuIi/txRiW89NO0h/qZwnkYfvO3cVpuIeoVy7FbtvuW7d8S8dry0T+whnQOb5QP1BABwimURcJag== + dependencies: + "@typescript-eslint/eslint-plugin" "^3.4.0" + "@typescript-eslint/parser" "^3.4.0" + babel-eslint "^10.1.0" + eslint-config-google "^0.14.0" + eslint-config-recommended "^4.1.0" + eslint-plugin-babel "^5.3.0" + typescript "^3.9.5" + +eslint-config-node@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-node/-/eslint-config-node-4.1.0.tgz#fc1f13946d83766d6b83b0e67699e2071a56f417" + integrity sha512-Wz17xV5O2WFG8fGdMYEBdbiL6TL7YNJSJvSX9V4sXQownewfYmoqlly7wxqLkOUv/57pq6LnnotMiQQrrPjCqQ== + dependencies: + eslint "^6.8.0" + eslint-config-esnext "^4.1.0" + +eslint-config-react-native@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-react-native/-/eslint-config-react-native-4.1.0.tgz#63e9401c7fac146804785f609e7df8f15b3e04eb" + integrity sha512-kNND+cs+ztawH7wgajf/K6FfNshjlDsFDAkkFZF9HAXDgH1w1sNMIfTfwzufg0hOcSK7rbiL4qbG/gg/oR507Q== + dependencies: + eslint "^6.8.0" + eslint-config-esnext "^4.1.0" + eslint-plugin-react "^7.19.0" + eslint-plugin-react-native "^3.8.1" + +eslint-config-recommended@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-recommended/-/eslint-config-recommended-4.1.0.tgz#1adff90e0716d439be471d192977f233de171a46" + integrity sha512-2evA0SX1VqtyFiExmBI2WAO4XQCKlr7wmNELE8rcT5PyZY2ixsY881ofVZWKuI/dywpgLiES1gR/XUQcnVLRzQ== + dependencies: + eslint "^6.8.0" + eslint-config-esnext "^4.1.0" + eslint-config-node "^4.1.0" + eslint-config-react-native "^4.1.0" + +eslint-import-resolver-node@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-babel@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz#79202a0e35757dd92780919b2336f1fa2fe53c1e" + integrity sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4= + +eslint-plugin-babel@^5.2.1, eslint-plugin-babel@^5.3.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz#75a2413ffbf17e7be57458301c60291f2cfbf560" + integrity sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g== + dependencies: + eslint-rule-composer "^0.3.0" + +eslint-plugin-flowtype@^2.50.3: + version "2.50.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz#61379d6dce1d010370acd6681740fd913d68175f" + integrity sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ== + dependencies: + lodash "^4.17.10" + +eslint-plugin-import@^2.14.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" + integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.3" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-react-hooks@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0" + integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g== + +eslint-plugin-react-native-globals@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2" + integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g== + +eslint-plugin-react-native@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.8.1.tgz#92811e37191ecb0d29c0f0a0c9e5c943ee573821" + integrity sha512-6Z4s4nvgFRdda/1s1+uu4a6EMZwEjjJ9Bk/1yBImv0fd9U2CsGu2cUakAtV83cZKhizbWhSouXoaK4JtlScdFg== + dependencies: + eslint-plugin-react-native-globals "^0.1.1" + +eslint-plugin-react@^7.11.1: + version "7.20.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3" + integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA== + dependencies: + array-includes "^3.1.1" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.2.3" + object.entries "^1.1.1" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.15.1" + string.prototype.matchall "^4.0.2" + xregexp "^4.3.0" + +eslint-plugin-react@^7.19.0: + version "7.20.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz#0590525e7eb83890ce71f73c2cf836284ad8c2f1" + integrity sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg== + dependencies: + array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.17.0" + string.prototype.matchall "^4.0.2" + +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0, eslint-scope@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" + integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa" + integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ== + +eslint-visitor-keys@^1.2.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.3.1.tgz#76392bd7e44468d046149ba128d1566c59acbe19" + integrity sha512-cQC/xj9bhWUcyi/RuMbRtC3I0eW8MH0jhRELSvpKYkWep3C6YZ2OkvcvJVUeO6gcunABmzptbXBuDoXsjHmfTA== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.0" + eslint-utils "^2.0.0" + eslint-visitor-keys "^1.2.0" + espree "^7.1.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.14" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +eslint@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +espree@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69" + integrity sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g== + dependencies: + acorn "^7.3.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1, esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +events@^3.0.0, events@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +except@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/except/-/except-0.1.3.tgz#98261c91958551536b44482238e9783fb73d292a" + integrity sha1-mCYckZWFUVNrREgiOOl4P7c9KSo= + dependencies: + indexof "0.0.1" + +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + 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" + +execa@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" + integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execall@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" + integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow== + dependencies: + clone-regexp "^2.1.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= + dependencies: + is-posix-bracket "^0.1.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + 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" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= + dependencies: + fill-range "^2.1.0" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +expect@^1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-1.20.2.tgz#d458fe4c56004036bae3232416a3f6361f04f965" + integrity sha1-1Fj+TFYAQDa64yMkFqP2Nh8E+WU= + dependencies: + define-properties "~1.1.2" + has "^1.0.1" + is-equal "^1.5.1" + is-regex "^1.0.3" + object-inspect "^1.1.0" + object-keys "^1.0.9" + tmatch "^2.0.1" + +expect@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.5.2.tgz#3e0631c4a657a83dbec769ad246a2998953a55a6" + integrity sha512-ccTGrXZd8DZCcvCz4htGXTkd/LOoy6OEtiDS38x3/VVf6E4AQL0QoeksBiw7BtGR5xDNiRYPB8GN6pfbuTOi7w== + dependencies: + "@jest/types" "^26.5.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.5.2" + jest-message-util "^26.5.2" + jest-regex-util "^26.0.0" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + 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" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= + dependencies: + is-extglob "^1.0.0" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + 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" + +extract-text-webpack-plugin@^4.0.0-beta.0: + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz#f7361d7ff430b42961f8d1321ba8c1757b5d4c42" + integrity sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA== + dependencies: + async "^2.4.1" + loader-utils "^1.1.0" + schema-utils "^0.4.5" + webpack-sources "^1.1.0" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fake-indexeddb@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fake-indexeddb/-/fake-indexeddb-3.0.1.tgz#42e478f9faa9a5a358dcb0a6392d979d7458c427" + integrity sha512-F+qD/G91cvuD/ItaTx3wUaGTp0hMV6p5neZswhUvnisMARdG7cZCc+7L6zzx2nELSAdK3G5WGVjyb619WdcZZA== + dependencies: + realistic-structured-clone "^2.0.1" + setimmediate "^1.0.5" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^2.0.2, fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fast-memoize@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e" + integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +fbemitter@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" + integrity sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU= + dependencies: + fbjs "^0.8.4" + +fbjs@0.1.0-alpha.7: + version "0.1.0-alpha.7" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.1.0-alpha.7.tgz#ad4308b8f232fb3c73603349ea725d1e9c39323c" + integrity sha1-rUMIuPIy+zxzYDNJ6nJdHpw5Mjw= + dependencies: + core-js "^1.0.0" + promise "^7.0.3" + whatwg-fetch "^0.9.0" + +fbjs@^0.8.4: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-loader@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-5.1.0.tgz#cb56c070efc0e40666424309bd0d9e45ac6f2bb8" + integrity sha512-u/VkLGskw3Ue59nyOwUwXI/6nuBCo7KBkniB/l7ICwr/7cPNGsL1WCXUp3GB0qgOOKU1TiP49bv4DZF/LJqprg== + dependencies: + loader-utils "^1.4.0" + schema-utils "^2.5.0" + +file-saver@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-1.3.8.tgz#e68a30c7cb044e2fb362b428469feb291c2e09d8" + integrity sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +file@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/file/-/file-0.2.2.tgz#c3dfd8f8cf3535ae455c2b423c2e52635d76b4d3" + integrity sha1-w9/Y+M81Na5FXCtCPC5SY112tNM= + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= + +filesize@3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + 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" + +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-index@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" + integrity sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ= + +find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +findup-sync@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +flux@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/flux/-/flux-2.1.1.tgz#2c6ac652d4337488968489c6586f3aff26a38ea4" + integrity sha1-LGrGUtQzdIiWhInGWG86/yajjqQ= + dependencies: + fbemitter "^2.0.0" + fbjs "0.1.0-alpha.7" + immutable "^3.7.4" + +focus-lock@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.7.0.tgz#b2bfb0ca7beacc8710a1ff74275fe0dc60a1d88a" + integrity sha512-LI7v2mH02R55SekHYdv9pRHR9RajVNyIJ2N5IEkWbg7FT5ZmJ9Hw4mWxHeEUcd+dJo0QmzztHvDvWcc7prVFsw== + +focus-visible@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/focus-visible/-/focus-visible-5.1.0.tgz#4b9d40143b865f53eafbd93ca66672b3bf9e7b6a" + integrity sha512-nPer0rjtzdZ7csVIu233P2cUm/ks/4aVSI+5KUkYrYpgA7ujgC3p6J7FtFU+AIMWwnwYQOB/yeiOITxFeYIXiw== + +follow-redirects@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" + integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== + dependencies: + debug "^3.0.0" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.0.0, fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@^2.1.2, fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +functions-have-names@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" + integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== + +fuse.js@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-2.7.4.tgz#96e420fde7ef011ac49c258a621314fe576536f9" + integrity sha1-luQg/efvARrEnCWKYhMU/ldlNvk= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stdin@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +gfm.css@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/gfm.css/-/gfm.css-1.1.2.tgz#94acfa600672663b9dd0fd4b6ee5d11c8dbc161e" + integrity sha512-KhK3rqxMj+UTLRxWnfUA5n8XZYMWfHrrcCxtWResYR2B3hWIqBM6v9FPGZSlVuX+ScLewizOvNkjYXuPs95ThQ== + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= + dependencies: + is-glob "^2.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob2base@^0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" + integrity sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY= + dependencies: + find-index "^0.1.1" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + 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" + +global-modules@2.0.0, global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= + +gonzales-pe@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.2, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +highlight.js@^10.1.2: + version "10.1.2" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.1.2.tgz#c20db951ba1c22c055010648dfffd7b2a968e00c" + integrity sha512-Q39v/Mn5mfBlMff9r+zzA+gWxRsCRKwEMvYTiisLr/XUiFI/4puWt0Ojdko3R3JCNWGdOWaA5g/Yxqa23kC5AA== + +highlight.js@^9.13.1: + version "9.18.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.1.tgz#ed21aa001fe6252bb10a3d76d47573c6539fe13c" + integrity sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg== + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.0.tgz#dd8af49cd01e73cc8e61ba13e217a772fd4ecd2d" + integrity sha512-zYSx1cP4MLsvKtTg8DF/PI6e6FHZ3wcawcTGsrLU2TM+UfD4jmSrn2wdQT16TFbH3lO4PIdjLG0E+cuYDgFD9g== + dependencies: + lru-cache "^5.1.1" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier@^3.2.3: + version "3.5.21" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" + integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.2.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + +html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +htmlparser2@^3.10.0, htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + 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" + +htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^4.0.3, ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +immutable@^3.7.4: + version "3.8.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + +import-local@2.0.0, import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inquirer@^7.0.0: + version "7.3.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.2.tgz#25245d2e32dc9f33dbe26eeaada231daa66e9c7c" + integrity sha512-DF4osh1FM6l0RJc5YWYhSDB6TawiBRlbV9Cox8MWlidU218Tb7fm3lQTULyUJDfJ0tjbzl0W4q651mrCCEM55w== + dependencies: + 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.16" + 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" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + +interpret@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +ip-regex@^2.0.0, ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumeric@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-arrow-function@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-arrow-function/-/is-arrow-function-2.0.3.tgz#29be2c2d8d9450852b8bbafb635ba7b8d8e87ec2" + integrity sha1-Kb4sLY2UUIUri7r7Y1unuNjofsI= + dependencies: + is-callable "^1.0.4" + +is-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.0.tgz#73da8c33208d00f130e9b5e15d23eac9215601c4" + integrity sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e" + integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ== + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + +is-callable@^1.0.4, is-callable@^1.1.4, is-callable@^1.1.5: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + 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-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= + dependencies: + is-primitive "^2.0.0" + +is-equal@^1.5.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/is-equal/-/is-equal-1.6.1.tgz#74fafde5060fcaf187041c05f11f0b9f020bb9b3" + integrity sha512-3/79QTolnfNFrxQAvqH8M+O01uGWsVq54BUPG2mXQH7zi4BE/0TY+fmA444t8xSBvIwyNMvsTmCZ5ViVDlqPJg== + dependencies: + es-get-iterator "^1.0.1" + functions-have-names "^1.2.0" + has "^1.0.3" + is-arrow-function "^2.0.3" + is-bigint "^1.0.0" + is-boolean-object "^1.0.0" + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-generator-function "^1.0.7" + is-number-object "^1.0.3" + is-regex "^1.0.4" + is-string "^1.0.4" + is-symbol "^1.0.3" + isarray "^2.0.5" + object-inspect "^1.7.0" + object.entries "^1.1.0" + which-boxed-primitive "^1.0.1" + which-collection "^1.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-generator-function@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" + integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw== + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-2.0.0.tgz#68eea07e8a0a0a94c2d080dd674c731ab2a461ab" + integrity sha1-aO6gfooKCpTC0IDdZ0xzGrKkYas= + dependencies: + ip-regex "^2.0.0" + +is-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" + integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== + +is-number-object@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= + +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= + +is-regex@^1.0.3, is-regex@^1.0.4, is-regex@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + dependencies: + has-symbols "^1.0.1" + +is-regexp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" + integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-set@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" + integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== + +is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.4, is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakset@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.1.tgz#e9a0af88dbd751589f5e50d80f4c98b780884f83" + integrity sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw== + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@^2.0.1, isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.5.2.tgz#330232c6a5c09a7f040a5870e8f0a9c6abcdbed5" + integrity sha512-qSmssmiIdvM5BWVtyK/nqVpN3spR5YyvkvPqz1x3BR1bwIxsWmU/MGwLoCrPNLbkG2ASAKfvmJpOduEApBPh2w== + dependencies: + "@jest/types" "^26.5.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.5.2.tgz#0df114399b4036a3f046f0a9f25c50372c76b3a2" + integrity sha512-usm48COuUvRp8YEG5OWOaxbSM0my7eHn3QeBWxiGUuFhvkGVBvl1fic4UjC02EAEQtDv8KrNQUXdQTV6ZZBsoA== + dependencies: + "@jest/core" "^26.5.2" + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.5.2" + jest-util "^26.5.2" + jest-validate "^26.5.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.5.2.tgz#6e828e25f10124433dd008fbd83348636de0972a" + integrity sha512-dqJOnSegNdE5yDiuGHsjTM5gec7Z4AcAMHiW+YscbOYJAlb3LEtDSobXCq0or9EmGQI5SFmKy4T7P1FxetJOfg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.5.2" + "@jest/types" "^26.5.2" + babel-jest "^26.5.2" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.5.2" + jest-environment-node "^26.5.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.5.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.5.2" + jest-util "^26.5.2" + jest-validate "^26.5.2" + micromatch "^4.0.2" + pretty-format "^26.5.2" + +jest-diff@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.5.2.tgz#8e26cb32dc598e8b8a1b9deff55316f8313c8053" + integrity sha512-HCSWDUGwsov5oTlGzrRM+UPJI/Dpqi9jzeV0fdRNi3Ch5bnoXhnyJMmVg2juv9081zLIy3HGPI5mcuGgXM2xRA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.5.0" + jest-get-type "^26.3.0" + pretty-format "^26.5.2" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.5.2.tgz#35e68d6906a7f826d3ca5803cfe91d17a5a34c31" + integrity sha512-w7D9FNe0m2D3yZ0Drj9CLkyF/mGhmBSULMQTypzAKR746xXnjUrK8GUJdlLTWUF6dd0ks3MtvGP7/xNFr9Aphg== + dependencies: + "@jest/types" "^26.5.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.5.2" + pretty-format "^26.5.2" + +jest-environment-jsdom-sixteen@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom-sixteen/-/jest-environment-jsdom-sixteen-1.0.3.tgz#e222228fac537ef15cca5ad470b19b47d9690165" + integrity sha512-CwMqDUUfSl808uGPWXlNA1UFkWFgRmhHvyAjhCmCry6mYq4b/nn80MMN7tglqo5XgrANIs/w+mzINPzbZ4ZZrQ== + dependencies: + "@jest/fake-timers" "^25.1.0" + jest-mock "^25.1.0" + jest-util "^25.1.0" + jsdom "^16.2.1" + +jest-environment-jsdom@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.5.2.tgz#5feab05b828fd3e4b96bee5e0493464ddd2bb4bc" + integrity sha512-fWZPx0bluJaTQ36+PmRpvUtUlUFlGGBNyGX1SN3dLUHHMcQ4WseNEzcGGKOw4U5towXgxI4qDoI3vwR18H0RTw== + dependencies: + "@jest/environment" "^26.5.2" + "@jest/fake-timers" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + jest-mock "^26.5.2" + jest-util "^26.5.2" + jsdom "^16.4.0" + +jest-environment-node@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.5.2.tgz#275a0f01b5e47447056f1541a15ed4da14acca03" + integrity sha512-YHjnDsf/GKFCYMGF1V+6HF7jhY1fcLfLNBDjhAOvFGvt6d8vXvNdJGVM7uTZ2VO/TuIyEFhPGaXMX5j3h7fsrA== + dependencies: + "@jest/environment" "^26.5.2" + "@jest/fake-timers" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + jest-mock "^26.5.2" + jest-util "^26.5.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== + dependencies: + "@jest/types" "^24.9.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.9.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + +jest-haste-map@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.5.2.tgz#a15008abfc502c18aa56e4919ed8c96304ceb23d" + integrity sha512-lJIAVJN3gtO3k4xy+7i2Xjtwh8CfPcH08WYjZpe9xzveDaqGw9fVNCpkYu6M525wKFVkLmyi7ku+DxCAP1lyMA== + dependencies: + "@jest/types" "^26.5.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.5.0" + jest-util "^26.5.2" + jest-worker "^26.5.0" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.5.2.tgz#0e33819d31b1f2aab5efd1e02ce502209c0e64a2" + integrity sha512-2J+GYcgLVPTkpmvHEj0/IDTIAuyblGNGlyGe4fLfDT2aktEPBYvoxUwFiOmDDxxzuuEAD2uxcYXr0+1Yw4tjFA== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.5.2" + "@jest/source-map" "^26.5.0" + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.5.2" + is-generator-fn "^2.0.0" + jest-each "^26.5.2" + jest-matcher-utils "^26.5.2" + jest-message-util "^26.5.2" + jest-runtime "^26.5.2" + jest-snapshot "^26.5.2" + jest-util "^26.5.2" + pretty-format "^26.5.2" + throat "^5.0.0" + +jest-leak-detector@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.5.2.tgz#83fcf9a4a6ef157549552cb4f32ca1d6221eea69" + integrity sha512-h7ia3dLzBFItmYERaLPEtEKxy3YlcbcRSjj0XRNJgBEyODuu+3DM2o62kvIFvs3PsaYoIIv+e+nLRI61Dj1CNw== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.5.2" + +jest-matcher-utils@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.5.2.tgz#6aa2c76ce8b9c33e66f8856ff3a52bab59e6c85a" + integrity sha512-W9GO9KBIC4gIArsNqDUKsLnhivaqf8MSs6ujO/JDcPIQrmY+aasewweXVET8KdrJ6ADQaUne5UzysvF/RR7JYA== + dependencies: + chalk "^4.0.0" + jest-diff "^26.5.2" + jest-get-type "^26.3.0" + pretty-format "^26.5.2" + +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + +jest-message-util@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" + integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^25.5.0" + "@types/stack-utils" "^1.0.1" + chalk "^3.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + slash "^3.0.0" + stack-utils "^1.0.1" + +jest-message-util@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.5.2.tgz#6c4c4c46dcfbabb47cd1ba2f6351559729bc11bb" + integrity sha512-Ocp9UYZ5Jl15C5PNsoDiGEk14A4NG0zZKknpWdZGoMzJuGAkVt10e97tnEVMYpk7LnQHZOfuK2j/izLBMcuCZw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.5.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== + dependencies: + "@jest/types" "^24.9.0" + +jest-mock@^25.1.0, jest-mock@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" + integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== + dependencies: + "@jest/types" "^25.5.0" + +jest-mock@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.5.2.tgz#c9302e8ef807f2bfc749ee52e65ad11166a1b6a1" + integrity sha512-9SiU4b5PtO51v0MtJwVRqeGEroH66Bnwtq4ARdNP7jNXbpT7+ByeWNAk4NeT/uHfNSVDXEXgQo1XRuwEqS6Rdw== + dependencies: + "@jest/types" "^26.5.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" + integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.5.2.tgz#ee30b7cfea81c81bf5e195a9287d7ec07f893170" + integrity sha512-LLkc8LuRtxqOx0AtX/Npa2C4I23WcIrwUgNtHYXg4owYF/ZDQShcwBAHjYZIFR06+HpQcZ43+kCTMlQ3aDCYTg== + dependencies: + "@jest/types" "^26.5.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.5.2" + +jest-resolve@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.5.2.tgz#0d719144f61944a428657b755a0e5c6af4fc8602" + integrity sha512-XsPxojXGRA0CoDD7Vis59ucz2p3cQFU5C+19tz3tLEAlhYKkK77IL0cjYjikY9wXnOaBeEdm1rOgSJjbZWpcZg== + dependencies: + "@jest/types" "^26.5.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.5.2" + read-pkg-up "^7.0.1" + resolve "^1.17.0" + slash "^3.0.0" + +jest-runner@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.5.2.tgz#4f9e6b0bb7eb4710c209a9e145b8a10894f4c19f" + integrity sha512-GKhYxtSX5+tXZsd2QwfkDqPIj5C2HqOdXLRc2x2qYqWE26OJh17xo58/fN/mLhRkO4y6o60ZVloan7Kk5YA6hg== + dependencies: + "@jest/console" "^26.5.2" + "@jest/environment" "^26.5.2" + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.5.2" + jest-docblock "^26.0.0" + jest-haste-map "^26.5.2" + jest-leak-detector "^26.5.2" + jest-message-util "^26.5.2" + jest-resolve "^26.5.2" + jest-runtime "^26.5.2" + jest-util "^26.5.2" + jest-worker "^26.5.0" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.5.2.tgz#b72f5f79eb2fe0c46bfef4cdb9c1e01d1c69ba41" + integrity sha512-zArr4DatX/Sn0wswX/AnAuJgmwgAR5rNtrUz36HR8BfMuysHYNq5sDbYHuLC4ICyRdy5ae/KQ+sczxyS9G6Qvw== + dependencies: + "@jest/console" "^26.5.2" + "@jest/environment" "^26.5.2" + "@jest/fake-timers" "^26.5.2" + "@jest/globals" "^26.5.2" + "@jest/source-map" "^26.5.0" + "@jest/test-result" "^26.5.2" + "@jest/transform" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.5.2" + jest-haste-map "^26.5.2" + jest-message-util "^26.5.2" + jest-mock "^26.5.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.5.2" + jest-snapshot "^26.5.2" + jest-util "^26.5.2" + jest-validate "^26.5.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== + +jest-serializer@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.5.0.tgz#f5425cc4c5f6b4b355f854b5f0f23ec6b962bc13" + integrity sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.5.2.tgz#0cf7642eaf8e8d2736bd443f619959bf237f9ccf" + integrity sha512-MkXIDvEefzDubI/WaDVSRH4xnkuirP/Pz8LhAIDXcVQTmcEfwxywj5LGwBmhz+kAAIldA7XM4l96vbpzltSjqg== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.5.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.5.2" + graceful-fs "^4.2.4" + jest-diff "^26.5.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.5.2" + jest-matcher-utils "^26.5.2" + jest-message-util "^26.5.2" + jest-resolve "^26.5.2" + natural-compare "^1.4.0" + pretty-format "^26.5.2" + semver "^7.3.2" + +jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== + dependencies: + "@jest/console" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/source-map" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + +jest-util@^25.1.0, jest-util@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" + integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== + dependencies: + "@jest/types" "^25.5.0" + chalk "^3.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + make-dir "^3.0.0" + +jest-util@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.5.2.tgz#8403f75677902cc52a1b2140f568e91f8ed4f4d7" + integrity sha512-WTL675bK+GSSAYgS8z9FWdCT2nccO1yTIplNLPlP0OD8tUk/H5IrWKMMRudIQQ0qp8bb4k+1Qa8CxGKq9qnYdg== + dependencies: + "@jest/types" "^26.5.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.5.2.tgz#7ea266700b64234cd1c0cee982490c5a80e9b0f0" + integrity sha512-FmJks0zY36mp6Af/5sqO6CTL9bNMU45yKCJk3hrz8d2aIqQIlN1pr9HPIwZE8blLaewOla134nt5+xAmWsx3SQ== + dependencies: + "@jest/types" "^26.5.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.5.2" + +jest-watcher@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.5.2.tgz#2957f4461007e0769d74b537379ecf6b7c696916" + integrity sha512-i3m1NtWzF+FXfJ3ljLBB/WQEp4uaNhX7QcQUWMokcifFTUQBDFyUMEwk0JkJ1kopHbx7Een3KX0Q7+9koGM/Pw== + dependencies: + "@jest/test-result" "^26.5.2" + "@jest/types" "^26.5.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.5.2" + string-length "^4.0.1" + +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest-worker@^25.4.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest-worker@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.5.0.tgz#87deee86dbbc5f98d9919e0dadf2c40e3152fa30" + integrity sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.5.2.tgz#c6791642b331fe7abd2f993b0a74aa546f7be0fb" + integrity sha512-4HFabJVwsgDwul/7rhXJ3yFAF/aUkVIXiJWmgFxb+WMdZG39fVvOwYAs8/3r4AlFPc4m/n5sTMtuMbOL3kNtrQ== + dependencies: + "@jest/core" "^26.5.2" + import-local "^3.0.2" + jest-cli "^26.5.2" + +js-base64@^2.1.9: + version "2.5.2" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209" + integrity sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^16.2.1, jsdom@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" + integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + dependencies: + abab "^2.0.3" + acorn "^7.1.1" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.2.0" + data-urls "^2.0.0" + decimal.js "^10.2.0" + domexception "^2.0.1" + escodegen "^1.14.1" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "5.1.1" + request "^2.88.2" + request-promise-native "^1.0.8" + saxes "^5.0.0" + symbol-tree "^3.2.4" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + ws "^7.2.3" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-loader@^0.5.3: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jsrsasign@^9.1.5: + version "9.1.5" + resolved "https://registry.yarnpkg.com/jsrsasign/-/jsrsasign-9.1.5.tgz#fe286425d2c05b2d0865d24ded53e34b12abd2ca" + integrity sha512-iJLF8FvZHlwyQudrRtQomHj1HdPAcM8QSRTt0FJo8a6iFgaGCpKUrE7lWyELpAjrFs8jUC/Azc0vfhlj3yqHPQ== + +jsx-ast-utils@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.3.0.tgz#edd727794ea284d7fda575015ed1b0cde0289ab6" + integrity sha512-3HNoc7nZ1hpZIKB3hJ7BlFRkzCx2BynRtfSwbkqZdpRdvAPsGMnzclPwrvDBS7/lalHTj21NwIeaEpysHBOudg== + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.0" + +jsx-ast-utils@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" + integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + optionalDependencies: + graceful-fs "^4.1.9" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + +known-css-properties@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.17.0.tgz#1c535f530ee8e9e3e27bb6a718285780e1d07326" + integrity sha512-Vi3nxDGMm/z+lAaCjvAR1u+7fiv+sG6gU/iYDj5QOF8h76ytK9EW/EKfF0NeTyiGBi8Jy6Hklty/vxISrLox3w== + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +line-column@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= + dependencies: + isarray "^1.0.0" + isobject "^2.0.0" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +linkify-it@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" + integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== + dependencies: + uc.micro "^1.0.1" + +linkifyjs@^2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-2.1.9.tgz#af06e45a2866ff06c4766582590d098a4d584702" + integrity sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug== + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash-es@^4.2.1: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" + integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.16, lodash@^4.17.19, lodash@^4.17.3, lodash@^4.17.5, lodash@^4.2.1: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +loglevel@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== + +loglevel@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" + integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== + +lolex@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" + +longest-streak@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-fetch-happen@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz#a8e3fe41d3415dd656fe7b8e8172e1fb4458b38d" + integrity sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA== + dependencies: + 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.1" + 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" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +markdown-it@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc" + integrity sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg== + dependencies: + argparse "^1.0.7" + entities "~2.0.0" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +markdown-table@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== + +mathml-tag-names@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== + +matrix-js-sdk@9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-9.0.1.tgz#bb84a80db0dec1c21b6867c38bb2aa3f63811d6d" + integrity sha512-D2b/pf1/0FTnJoroZhhFCo9WFv+iXELqDgEozo0mBSTbQolIXjHLDQfmhi3p7nDZxxtjWvJjVaiKiVQPjwHCrg== + dependencies: + "@babel/runtime" "^7.11.2" + another-json "^0.2.0" + browser-request "^0.3.3" + bs58 "^4.0.1" + content-type "^1.0.4" + loglevel "^1.7.0" + qs "^6.9.4" + request "^2.88.2" + unhomoglyph "^1.0.6" + +matrix-mock-request@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/matrix-mock-request/-/matrix-mock-request-1.2.3.tgz#56b15d86e2601a9b48a854844396d18caab649c8" + integrity sha512-Tr7LDHweTW8Ql4C8XhGQFGMzuh+HmPjOcQqrHH1qfSesq0cwdPWanvdnllNjeHoAMcZ43HpMFMzFZfNW1/6HYg== + dependencies: + bluebird "^3.5.0" + expect "^1.20.2" + +matrix-react-sdk@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/matrix-react-sdk/-/matrix-react-sdk-3.7.1.tgz#0a2d9c2c7d224297277532bcf78f60984f6bc49e" + integrity sha512-JwCURRs0WBuqVQ5/0fYg19SEb2Dg8y1F93GiiCssAoMW/bbTiMA6B/moLeZDO2mQPlhqwRtAH1aeLvdKrA/q6w== + dependencies: + "@babel/runtime" "^7.10.5" + await-lock "^2.0.1" + blueimp-canvas-to-blob "^3.27.0" + browser-encrypt-attachment "^0.3.0" + browser-request "^0.3.3" + classnames "^2.2.6" + commonmark "^0.29.1" + counterpart "^0.18.6" + diff-dom "^4.1.6" + diff-match-patch "^1.0.5" + emojibase-data "^5.0.1" + emojibase-regex "^4.0.1" + escape-html "^1.0.3" + file-saver "^1.3.8" + filesize "3.6.1" + flux "2.1.1" + focus-visible "^5.1.0" + fuse.js "^2.7.4" + gfm.css "^1.1.2" + glob-to-regexp "^0.4.1" + highlight.js "^10.1.2" + html-entities "^1.3.1" + is-ip "^2.0.0" + linkifyjs "^2.1.9" + lodash "^4.17.19" + matrix-js-sdk "9.0.1" + matrix-widget-api "^0.1.0-beta.5" + minimist "^1.2.5" + pako "^1.0.11" + parse5 "^5.1.1" + png-chunks-extract "^1.0.0" + project-name-generator "^2.1.7" + prop-types "^15.7.2" + qrcode "^1.4.4" + qs "^6.9.4" + re-resizable "^6.5.4" + react "^16.13.1" + react-beautiful-dnd "^4.0.1" + react-dom "^16.13.1" + react-focus-lock "^2.4.1" + react-transition-group "^4.4.1" + resize-observer-polyfill "^1.5.1" + rfc4648 "^1.4.0" + sanitize-html "github:apostrophecms/sanitize-html#3c7f93f2058f696f5359e3e58d464161647226db" + tar-js "^0.3.0" + text-encoding-utf-8 "^1.0.2" + url "^0.11.0" + velocity-animate "^1.5.2" + what-input "^5.2.10" + zxcvbn "^4.4.2" + +matrix-react-test-utils@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/matrix-react-test-utils/-/matrix-react-test-utils-0.2.2.tgz#c87144d3b910c7edc544a6699d13c7c2bf02f853" + integrity sha512-49+7gfV6smvBIVbeloql+37IeWMTD+fiywalwCqk8Dnz53zAFjKSltB3rmWHso1uecLtQEcPtCijfhzcLXAxTQ== + +matrix-widget-api@^0.1.0-beta.5: + version "0.1.0-beta.5" + resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-0.1.0-beta.5.tgz#dd7f24a177aa590d812bd4e92e2c3ac225c5557e" + integrity sha512-J3GBJtVMFuEM/EWFylc0IlkPjdgmWxrkGYPaZ0LSmxp+OlNJxYfnWPR6F6HveW+Z8C1i0vq+BTueofSqKv2zDg== + dependencies: + events "^3.2.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdast-util-compact@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" + integrity sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg== + dependencies: + unist-util-visit "^1.1.0" + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== + +mdurl@^1.0.1, mdurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memoize-one@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-3.1.1.tgz#ef609811e3bc28970eac2884eece64d167830d17" + integrity sha512-YqVh744GsMlZu6xkhGslPSqSurOv6P+kLN2J3ysBZfagLcL5FdRK/0UpgLoL8hwjjEvvAVkjJZyFP+1T6p1vgA== + +memory-fs@^0.4.0, memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + 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" + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + +mini-css-extract-plugin@^0.8.0: + version "0.8.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" + integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.0: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz#55f7839307d74859d6e8ada9c3ebe72cec216a34" + integrity sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ== + dependencies: + minipass "^3.0.0" + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + 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@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +modernizr@^3.6.0: + version "3.11.2" + resolved "https://registry.yarnpkg.com/modernizr/-/modernizr-3.11.2.tgz#12410de335b79c4c02a19edfefd1bfca6896429b" + integrity sha512-sx262pafYJP1YPrPlMA4a+9WX5cQjvwp39213YNAqv1LZ4rHASFeNIEyLN+a5/F8/1yJR4ic/4wRFVsbK64TUQ== + dependencies: + doctrine "^3.0.0" + file "^0.2.2" + lodash "^4.17.15" + markdown-it "^10.0.0" + mkdirp "0.5.5" + requirejs "^2.3.6" + yargs "^15.3.1" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + 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" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.12.1, nan@^2.14.0: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + +nanoid@^3.1.12: + version "3.1.12" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" + integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + 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" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.5.0.tgz#e6fc4b3cc6c25caed7554bd613a5cf0bac8c31c0" + integrity sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-fetch@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + 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" + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620" + integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + +node-pre-gyp@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" + integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-releases@^1.1.53: + version "1.1.58" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz#8ee20eef30fa60e52755fcc0942def5a734fe935" + integrity sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg== + +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-selector@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" + integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.1.0, object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-is@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.0.9, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" + integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + has "^1.0.3" + +object.fromentries@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +"olm@https://packages.matrix.org/npm/olm/olm-3.2.1.tgz": + version "3.2.1" + resolved "https://packages.matrix.org/npm/olm/olm-3.2.1.tgz#d623d76f99c3518dde68be8c86618d68bc7b004a" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimize-css-assets-webpack-plugin@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572" + integrity sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +optionator@^0.8.1, optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^3.0.0, os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-each-series@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" + integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@^1.0.11, pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-entities@^1.0.2, parse-entities@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parse5@5.1.1, parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + 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@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.0, pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +pluralizers@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/pluralizers/-/pluralizers-0.1.7.tgz#8d38dd0a1b660e739b10ab2eab10b684c9d50142" + integrity sha512-mw6AejUiCaMQ6uPN9ObjJDTnR5AnBSmnHHy3uVTbxrSFSxO5scfwpTs8Dxyb6T2v7GSulhvOq+pm9y+hXUvtOA== + +png-chunks-extract@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/png-chunks-extract/-/png-chunks-extract-1.0.0.tgz#fad4a905e66652197351c65e35b92c64311e472d" + integrity sha1-+tSpBeZmUhlzUcZeNbksZDEeRy0= + dependencies: + crc-32 "^0.3.0" + +pngjs@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +portfinder@^1.0.26: + version "1.0.26" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" + integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" + integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-calc@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1" + integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-easings@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-easings/-/postcss-easings-2.0.0.tgz#79bde7ce71c838ef7371a59d293e08b337b1802b" + integrity sha512-oJUmnrPwayx47y+jrRKSofHOjRjdJCOyqNXZURQkAVEra93ShqUcN8WYIuT/pWQeGe2I/pxxFfw7mOUGBrxCRQ== + dependencies: + postcss "^7.0.2" + postcss-value-parser "^3.3.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-extend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-extend/-/postcss-extend-1.0.5.tgz#5ea98bf787ba3cacf4df4609743f80a833b1d0e7" + integrity sha1-XqmL94e6PKz030YJdD+AqDOx0Oc= + dependencies: + postcss "^5.0.4" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz#71dd3c6c10a0d846c5eda07803439617bbbabacc" + integrity sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-hexrgba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-hexrgba/-/postcss-hexrgba-2.0.0.tgz#1bdae7640047470b6935d8b0e5369f4acc987eb5" + integrity sha512-qZmURatbgathSg00kCAKG4h6iUwKnRbhMMWNN6V5u4NTKjuTplxi+CrhbHvQ8BNulTA4B51/RIWnNIoulJIDlg== + dependencies: + postcss "^7.0.14" + +postcss-html@^0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204" + integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw== + dependencies: + htmlparser2 "^3.10.0" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-import@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153" + integrity sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw== + dependencies: + postcss "^7.0.1" + postcss-value-parser "^3.2.3" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-initial@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d" + integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== + dependencies: + lodash.template "^4.5.0" + postcss "^7.0.2" + +postcss-js@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9" + integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w== + dependencies: + camelcase-css "^2.0.1" + postcss "^7.0.18" + +postcss-jsx@^0.36.3: + version "0.36.4" + resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.4.tgz#37a68f300a39e5748d547f19a747b3257240bd50" + integrity sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA== + dependencies: + "@babel/core" ">=7.2.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-less@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" + integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA== + dependencies: + postcss "^7.0.14" + +postcss-load-config@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" + integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-markdown@^0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.36.0.tgz#7f22849ae0e3db18820b7b0d5e7833f13a447560" + integrity sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ== + dependencies: + remark "^10.0.1" + unist-util-find-all-after "^1.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + 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" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + 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" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-mixins@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/postcss-mixins/-/postcss-mixins-6.2.3.tgz#021893ba455d04b5baa052bf196297ddd70e4af1" + integrity sha512-gfH5d09YilzDn/CLGFA9Lwv7GTezuyHgnAyXC8AfvhUMpl67ZTewhcpNuOgawClCOD+76XePE2IHO1xMgsOlvA== + dependencies: + globby "^8.0.1" + postcss "^7.0.21" + postcss-js "^2.0.3" + postcss-simple-vars "^5.0.2" + sugarss "^2.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" + integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.16" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-nested@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-4.2.1.tgz#4bc2e5b35e3b1e481ff81e23b700da7f82a8b248" + integrity sha512-AMayXX8tS0HCp4O4lolp4ygj9wBn32DJWXvG6gCv+ZvJrEa00GUxJcJEEzMh87BIe6FrWdYkpR2cuyqHKrxmXw== + dependencies: + postcss "^7.0.21" + postcss-selector-parser "^6.0.2" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-reporter@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f" + integrity sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw== + dependencies: + chalk "^2.4.1" + lodash "^4.17.11" + log-symbols "^2.2.0" + postcss "^7.0.7" + +postcss-resolve-nested-selector@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= + +postcss-safe-parser@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" + integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== + dependencies: + postcss "^7.0.26" + +postcss-sass@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.4.4.tgz#91f0f3447b45ce373227a98b61f8d8f0785285a3" + integrity sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg== + dependencies: + gonzales-pe "^4.3.0" + postcss "^7.0.21" + +postcss-scss@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.1.1.tgz#ec3a75fa29a55e016b90bf3269026c53c1d2b383" + integrity sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA== + dependencies: + postcss "^7.0.6" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0" + integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-simple-vars@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-5.0.2.tgz#e2f81b3d0847ddd4169816b6d141b91d51e6e22e" + integrity sha512-xWIufxBoINJv6JiLb7jl5oElgp+6puJwvT5zZHliUSydoLz4DADRB3NDDsYgfKVwojn4TDLiseoC65MuS8oGGg== + dependencies: + postcss "^7.0.14" + +postcss-strip-inline-comments@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/postcss-strip-inline-comments/-/postcss-strip-inline-comments-0.1.5.tgz#7ff6bcdc14e633ed4cdfa020bae3eddad4f84b90" + integrity sha1-f/a83BTmM+1M36AguuPt2tT4S5A= + dependencies: + postcss "^5.0.18" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-syntax@^0.36.2: + version "0.36.2" + resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" + integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@^5.0.18, postcss@^5.0.4: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.5, postcss@^7.0.6, postcss@^7.0.7: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^8.0.2: + version "8.1.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.1.tgz#c3a287dd10e4f6c84cb3791052b96a5d859c9389" + integrity sha512-9DGLSsjooH3kSNjTZUOt2eIj2ZTW0VI2PZ/3My+8TC7KIbH2OKwUlISfDsf63EP4aiRUt3XkEWMWvyJHvJelEg== + dependencies: + colorette "^1.2.1" + line-column "^1.0.2" + nanoid "^3.1.12" + source-map "^0.6.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +pretty-format@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.5.2.tgz#5d896acfdaa09210683d34b6dc0e6e21423cd3e1" + integrity sha512-VizyV669eqESlkOikKJI8Ryxl/kPpbdLwNdPs2GrbQs18MpySB5S0Yo0N7zkg2xTRiFq4CFw8ct5Vg4a0xP0og== + dependencies: + "@jest/types" "^26.5.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +project-name-generator@^2.1.7: + version "2.1.7" + resolved "https://registry.yarnpkg.com/project-name-generator/-/project-name-generator-2.1.7.tgz#504c68a2a843247aa3af493a226ecf78ce8beceb" + integrity sha512-kLGQGiyvkZsWtqhPhUs85UkSgmH5OnZJLNrtlqkK+GZPR0cybe8Nr9jG3bD52w2siH9EE3l/a9y56bn0YX5wYw== + dependencies: + commander "^2.15.1" + lodash "^4.17.10" + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +promise@^7.0.3, promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.0.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.4" + +prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + 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@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qrcode@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.4.4.tgz#f0c43568a7e7510a55efc3b88d9602f71963ea83" + integrity sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q== + dependencies: + buffer "^5.4.3" + buffer-alloc "^1.2.0" + buffer-from "^1.1.1" + dijkstrajs "^1.0.1" + isarray "^2.0.1" + pngjs "^3.3.0" + yargs "^13.2.4" + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + +raf-schd@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-2.1.2.tgz#ec622b5167f2912089f054dc03ebd5bcf33c8f62" + integrity sha512-Orl0IEvMtUCgPddgSxtxreK77UiQz4nPYJy9RggVzu4mKsZkQWiAaG1y9HlYWdvm9xtN348xRaT37qkvL/+A+g== + +raf@^3.1.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@1.2.8, rc@^1.2.7, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +re-resizable@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.5.4.tgz#909a1e37f9d1a3afd356893a5779a030167be641" + integrity sha512-7T3L1lexB2zkZIDmzRJbwdq+xGFuRkrEVQIf5hBPnh7JuS9kG9Yc8XgIaxTWic1kU7jVlDgqzfId/gvmpBCjpA== + dependencies: + fast-memoize "^2.5.1" + +react-beautiful-dnd@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-4.0.1.tgz#3b0a49bf6be75af351176c904f012611dd292b81" + integrity sha512-d73RMu4QOFCyjUELLWFyY/EuclnfqulI9pECx+2gIuJvV0ycf1uR88o+1x0RSB9ILD70inHMzCBKNkWVbbt+vA== + dependencies: + babel-runtime "^6.26.0" + invariant "^2.2.2" + memoize-one "^3.0.1" + prop-types "^15.6.0" + raf-schd "^2.1.0" + react-motion "^0.5.2" + react-redux "^5.0.6" + redux "^3.7.2" + redux-thunk "^2.2.0" + reselect "^3.0.1" + +react-clientside-effect@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.2.tgz#6212fb0e07b204e714581dd51992603d1accc837" + integrity sha512-nRmoyxeok5PBO6ytPvSjKp9xwXg9xagoTK1mMjwnQxqM9Hd7MNPl+LS1bOSOe+CV2+4fnEquc7H/S8QD3q697A== + dependencies: + "@babel/runtime" "^7.0.0" + +react-dom@^16.13.1, react-dom@^16.9.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" + integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + +react-focus-lock@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.4.1.tgz#e842cc93da736b5c5d331799012544295cbcee4f" + integrity sha512-c5ZP56KSpj9EAxzScTqQO7bQQNPltf/W1ZEBDqNDOV1XOIwvAyHX0O7db9ekiAtxyKgnqZjQlLppVg94fUeL9w== + dependencies: + "@babel/runtime" "^7.0.0" + focus-lock "^0.7.0" + prop-types "^15.6.2" + react-clientside-effect "^1.2.2" + use-callback-ref "^1.2.1" + use-sidecar "^1.0.1" + +react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-lifecycles-compat@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-motion@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316" + integrity sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ== + dependencies: + performance-now "^0.2.0" + prop-types "^15.5.8" + raf "^3.1.0" + +react-redux@^5.0.6: + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.2.tgz#b19cf9e21d694422727bf798e934a916c4080f57" + integrity sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q== + dependencies: + "@babel/runtime" "^7.1.2" + hoist-non-react-statics "^3.3.0" + invariant "^2.2.4" + loose-envify "^1.1.0" + prop-types "^15.6.1" + react-is "^16.6.0" + react-lifecycles-compat "^3.0.0" + +react-transition-group@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" + integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^16.13.1, react@^16.9.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" + integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= + dependencies: + pify "^2.3.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" + integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= + dependencies: + normalize-package-data "^2.3.2" + parse-json "^4.0.0" + pify "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + 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" + +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.0.0, readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +realistic-structured-clone@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/realistic-structured-clone/-/realistic-structured-clone-2.0.2.tgz#2f8ec225b1f9af20efc79ac96a09043704414959" + integrity sha512-5IEvyfuMJ4tjQOuKKTFNvd+H9GSbE87IcendSBannE28PTrbolgaVg5DdEApRKhtze794iXqVUFKV60GLCNKEg== + dependencies: + core-js "^2.5.3" + domexception "^1.0.1" + typeson "^5.8.2" + typeson-registry "^1.0.0-alpha.20" + +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== + dependencies: + util.promisify "^1.0.0" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +redux-thunk@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" + integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== + +redux@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A== + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + +regenerator-transform@^0.14.2: + version "0.14.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" + integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== + dependencies: + "@babel/runtime" "^7.8.4" + private "^0.1.8" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + 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" + +registry-auth-token@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be" + integrity sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw== + dependencies: + rc "^1.2.8" + safe-buffer "^5.0.1" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remark-parse@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a" + integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg== + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.1.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remark-stringify@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088" + integrity sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg== + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^1.1.0" + mdast-util-compact "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^1.0.1" + unherit "^1.0.4" + xtend "^4.0.1" + +remark@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/remark/-/remark-10.0.1.tgz#3058076dc41781bf505d8978c291485fe47667df" + integrity sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ== + dependencies: + remark-parse "^6.0.0" + remark-stringify "^6.0.0" + unified "^7.0.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +replace-ext@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + 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" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requirejs@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9" + integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +reselect@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" + integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.8.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rfc4648@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/rfc4648/-/rfc4648-1.4.0.tgz#c75b2856ad2e2d588b6ddb985d556f1f7f2a2abd" + integrity sha512-3qIzGhHlMHA6PoT6+cdPKZ+ZqtxkIvg8DZGKA5z6PQ33/uuhoJ+Ws/D/J9rXW6gXodgH8QYlz2UCl+sdUDmNIg== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rollup-plugin-terser@^5.1.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz#9c0dd33d5771df9630cd027d6a2559187f65885e" + integrity sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g== + dependencies: + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" + serialize-javascript "^2.1.2" + terser "^4.6.2" + +rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.5.2: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== + dependencies: + tslib "^1.9.0" + +rxjs@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84" + integrity sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +"sanitize-html@github:apostrophecms/sanitize-html#3c7f93f2058f696f5359e3e58d464161647226db": + version "2.0.0-rc.3" + resolved "https://codeload.github.com/apostrophecms/sanitize-html/tar.gz/3c7f93f2058f696f5359e3e58d464161647226db" + dependencies: + deepmerge "^4.2.2" + escape-string-regexp "^4.0.0" + htmlparser2 "^4.1.0" + is-plain-object "^5.0.0" + klona "^2.0.3" + postcss "^8.0.2" + srcset "^3.0.0" + +sax@^1.2.4, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@6.3.0, semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^7.2.1, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + 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" + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + 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" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-escape@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/shell-escape/-/shell-escape-0.2.0.tgz#68fd025eb0490b4f567a027f0bf22480b5f84133" + integrity sha1-aP0CXrBJC09WegJ/C/IkgLX4QTM= + +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +side-channel@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + dependencies: + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= + +simple-get@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" + integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-proxy-agent@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/simple-proxy-agent/-/simple-proxy-agent-1.1.0.tgz#974cd1130dd32554775e2d4caeb70d701f7ca8b3" + integrity sha512-amJaLagzNELaNNB2UXdXiORVbbU/RC4yRwtGvF4cttJheTm4JvL2fZ1SfuLU952XC7TLamYdgzzJtWUbGM6Jcw== + dependencies: + socks "^2.3.2" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + 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" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + 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" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@^2.3.2: + version "2.4.4" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.4.4.tgz#f1a3382e7814ae28c97bb82a38bc1ac24b21cca2" + integrity sha512-7LmHN4IHj1Vpd/k8D872VGCHJ6yIVyeFkfIBExRmGPYQ/kdUkpdg9eKh9oOzYYYKQhuxavayJHTnmBG+EzluUA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.1.0" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + 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@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + 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" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +specificity@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" + integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +srcset@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/srcset/-/srcset-3.0.0.tgz#8afd8b971362dfc129ae9c1a99b3897301ce6441" + integrity sha512-D59vF08Qzu/C4GAOXVgMTLfgryt5fyWo93FZyhEWANo0PokFz/iWdDe13mX3O5TRf6l8vMTqckAfR4zPiaH0yQ== + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + 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@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" + integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + +stack-utils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" + integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== + dependencies: + escape-string-regexp "^2.0.0" + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-length@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" + integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" + integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^5.2.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.matchall@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + +string.prototype.repeat@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" + integrity sha1-q6Nt4I3O5qWjN9SbLqHaGyj8Ds8= + +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" + +string.prototype.trimright@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-entities@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" + integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@^3.0.1, strip-json-comments@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +stylelint@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-12.0.1.tgz#5b1f3bf7333320acce322b49852c8b85e94ce7e4" + integrity sha512-1mn39pqZiC/e8KUPoRMc1WMM83Upb2ILaSGxkCvKxALHutEOs2txcPQocJiXdO4Zx4FY4prGqjlkwrbthAxqig== + dependencies: + autoprefixer "^9.7.1" + balanced-match "^1.0.0" + chalk "^3.0.0" + cosmiconfig "^6.0.0" + debug "^4.1.1" + execall "^2.0.0" + file-entry-cache "^5.0.1" + get-stdin "^7.0.0" + global-modules "^2.0.0" + globby "^9.2.0" + globjoin "^0.1.4" + html-tags "^3.1.0" + ignore "^5.1.4" + import-lazy "^4.0.0" + imurmurhash "^0.1.4" + known-css-properties "^0.17.0" + leven "^3.1.0" + lodash "^4.17.15" + log-symbols "^3.0.0" + mathml-tag-names "^2.1.1" + meow "^5.0.0" + micromatch "^4.0.2" + normalize-selector "^0.2.0" + postcss "^7.0.21" + postcss-html "^0.36.0" + postcss-jsx "^0.36.3" + postcss-less "^3.1.4" + postcss-markdown "^0.36.0" + postcss-media-query-parser "^0.2.3" + postcss-reporter "^6.0.1" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^4.0.1" + postcss-sass "^0.4.2" + postcss-scss "^2.0.0" + postcss-selector-parser "^3.1.0" + postcss-syntax "^0.36.2" + postcss-value-parser "^4.0.2" + resolve-from "^5.0.0" + slash "^3.0.0" + specificity "^0.4.1" + string-width "^4.2.0" + strip-ansi "^6.0.0" + style-search "^0.1.0" + sugarss "^2.0.0" + svg-tags "^1.0.0" + table "^5.4.6" + v8-compile-cache "^2.1.0" + write-file-atomic "^3.0.1" + +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= + dependencies: + minimist "^1.1.0" + +sugarss@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" + integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ== + dependencies: + postcss "^7.0.2" + +supports-color@6.1.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + 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@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^5.2.3, table@^5.4.6: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar-js@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/tar-js/-/tar-js-0.3.0.tgz#6949aabfb0ba18bb1562ae51a439fd0f30183a17" + integrity sha1-aUmqv7C6GLsVYq5RpDn9DzAYOhc= + +tar@^4: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + 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" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser-webpack-plugin@^2.3.0: + version "2.3.7" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz#4910ff5d1a872168cc7fa6cd3749e2b0d60a8a0b" + integrity sha512-xzYyaHUNhzgaAdBsXxk2Yvo/x1NJdslUaussK3fdpBbvttm1iIwU+c26dj9UxJcwk2c5UWt5F55MUTIA8BE7Dg== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.3.1" + jest-worker "^25.4.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.6.12" + webpack-sources "^1.4.3" + +terser@^4.1.2, terser@^4.6.12, terser@^4.6.2: + version "4.7.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006" + integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +test-exclude@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== + +text-table@0.2.0, text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tmatch@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-2.0.1.tgz#0c56246f33f30da1b8d3d72895abaf16660f38cf" + integrity sha1-DFYkbzPzDaG409colauvFmYPOM8= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + +tree-kill@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + +trim-trailing-lines@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" + integrity sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^3.7.3: + version "3.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" + integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== + +typescript@^3.9.5: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +typeson-registry@^1.0.0-alpha.20: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/typeson-registry/-/typeson-registry-1.0.0-alpha.37.tgz#23e6bffc264b4dfc80603e2a8545bd4750102d42" + integrity sha512-xXkriUyWzsBCNmMLyLXXFkc2UQbK7nDB8ItS3LJWlKMJvfzZfRBaZFPxH6cfjJYD4mQbv1mAxjk/9mRfyWe88g== + dependencies: + base64-arraybuffer-es6 "0.6.0" + typeson "5.18.2" + whatwg-url "7.1.0" + +typeson@5.18.2, typeson@^5.8.2: + version "5.18.2" + resolved "https://registry.yarnpkg.com/typeson/-/typeson-5.18.2.tgz#0d217fc0e11184a66aa7ca0076d9aa7707eb7bc2" + integrity sha512-Vetd+OGX05P4qHyHiSLdHZ5Z5GuQDrHHwSdjkqho9NSCYVSLSfRMjklD/unpHH8tXBR9Z/R05rwJSuMpMFrdsw== + +ua-parser-js@^0.7.18, ua-parser-js@^0.7.19: + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +uglify-js@3.4.x: + version "3.4.10" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unhomoglyph@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/unhomoglyph/-/unhomoglyph-1.0.6.tgz#ea41f926d0fcf598e3b8bb2980c2ddac66b081d3" + integrity sha512-7uvcWI3hWshSADBu4JpnyYbTVc7YlhF5GDW/oPD5AxIxl34k4wXR3WDkPnzLxkN32LiTCTKMQLtKVZiwki3zGg== + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +unified@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13" + integrity sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw== + dependencies: + "@types/unist" "^2.0.0" + "@types/vfile" "^3.0.0" + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^3.0.0" + x-is-string "^0.1.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unist-util-find-all-after@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz#5751a8608834f41d117ad9c577770c5f2f1b2899" + integrity sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw== + dependencies: + unist-util-is "^3.0.0" + +unist-util-is@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" + integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== + +unist-util-remove-position@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" + integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== + dependencies: + unist-util-visit "^1.1.0" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" + integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== + dependencies: + unist-util-is "^3.0.0" + +unist-util-visit@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" + integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== + dependencies: + unist-util-visit-parents "^2.0.0" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +updates@^8.5.2: + version "8.5.3" + resolved "https://registry.yarnpkg.com/updates/-/updates-8.5.3.tgz#6397674fcfe9938deabbfa2f88dad717d756eebb" + integrity sha512-bREdpucNEtSULXu2PLfYmKnRD6E0lM16vbZNsgR39Ou7FqiUEyasA0o2Lrb3uHwZN3L2WhOjf+EjQl7NiOHhug== + dependencies: + chalk "2.4.2" + find-up "4.1.0" + hosted-git-info "3.0.0" + make-fetch-happen "5.0.0" + minimist "1.2.0" + rc "1.2.8" + registry-auth-token "4.0.0" + semver "6.3.0" + string-width "4.1.0" + text-table "0.2.0" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use-callback-ref@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.4.tgz#d86d1577bfd0b955b6e04aaf5971025f406bea3c" + integrity sha512-rXpsyvOnqdScyied4Uglsp14qzag1JIemLeTWGKbwpotWht57hbP78aNT+Q4wdFKQfQibbUX4fb6Qb4y11aVOQ== + +use-sidecar@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.2.tgz#e72f582a75842f7de4ef8becd6235a4720ad8af6" + integrity sha512-287RZny6m5KNMTb/Kq9gmjafi7lQL0YHO1lYolU6+tY1h9+Z3uCtkJJ3OSOq3INwYf2hBryCcDh4520AhJibMA== + dependencies: + detect-node "^2.0.4" + tslib "^1.9.3" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@^1.0.0, util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" + integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== + +v8-compile-cache@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== + +v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + +v8-to-istanbul@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-5.0.1.tgz#0608f5b49a481458625edb058488607f25498ba5" + integrity sha512-mbDNjuDajqYe3TXFk5qxcQy8L1msXNE37WTlLoqqpBfRsimbNcrlhQlDPntmECEcUvdC+AQ8CyMMf6EUx1r74Q== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +velocity-animate@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/velocity-animate/-/velocity-animate-1.5.2.tgz#5a351d75fca2a92756f5c3867548b873f6c32105" + integrity sha512-m6EXlCAMetKztO1ppBhGU1/1MR3IiEevO6ESq6rcrSQ3Q77xYSW13jkfXW88o4xMrkXJhy/U7j4wFR/twMB0Eg== + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vfile-location@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" + integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== + +vfile-message@*: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile-message@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" + integrity sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ== + dependencies: + is-buffer "^2.0.0" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" + integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.0" + watchpack-chokidar2 "^2.0.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-cli@^3.3.10: + version "3.3.11" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" + integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== + dependencies: + chalk "2.4.2" + cross-spawn "6.0.5" + enhanced-resolve "4.1.0" + findup-sync "3.0.0" + global-modules "2.0.0" + import-local "2.0.0" + interpret "1.2.0" + loader-utils "1.2.3" + supports-color "6.1.0" + v8-compile-cache "2.0.3" + yargs "13.2.4" + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.9.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + 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" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.41.2: + version "4.43.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" + integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== + dependencies: + "@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.1.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.6.1" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +what-input@^5.2.10: + version "5.2.10" + resolved "https://registry.yarnpkg.com/what-input/-/what-input-5.2.10.tgz#f79f5b65cf95d75e55e6d580bb0a6b98174cad4e" + integrity sha512-7AQoIMGq7uU8esmKniOtZG3A+pzlwgeyFpkS3f/yzRbxknSL68tvn5gjE6bZ4OMFxCPjpaBd2udUTqlZ0HwrXQ== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@>=0.10.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + +whatwg-fetch@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" + integrity sha1-DjaExsuZlbQ+/J3wPkw2XZX9nMA= + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.3.0.tgz#d1e11e565334486cdb280d3101b9c3fd1c867582" + integrity sha512-BQRf/ej5Rp3+n7k0grQXZj9a1cHtsp4lqj01p59xBWFKdezR8sO37XnpafwNqiFac/v2Il12EIMjX/Y4VZtT8Q== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz#cbe8f838ebe91ba2471bb69e9edbda67ab5a5ec1" + integrity sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ== + dependencies: + is-bigint "^1.0.0" + is-boolean-object "^1.0.0" + is-number-object "^1.0.3" + is-string "^1.0.4" + is-symbol "^1.0.2" + +which-collection@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.0, write-file-atomic@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +ws@^7.2.3: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xregexp@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" + integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== + dependencies: + "@babel/runtime-corejs3" "^7.8.3" + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.7.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^13.1.0, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.1, yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + 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.0" + +yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + +yargs@^13.2.4, yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + 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@^15.3.1: + version "15.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" + integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== + dependencies: + 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.1" + +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + 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.2" + +zxcvbn@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30" + integrity sha1-KOwXzwl0PtyrBW3dixsGJizHPDA=