gitextract_de_b7zvl/ ├── .codeclimate.yml ├── .editorconfig ├── .github/ │ ├── renovate.json5 │ └── workflows/ │ ├── web-addon-crypto.yml │ ├── web-addon-encoding.yml │ ├── web-addon-local-account.yml │ ├── web-addon-networking.yml │ ├── web-addon-test-helpers.yml │ ├── web-addon-tracked-local-storage.yml │ ├── web-addon-ui.yml │ ├── web-app-deploy.yml │ ├── web-app-quality.yml │ ├── web-app-tests.yml │ ├── web-pinochle-deploy.yml │ ├── web-pinochle-quality.yml │ ├── web-pinochle-tests.yml │ └── web-smoke-tests.yml ├── .gitignore ├── .gitmodules ├── .sonarcloud.properties ├── .vscode/ │ └── launch.json ├── .whitesource ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── benchmarks/ │ ├── crypto/ │ │ ├── .babelrc.js │ │ ├── .gitignore │ │ ├── package.json │ │ ├── run │ │ ├── src/ │ │ │ ├── bench/ │ │ │ │ ├── base64.ts │ │ │ │ ├── hex.ts │ │ │ │ ├── key-generation.ts │ │ │ │ ├── nonce-generation.ts │ │ │ │ ├── round-trip-long.ts │ │ │ │ ├── round-trip.ts │ │ │ │ └── stringConvension.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── js-nacl.ts │ │ │ │ ├── libsodium.ts │ │ │ │ ├── round-trip-implementations.ts │ │ │ │ ├── tweet-nacl.ts │ │ │ │ └── utils.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ └── emoji-replace/ │ ├── .babelrc.js │ ├── .gitignore │ ├── package.json │ ├── run │ ├── src/ │ │ ├── bench/ │ │ │ ├── -utils.ts │ │ │ ├── long.ts │ │ │ ├── micro.ts │ │ │ └── short.ts │ │ └── index.ts │ ├── tsconfig.json │ └── types/ │ └── emojis.d.ts ├── client/ │ ├── android-wrapper/ │ │ ├── .gitignore │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── app/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ └── res/ │ │ │ └── values/ │ │ │ └── styles.xml │ │ ├── build.gradle │ │ ├── enable-debug.sh │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ ├── gradle-wrapper.properties │ │ │ └── gradle.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ └── settings.gradle │ └── web/ │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc.js │ ├── .stylelintignore │ ├── .template-lintrc.js │ ├── .vim/ │ │ └── coc-settings.json │ ├── .vscode/ │ │ └── settings.json │ ├── addons/ │ │ ├── crypto/ │ │ │ ├── .editorconfig │ │ │ ├── .ember-cli │ │ │ ├── .eslintignore │ │ │ ├── .eslintrc.js │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .template-lintrc.js │ │ │ ├── .watchmanconfig │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── addon/ │ │ │ │ ├── -private/ │ │ │ │ │ └── types.ts │ │ │ │ ├── connector.ts │ │ │ │ ├── index.ts │ │ │ │ ├── services/ │ │ │ │ │ └── workers.ts │ │ │ │ ├── tsconfig.json │ │ │ │ ├── types.ts │ │ │ │ └── workers/ │ │ │ │ └── crypto/ │ │ │ │ ├── actions.ts │ │ │ │ ├── index.ts │ │ │ │ ├── messages.ts │ │ │ │ └── utils/ │ │ │ │ ├── array.ts │ │ │ │ ├── bip39/ │ │ │ │ │ └── wordlists/ │ │ │ │ │ ├── english.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── mnemonic.ts │ │ │ │ ├── nacl.ts │ │ │ │ ├── socket.ts │ │ │ │ └── string-encoding.ts │ │ │ ├── addon-test-support/ │ │ │ │ ├── index.ts │ │ │ │ ├── setup.ts │ │ │ │ └── tsconfig.json │ │ │ ├── app/ │ │ │ │ └── services/ │ │ │ │ └── workers.ts │ │ │ ├── config/ │ │ │ │ ├── ember-try.js │ │ │ │ └── environment.js │ │ │ ├── ember-cli-build.js │ │ │ ├── index.js │ │ │ ├── lib/ │ │ │ │ └── worker-build.js │ │ │ ├── package.json │ │ │ ├── testem.js │ │ │ ├── tests/ │ │ │ │ ├── dummy/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── app.ts │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── environment.d.ts │ │ │ │ │ │ ├── controllers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ ├── routes/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── styles/ │ │ │ │ │ │ │ └── app.css │ │ │ │ │ │ └── templates/ │ │ │ │ │ │ └── application.hbs │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── ember-cli-update.json │ │ │ │ │ │ ├── environment.js │ │ │ │ │ │ ├── optional-features.json │ │ │ │ │ │ └── targets.js │ │ │ │ │ └── public/ │ │ │ │ │ └── robots.txt │ │ │ │ ├── helpers/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── index.html │ │ │ │ ├── integration/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── test-helper.ts │ │ │ │ ├── tsconfig.json │ │ │ │ ├── unit/ │ │ │ │ │ └── services/ │ │ │ │ │ └── workers-test.js │ │ │ │ └── workers/ │ │ │ │ └── crypto/ │ │ │ │ ├── mnemonic-test.ts │ │ │ │ ├── nacl-test.ts │ │ │ │ └── string-encoding-test.ts │ │ │ ├── tsconfig.compiler-options.json │ │ │ ├── tsconfig.json │ │ │ ├── types/ │ │ │ │ └── overrides.d.ts │ │ │ └── vendor/ │ │ │ └── .gitkeep │ │ ├── encoding/ │ │ │ ├── .editorconfig │ │ │ ├── .ember-cli │ │ │ ├── .eslintignore │ │ │ ├── .eslintrc.js │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .template-lintrc.js │ │ │ ├── .travis.yml │ │ │ ├── .watchmanconfig │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── addon/ │ │ │ │ ├── string.ts │ │ │ │ └── tsconfig.json │ │ │ ├── config/ │ │ │ │ ├── ember-try.js │ │ │ │ └── environment.js │ │ │ ├── ember-cli-build.js │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── testem.js │ │ │ ├── tests/ │ │ │ │ ├── dummy/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── app.ts │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── environment.d.ts │ │ │ │ │ │ ├── controllers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ ├── routes/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── styles/ │ │ │ │ │ │ │ └── app.css │ │ │ │ │ │ └── templates/ │ │ │ │ │ │ └── application.hbs │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── ember-cli-update.json │ │ │ │ │ │ ├── environment.js │ │ │ │ │ │ ├── optional-features.json │ │ │ │ │ │ └── targets.js │ │ │ │ │ └── public/ │ │ │ │ │ └── robots.txt │ │ │ │ ├── helpers/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── index.html │ │ │ │ ├── integration/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── test-helper.js │ │ │ │ ├── tsconfig.json │ │ │ │ └── unit/ │ │ │ │ ├── .gitkeep │ │ │ │ └── string-test.ts │ │ │ ├── tsconfig.compiler-options.json │ │ │ ├── tsconfig.json │ │ │ └── vendor/ │ │ │ └── .gitkeep │ │ ├── local-account/ │ │ │ ├── .editorconfig │ │ │ ├── .ember-cli │ │ │ ├── .eslintignore │ │ │ ├── .eslintrc.js │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .template-lintrc.js │ │ │ ├── .travis.yml │ │ │ ├── .watchmanconfig │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── addon/ │ │ │ │ ├── adapters/ │ │ │ │ │ └── application.js │ │ │ │ ├── index.ts │ │ │ │ ├── models/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── channel-context-chain.ts │ │ │ │ │ ├── channel.ts │ │ │ │ │ ├── contact.ts │ │ │ │ │ ├── identity.ts │ │ │ │ │ ├── user.ts │ │ │ │ │ ├── vote-chain.ts │ │ │ │ │ └── vote.ts │ │ │ │ ├── serializers/ │ │ │ │ │ └── application.js │ │ │ │ ├── services/ │ │ │ │ │ ├── channel-manager.ts │ │ │ │ │ ├── contact-manager.ts │ │ │ │ │ └── current-user.ts │ │ │ │ ├── tsconfig.json │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── addon-test-support/ │ │ │ │ ├── -private/ │ │ │ │ │ ├── contact.ts │ │ │ │ │ ├── current-user.ts │ │ │ │ │ ├── storage.ts │ │ │ │ │ ├── user.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── index.ts │ │ │ │ └── tsconfig.json │ │ │ ├── app/ │ │ │ │ ├── adapters/ │ │ │ │ │ └── application.js │ │ │ │ ├── models/ │ │ │ │ │ ├── channel-context-chain.js │ │ │ │ │ ├── channel.js │ │ │ │ │ ├── contact.js │ │ │ │ │ ├── identity.js │ │ │ │ │ ├── user.js │ │ │ │ │ ├── vote-chain.js │ │ │ │ │ └── vote.js │ │ │ │ ├── serializers/ │ │ │ │ │ └── application.js │ │ │ │ └── services/ │ │ │ │ ├── channel-manager.js │ │ │ │ ├── contact-manager.js │ │ │ │ ├── current-user.js │ │ │ │ └── store.js │ │ │ ├── config/ │ │ │ │ ├── ember-try.js │ │ │ │ └── environment.js │ │ │ ├── ember-cli-build.js │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── testem.js │ │ │ ├── tests/ │ │ │ │ ├── dummy/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── app.ts │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── environment.d.ts │ │ │ │ │ │ ├── controllers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ ├── routes/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── styles/ │ │ │ │ │ │ │ └── app.css │ │ │ │ │ │ └── templates/ │ │ │ │ │ │ └── application.hbs │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── ember-cli-update.json │ │ │ │ │ │ ├── environment.js │ │ │ │ │ │ ├── optional-features.json │ │ │ │ │ │ └── targets.js │ │ │ │ │ └── public/ │ │ │ │ │ └── robots.txt │ │ │ │ ├── helpers/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── index.html │ │ │ │ ├── integration/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── test-helper.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── unit/ │ │ │ │ ├── create-current-user-test.ts │ │ │ │ ├── models/ │ │ │ │ │ ├── contact-test.ts │ │ │ │ │ └── user-test.ts │ │ │ │ └── services/ │ │ │ │ └── current-user-test.ts │ │ │ ├── tsconfig.compiler-options.json │ │ │ ├── tsconfig.json │ │ │ ├── types/ │ │ │ │ └── overrides.d.ts │ │ │ └── vendor/ │ │ │ └── .gitkeep │ │ ├── networking/ │ │ │ ├── .editorconfig │ │ │ ├── .ember-cli │ │ │ ├── .eslintignore │ │ │ ├── .eslintrc.js │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .template-lintrc.js │ │ │ ├── .watchmanconfig │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── addon/ │ │ │ │ ├── errors.ts │ │ │ │ ├── index.ts │ │ │ │ ├── models/ │ │ │ │ │ ├── message/ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── message.ts │ │ │ │ │ └── relay.ts │ │ │ │ ├── required-data.ts │ │ │ │ ├── services/ │ │ │ │ │ ├── connection/ │ │ │ │ │ │ ├── ephemeral/ │ │ │ │ │ │ │ └── ephemeral-connection.ts │ │ │ │ │ │ ├── manager.ts │ │ │ │ │ │ └── status.ts │ │ │ │ │ ├── connection.ts │ │ │ │ │ ├── contacts/ │ │ │ │ │ │ └── online-checker.ts │ │ │ │ │ ├── messages/ │ │ │ │ │ │ ├── -utils/ │ │ │ │ │ │ │ └── builder.ts │ │ │ │ │ │ ├── auto-responder.ts │ │ │ │ │ │ ├── dispatcher.ts │ │ │ │ │ │ ├── factory.ts │ │ │ │ │ │ ├── handler.ts │ │ │ │ │ │ └── processor.ts │ │ │ │ │ └── status-manager.ts │ │ │ │ ├── tsconfig.json │ │ │ │ ├── type-support.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils/ │ │ │ │ └── connection/ │ │ │ │ ├── connection-pool.ts │ │ │ │ └── connection.ts │ │ │ ├── addon-test-support/ │ │ │ │ ├── index.ts │ │ │ │ └── tsconfig.json │ │ │ ├── app/ │ │ │ │ ├── models/ │ │ │ │ │ ├── message.js │ │ │ │ │ └── relay.js │ │ │ │ └── services/ │ │ │ │ ├── connection/ │ │ │ │ │ ├── manager.js │ │ │ │ │ └── status.js │ │ │ │ ├── connection.js │ │ │ │ ├── contacts/ │ │ │ │ │ └── online-checker.js │ │ │ │ ├── messages/ │ │ │ │ │ ├── auto-responder.js │ │ │ │ │ ├── dispatcher.js │ │ │ │ │ ├── factory.js │ │ │ │ │ ├── handler.js │ │ │ │ │ └── processor.js │ │ │ │ └── status-manager.js │ │ │ ├── config/ │ │ │ │ ├── ember-try.js │ │ │ │ └── environment.js │ │ │ ├── ember-cli-build.js │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── testem.js │ │ │ ├── tests/ │ │ │ │ ├── dummy/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── app.ts │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── environment.d.ts │ │ │ │ │ │ ├── controllers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── router.ts │ │ │ │ │ │ ├── routes/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── styles/ │ │ │ │ │ │ │ └── app.css │ │ │ │ │ │ ├── templates/ │ │ │ │ │ │ │ └── application.hbs │ │ │ │ │ │ └── with-test-waiter.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── ember-cli-update.json │ │ │ │ │ │ ├── environment.js │ │ │ │ │ │ ├── optional-features.json │ │ │ │ │ │ └── targets.js │ │ │ │ │ └── public/ │ │ │ │ │ └── robots.txt │ │ │ │ ├── helpers/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── index.html │ │ │ │ ├── integration/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── test-helper.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── unit/ │ │ │ │ └── services/ │ │ │ │ ├── connection/ │ │ │ │ │ └── status-test.js │ │ │ │ └── messages/ │ │ │ │ ├── auto-responder-test.ts │ │ │ │ ├── handler-test.ts │ │ │ │ └── utils/ │ │ │ │ └── -encryption-test.ts │ │ │ ├── tsconfig.compiler-options.json │ │ │ ├── tsconfig.json │ │ │ ├── types/ │ │ │ │ └── overrides.d.ts │ │ │ └── vendor/ │ │ │ └── .gitkeep │ │ ├── prism/ │ │ │ └── README.md │ │ ├── test-helpers/ │ │ │ ├── .editorconfig │ │ │ ├── .ember-cli │ │ │ ├── .eslintignore │ │ │ ├── .eslintrc.js │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .template-lintrc.js │ │ │ ├── .travis.yml │ │ │ ├── .watchmanconfig │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── addon-test-support/ │ │ │ │ ├── -private/ │ │ │ │ │ ├── get-service.ts │ │ │ │ │ ├── get-store.ts │ │ │ │ │ ├── refresh.ts │ │ │ │ │ ├── setup-router.ts │ │ │ │ │ ├── stub-service.ts │ │ │ │ │ ├── visit.ts │ │ │ │ │ └── wait-until.ts │ │ │ │ ├── index.ts │ │ │ │ └── tsconfig.json │ │ │ ├── app/ │ │ │ │ └── .gitkeep │ │ │ ├── config/ │ │ │ │ ├── ember-try.js │ │ │ │ └── environment.js │ │ │ ├── ember-cli-build.js │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── testem.js │ │ │ ├── tests/ │ │ │ │ ├── dummy/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── app.ts │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── environment.d.ts │ │ │ │ │ │ ├── controllers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ ├── routes/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── styles/ │ │ │ │ │ │ │ └── app.css │ │ │ │ │ │ └── templates/ │ │ │ │ │ │ └── application.hbs │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── ember-cli-update.json │ │ │ │ │ │ ├── environment.js │ │ │ │ │ │ ├── optional-features.json │ │ │ │ │ │ └── targets.js │ │ │ │ │ └── public/ │ │ │ │ │ └── robots.txt │ │ │ │ ├── helpers/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── index.html │ │ │ │ ├── integration/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── test-helper.js │ │ │ │ └── unit/ │ │ │ │ └── .gitkeep │ │ │ ├── tsconfig.compiler-options.json │ │ │ ├── tsconfig.json │ │ │ ├── types/ │ │ │ │ └── overrides.d.ts │ │ │ └── vendor/ │ │ │ └── .gitkeep │ │ ├── tracked-local-storage/ │ │ │ ├── .editorconfig │ │ │ ├── .ember-cli │ │ │ ├── .eslintignore │ │ │ ├── .eslintrc.js │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .template-lintrc.js │ │ │ ├── .watchmanconfig │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── addon/ │ │ │ │ ├── index.ts │ │ │ │ └── tsconfig.json │ │ │ ├── config/ │ │ │ │ ├── ember-try.js │ │ │ │ └── environment.js │ │ │ ├── ember-cli-build.js │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── testem.js │ │ │ ├── tests/ │ │ │ │ ├── dummy/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── app.ts │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── environment.d.ts │ │ │ │ │ │ ├── controllers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ ├── routes/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── styles/ │ │ │ │ │ │ │ └── app.css │ │ │ │ │ │ └── templates/ │ │ │ │ │ │ └── application.hbs │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── ember-cli-update.json │ │ │ │ │ │ ├── environment.js │ │ │ │ │ │ ├── optional-features.json │ │ │ │ │ │ └── targets.js │ │ │ │ │ └── public/ │ │ │ │ │ └── robots.txt │ │ │ │ ├── index.html │ │ │ │ ├── test-helper.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── unit/ │ │ │ │ └── in-local-storage-test.ts │ │ │ ├── tsconfig.compiler-options.json │ │ │ ├── tsconfig.json │ │ │ └── vendor/ │ │ │ └── .gitkeep │ │ ├── tsconfig.json │ │ └── ui/ │ │ ├── .editorconfig │ │ ├── .ember-cli │ │ ├── .eslintignore │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .template-lintrc.js │ │ ├── README.md │ │ ├── addon/ │ │ │ ├── components/ │ │ │ │ ├── backdrop.hbs │ │ │ │ ├── collapsible/ │ │ │ │ │ ├── icon.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── dropdown/ │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── ellipsis-loader.hbs │ │ │ │ ├── external-link.hbs │ │ │ │ ├── field.ts │ │ │ │ ├── focus-card.hbs │ │ │ │ ├── hamburger-button.hbs │ │ │ │ ├── hover-tip.hbs │ │ │ │ ├── media-info-card.ts │ │ │ │ ├── modal.hbs │ │ │ │ └── switch.ts │ │ │ ├── helpers/ │ │ │ │ ├── and.ts │ │ │ │ ├── eq.ts │ │ │ │ ├── not.ts │ │ │ │ └── prevent-default.ts │ │ │ └── tsconfig.json │ │ ├── addon-test-support/ │ │ │ ├── key-events.ts │ │ │ ├── page-objects.ts │ │ │ └── tsconfig.json │ │ ├── app/ │ │ │ ├── components/ │ │ │ │ ├── backdrop.js │ │ │ │ ├── collapsible/ │ │ │ │ │ └── icon.js │ │ │ │ ├── collapsible.js │ │ │ │ ├── dropdown.js │ │ │ │ ├── ellipsis-loader.js │ │ │ │ ├── external-link.js │ │ │ │ ├── field.js │ │ │ │ ├── focus-card.js │ │ │ │ ├── hamburger-button.js │ │ │ │ ├── hover-tip.js │ │ │ │ ├── media-info-card.js │ │ │ │ ├── modal.js │ │ │ │ └── switch.js │ │ │ ├── helpers/ │ │ │ │ ├── and.js │ │ │ │ ├── eq.js │ │ │ │ ├── not.js │ │ │ │ └── prevent-default.js │ │ │ └── styles/ │ │ │ └── @emberclear/ │ │ │ ├── animation.css │ │ │ ├── buttons.css │ │ │ ├── defaults.css │ │ │ ├── layout.css │ │ │ ├── mixins.css │ │ │ ├── shoelace-overrides.css │ │ │ ├── sizes.css │ │ │ ├── spacing.css │ │ │ ├── themes/ │ │ │ │ ├── default.css │ │ │ │ └── midnight.css │ │ │ └── ui.css │ │ ├── config/ │ │ │ └── environment.js │ │ ├── ember-cli-build.js │ │ ├── index.js │ │ ├── package.json │ │ ├── testem.js │ │ ├── tests/ │ │ │ ├── dummy/ │ │ │ │ ├── app/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── environment.d.ts │ │ │ │ │ ├── controllers/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── index.html │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── router.js │ │ │ │ │ ├── routes/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── styles/ │ │ │ │ │ │ └── app.css │ │ │ │ │ └── templates/ │ │ │ │ │ └── application.hbs │ │ │ │ ├── config/ │ │ │ │ │ ├── environment.js │ │ │ │ │ ├── optional-features.json │ │ │ │ │ └── targets.js │ │ │ │ └── public/ │ │ │ │ └── robots.txt │ │ │ ├── helpers/ │ │ │ │ └── .gitkeep │ │ │ ├── index.html │ │ │ ├── integration/ │ │ │ │ ├── .gitkeep │ │ │ │ ├── components/ │ │ │ │ │ ├── backdrop-test.js │ │ │ │ │ ├── collapsible-test.js │ │ │ │ │ ├── dropdown-test.js │ │ │ │ │ ├── ellipsis-loader-test.js │ │ │ │ │ ├── external-link-test.js │ │ │ │ │ ├── field-test.js │ │ │ │ │ ├── focus-card-test.ts │ │ │ │ │ ├── hamburger-button-test.js │ │ │ │ │ ├── hover-tip-test.js │ │ │ │ │ ├── media-info-card-test.ts │ │ │ │ │ ├── modal-test.ts │ │ │ │ │ └── switch-test.ts │ │ │ │ └── helpers/ │ │ │ │ ├── and-test.ts │ │ │ │ ├── eq-test.ts │ │ │ │ └── not-test.ts │ │ │ ├── test-helper.ts │ │ │ ├── tsconfig.json │ │ │ └── unit/ │ │ │ └── .gitkeep │ │ ├── tsconfig.compiler-options.json │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ ├── dummy/ │ │ │ │ └── index.d.ts │ │ │ ├── global.d.ts │ │ │ └── overrides.d.ts │ │ └── vendor/ │ │ └── .gitkeep │ ├── config/ │ │ ├── .eslintrc.js │ │ ├── .template-lintrc.js │ │ ├── package.json │ │ ├── testem.js │ │ ├── tsconfig.compiler-options.json │ │ └── utils/ │ │ ├── ember-build.js │ │ └── log.js │ ├── emberclear/ │ │ ├── .dockerignore │ │ ├── .editorconfig │ │ ├── .ember-cli │ │ ├── .eslintignore │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .template-lintrc.js │ │ ├── Dockerfile │ │ ├── Dockerfile.release │ │ ├── README.md │ │ ├── app/ │ │ │ ├── app.ts │ │ │ ├── components/ │ │ │ │ ├── app/ │ │ │ │ │ ├── app-shell-remover.ts │ │ │ │ │ ├── container/ │ │ │ │ │ │ ├── hero.hbs │ │ │ │ │ │ ├── main.hbs │ │ │ │ │ │ └── primary-hero.hbs │ │ │ │ │ ├── modals.hbs │ │ │ │ │ ├── off-canvas/ │ │ │ │ │ │ ├── -page.ts │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── sidebar/ │ │ │ │ │ │ ├── actions/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── response-action/ │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── response-panel/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── chats/ │ │ │ │ │ │ │ ├── -page.ts │ │ │ │ │ │ │ ├── channel/ │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── channel-form/ │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── contact/ │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── data/ │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── list.hbs │ │ │ │ │ │ │ └── offline-counter.hbs │ │ │ │ │ │ ├── footer.hbs │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── unread-indicator.hbs │ │ │ │ │ ├── top-nav/ │ │ │ │ │ │ ├── connection-status/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── current-chat-name/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── install/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── locale-select/ │ │ │ │ │ │ │ ├── -page.ts │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── user-drop-menu/ │ │ │ │ │ │ ├── -page.ts │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── update-checker.ts │ │ │ │ ├── app-footer.hbs │ │ │ │ ├── copy-text-button.ts │ │ │ │ ├── embedded-media.hbs │ │ │ │ ├── error-card/ │ │ │ │ │ └── index.hbs │ │ │ │ ├── fetch-open-graph.ts │ │ │ │ ├── file-chooser/ │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── keyboard-shortcuts/ │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── key/ │ │ │ │ │ └── index.hbs │ │ │ │ ├── mnemonic-display.ts │ │ │ │ ├── modal-static/ │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── pod/ │ │ │ │ │ ├── add-friend/ │ │ │ │ │ │ └── add-contact/ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── chat-entry/ │ │ │ │ │ │ │ ├── embeds-menu/ │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── snippet/ │ │ │ │ │ │ │ │ ├── -page.ts │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── chat-history/ │ │ │ │ │ │ ├── connection-status/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ ├── message/ │ │ │ │ │ │ │ ├── delivery-confirmations/ │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── embedded-resource/ │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── metadata-preview/ │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── header/ │ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── linked-media.hbs │ │ │ │ │ │ ├── new-messages/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── notification-prompt/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── unread-management/ │ │ │ │ │ │ ├── -page.ts │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── contacts/ │ │ │ │ │ │ ├── contact-table/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── header/ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── faq/ │ │ │ │ │ │ └── q-and-a.hbs │ │ │ │ │ ├── index/ │ │ │ │ │ │ ├── begin-button.ts │ │ │ │ │ │ └── compatibility/ │ │ │ │ │ │ ├── -utils/ │ │ │ │ │ │ │ └── detection.ts │ │ │ │ │ │ ├── feature/ │ │ │ │ │ │ │ ├── boolean-icon.hbs │ │ │ │ │ │ │ └── index.hbs │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── login/ │ │ │ │ │ │ ├── -machine.ts │ │ │ │ │ │ ├── login-form/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── transfer-prompt/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── template.hbs │ │ │ │ │ ├── q-r/ │ │ │ │ │ │ ├── -machine.ts │ │ │ │ │ │ ├── -types.ts │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── login/ │ │ │ │ │ │ └── ask.hbs │ │ │ │ │ ├── settings/ │ │ │ │ │ │ ├── danger-zone/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── interface/ │ │ │ │ │ │ │ ├── -page.ts │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── navigation.hbs │ │ │ │ │ │ ├── profile/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── relays/ │ │ │ │ │ │ ├── new-relay-form/ │ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── relay-table/ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ └── row/ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── setup/ │ │ │ │ │ ├── -machine.ts │ │ │ │ │ ├── completed/ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── creating/ │ │ │ │ │ │ ├── index.hbs │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.hbs │ │ │ │ │ ├── index.ts │ │ │ │ │ └── overwrite.hbs │ │ │ │ ├── q-r-code.hbs │ │ │ │ ├── q-r-scanner/ │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── search/ │ │ │ │ │ ├── -page.ts │ │ │ │ │ ├── index.hbs │ │ │ │ │ ├── index.ts │ │ │ │ │ └── result.hbs │ │ │ │ └── status-icon/ │ │ │ │ ├── index.hbs │ │ │ │ └── index.ts │ │ │ ├── config/ │ │ │ │ └── environment.d.ts │ │ │ ├── controllers/ │ │ │ │ ├── application.ts │ │ │ │ ├── chat/ │ │ │ │ │ ├── in-channel.ts │ │ │ │ │ └── privately-with.ts │ │ │ │ ├── invite.ts │ │ │ │ └── logout.ts │ │ │ ├── formats.js │ │ │ ├── helpers/ │ │ │ │ ├── first-8.ts │ │ │ │ ├── handle-sidebar-click.ts │ │ │ │ ├── has-feature-flag.ts │ │ │ │ ├── includes.ts │ │ │ │ ├── is-channel.js │ │ │ │ ├── is-contact.js │ │ │ │ ├── is-current-user.js │ │ │ │ ├── is-present.ts │ │ │ │ ├── or.ts │ │ │ │ ├── queue.ts │ │ │ │ └── sub.ts │ │ │ ├── index.html │ │ │ ├── models/ │ │ │ │ ├── action.ts │ │ │ │ ├── invitation-result.ts │ │ │ │ ├── invitation.ts │ │ │ │ └── message-media.ts │ │ │ ├── modifiers/ │ │ │ │ ├── format-code.ts │ │ │ │ ├── has-unread.ts │ │ │ │ ├── maybe-nudge-to-bottom.ts │ │ │ │ ├── message-scroll-listener.ts │ │ │ │ ├── qr-image.ts │ │ │ │ ├── read-watcher.ts │ │ │ │ ├── unread-message-list-observer.ts │ │ │ │ ├── unread-messages-intersection-observer.ts │ │ │ │ └── update-document-title.ts │ │ │ ├── router.js │ │ │ ├── routes/ │ │ │ │ ├── add-friend.ts │ │ │ │ ├── application.ts │ │ │ │ ├── chat/ │ │ │ │ │ ├── in-channel.ts │ │ │ │ │ └── privately-with.ts │ │ │ │ ├── chat.ts │ │ │ │ ├── contacts.ts │ │ │ │ ├── invite.ts │ │ │ │ ├── login.ts │ │ │ │ ├── logout.ts │ │ │ │ ├── qr.js │ │ │ │ ├── settings/ │ │ │ │ │ └── relays.ts │ │ │ │ ├── settings.ts │ │ │ │ └── setup.ts │ │ │ ├── services/ │ │ │ │ ├── channels/ │ │ │ │ │ ├── -utils/ │ │ │ │ │ │ ├── channel-factory.ts │ │ │ │ │ │ └── vote-sorter.ts │ │ │ │ │ ├── channel-verifier.ts │ │ │ │ │ └── vote-verifier.ts │ │ │ │ ├── chat-scroller.ts │ │ │ │ ├── connection/ │ │ │ │ │ └── ephemeral/ │ │ │ │ │ └── login/ │ │ │ │ │ ├── receive-data.ts │ │ │ │ │ └── send-data.ts │ │ │ │ ├── current-chat.ts │ │ │ │ ├── locale.ts │ │ │ │ ├── modals.ts │ │ │ │ ├── notifications.ts │ │ │ │ ├── prism-manager.ts │ │ │ │ ├── qr-manager.ts │ │ │ │ ├── redirect-manager.ts │ │ │ │ ├── session.ts │ │ │ │ ├── settings.ts │ │ │ │ ├── sidebar.ts │ │ │ │ ├── toast.ts │ │ │ │ └── window.ts │ │ │ ├── styles/ │ │ │ │ ├── app.css │ │ │ │ ├── components/ │ │ │ │ │ ├── backdrop.css │ │ │ │ │ ├── card.css │ │ │ │ │ ├── chat-entry.css │ │ │ │ │ ├── connection-status.css │ │ │ │ │ ├── contacts.css │ │ │ │ │ ├── dismissable-warning.css │ │ │ │ │ ├── ellipses-loader.css │ │ │ │ │ ├── embedded-resource.css │ │ │ │ │ ├── hover-tip.css │ │ │ │ │ ├── key.css │ │ │ │ │ ├── logout.css │ │ │ │ │ ├── message.css │ │ │ │ │ ├── messages.css │ │ │ │ │ ├── metadata-preview.css │ │ │ │ │ ├── modal.css │ │ │ │ │ ├── notification-prompt.css │ │ │ │ │ ├── q-r-code.css │ │ │ │ │ ├── q-r-scanner.css │ │ │ │ │ ├── search.css │ │ │ │ │ ├── settings-nav.css │ │ │ │ │ ├── sidebar-contact.css │ │ │ │ │ ├── sidebar-nav.css │ │ │ │ │ ├── sidebar.css │ │ │ │ │ ├── snippet.css │ │ │ │ │ ├── toastify-overrides.css │ │ │ │ │ ├── top-nav.css │ │ │ │ │ └── unread-management.css │ │ │ │ └── utility/ │ │ │ │ ├── height.css │ │ │ │ └── transitions.css │ │ │ ├── templates/ │ │ │ │ ├── add-friend.hbs │ │ │ │ ├── application.hbs │ │ │ │ ├── chat/ │ │ │ │ │ ├── in-channel.hbs │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── privately-with.hbs │ │ │ │ ├── chat.hbs │ │ │ │ ├── contacts.hbs │ │ │ │ ├── faq.hbs │ │ │ │ ├── index.hbs │ │ │ │ ├── invite.hbs │ │ │ │ ├── login.hbs │ │ │ │ ├── logout.hbs │ │ │ │ ├── not-found.hbs │ │ │ │ ├── qr.hbs │ │ │ │ ├── settings/ │ │ │ │ │ ├── danger-zone.hbs │ │ │ │ │ ├── index.hbs │ │ │ │ │ ├── interface.hbs │ │ │ │ │ └── relays.hbs │ │ │ │ ├── settings.hbs │ │ │ │ └── setup.hbs │ │ │ ├── tsconfig.json │ │ │ └── utils/ │ │ │ ├── README.md │ │ │ ├── breakpoints.ts │ │ │ ├── dom/ │ │ │ │ ├── css.ts │ │ │ │ └── utils.ts │ │ │ ├── ember-concurrency.ts │ │ │ ├── errors.ts │ │ │ ├── identity-comparison.ts │ │ │ ├── normalized-meta.ts │ │ │ ├── route-matchers.ts │ │ │ ├── string/ │ │ │ │ └── utils.ts │ │ │ └── uint8array-equality.ts │ │ ├── config/ │ │ │ ├── addons.js │ │ │ ├── build/ │ │ │ │ ├── addons.js │ │ │ │ └── static.js │ │ │ ├── coverage.js │ │ │ ├── dependency-lint.js │ │ │ ├── ember-intl.js │ │ │ ├── emberclear-local.crt │ │ │ ├── emberclear-local.csr │ │ │ ├── emberclear-local.key │ │ │ ├── environment.js │ │ │ ├── icons.js │ │ │ ├── manifest.js │ │ │ ├── netlify/ │ │ │ │ └── _redirects │ │ │ ├── optional-features.json │ │ │ └── targets.js │ │ ├── ember-cli-build.js │ │ ├── jsconfig.json │ │ ├── package.json │ │ ├── public/ │ │ │ ├── .well-known/ │ │ │ │ └── assetlinks.json │ │ │ ├── assets/ │ │ │ │ └── images/ │ │ │ │ ├── .gitkeep │ │ │ │ └── icons/ │ │ │ │ └── .gitkeep │ │ │ ├── bundle.html │ │ │ └── robots.txt │ │ ├── scripts/ │ │ │ ├── analyze-broccoli.js │ │ │ ├── analyze.sh │ │ │ ├── docker/ │ │ │ │ ├── nginx.conf │ │ │ │ └── run-nginx.sh │ │ │ ├── generate-self-signed-cert.sh │ │ │ ├── node_modules-to-ramdisk.sh │ │ │ └── test-with-coverage.sh │ │ ├── testem.js │ │ ├── tests/ │ │ │ ├── -temp/ │ │ │ │ └── qunit-xstate-test.ts │ │ │ ├── acceptance/ │ │ │ │ ├── chat/ │ │ │ │ │ ├── -unread-acceptance-test.ts │ │ │ │ │ ├── acceptance-test.ts │ │ │ │ │ ├── in-channel/ │ │ │ │ │ │ └── -acceptance-test.ts │ │ │ │ │ └── privately-with/ │ │ │ │ │ ├── -acceptance-test.ts │ │ │ │ │ └── format-code-test.ts │ │ │ │ ├── compatibility-test.ts │ │ │ │ ├── contacts/ │ │ │ │ │ └── acceptance-test.ts │ │ │ │ ├── invite/ │ │ │ │ │ └── acceptance-test.ts │ │ │ │ ├── login/ │ │ │ │ │ └── acceptance-test.ts │ │ │ │ ├── logout/ │ │ │ │ │ └── acceptance-test.ts │ │ │ │ ├── logout-test.ts │ │ │ │ ├── navigation-scroll-to-top-test.ts │ │ │ │ ├── notification-permission-prompt-test.ts │ │ │ │ ├── notifications-test.ts │ │ │ │ ├── qr/ │ │ │ │ │ └── login/ │ │ │ │ │ ├── receiver-test.ts │ │ │ │ │ └── sender-test.ts │ │ │ │ ├── search-test.ts │ │ │ │ ├── settings/ │ │ │ │ │ ├── acceptance-test.ts │ │ │ │ │ ├── danger-zone/ │ │ │ │ │ │ └── -acceptance-test.ts │ │ │ │ │ ├── interface/ │ │ │ │ │ │ └── -acceptance-test.ts │ │ │ │ │ └── relays/ │ │ │ │ │ └── -acceptance-test.ts │ │ │ │ ├── setup/ │ │ │ │ │ └── acceptance-test.ts │ │ │ │ ├── sidebar-test.ts │ │ │ │ ├── sidebar-visibility-test.ts │ │ │ │ └── update-banner-test.ts │ │ │ ├── helpers/ │ │ │ │ ├── factories/ │ │ │ │ │ ├── channel-factory.ts │ │ │ │ │ └── message-factory.ts │ │ │ │ ├── index.ts │ │ │ │ ├── page-objects.ts │ │ │ │ ├── pages/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── chat.ts │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── chat.ts │ │ │ │ │ ├── contacts.ts │ │ │ │ │ ├── login.ts │ │ │ │ │ ├── logout.ts │ │ │ │ │ ├── qr.ts │ │ │ │ │ ├── settings.ts │ │ │ │ │ ├── setup.ts │ │ │ │ │ └── toast.ts │ │ │ │ ├── setup-relay-connection-mocks.ts │ │ │ │ ├── setup-test.ts │ │ │ │ └── track-async-data.ts │ │ │ ├── index.html │ │ │ ├── integration/ │ │ │ │ ├── components/ │ │ │ │ │ ├── embedded-media-test.js │ │ │ │ │ ├── error-card-test.js │ │ │ │ │ ├── fetch-open-graph-test.js │ │ │ │ │ ├── pod/ │ │ │ │ │ │ ├── application/ │ │ │ │ │ │ │ └── top-nav/ │ │ │ │ │ │ │ └── locale-select-test.ts │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ ├── chat-entry/ │ │ │ │ │ │ │ ├── embeds-menu/ │ │ │ │ │ │ │ │ └── component-test.ts │ │ │ │ │ │ │ └── emoji-test.ts │ │ │ │ │ │ └── chat-history/ │ │ │ │ │ │ ├── message/ │ │ │ │ │ │ │ ├── embedded-resource-test.ts │ │ │ │ │ │ │ └── metadata-preview-test.ts │ │ │ │ │ │ └── new-messages-test.js │ │ │ │ │ └── settings/ │ │ │ │ │ └── interface-test.ts │ │ │ │ ├── pods/ │ │ │ │ │ └── components/ │ │ │ │ │ ├── collapsible/ │ │ │ │ │ │ └── component-test.ts │ │ │ │ │ ├── copy-text-button/ │ │ │ │ │ │ └── component-test.ts │ │ │ │ │ ├── keyboard-shortcuts/ │ │ │ │ │ │ └── component-test.ts │ │ │ │ │ ├── modal-static/ │ │ │ │ │ │ └── component-test.ts │ │ │ │ │ ├── q-r-scanner/ │ │ │ │ │ │ └── component-test.ts │ │ │ │ │ └── status-icon/ │ │ │ │ │ └── component-test.ts │ │ │ │ └── routing/ │ │ │ │ └── feature-flags-test.ts │ │ │ ├── test-helper.ts │ │ │ ├── tsconfig.json │ │ │ └── unit/ │ │ │ ├── routes/ │ │ │ │ ├── add-friend/ │ │ │ │ │ └── route-test.ts │ │ │ │ ├── chat/ │ │ │ │ │ └── route-unit-test.ts │ │ │ │ └── qr-test.js │ │ │ ├── service/ │ │ │ │ ├── channels/ │ │ │ │ │ ├── channel-verifier-test.ts │ │ │ │ │ ├── utils/ │ │ │ │ │ │ └── -vote-sorter-test.ts │ │ │ │ │ └── vote-verifier-test.ts │ │ │ │ ├── contacts/ │ │ │ │ │ └── online-checker-test.ts │ │ │ │ ├── notifications-test.ts │ │ │ │ └── redirect-manager-test.ts │ │ │ ├── services/ │ │ │ │ ├── session-test.js │ │ │ │ └── store-test.js │ │ │ └── utils/ │ │ │ ├── dom-test.ts │ │ │ └── string-test.ts │ │ ├── translations/ │ │ │ ├── de-DE.yaml │ │ │ ├── en-AU.yaml │ │ │ ├── en-us.yaml │ │ │ ├── es-ES.yaml │ │ │ ├── fr-FR.yaml │ │ │ ├── ko-KR.yaml │ │ │ ├── pt-PT.yaml │ │ │ └── ru-RU.yaml │ │ ├── tsconfig.compiler-options.json │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ ├── dom-purify.d.ts │ │ │ ├── ember-a11y-testing/ │ │ │ │ └── test-support/ │ │ │ │ └── audit-if.d.ts │ │ │ ├── ember-cli-clipboard/ │ │ │ │ └── test-support/ │ │ │ │ └── index.d.ts │ │ │ ├── ember-could-get-used-to-this.d.ts │ │ │ ├── ember-intl/ │ │ │ │ └── services/ │ │ │ │ └── intl.d.ts │ │ │ ├── ember-localforage-adapter/ │ │ │ │ ├── adapters/ │ │ │ │ │ └── localforage.d.ts │ │ │ │ └── serializers/ │ │ │ │ └── localforage.d.ts │ │ │ ├── ember-modifier.d.ts │ │ │ ├── ember-service-worker-update-notify/ │ │ │ │ └── test-support/ │ │ │ │ └── updater.d.ts │ │ │ ├── ember-usable.d.ts │ │ │ ├── emberclear/ │ │ │ │ ├── addon-services.d.ts │ │ │ │ ├── ember-data.d.ts │ │ │ │ └── index.d.ts │ │ │ ├── emojis.d.ts │ │ │ ├── global.d.ts │ │ │ ├── index.d.ts │ │ │ ├── overrides.d.ts │ │ │ ├── prismjs/ │ │ │ │ └── index.d.ts │ │ │ ├── qr-scanner.d.ts │ │ │ ├── qunit-xstate-test.d.ts │ │ │ └── toastify-js.d.ts │ │ └── vendor/ │ │ └── shims/ │ │ ├── libsodium-wrappers.js │ │ ├── libsodium.js │ │ ├── localforage.js │ │ └── qrcode.js │ ├── libraries/ │ │ ├── questionably-typed/ │ │ │ ├── .eslintignore │ │ │ ├── .eslintrc.js │ │ │ ├── .gitignore │ │ │ ├── package.json │ │ │ ├── tsconfig.json │ │ │ └── types/ │ │ │ ├── globals.ts │ │ │ ├── libraries/ │ │ │ │ ├── blakejs.ts │ │ │ │ ├── ember.ts │ │ │ │ └── promise-worker-bi.ts │ │ │ ├── overrides.ts │ │ │ ├── package-augmentations.ts │ │ │ └── tsconfig.json │ │ └── tsconfig.json │ ├── package.json │ ├── pinochle/ │ │ ├── .editorconfig │ │ ├── .ember-cli │ │ ├── .eslintignore │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .template-lintrc.js │ │ ├── .watchmanconfig │ │ ├── README.md │ │ ├── app/ │ │ │ ├── app.ts │ │ │ ├── components/ │ │ │ │ ├── back-of-cards.hbs │ │ │ │ ├── back-of-cards.ts │ │ │ │ ├── hand/ │ │ │ │ │ ├── -animation/ │ │ │ │ │ │ ├── card-chart.ts │ │ │ │ │ │ ├── card.ts │ │ │ │ │ │ ├── hand-chart.ts │ │ │ │ │ │ ├── hand.ts │ │ │ │ │ │ └── key-frames.ts │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── host-game/ │ │ │ │ │ ├── -statechart.ts │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── join-game/ │ │ │ │ │ ├── -statechart.ts │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── lazy/ │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── loader/ │ │ │ │ │ ├── ellipsis.hbs │ │ │ │ │ └── indeterminate.hbs │ │ │ │ ├── name-entry/ │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── options.hbs │ │ │ │ ├── options.ts │ │ │ │ ├── play/ │ │ │ │ │ └── as-guest/ │ │ │ │ │ ├── -statechart.ts │ │ │ │ │ ├── index.hbs │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── overlay-info.hbs │ │ │ │ │ └── players-offline.hbs │ │ │ │ ├── player-list.hbs │ │ │ │ ├── player-order/ │ │ │ │ │ ├── index.hbs │ │ │ │ │ └── index.ts │ │ │ │ ├── playing-card/ │ │ │ │ │ ├── corner-value.hbs │ │ │ │ │ ├── face-value.hbs │ │ │ │ │ └── index.hbs │ │ │ │ ├── share-link.hbs │ │ │ │ └── share-link.ts │ │ │ ├── config/ │ │ │ │ └── environment.d.ts │ │ │ ├── game/ │ │ │ │ ├── card.ts │ │ │ │ ├── deck.ts │ │ │ │ ├── meld.ts │ │ │ │ ├── networking/ │ │ │ │ │ ├── -requirements.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── guest/ │ │ │ │ │ │ ├── display-info.ts │ │ │ │ │ │ ├── game-round.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── guest.ts │ │ │ │ │ ├── host/ │ │ │ │ │ │ ├── game-round.ts │ │ │ │ │ │ ├── game-state.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── host.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── trick.ts │ │ │ │ └── utils/ │ │ │ │ └── move-validation.ts │ │ │ ├── helpers/ │ │ │ │ ├── and.ts │ │ │ │ ├── contains.ts │ │ │ │ ├── english-list.ts │ │ │ │ ├── eq.ts │ │ │ │ ├── is-number.ts │ │ │ │ ├── not.ts │ │ │ │ ├── or.ts │ │ │ │ └── suit-to-symbol.ts │ │ │ ├── index.html │ │ │ ├── modifiers/ │ │ │ │ ├── fit-text.ts │ │ │ │ ├── resize.ts │ │ │ │ └── stack.ts │ │ │ ├── router.ts │ │ │ ├── routes/ │ │ │ │ ├── game.ts │ │ │ │ └── join.ts │ │ │ ├── services/ │ │ │ │ ├── game-manager.ts │ │ │ │ ├── guest/ │ │ │ │ │ ├── dispatcher.ts │ │ │ │ │ └── handler.ts │ │ │ │ └── player-info.ts │ │ │ ├── styles/ │ │ │ │ ├── -variables.css │ │ │ │ ├── app.css │ │ │ │ ├── game.css │ │ │ │ ├── loading.css │ │ │ │ ├── page/ │ │ │ │ │ └── ask-game-type.css │ │ │ │ ├── playing-card.css │ │ │ │ ├── resets.css │ │ │ │ ├── synthwave.css │ │ │ │ ├── transitions.css │ │ │ │ ├── utils.css │ │ │ │ └── z-indexes.css │ │ │ ├── templates/ │ │ │ │ ├── application.hbs │ │ │ │ ├── game-full.hbs │ │ │ │ ├── game.hbs │ │ │ │ ├── host.hbs │ │ │ │ ├── index.hbs │ │ │ │ ├── join.hbs │ │ │ │ └── not-recognized.hbs │ │ │ ├── tsconfig.json │ │ │ └── utils/ │ │ │ ├── array.ts │ │ │ ├── container.ts │ │ │ ├── dom.ts │ │ │ ├── trig.ts │ │ │ └── use-machine.ts │ │ ├── config/ │ │ │ ├── ember-cli-update.json │ │ │ ├── environment.js │ │ │ ├── netlify/ │ │ │ │ └── _redirects │ │ │ ├── optional-features.json │ │ │ └── targets.js │ │ ├── ember-cli-build.js │ │ ├── package.json │ │ ├── public/ │ │ │ └── robots.txt │ │ ├── testem.js │ │ ├── tests/ │ │ │ ├── -pages/ │ │ │ │ └── join.ts │ │ │ ├── acceptance/ │ │ │ │ ├── game-test.ts │ │ │ │ └── join-test.ts │ │ │ ├── helpers/ │ │ │ │ ├── .gitkeep │ │ │ │ └── index.ts │ │ │ ├── index.html │ │ │ ├── integration/ │ │ │ │ ├── components/ │ │ │ │ │ ├── host-game-test.ts │ │ │ │ │ ├── lazy-test.ts │ │ │ │ │ ├── playing-card-test.ts │ │ │ │ │ └── share-link-test.js │ │ │ │ └── modifiers/ │ │ │ │ ├── fit-text-test.js │ │ │ │ ├── resize-test.js │ │ │ │ └── stack-test.js │ │ │ ├── test-helper.ts │ │ │ ├── tsconfig.json │ │ │ ├── type-support.ts │ │ │ └── unit/ │ │ │ ├── game/ │ │ │ │ ├── deck-test.ts │ │ │ │ ├── meld-test.ts │ │ │ │ ├── state-test.ts │ │ │ │ ├── trick-test.ts │ │ │ │ └── utils/ │ │ │ │ ├── availableMoves-test.ts │ │ │ │ └── isValidMove-test.ts │ │ │ └── helpers/ │ │ │ ├── contains-test.ts │ │ │ ├── eq-test.ts │ │ │ ├── is-number-test.ts │ │ │ └── suit-to-symbol-test.ts │ │ ├── translations/ │ │ │ └── en-us.yaml │ │ ├── tsconfig.compiler-options.json │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ ├── libraries.d.ts │ │ │ └── overrides.d.ts │ │ └── vendor/ │ │ └── .gitkeep │ ├── scripts/ │ │ └── clean.sh │ ├── smoke-tests/ │ │ ├── .eslintrc.js │ │ ├── .faltestrc.js │ │ ├── .prettierrc.js │ │ ├── helpers/ │ │ │ └── start-server.js │ │ ├── package.json │ │ ├── page-objects/ │ │ │ ├── add-friend.js │ │ │ ├── chat.js │ │ │ └── login.js │ │ └── tests/ │ │ └── smoke-test.js │ ├── stylelint.config.js │ └── tsconfig.json ├── crowdin.yml ├── images/ │ └── icon.xcf └── scripts/ ├── deploy ├── docker-compose.yml ├── dockerhub ├── install-chrome-apt └── publish